Microsoft .NET Programlama Dilleri

.NET programcılığı Microsoft .NET Programlama Dilleri Programlama Dilleri hakkında bilgi paylaş; Bu yazıda Microsoft dotNET ile birlikte programcılara sunulun geliştirme dilleri üzerinde durulmuştur. Bu yazı Temmuz 2003'...
Cevapla
WebMasTer SiTeSi
 
Seçenekler
  #1  
Arama 07-09-2007, 08:06
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Microsoft .NET Programlama Dilleri

Bu yazıda Microsoft dotNET ile birlikte programcılara sunulun geliştirme dilleri üzerinde durulmuştur. Bu yazı Temmuz 2003'te MSDN de yayınlanan Microsoft Programming Languages yazısından Türkçe'ye çevrilmiştir.

Microsoft .NET'in Yararları

Microsoft . NET Framework ,XML Web Servisi ve uygulamalarının derlenip çalıştırılması için gerekli olan Microsoft Windows® bileşenlerini içerir. Bu; bize geliştirdiğimiz uygulamalarda

• yüksek bir verim ,

• standart bir alt yapı,

• daha basit uygulama geliştirme ,

• çoklu dillerin(multilanguage) bulunduğu bir ortam ,

• var olan programlama bilgilerinden yararlanabilme,

• var olan uygulamalar ile kolay entegre olabilme,

• internet uygulamalarında kullanabilme ve çalıştırmanın rahatlığını getirir.

.NET Framework, iki ana bölümden oluşur : CLR(Common Language Runtime) ve web tabanlı programlamada devrimsel bir gelişme yaratan birleştirilmiş sınıf kütüphanesi(ASP.NET), akıllı istemci uygulamalarını gerçekleştirmek için Windows formları, ortam ve temel veri girişleri için ADO.NET alt sistemi. Programcılar iki farkli dille uygulama geliştirirken rahatlıkla .NET Framework kullanabilirler. Bu dillerin hepsi (MSIL)'e derlenir ve daha sonra native(ana) koda dönüştürülür ve CLR ortamında çalıştırılır. Bu sayede herhangi bir dille yazılan herhangi bir uygulama başka bir uygulama ile kolaylıkla entegre olabilir. Bu ortamın programcılara sağladığı yarar şudur; işlerini yaparken kullanmaları için geniş bir dil seçenegi vardir ve dolayısıyla programcılar en iyi bildikleri dili seçebilirler.

Geniş Bir Dil Seçeneği

Sanatçılar çalışırken bulundukları ortam ve araçlar, sanatçıların tecrübelerini ve kişiliklerini yansıtır. Aynı yazılım uzmanları gibi onlarda bildikleri dili ve eğitimlerini göz önüne alarak çalışırlar. Tüm yazılım uzmanlarını memnun edecek bir dil henüz yoktur. Programcılar, doğuştan farklı bir kimliktirler: kısmen bilim adamı, kısmen sanatçı, her zaman dik kafalı, ve hep daha iyisini araştıran insanlardır. Buna rağmen modern programlama dillerinin eksikliklerini kabul ederler.

"Biz her zaman, yarım milyon veya 50 milyon VB(Visual Basic) bilen programcıya sahip olacağız. Bizim, .NET 'de VB miz var. Ve bizim simdi, . NET'de Java dilimiz ve hatta, COBOL dilimiz bile var! Bunun ne demek oldugunu tahmin et? " -Tim Huckaby, baskan ve CEO, Interknowlogy

Programlama dilleri personel alımında önemli bir faktördür. Bir yazılım uzmanının bildiği dilden başka bir dili kullanmaya geçmesi zordur. .NET yapısının gücü ile bir kaç dili içinde barındıran bir platform sağlar. Programcılar bu platform da-C++, Objective C, Fortran, COBOL, Visual Basic®, Perl -'in her biri ile güçlü yazılım geliştirilebilirler.

Bu bölümde Microsoft'un dört farklı programlama dili sunduğunu ve bunları tek bir ortamda nasıl birleştirdiğini göreceğiz.

*

Visual Basic.NET , dünyanın en popüler geliştirme aracının ve dilinin en son uyarlamasıdır. Visual Basic.NET, vazgeçilemez verimliligi teslim eden, ve task(görev)-oriented(yönelimli) programlama için eşsiz özellikler sunan bir dildir.
*

Visual C++ dili, power(güç)-oriented(yönelimli) güçlü uygulamalar geliştirilebilen , farkli teknolojilerle köprü kurabilen, hem windows doğal diline hemde(assembly) .NET ara diline(IL) derlenebilen maksimum performans karekteristiklerine ve yüksek fonksiyonaliteye sahip bir dil olarak karşımıza çıkar.
*

Visual C #®.NET , modern ve yenilik getiren programlama dili ve geliştirme aracıdır. Microsoft, C# ile bizi 2001'de tanıştırdı, C++ ve Java programcılarının bildiği bir sentaks(sözdizimi) ile sunulmuştu, bu yüzden C++ ve Java geliştiricilerinin ilgisini çekmis olan C#, .NET Framework ile beraber kod odaklı uygulamaları daha düzenli bir dil yapısı ile sunar.
*

Visual J#®.NET , Microsoft . NET için Java-dili gelistirme aracidir. Visual J#.NET, Visual J++ ve Java gelistiricilerine kendi dil ve söz dizimlerinden uzaklasmadan .NET'in olanaklarindan tam olarak yararlanabilmeyi ve endüstrinin en gelismis XML web servisleri platformundan faydalanabilmelerini saglamistir.

Burada Microsoft, programlama dillerindeki geniş dil seçeneğinin geliştiricilere uygunluğu ile dikkat çeker. Microsoft.NET, programcıları bu yeni platformda birleştirmek için eğitim ve çözüme daha hızlı ulaşmayı saglamada onlara yardım etme imkanı da sunar.
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #2  
Arama 07-09-2007, 08:06
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Devamı !

Visual Basic .NET

Visual Basic 1.0, Windows'un gelişmesi ve daha geniş bir kullanıcı sayısına ulaşması ve günümüzdeki verimliliğine kavuşması için bir devrim yarattı. Böyle zengin bir tarihe sahip olan VB , okunabilir bir syntax, sezgisel bir arayüzün ve aletlerin oldugu , task-oriented(görev yönelimli) yapısı ile hızlı build edilebilmesi ile ve .Net ile yeni bir yapılandırmaya kavuşmuştur. Visual Basic.NET dilinede diğer popular diller gibi her tür Windows uygulaması, WEB,ve mobile aletler için uygulama yapabilme yetenekleri eklendi.

Task-Orinted(görev yönelimli) Gelişme

Deadline(Son teslim) tarihleri, yazılım sanayisine yeni olan bir şey değildir. Programcıların büyük bir grubu için, deadline tarihleri, günlük hayatın bir gerçeğidir. Programcılar çoğunlukla, plan yaparken ,işin gereksinimlerini karşılayacak hızlı bir yolun çözümünü ararlar. Bazi çözümler , bu ortamlar yaratılırken dikkatlice test edilecek, daha sonra uygulama bu tarz yapılarda hemen kullanılacaktır. Uygulama geliştirme uzmanının problemlerde çözüme odaklanması için bir dahaki iş verilene kadar serbest bırakılması gerekir. Task-Oriented bir geliştirme ortamı, ortam farklılıklarından programcıyı kurtarmak için kabul edilebilir bir yöntemdir.

Hangi Programcılar Neden VB.NET'i Seçmelidir?

Gelecek kuşak uygulamaları ve servisleri birleştirerek .NET ortamında araştırma yapmak isteyen aşağıdaki tipteki programcılar için Visual Basic.NET ideal bir dildir.

• .NET Framework ortamında hızlı ve üretken bir araçla uygulama geliştirmek isteyen programcılar : .Net ile birlikte hizli ve rahat bir gelistirme araci sunulurken Visual Basic.NET uygulamalarinda kolay sntax ve sezgiyle elde edilen gelistirme ortamini sunar. Ayrıca VB.NET progracmıları ilgili kaynaklara çok hızlı bir şekilde erişebime imkanına sahiptir.

• VB ile uygulama geliştirme tecrübesi olan programcılar : Visual Basic bilen programcilar için Visual Basic.Net yapisina geçmek zor olmayacaktir. Visual Basic .NET anahtar sözcükleri, sentaks ve derleme yapısı ile farklılıklar oluştursa da, geleneksel VB programcısına tanıdık gelecektir. VB.NET te ayrıca case-insensitivity, anlaşılır kodlar ve sentaksı vardır. Visual Basic'in ilk versiyonlarını kullananlarda .NET kullanmaya yönelebilirler. Mevcut bulunan ActiveX kontrollerini de Visual Basic .NET te kullanmaya devam edebilirler.

• Halihazırdaki ortamlara benzer tasarım zamanı ve kod editörü paradigmaları arayan programcılar : Geliştiriciler bildik bir arayüz ve editor ararken, VB.NET ile uygulamaların tasarımı drag and drop ile yapılabiliyor. Ayrıca otomatik, kolay biçimlendirilmiş bir kodlama sunar.

• Sezgisel ve erişebilirlik özelliği yüksek olan bir dille geliştirme yapmak isteyen programcılar : Visual Basic.NET, geliştiricilerin büyük bir bölümüne ulaşabilmek için tasarlanmıştır. Bu nedenle hem uzmanlara, hem de yeni başlayanlara önerilir. Yeni başlayanlar, Visual Basic ortamının ve Visual Basic dilinin birçok benzersiz özelligini faydalı bulacaktır.

VB.NET Diline Has Özellikler

VB.NET, uygulama üretkenliğini hızlandıracak diğer .NET dillerinde olmayan bir takım özellikleri içinde barındırır.

• Değişkenlere varsayılan ilk değer verme :VB.NET'te değişkenleri kullanılmadan önce onlara ilk değer verilme zorunluluğu yoktur. Bu yüzden yeni başlayan bir çok programcının diğer dillerde olduğu gibi kafası karışmayacaktır.

• Implicit typing(dolaylı tür belirtme) ve geç bağlama(late binding) :Visaul Basic.Net te bir değişken kullanılmadan önce onun tipini belirtmek zorunda degiliz. Bu da programcıya daha az eforla daha kullanışli kod yazmasında yardım eder.

• Numaralandırıcıların Davranışı :Visual Basic. NET,Enumeration tipleri kullanmak gerektiginde .NET ortami sezgiyle bunu programciya getirir.

• Varsayılan public erişimi :Visual Basic.NET sınıfinın üyele elemanları varsayılan olarak public olduğu için programcılara sezgisel gücü fazla olan bir özellik sunar.

• Shared üye elemanlarını kullanma hared(C# taki static) üye elemanlarına hem sınıfın ismi üzerinden hem de ilgili sınıf nesnelerinden erişilebilir. Bu da programciya daha esnek bir yapı sunar. Örneğin

Dim x as new MyClass

x.SharedMethod() ' ile birlikte

MyClass.SharedMethod()

ifadesi de geçerlidir.

• Opsiyonel parametreler : Visual Basic.NET programcıları nesne yönelimli programlama tekniğinin bütün nüanslarını bilmeye gerek kalmadan esnek sınıf yapıları tasarlayabilir. Örneğin sınıf tasarımcıları opsiyonel parametreleri kullanarak daha esnek sınıflar tasarlayabilirler.

• Filtrelenmiş catch blokları :VB.NET istisnai durumları ele elmada esnek bir yapı sunar. Filtrelenmiş catch blokları sayesinde programcılar hataları, hata numarasına göre, istisnanının türüne göre yada herhangi bir koşullu ifadeye göre filtreleyebilirler.

• Parametreli Özellikler : Visual Basic.NET te özellikler C# taki karşılığından farklı olarak parametreli olabilir. Böylece özellikler daha esnek bir yapı sunmuş olur.

• Declarative event handlers : Visual Basic.NET'te olaylara ilişikin metotları bildirirken Handles anahtar sözcüğü kullanılır.

• Arayüz üye elemanlarının yeniden bildirilmesi : VB.NET'te implemente edilen bir arayüzün üye elemanının ismi arayüzü uygulayan sınıf tarafından değiştirilebilir.


VB.NET Geliştirme Ortamına Has Özellikler

Visual Basic.NET programcılara daha çok yarar sağlayacak bir tasarıma, uygulama ve servis yazmakta kolay bir ortam sağlar. Bu sadece Visual Basic.NET'i degil tüm .NET platformunu kapsar.

Arka planda kodun derlenmesi : Geliştirme ortamı siz çalışırken arka planda kodunuzu derler ve eğer kodda hata varsa bunu size listeler.

Visual Basic . NET otomatik olarak yazdığınız kodu düzenler ve kaydeder. Otomatik olarak düzenlerken kodun durumu , anahtar sözcüklerin durumunu ve değiskenleri hizalayabilir. Bu da çok fazla ifadenin kullanıldığı durumlarda yanlış ifadelerin yada formatsız ifadelerin düzgün görülmesini sağlar.

Performans

Son önemli nokta performanstır.Visual Basic . NET derleyicisinin ürettiği ara kod, C# derleyicisinin ürettiği IL kodu ile aynı performansa sahiptir.
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #3  
Arama 07-09-2007, 08:08
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Devamı !

Çoğunlukla yazdığı programlardan güç beklentisi olan programcıların bu platformun tüm özelliklerinden faydalanması mümkündür.CLR ve . NET altyapısının pek çok faydalarına rağmen, bazı programcılar hala uygulamaları geliştirirken, Windows işletim sisteminin tüm genişlik ve derinliklerine güvenerek uygulamalarını oluştururlar. Geleneksel olarak programcılar, sistem verimliliğini en iyi kullanan kodu yazmak sistem tarafından sağlanan kaynaklara(disk,hafıza) en etkili erişimi sağlamak amacıyla Visual C++ ortamını seçmişlerdir. Visual C++.NET bu geleneksel yöntemlerin devamını sağlamayı hedeflemiştir. Tabi bunu yaparken Win32 API den sıklıkla faydalanır. C++.NET aynı zamanda .NET Framework ve yönetilebilir CLR nin bir çok imkanına erişmeyi de sağlar.

Güç Yönelimli(Power-Oriented) Geliştirme

Bir çok durumda geliştiriciler, işletim sisteminin sağladığı bütün imkanlara erişmek isterler. Microsoft, bu imkanlardan soyutlanmış yada tamamen bu imkanlar üzerine kurulmuş değişik araçlar tasarlamıştır. Bugün itibariyel .NET framework sağlam uygulama geliştirmek için bu imkanların birçoğunu sunarken yinede işletim sisteminin bütün yeteneklerini içinde barındırmaz. Güç yönelimli(Power-Oriented) geliştirme araçları, programcılara bu dilin tüm özelliklerinin yanında, uygulamanın gerektirdiği çözümlerin de kolayca çözüme kavuşabileceği kütüphaneleri sağlar.

Hangi Programcılar Neden VB.NET'i Seçmelidir?

Visual C++, aşağıdaki tipteki programcılar için ideal bir dildir.

• Win32 tabanlı bileşen ve uygulama geliştirmek isteyen programcılar : Günümüzde programcıların bir grubu, native windows tabanlı uygulamalar yapmaya ihtiyacı vardır. Bu programcılar bu tr uygulamalar için Win32 API yi ve native(doğal) C++ kütüphanelerini kullanırlar. Visual C++.NET 2003, bu tür uygulamaların performansını daha iyi yönde etkileyebilrcek bir takım derleme parametrelerine sahiptir.

• Win32 tabanlı uygulamalar ve .NET ile geliştirilmiş uygulamar arasındaki boşluğu doldurmak isteyen programcılar : Halihazırda yazılmış olan bir çok uygulama, karmaşık kodlar yüzünden, zaman, ücret veya bir çok nedenden dolayı .NET Framework kullanılarak yeniden yazılamayabilir. Visual C++ ile programcılar, var olan uygulamalarının genişleterek devamını .NET Framework çatısı altında geliştirebilirler. Üstelik daha karmaşık bir WinAPI altyapısını da kullanma imkanına kavuşurlar. Microsoft C# ve ya Visual Basic Windows API lerine erişimi sağlarken, C++'a karsı bir rakip olarak tasarlanmadı.

• Uygulamaların ana olarak performansı ile ilgilenen programcılar : Uygulama tasarımında ve çalıştırılmasında C++ geliştiriciye geniş bir kontrol imkanı sunar. İleri düzey geliştiriciler C++ kullanarak diğer dillerde geliştirebilecekleri uygulamalardan(native Windows yada .NET tabanlı) daha hızlı ve etkili çalışan uygulama tasarlayıp implemente edebilirler.

• Farklı platformlar arasında çalışabilecek program geliştirmek isteyen programcılar : Yalnızca C++ dili ISO standartlarını içerir ve gerçekten taşınabilir sentaksı, her sistemde çalışabilecek bir yapı içerir. Visual C++.NET 2003'ün genişletilmiş standart uyumluluğunu sağlarken aynı zamanda programcılara ileri seviye dil özelliklerini ve bir çok işletim sisteminde bulunan popüler sınıf kütüphanelerini kullanma imkanı sunar.

C++.NET Diline Has Özellikler

Visual C++. NET, ileri düzey yazılımcılar tarafından büyük bir taleple karşılan kendine has bir takım özelliklere sahiptir. Bu özelliklerin hepsi C++.NET'i .NET dilleri arasında en güçlü kılmaya yetmektedir.

• Şablonlar(Templates) : Büyük ölçüde C++ diline has olan şablonlar yeniden kullanılabilirliği ve performans artışı gibi bir çok önemli özelliği sağlamaktadır.

• Göstericiler(Pointers) : Göstericiler, C + + geliştiricilerine makinenin yerel hafızasına doğrudan erişebilmesini sağlar ve böylece en yüksek seviyede performans elde edilir.

• Çoklu Türetme(Multiple Inheritance) : C++, hemen hemen tüm OOP desenlerini implemente etmeyi sağlayan ve bütün OOP özelliklerini uygulamaya geçirecek özelliklere sahiptir. Çoklu türetme de bu özelliklerden biridir.

• Intrinsics : Intrinsics'ler, geleneksel programlama tekniklerinde olmayan bir takım yeni özelliklere erişmeye imkan sunar. Örneğin MMX ve AMD 3D Now! registerları ve komutları.


C++.NET Geliştirme Ortamına Has Özellikler

Visual C++.NET 2003 geliştirme ortamıda daha esnek ve daha gelişmiş uygulamalar geliştirmek için bir takım özellikler sağlar.

• Derleyiciyi optimize etmek : Visual C++ derleyicisi bir çok geliştirme seneryosu için derleme işlemini optimize edebilir. Bu seneryolardan bir kaçı : MSIL üretimi, kodun çalışcağı sisteme özgün optimizasyon, floating sayı hesaplamalarının yoğun olduğu derlemeler.

• Çalışma zamanı kod güvenliği kontrolü : Programcılar kötü niyetli ataklara karşı derleyicinin ileri seviye özelliklerini kullanarak daha güvenli Windows tabanlı uygulamalar geliştirebilirler.

• 32 bit ve 64 bit desteği : Visual C++.NET derleyicisi 32 ve 64 bitlik Intel ve AMD mikroişlemcilerine ve yönelik gömülü mikrpişlemcilere yönelik ölçeklenebilir kod üretebilmektedir.

• İleri düzey hata raporlama : Uygulamalar daima programcıların hatalarından etkilenirler. Minidump teknolojisiyle Visual C++ geliştirme ortamı, uygulama geliştirme uzmanlarına hataların kolayca belirlenmesine yardımcı olur. Üstelik derlenmiş kodda bile bu hatalar kolaylıkla rapor edilebilir.

• Gelişmiş hata ayıklama(debug) : Visual Studio hata ayıklayıcısı aynı anda hem native hemde yönetilebilir kodda hata ayıklama desteğini benzer bir şekilde sunar.

Gelecekte, Visual C + + . NET Programcilara yardim etmek için daha güçlü özellikleri içerecek.

• Generics : Parametreli kod algoritmalarını yeniden kullanılabilirliğini sağlamayı hedefleyen çalışma zamanı(run-time) teknolojisi.

• Yönetilen(Manage) tiplerde şablonlar : Derleme zamanı C++ şablon sentaksının yönetilen(manage) tipler içinde kullanılabilmesi.
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #4  
Arama 07-09-2007, 08:09
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Devamı !

Visual C#

Geleneksel Olarak Visual Basic ve Visual C + + farklı spektrumdaki programcıları hedeflemiştir. Visual Basic özellike üretkenliği ön plana çıkarması ile programcılara daha kolay ve sezgisel bir geliştirme modeli sunuyordu. Öte yandan Visual C++, üretkenliği azaltıyor gibi görünmesine rağmen Windows işletim sisteminin bütün özelliklerini etkili bir şekilde kullanma imkanı tanıyordu.

Bu iki dilin sunduğu imkanlar arasındaki boşluğu doldurmak için Microsoft kod odaklı uygulama geliştirmeyi modern ve yenilikçi bir tazrda ele alan C# dilini geliştirdi. C#, C++ sözdizimine benzer bir şekilde temiz ve güzel bir programlama dili sunarken aynı zamanda Visual Basic dilinin üretkenliğinide korur.

Kod Odakli Geliştirme

Programcıların hepsi projelerinde mutlaka belli özelliklerde kod yazarlar. Fakat programcılarinin çoğu zamanlarının önemli bir kısmını sihirbaz(wizard),kontrol ve tasarım araçları kullanarak harcarlar ve böylece önemli ölçüde bir üretkenlik sağlarlar. Bu özelliğin programcılar için tek kötü yanı sihirbaz tarafindan üretilen kodun anlaşılabilirliğinin az olmasıdır.Fakat programcılar kodlarında anlaşılırlık ve verimlilik arasindaki tercihlerinde güveni tercih ettiler.

Ayrıca kod odaklı geliştirme yapan programcılar başkaları tarafindan doğru tasarlanmış kodu yeniden yazmaya yönelir ve bu daha az bilgili programcıların pratik olarak iyi kod geliştirebilmesindeki karmaşıklığı düzeltir.

Hangi Programcılar Neden VB.NET'i Seçmelidir?

Gelecek kuşak uygulamaları ve servisleri birleştirerek .NET ortamında araştırma yapmak isteyen aşağıdaki tipteki programcılar için C# ideal bir dildir.

• Üretkenlik arayan C/C++ ailesindeki diller ile geliştirme yapan programcılar :C# dili, C++ dili gibi isleç(operator) aşırı yüklerken buna ek olarak numaralandırmalar, küçük-büyük harf duyarlılığı ve component-oriented(bilesen-yönelimli) özellikler olan property,delegate, events ve daha fazlasini içerir. C#, .NET framework ile beraber yüksek verimlilik ,yönetilebilir , daha güvenli ve anlaşılabilir sözdizimi ile yeni özellikler isteyen C++ programcılarına sunulmuş bir dil olarak da düşünülebilir.

• Framework tasarımcıları ve yazılım mimarlari : Framework tarafindan iyi desteklenen , isleç yükleme özellikleri içeren, güvenli olmayan kodlara ve önceden yazılmış yazılımlara erişimiyle C#, yazılım mimarlarına geniş ve esnek kütüphaneler ve iş parçacıkları tasarlama imkanı sağlar.

• Java tabanlı yazılımlar geliştirmiş programcılar : Java Language Conversion Asistant (JLCA) ile Java programcıları uygulamalarını C# ve .NET Frameworke'e rahatlıkla taşıyabilirler. JLCA kaynak kod seviyesinde bir analiz yapar ve Java kodunu C# koduna dönüştürür. Dönüştürme işlemi bittiğinde geliştiricinin dikkat etmesi gereken noktalar belirtilir. Böylece taşıma işlemi an az hasarla geçekleştirilmiş olur.

C#'ın C ++ Diline Benzer olan Özellikleri

C# dili, geleneksel C++ özelliklerinin bir çoğunu desteklemektedir. Bu geleneksel özelliklerin bir çoğu Visual C++ 'taki üretkenliği artırmak için de kullanılmıştır.

• Tüm CLR türleri için destek : C# dili tüm CLR veri tiplerini destekler , programcılar çözüm sunarken .NET ortamının yönetilen çalışma ortamının tüm özelliklerinden yararlanırlar.

• Referens yolu ile parametre aktarma ve out parametresi : C# programcıları, parametreleri foksiyonlara referans yolu ile aktarabilirler ayrıca out parametresi ile değişkenlere ilk değer vermeden onları fonksiyonlara parametre olarak geçirebilirler.

• Overloading (Operatör aşırı yükleme) : Sınıf kütüphanesi tasarımcıları operatörleri aşırı yükleyerek daha sağlam sınıflar tasarlayabilirler.

• Using ifadesi : Programcılar, uygulamalarında bulunan kaynakları daha kontrollü bir şekilde yönetebilmek için using anahtar sözcüğünü kullanırlar.

• Guvensiz kod(Unsafe code) : C#, programcılara gösterici kullanma imkanı tanıyarak hafızaya direkt erişimi sağlar. Her ne kadar güvensiz kodda CLR yönetiminde olsa da ileri düzey programcılar uygulamalarının hafıza yönetimi üzerinde söz sahibi olmaları için güvensiz kod yazabirler. Buna rağmen hafıza üzerinde daha etkili bir kontrol için Visual C++ kullanılması daha çok tavsiye edilir.

• XML dökümantasyonu : Programcılar, kodlarına açıklayıcı notlar eklemek için XML formatındaki bildirimleri kullanabilirler.

Öte yandan C# dil tasarımının sınırlarını genişletecek şekilde hızla büyümektedir. C# dilinin tasarımcıları yakın bir gelecekte dile eklemeyi planladıkları bir kaç önemli özellikten bahsetmektedir. Daha modern ve yenilikçi bir yaklaşım sunan bu özellikle şunlardır :

• Generics : Varolan kodların yeniden kullanılabilirliğini kolayca sağlayan C++ şablonlarına benzer bir yapı.

• Erişiciler (Iterators) : Koleksiyon tabanlı sınıfların elemanları arasında daha hızlı ve kolay bir şekilde dolaşmamızı sağlayacak yapı.

• Anonim(Anonymous) Metotlar : Basit görevleri temsilcilerle daha rahat bir şekilde ele alacak yöntem

• Kısmi(partial) Türler : Bir kodu farklı dosyalara bölebilecek türler.
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #5  
Arama 07-09-2007, 08:10
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Devamı !

Visual J #

Microsoft, Visual J# dili ile JAVA dilini .NET ortamına sokmuş oldu. Microsoft Java diline .NET ortamının pratikliğini getirdi ve okullarda müfredatları olan programcılara, ögrencilere, ve profesörlere Java yapısını muhafaza ederek onların .NET e hızlı bir şekilde girmelerini sağladı. Ayırca J# dili windows tabanlı uygulama geliştiren Visual J++ 6.0 kullanıcılarına kolayca Visual J# .Net ortamına geçebilmelerinde kolaylıklar sagladi.
Java Geliştirme Ortamı

C++ geliştiricilerin sıkılıkla karşılaştıkları problemler etkili ve kolay bir sentaks yapısı aynı zamanda benzer OOP fonksiyonelitesi ile JAVA ile giderilmiştir.Java ile uygulama geliştirenlerin .NET ortamında uygulama geliştirenilmeleri için en uygun dil J# olarak görülmektedir. Java programcıları dil değiştirmek zorunda kalmadan .NET framework teki bütün olanaklardan hızlı bir şekilde faydalanma imkanına kavuşmuştur.

Hangi Programcılar Neden VB.NET'i Seçmelidir?

Visual J#, aşağıdaki tipteki programcılar için ideal bir dildir.

• Java-dili geliştiricileri : Daha önceden Java dilini kullanan bir programcı .NET e geçerken bşska bir dili öğrenmek istemeyebilir. Visual J#, .NET platformunun getirdiği özellikler ile java programcılarının bilgilerini kullanabildikleri rahat ve hızlı bir platform sunar.

• Visual J++ ile kod geliştiren programcılar : Visual J# ortamı varolan Visual J++ uygulamalarını .NET ortamına sorunsuzca taşıyabilir ve böylece Visual J#.NET kullanmaya baslayan programcılar projelerinde .NET alt yapısının getirdiği pratikliği ve rahatlığı hemen farkederler.

• Ögrenciler, ögretmenler, ve profösörler : Öğrenciler ve öğretmenler Computer Science derslerinde Java dilinin basitliğinden faydalanmak için Visual J#.NET dilini kullanabilirler. Visual J#.NET, ileri bilgisayar bilimin bütün gerekliliklerini karşılar.

J#.NET Diline Has Özellikler

Bir çok dilde bulunan özelliklerin çogunu yapısında içeren J#, daha rahat ve bildik yapısı ile deneyimli Java geliştiricileri için .Net Framework'e yönelik uygulamalar geliştirmek için ideal bir dildir.

• Java dilinin söz dizimi : Java geliştiricileri bildik bir dil yapısı ile karşılacak ve aynı zaman .NET in tüm imkanlarından faydalandıklarını görecekler.

• Sınıf kütüphanesi desteği : Bağımsız olarak geliştirilen ve bir çok özelliği sunan Java 1.1.4 JDK versiyonundaki kütüphane ile JDK 1.2 java.util de bulunan hemen hemen bütün sınıfları içerir.

• Özellikler, temsilciler(delegates) ve olaylar(events) : .NET geleneksel JAVA söz dizimi ile .NET'in güçlü özelliklerinden olan event ,delegate, ve property yapılarını destekler.

• Javadoc Yorumları : J#, Javadoc kolarındaki yorumlama stilini destekler. Visual J# . NET, kullanıcıların HTML API belgesini yaratabilmesine olanak kılar.

Visual J#.NET Geliştirme Ortamına Has Özellikler

Visual J#.NET direkt olarak Visual Studio.NET geliştirme ortamına entegre bir şekilde çalışır. Dolayısıyla tasarlama araçları, editörler ve hata ayıklayıcılar Visual J# geliştirme ortamında rahatlıkla kullanılabilir. Ayrıca hazlihazırdaki JAVA programcılarının .NET'e geçişini kolaylaştıracak bir takım araçlar da vardır.

• Visual J++ Upgrade Wizard : Visual J++ geliştiricileri projelerini Visual J# ortamı için upgrade edebilirler. Bu sihirbaz proje dosyalarını çevirir ve olası potansiyel sorunlar için kullanıcıyı bilgilendirir.

• Ikili dönüstürücü : Bu araç, Java byte kodunu, .NET uygulamalarında kullanmak üzere MS.NET assembly lerine dönüştürür.

Özet

Programlama dilleri fakli çözümler için kullanılabilmektedir. Her dil kendi özelliklerini ve belirli bir uygulamanın ihtiyaçlarını karşılayabilecek en uygun ortamı içerir. Microsoft geniş bir dil seçeneğini sunduğu gelismiş .NET yapısı ile yazılım uygulamalarında daha sağlam ve fonksiyonalite sağlamış bulunmakta.
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #6  
Arama 07-09-2007, 08:17
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Devamı !

C#'ta Params ile Değişken Sayıda Parametre ile Çalışma

Bu makalemizde, C# metodlarında önemli bir yere sahip olduğunu düşündüğüm params anahtar kelimesinin nasıl kullanıldığını incelemeye çalışacağız. Bildiğiniz gibi metodlara verileri parametre olarak aktarabiliyor ve bunları metod içersinde işleyebiliyoruz. Ancak parametre olarak geçirilen veriler belli sayıda oluyor. Diyelimki sayısını bilmediğimiz bir eleman kümesini parametre olarak geçirmek istiyoruz. Bunu nasıl başarabiliriz? İşte params anahtar sözcüğü bu noktada devreye girmektedir. Hemen çok basit bir örnek ile konuya hızlı bir giriş yapalım.
Kod:
 using System; 

namespace ParamsSample1
{
    class Class1
    {
         /* burada Carpim isimli metodumuza, integer tipinde değerler geçirilmesini sağlıyoruz. params anahtarı bu metoda istediğimiz sayıda integer değer geçirebileceğimizi ifade ediyor*/                              public int Carpim(params int[] deger)
        {
             int sonuc=1;  

             for(int i=0;i<deger.Length;++i) /*Metoda gönderilen elemanlar doğal olarak bir dizi oluştururlar. Bu dizideki elemanlara bir for döngüsü ile kolayca erişebiliriz. Dizinin eleman sayısını ise Length özelliği ile öğreniyoruz.*/
             {
                 sonuc*=deger[i]; /* Burada metoda geçirilen integer değerlerin birbirleri ile çarpılmasını sağlıyoruz*/
             }           

             return sonuc;
         }

         static void Main(string[] args)
         {
             Class1 cl=new Class1();
             Console.WriteLine("1*2*3*4={0}",cl.Carpim(1,2,3,4)); /* Burada Carpim isimli metoda 4 integer değer gönderdik. Aşağıdaki kodda ise 2 adet integer değer gönderiyoruz.*/

             Console.WriteLine("8*5={0}",cl.Carpim(8,5));        
             Console.ReadLine();
         }
     }

}
Bu örneği çalıştıracak olursak, aşağıdaki sonucu elde ederiz.



Şekil 1. Ilk Params Örneğinin Sonucu

Peki derleyici bu işlemi nasıl yapıyor birazda ondan bahsedelim. Carpim isimli metoda değişik sayılarda parametre gönderdiğimizde, derleyici gönderilen paramtetre sayısı kadar boyuta sahip bir integer dizi oluşturur ve du dizinin elemanlarına sırası ile (0 indexinden başlayacak şekilde) gönderilen elemanları atar. Daha sonra aynı metodu bu eleman sayısı belli olan diziyi aktararak çağırır. cl.Carpim(8,5) satırını düşünelim; derleyici,

İlk adımda,

int[] dizi=new int[2] ile 2 elemanlı 1 dizi yaratır.

İkinci adımda,

dizi[0]=8

dizi[1]=5 şeklinde bu dizinin elemanlarını belirler.

Son adımda ise metodu tekrar çağırır.

cl.Carpim(dizi);

Bazı durumlarda parametre olarak geçireceğimiz değerler farklı veri tiplerine sahip olabilirler. Bu durumda params anahtar sözcüğünü, object tipinde bir dizi ile kullanırız. Hemen bir örnek ile görelim. Aynı örneğimize Goster isimli değer döndürmeyen bir metod ekliyoruz. Bu metod kendisine aktarılan değerleri console penceresine yazdırıyor.

Kod:
 public   void  Goster(params    object[] deger)
{
    for(int i=0;i<deger.Length;++i)
     {
            Console.WriteLine("{0}. değerimiz={1}",i,deger[i].ToString());
     }

     Console.ReadLine();
}                       

static void Main(string[] args)
{                       
     cl.Goster(1,"Ahmet",12.3F,0.007D,true,599696969,"C");           
}
Görüldüğü gibi Goster isimli metodumuza değişik tiplerde(int,Float,Decimal,bool, String) parametreler gönderiyoruz. İşte sonuç;



Şimdi dilerseniz daha işe yarar bir örnek üzerinde konuyu pekiştirmeye çalışalım. Örneğin değişik sayıda tabloyu bir dataset nesnesine yüklemek istiyoruz. Bunu yapıcak bir metod yazalım ve kullanalım. Programımız, bir sql sunucusu üzerinde yer alan her hangibir database’e bağlanıp istenilen sayıdaki tabloyu ekranda programatik olarak oluşturulan dataGrid nesnelerine yükleyecek. Kodları inceledikçe örneğimizi daha iyi anlıyacaksınız.



Şekil 3. Form Tasarımımız

Uygulamamız bir Windows Application. Bir adet tabControl ve bir adet Button nesnesi içeriyor. Ayrıca params anahtar sözcüğünü kullanan CreateDataSet isimli metodumuzu içeren CdataSet isimli bir class’ımızda var. Bu class’a ait kodları yazarak işimize başlayalım.
Kod:
 using System;
using System.Data;
using System.Data.SqlClient; 

namespace CreateDataSet
{
    public class CDataSet
    {

         /* CreateDataSet isimli metod gönderilen baglantiAdi stringinin değerine göre bir SqlConnection nesnesi oluşturur. tabloAdi ile dataset nesnesine eklemek istediğimi tablo adlarini bu metoda göndermekteyiz. params anahtarı kullanıldığı için istediğimiz sayıda tablo adı gönderebiliriz. Elbette, geçerli bir Database ve geçerli tablo adları göndermeliyiz.*/

         public DataSet CreateDataSet(string baglantiAdi,params string[] tabloAdi)
         {
                 string sqlSelect,conString;
                 conString="data source=localhost;initial catalog="+baglantiAdi+";integrated security=sspi"; /* Burada SqlConnection nesnesinin kullanacağı connectionString'i belirliyoruz.*/                                   
                 DataSet ds=new DataSet();/* Tablolarimizi taşıyacak dataset nesnesini oluşturuyoruz*/
                 SqlConnection con=new SqlConnection(conString); /*SqlConnection nesnemizi oluşturuyoruz*/
                 SqlDataAdapter da;/* Bir SqlDataAdapter nesnesi belirtiyoruz ama henüz oluşturmuyoruz*/ 

            /*Bu döngü gönderdiğimiz tabloadlarını alarak bir Select sorgusu oluşturur ve SqlDataAdapter yardımıyla select sorgusu sonucu dönen tablo verilerini oluşturulan bir DataTable nesnesine yükler. Daha sonra ise bu DataTable nesnesi DataSet nesnemizin Tables kolleksiyonuna eklenir. Bu işlem metoda gönderilen her tablo için yapılacaktır. Böylece döngü sona erdiğinde, DataSet nesnemiz göndermiş olduğumuz tablo adlarına sahip DataTable nesnelerini içermiş olucaktır. */

                for(int i=0;i<tabloAdi.Length;++i)
                {                                   
                        sqlSelect="SELECT * FROM "+tabloAdi[i];
                             da=new SqlDataAdapter(sqlSelect,con);
                             DataTable dt=new DataTable(tabloAdi[i]);

                             da.Fill(dt);
                             ds.Tables.Add(dt);
                     } 

                    return ds; /* Son olarak metod çağırıldığı yere DataSet nesnesini göndermektedir.*/
             } 

          public CDataSet()
             {                       
             }
      }
}
Şimdi ise btnYukle isimli butonumuzun kodlarını yazalım.
Kod:
 private   void  btnYukle_Click(object sender, System.EventArgs e)
{
     CDataSet c=new CDataSet();
     DataSet ds=new DataSet();
     ds=c.CreateDataSet("northwind","Products","Orders");                                   

     for(int i=0;i<ds.Tables.Count;++i)
     {
             /* tabControl'umuza yeni bir tab page ekliyoruz.*/
             tabControl1.TabPages.Add(new System.Windows.Forms.TabPage(ds.Tables[i].TableName.ToString()));                                               
             /* Oluşturulan bu tab page'e eklenmek üzere yeni bir datagrid oluşturuyoruz.*/
             DataGrid dg=new DataGrid();
             dg.Dock=DockStyle.Fill;/*datagrid tabpage'in tamamını kaplıyacak*/
             dg.DataSource=ds.Tables[i]; /* DataSource özelliği ile DataSet te i indexli tabloyu bağlıyoruz.*/ 
             tabControl1.TabPages[i].Controls.Add(dg);/* Oluşturduğumuz dataGrid nesnesini TabPage üstünde göstermek için Controls koleksiyonunun Add metodunu kullanıyoruz.*/                                            
     }
}
Şimdi programımızı çalıştıralım. İşte sonuç;



Şekil 4. Tabloların yüklenmesi.
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #7  
Arama 07-09-2007, 08:18
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Devamı !

Görüldüğü gibi iki tablomuzda yüklenmiştir. Burada tablo sayısını arttırabilir veya azaltabiliriz. Bunu params anahtar kelimesi mümkün kılmaktadır. Örneğin metodomuzu bu kez 3 tablo ile çağıralım;

Kod:
 ds=c.CreateDataSet("northwind","Products","Orders",”Suppliers”);
Bu durumda ekran görüntümüz Şekil 5 teki gibi olur.



Şekil 5. Bu kez 3 tablo gönderdik.

Umarız ki params anahtar sözcüğü ile ilgili yeterince bilgi sahibi olmuşsunuzdur.
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #8  
Arama 07-09-2007, 08:21
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Devamı !

C#'ta Özyenilemeli Algoritmalar (Recursion)

Özyenilemeli algoritmalar tüm dünyada bilgisayar bilimleriyle ilgili bölümlerde veri yapıları ve algoritmalar derslerinde detaylı olarak incelenir. Bu bağlamda biz de makalemizde özyenilemeli algoritmaları geliştirmeyi ve C# ile kodlamayı öğreneceğiz. Önce konunun teorik temelleri üzerinde duracağız. Daha sonra daha iyi anlaşılabilmesi için konu ile ilgili örnekler yapacağız. Makaleyi bitirmeden önce ise klasik döngüler ve özyenilemeli algoritmaları karşılaştıracağız.

Bir alogirtma geliştirirken genelde döngüleri ve karar mekanizmalarını metodların içinde kullanırız. Fakat bazı durumlarda döngüler yerine özyenilemeli algoritmalar kullanmak daha kolay ve anlaşılır olabilir. Özyenilemeli (recursive) metodların püf noktası bu tür metodların bir şekilde tekrar tekrar kendilerini çağırmalarıdır.

Özyenilemeli algoritmalarda problemin en basit hali için çözüm bulunur. Bu en basit duruma temel durum (base case) denir. Eğer metod temel durum için çağırılırsa sonuç dönderilir Daha karmaşık durumlar için metod, temel durumdan yararlanılarak, problemi çözmeye çalışır yani kendini çağırır. Karmaşık durumlar için yapılan her çağrı recursion step olarak adlandırılır.

İsterseniz konunun kafanızda daha iyi canlanması için klasik faktoriyel örneğiyle devam edelim. Sıfırdan büyük herhangi bir n tamsayısının faktoriyelinin formülü şudur:

Kod:
n! = n * (n-1) * (n-2) * .... * 3 . 2 . 1
Ayrıca 0! ve 1!'in değerleri bir olarak tanımlanmıştır. Mesela 5! = 4*3*2*1 = 120'dir.

Bir sayının, mesela n, faktoriyelini özyenilemeli değilde döngü kullanarak bulmak istersek aşağıdakine benzer bir kod kullanabiliriz:

Kod:
int faktoriyel = 1;

for( int i = n; i >= 1; i-- )
   faktoriyel *= i;
Kod 1: Döngü ile Faktoriyel hesabı

Eğer bu problemi özyenilemeli algoritma yardımıyla çözmek istersek şu noktaya dikkat etmemiz gerekiyor:

Kod:
n! = n * (n-1)!
Daha açık bir yazım ile;

Kod:
 5! = 5 * 4 * 3 * 2 * 1

5! = 5 * (4 * 3 * 2 * 1)

5! = 5 * (4!)
Aşağıda şekilde 5!in özyenilemeli bir algoritmada nasıl hesablanacağını görüyoruz. Şeklin solunda 5!'den 1!'le kadar her özyenilemeli çağrıdaki neyin çağrılacağı sağda ise sonuca ulaşılana kadar her çağrıda dönen değerler yeralıyor.

C# diliyle özyenilemeli biçimde Faktoriyel hesabı yapan bir metodu aşağıdaki gibi yazabiliriz. Bu fonksiyona int tipinde sayi isimli bir değişken geçiriyoruz. Eğer sayi 1'den küçük veya eşit ise, ki bu temel durumdur, fonksiyon 1 değerini dönderiyor. Diğer durumlarda ise fonksiyonumuz

sayi * Faktoriyel(sayi-1)

değerini dönderiyor.

Kod:
 private static long Faktoriyel(int sayi)
{
    if( sayi <= 1 ) // Eğer temel durumsa 1 dönder
        return 1;
    else                      // Temel durum değilse n * (n -1)! bul.
        return sayi * Faktoriyel( sayi-1 );
}
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #9  
Arama 07-09-2007, 08:24
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Devamı !

Kod 2: Özyenileme ile Faktoriyel hesabı

Sıra örneğimizi bir Windows uygulaması olacak biçimde programlayalım. Bunun için öncelikle aşağıda gördüğümüz Form'u tasarlayalım. Metin kutusuna txtSayi ve düğmeye btnHesapla isimleri vermeyi unutmayalım.



Formdaki btnHesapla isimli düğmeye çift tıklayalım düğmenin Click olayına cevap veren metodu yazalım.

Kod:
 private void btnHesapla_Click(object sender, System.EventArgs e)
{
    string sonucMetin="";

    // metin kutusundan değeri al ve int tipine çevir:
    int sayi = Convert.ToInt32(txtSayi.Text);

    for(int i=1; i<= sayi; i++)
        sonucMetin += i + "!= \t" + Faktoriyel(i).ToString() + "\n";

    MessageBox.Show(sonucMetin.ToString(),"Faktoriyel Hesabı");
}
Kod 3: Örnek programda btnHesapla_Click() metodu

Yukarıdaki metod içinde metin kutusuna girilen sayi değerine kadar olan tüm faktoriyeller hesaplanıp ekrana mesaj kutusu içinde yazdırılıyor. Programımızı çalıştırmadan önce programımıza Kod 2'de yeralan metodu da eklemeyi unutmayınız. Örneğimizi 10 değeri için çalıştırırsak aşağıdaki sonucu elde ederiz:



Özyenilemeli Algoritma Örneği: Fibonacci Serisi

Lise ve üniversitelerde matematik derslerinde seriler konusunda gösterilen Fibanocci serilerini programlamak için döngüler yerine özyenilemeli algoritma kullanmak daha kolay ve anlaşılır oluyor. Bu serinin tanımı ise herhangi bir n sayısı için Fibonacci(n)'nin değeri Fibonacci(n-1) ve Fibonacci(n-2)'nin şeklindedir. Tabiki Fibonacci(0) ve Fibonacci(1)'in değeri 1 olarak alınıyor.

Bu serideki sayılar doğada çok sayıda bulunur ve spiral şeklini oluştururlar. Ayrıca art arda gelen iki Fibonacci değerinin oranı 1.68.. şeklindedir. Bu değer altın oran olarak adlandırılır. Özellikle kart postallar, tablolar vb nesnelerin boy ve enlerinin oranları da 1.68.. gibidir. Çünkü insan gözüne çok hoş görünürler. Neyse konumuza devam edelim isterseniz...

Yukarıdaki tanımlardan yola çıkarak Fibonacci serisini hesaplayan metod'ta iki temel durum olacaktır. Bunlar Fibonacci(0) = 1 ve Fibonacci(1) = 1. Ayrıca diğer durumlar için dönen değer, herhangi bir n için, Fibonacci(n-1) ve Fibonacci(n-2)'nin toplamıdır. O zaman metodumuz aşağıdaki gibi olacaktır:

Kod:
 private static long Fibonacci(int sayi)
{
    if( sayi == 0 || sayi == 1) // Eğer temel durumlardan biriyse 1 dönder
        return 1;
    else                      // Temel durum değilse (n-1) + (n -2) bul.
        return Fibonacci( sayi-1 ) + Fibonacci( sayi-2 );
}
Kod 4: Özyenileme ile Fibonacci serisi hesabı

Fibonacci serisi ile ilgili aşağıdaki küçük formu tasarlayalım. Sonra gerekli kodları yazıp örneğimizi deneyelim. Formdaki metin kutusunun ismi yine txtSayi olsun. Ayrıca Hesapla etiketine sahip düğmenin ismi btnHesapla olsun. Son olarak arka planı koyu kırmızı olan etiketin ismi de label2 olacak.



Programı tamamlamak için Hesapla düğmesinini tıklandığında gerekli işleri yapacak kodu yazmaya geldi. Ayrıca programın kodunun içine Kod 4 yeralan fonksiyonu da ekleyiniz.

Kod:
 private void btnHesapla_Click(object sender, System.EventArgs e)
{
     // Kullanıcını girdiği değeri al ve int tipine çevir.
     int sayi = Convert.ToInt32(txtSayi.Text);

     // Fibonacci Hesabı yapan fonksiyonu girilen sayi değeri ile çağır.
     // Sonucu label2'ye yazdır.
     label2.Text =Fibonacci(sayi).ToString();
}
Kod 5: Fibonacci örneğinde btnHesapla_Click() metodu

Programı test etmek için Fibonacci(15) değerini bulmak istersek aşağıdaki sonucu elde ederiz.



Özyenilemeli Algoritma Örneği: Fibonacci Serisi

Makalemizi bitirmeden önce özyenilemeli algoritmalar ile döngülerden oluşan algoritmaların aralarındaki farklara ve benzerlikte gözatmakta yarar olduğu kanısındayım. İki algoritma türü de akış kontrol mekanizmlarını kullanır. Döngülerde for, while ve do while yapıları kullanılırken özyenilemeli algoritmalarda if, if/else ve switch yapıları yeralır. Aslında hem döngüler de hem de özyenilemeli metodlarda itereasyonlar bulunur. Döngüler doğaları gereği açık bir biçimde iteratiftirler. Fakat özyenilemeli algoritmalarda iterasyon aynı metodun tekrar tekrar kendi içinden çağrılması ile gerçekleşir. Döngülü ve özyenilemeli algoritmalarda göze çarpan diğer bir benzerlikte sonladırıcı testlerin bulunmasıdır. Döngülerde sayacın(counter) belli bir değere ulaşıp ulaşmadığı kontrol edilir ve gerekirse döngü sonlanır. Özyenilemeli algoritmalarda o andaki durumun temel durum olup olmamasına göre işlemler devam edebilir veya sonlanabilir. Son olarak hem döngülerle hem de özyenilemeli algoritmalar ile bilgisayarı sonsuz döngüye(infinite loop) sokabiliriz. Birincisi döngünün sonlanacağı sayaca ulaşmanın imkansız olmasından ikincisi ise temel duruma ulaşamamaktan kaynaklanır.

Aslında özyenilemeli algoritmaları kullanırsak hem daha yavaş hem de hafızada daha çok yer kaplayan programlar yazmış oluruz. Fakat çoğu zaman aynı problemin çöümünü özyenilemeli olarak bulmak daha kolaydır. Ya da döngülerle aynı sonuca varacak algoritmayı düşünmek zor olur. Ayrıca özyenilemeli algoritmaları inceleyince anlamak ve hata ayıklamak daha kolaydır. Bu durumda seçim programcıya kalmıştır. Yalnız işlemcilerin giderek hızlanması, hafıza fiyatlarındaki düşüşü ve programın daha kolay yönetilebilmesinin getirdiği avantajları göz önüne almanızı tavsiye ederim.
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #10  
Arama 07-09-2007, 08:33
OrmerBilisim - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 07/09/07
Mesajlar: 73
 
     WS-Ticareti: (0)
Teşekkürleri: 0
4 Msg. 5 Tşkr.
Rep Gücü: 5 OrmerBilisim rep gücü yükselmeye başladı

Devamı !

Struct(Yapı) Kavramı ve Class(Sınıf) ile Struct(Yapı) Arasındaki Farklar

Bu makalemizde struct kavramını incelemeye çalışacağız. Hatırlayacağınız gibi, kendi tanımladığımız veri türlerinden birisi olan Numaralandırıcıları (Enumerators) görmüştük. Benzer şekilde diğer bir veri tipide struct (yapı) lardır.Yapılar,sınıflar ile büyük benzerleklik gösterirler. Sınıf gibi tanımlanırlar.Buna karşın sınıflar ile yapılar arasında çok önemli farklılıklar vardır.Sınıflar referans türünden oldukları için, bellekte tutuluş biçimleri değer türlerine göre daha farklıdır. Referans tiplerinin sahip olduğu veriler belleğin öbek(heap) adı verilen tarafında tutulurken, referansın adı stack(yığın) da tutulur ve öbekteki verilerin bulunduğu adresi işaret eder. Ancak değer türleri belleğin stack denilen kısmında tutulurlar. Aşağıdaki şekil ile konuyu daha net canlandırabiliriz.



Şekil 1. Referans Tipleri : Aşağıdaki şekilde ise değer tiplerinin bellekte nasıl tutulduğunu görüyorsunuz.



Şekil 2. Değer Tipleri
İşte sınıflar ile yapılar arasındaki en büyük fark budur. Peki bu farkın bize sağladığı getiriler nelerdir? Ne zaman yapı ne zaman sınıf kullanmalıyız? Özellikle metodlara veriler aktarırken bu verileri sınıf içerisinde tanımladığımızda, tüm veriler metoda aktarılacağını sadece bu verilerin öbekteki başlangıç adresi aktarılır ve ilgili parametrenin de bu adresteki verilere işaret etmesi sağlanmış olur. Böylece büyük boyutlu verileri stack'ta kopyalayarak gereksiz miktarda bellek harcanmasının önüne geçilmiş olunur. Ancak küçük boyutlarda veriler ile çalışırken bu verileri sınıflar içerisinde kullandığımızda bu kezde gereksiz yere bellek kullanıldığı öbek şişer ve performans düşer. Bu konudaki uzman görüş 16 byte'tan küçük veriler için yapıların kullanılması, 16 byte'tan büyük veriler için ise sınıfların kullanılmasıdır.Diğer taraftan yapılar ile sınıflar arasında başka farklılıklarda vardır. Örneğin bir yapı için varsayılan yapıcı metod (default constructor) yazamayız. Derleyici hatası alırız. Ancak bu değişik sayıda parametreler alan yapıcılar yazmamızı engellemez. Oysaki sınıflarda istersek sınıfın varsayılan yapıcı metodunu kendimiz yazabilmekteyiz.Bir yapı içersinde yer alan constructor metod(lar) içinde tanımlamış olduğumuz alanlara başlangıç değerlerini atamak zorundayız. Oysaki bir sınıftaki constructor(lar) içinde kullanılan alanlara başlangıç değerlerini atamaz isek, derleyici bizim yerimize sayısal değerlere 0, boolean değerlere false vb... gibi başlangıç değerlerini kendisi otomatik olarak yapar. Ancak derleyici aynı işi yapılarda yapmaz. Bu nedenle bir yapı içinde kullandığımız constructor(lar)daki tanımlamış olduğumuz alanlara mutlaka ilk değerlerini vermemiz gerekir. Ancak yinede dikkat edilmesi gereken bir nokta vardır. Eğer yapı örneğini varsayılan yapılandırıcı ile oluşturursak bu durumda derleyici yapı içinde kullanılan alanlara ilk değerleri atanmamış ise kendisi ilk değerleri atar. Unutmayın, parametreli constructorlarda her bir alan için başlangıç değerlerini bizim vermemiz gerekmektedir. Örneğin, aşağıdaki Console uygulamasını inceleyelim.
Kod:
using System; 

namespace StructSample1
{         
     struct Zaman
     {
           private int saat,dakika,saniye;
           private string kosucuAdi; 

           public string Kosucu
           {
                get
                {
                     return kosucuAdi;
                }
                set
                {
                     kosucuAdi =value;
                }
           }

           public int Saat
           {
                get
                {
                     return saat;
                }
                set
                {
                     saat =value;
                }
           } 


           public int Dakika
           {
                get
                {
                     return dakika;
                }
                set
                {
                     dakika =value;
                }
           } 


           public int Saniye
           {
                get
                {
                     return saniye;
                }
                set
                {
                     saniye =value;
                }
           } 
     } 

      class Class1
      {   
                                   static void Main (string[] args)
             {
                     Zaman z;
                     Console.WriteLine ("Koşucu:"+z.Kosucu);
                     Console.WriteLine ("Saat:"+z.Saat.ToString());
                     Console.WriteLine ("Dakika:"+z.Dakika.ToString());
                     Console.WriteLine ("Saniye:"+z.Saniye.ToString());
                }
      }
}
Yukarıdaki kod derlenmeyecektir. Nitekim derleyici "Use of unassigned local variable 'z'" hatası ile z yapısı için ilk değerlerin atanmadığını bize söyleyecektir. Ancak z isimli Zaman yapı türünü new anahtarı ile tanımlarsak durum değişir.

Zaman z;

Satırı yerine

Zaman z=new Zaman ();

yazalım . Bu durumda kod derlenir. Uygulama çalıştığında aşağıdaki ekran görüntüsü ile karşılaşırız. Görüldüğü gibi z isimli yapı örneğini new yapılandırıcısı ile tanımladığımızda, derleyici bu yapı içindeki özelliklere ilk değerleri kendi atamıştır. Kosucu isimli özellik için null, diğer integer özellikler için ise 0.



Şekil 3. New yapılandırıcısı ile ilk değer ataması.
Yine önemli bir farkta yapılarda türetme yapamıyacağımızdır. Bilindiği gibi bir sınıf oluşturduğumuzda bunu başka bir temel sınıftan kalıtım yolu ile türetebilmekteyiz ki inheritance olarak geçen bu kavramı ilerliyen makalelerimizde işleyeceğiz. Ancak bir yapıyı başka bir yapıyı temel alarak türetemeyiz. Şimdi yukarıda verdiğimiz örnekteki yapıdan başka bir yapı türetmeye çalışalım.

struct yeni:Zaman

{

}

satırlarını kodumuza ekleyelim. Bu durumda uygulamayı derlemeye çalıştığımızda aşağıdaki hata mesajını alırız.

'Zaman' : type in interface list is not an interface

Bu belirgin farklılıklarıda inceledikten sonra dilerseniz örneklerimiz ile konuyu pekiştirmeye çalışalım.
Kod:
   using    System; 

namespace StructSample1
{         
      struct Zaman
      {
           private int saat,dakika,saniye;
           private string kosucuAdi;             

          /* Yapı için parametreli bir constructor metod tanımladık. Yapı içinde yer alan kosucuAdi,saat,dakika,saniye alanlarına ilk değerlerin atandığına dikkat edelim. Bunları atamassak derleyici hatası alırız. */

           public Zaman(string k,int s,int d,int sn)
           {
                kosucuAdi =k;
                saat =s;
                dakika =d;
                saniye =sn;
           } 

          /* Bir dizi özellik tanımlayarak private olarak tanımladığımız asıl alanların kullanımını kolaylaştırıyoruz. */
           public string Kosucu
           {
                get
                {
                     return kosucuAdi;
                }
                set
                {
                     kosucuAdi =value;
                }
           }

           public string Saat
           {
                get
                {
                     return saat;
                }
                set
                {
                     saat =value;
                }
           }

           public string Dakika
           {
                get
                {
                     return dakika;
                }
                set
                {
                     dakika =value;
                }
           }


           public string Saniye
           {
                get
                {
                     return saniye;
                }
                set
                {
                     saniye =value;
                }
           }
      } 

     class Class1
      {               
           static void Main (string[] args)
           {
                /* Zaman yapısı içinde kendi yazdığımız parametreli constuructorlar ile Zaman yapısı örnekleri oluşturuyoruz. Yaptığımız bu tanımlamarın ardından belleğin stack bölgesinde derhal 4 adet değişken oluşturulur ve değerleri atanır. Yani kosucuAdi,saat,dakika,saniye isimli private olarak tanımladığımız alanlar bellekte stack bölgesinde oluşturulur ve atadığımız değerleri alırlar. Bu oluşan veri dizisinin adıda Zaman yapısı tipinde olan Baslangic ve Bitis değişkenleridir. */     // Zaman  Baslangic=new  Zaman  ("Burak",1,15,23);

                    Zaman Bitis=new Zaman ("Burak",2,20,25); 

                                   /* Zaman yapısı içinde tanımladığımız özelliklere erişip işlem yapıyoruz. Burada elbette zamanları birbirinden bu şekilde çıkarmak matematiksel olarak bir cinayet. Ancak amacımız yapıların kullanımını anlamak. Bu satırlarda yapı içindeki özelliklerimizin değerlerine erişiyor ve bunların değerleri ile sembolik işlemler yapıyoruz */

                     int saatFark=Bitis.Saat-Baslangic.Saat;

                     int dakikaFark=Bitis.Dakika-Baslangic.Dakika;

                     int saniyeFark=Bitis.Saniye-Baslangic.Saniye; 

                     Console.WriteLine ("Fark {0} saat, {1} dakika, {2} saniye",saatFark,dakikaFark,saniyeFark);                                            
           }
     }
}
__________________
Ormer Bilişim İnternet Hizmetleri - www.ormerbilisim.com.tr
Alıntı ile Cevapla
  #11  
Arama 27-09-2007, 07:15
Banlı
Üyelik Tarihi: 18/09/07
Mesajlar: 1.551
 
     WS-Ticareti: (1)
Blog Yazıları: 1
Teşekkürleri: 0
20 Msg. 27 Tşkr.
Rep Gücü: 0 B737 rep gücü epey yüksek
Paylaşım için teşekkürler ...
Alıntı ile Cevapla
  #12  
Arama 28-09-2007, 09:25
Nurullah_ - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 29/08/07
Mesajlar: 154
 
     WS-Ticareti: (1)
Teşekkürleri: 1
20 Msg. 29 Tşkr.
Rep Gücü: 6 Nurullah_ rep gücü yükselmeye başladı
Yararlı bilgiler sağol paylaşım için...
Alıntı ile Cevapla
Cevapla
Arama Etiketleri: , , ,



Seçenekler


Benzer Konular
Konu Konu Açanlar Forum Cevaplar Güncel Mesajlar
Webmaster nedir,kimdir?kullandıkları programlama dilleri? egitimbilgisi Yeni Başlayanlara WebmasterSitesi 1 16-06-2008 09:26
Programlama Dilleri Hakkında Sıkça Sorulan Sorular cunobag Programlama Dilleri 0 05-06-2008 05:48
Bilgisayar Programcılığı ve Programlama Dilleri kadınca Web Dersleri 0 16-01-2008 01:11
Programlama dilleri ve C (368 sayfa) Professionel C, c++, c# 0 19-11-2007 02:48
Programlama Dilleri W-S Programlama Makaleleri 0 28-10-2007 09:35


Webmaster web tasarım online reviews ~ Kadınlar blogu ~ Apple iPhone, iPod Touch ( iTouch ) Forum ~ iPhone