Makale Özeti

C#

Makale

Bu güne kadar Microsoft platformu üzerinde programlama ile uğraştıysanız,veya bir proje yöneticisi iseniz muhtemelen sizin konumuzdaki binlerce kişi ile aynı sorunlarla yüzleşmek, ve sorunları çözmek için benzer yolları takip etmek zorunda kaldınız.

 

İlk problem projeniz için dil seçimi sırasında karşınıza çıkar: her biri farklı avantajlar ve dezavantajlar sunan programlama dilleri arasından tek bir seçim yapmak oldukça zordur.

 

Hızlı bir şekilde yazılım geliştirmek isteyenler için, Visual Basic her ne kadar bir yaygın bir  çözüm olsa da, yüksek performans ve alt seviye sistem fonksiyonlarına erişim için C++ veya C hala en favori tercihler olmayı sürdürüyor. Platformlar arası taşınabilirlik avantajına rağmen Java, yüksek kaynak kullanımı ve düşük performansı ile bir çok durumda uygun bir çözüm olmuyor.

 

Sadece performans ve kullanım kolaylığı değil, projeniz açısından seçtiğiniz dilde yazılmış olan hazır  kodlar  ve başkalarının yazdığı kodları kullanabilmek de önemli bir nokta. Üstelik  günümüzde müthiş ölçeklere ulaşan ve yüzbinlerce satır kod gerektiren yazılım projeleri verimlilik açısından tek bir dille de yazılmıyor. Windows  temelli kullanıcı  arabirimleri  için Visual Basic, ve hız gerektiren işlemler için Visual C++ kullanılması hiç de az rastlanan bir durum değil .Üstelik bazen önceden yazılmış bir projeyi, yeni özellikler ekleyecek şekilde elden geçirmeniz ve daha önce yazılmış kodları kullanmanız da gerekebilir. Bu durumda dil seçimi sizin yerinize önceden yapılmış olur, size de kendinizi homurtular içerisinde hakim olmadığınız bir dil ile boğuşurken bulursunuz.

Bazen dil seçimini kendiniz yapsanız bile öyle bir an gelir ki, mutlaka gereken bir işlemi kullandığınız dil ile yapmak ya mümkün değildir, ya da performans kabul edilemez seviyededir. Örnek olarak ASP ile proje geliştiren bir çok kişi, ASP’nin yetersiz kaldığı bir noktada eninde sonunda COM objeleri ile çalışmak zorunda kalır. Ya da Visual Basic ile çok zor olacak bir video işleme görevi  için, Visual C++ ile hazırlanmış bir Active-X kontrolünü kullanmanız gerekir.

 

İster istemez karşınıza çıkan bu gibi sorunları aşmak için, Microsoft’un değişik programlama dilleri arasında iletişim kurmaya yarayan   Active-X, COM gibi teknolojilerini kullanabilirsiniz. Ancak yine de bu teknolojiler bile her zaman istediğiniz sonucu vermez.

İçinizi daha fazla daraltmamak için, bu temel sorunlar haricindeki diğer problemlere burada değinmeyelim.

Bu gibi sorunların ortaya çıkmasında en önemli nedenleri kısaca özetlemeye çalışırsak  birkaç temel nokta dikkatinizi çekecektir:

 

  • Değişik programlama dillerini performans olarak çok farklı seviyeler sunarlar. Ancak bu performansın bedelini genelde dilin karmaşıklığı, ve dolayısıyla kafanızdaki saçlarla ödersiniz.
  • Belli diller işletimi sistemine değişik kapasitelerle erişirler. Yani C++ ile birkaç satır kod ile eriştiğiniz bir sistem fonksiyonuna, veya multitasking desteğine, Visual basic ile erişmek için, saçlarınızın bir başka tutamını feda etmeniz gerekir.
  • Sadece tek bir dil, sorununuzu çözmediği zaman, birden fazla dili kullanmak için farklı teknolojilere yolunuz düşer. Active-X, COM gibi kavramlar her ne kadar sorunlarınızı çözse de, size çok da dostça davranmazlar; alt yapıları oldukça karmaşıktır, ve değişik diller arasındaki farklı veri türleri ve işleyişler sebebiyle bir çok durumda tercümanlığı sizin yapmanız gerekir. ( İsterseniz ufak bir örnek verelim : Diyelim  ki C++ ile yazdığınız bir fonksiyonun geri döndürdüğü değeri, Visual Basic ile yazılmış bir başka fonksiyona geçirmeniz gerekiyor. Ancak Visual Basic fonksiyonu VARIANT veri tipinden bilgileri kabul ediyor. C++ ‘da ise bu tür bir veri tipi yok ! Çözümsüz bir sorun değil ama yine de bunun gibi formaliteler işinizi yavaşlatacaktır)

 

Bu sorunlarla  senelerdir boğuşan bir çok programcının isteği herhalde aynıdır:

Çok karmaşık bir yapıda olmayan ( dolayısıyla hata yapma olasılığı düşük),  son derece güçlü, yüksek performanslı,  “Nesneye Yönelik Programlama” gibi güçlü paradigmalara destek veren bir dil ! Eh, pek de az bir istek değil, hatta istekler bununla da bitmez, hazır duaya başlanmışken  senelerce monitör başında verilen çabaların bedeli olarak bu dili verimli  ile kullanmak için bir de sistem/framework istenir. Bu öyle bir framework olmalıdır ki, en çok hata yapılan noktalar olan kaynak yönetimini otomatik olarak gerçekleştirmeli,  kendisini destekleyen diller arasında kusursuz bir iletişim sağlamalı, yapılabilecek hemen her tür işlem için (dosya ve veritabanı erişimi, grafik  programlama,  network programlama.....) hazır fonksiyon kütüphaneleri sunmalıdır. Hatta üstüne bir de işletim sistemleri  arasında taşınabilirlik de istesek ?

Çok mu hayalperest oldu ? Belki uzun zamandır öyleydi ama artık değil:

C# (C Sharp) ve .NET’ ile hayalleriniz gerçek olabilir!

 

Önce biraz .NET

.Net  de nedir diyenler için:

.Net Microsoft’un Windows için geliştirdiği yeni framework. Bu kadar basit bir açıklama doğal olarak, .NET’in önemini anlatmaya yetmiyor. .NET, Microsoft’un işletim sistemleri üzerinde çalışacak olan  programların geliştirilmesi, çalıştırılması, dağıtılması, ve hatta kullandıkları API hakkında sayısız değişiklik içeren yepyeni bir sistem. Tek başına bir kitapta anlatılabilecek kadar detaylı olduğu  için, burada .NET’i anlatmak imkansız. Ancak, .NET sadece yeni bir teknik gelişme değil, Microsoft’un geleceğe ilişkin, vizyonunu ve stratejisini de anlatan bir kavram.

 

C# nedir ?

Microsoft’un tanımına göre : “C#, C ve C++ ‘dan türetilmiş, basit, modern, objeye yönelik bir programlama dilidir.”

Eh, C#’ın temel özelliklerini oldukça iyi özetleyen bir tanım.C# az önce bahsi geçen sorunlara çok büyük ölçüde çözüm olabilecek bir dil ve aynı zamanda muhtemelen önümüzdeki yıllarda Windows platformlarının en önemli yazılım geliştirme dillerinden biri, hatta belki de en önemlisi.

 

C# .Net framework ile gerçekten çok iyi uyum sağlayan, Nesneye Dayalı programlama üzerine kurulmuş, güçlü bir dil .Temel olarak C, C++ gibi dillerin gücünü, Visual Basic’in sağladığı kolay kullanımla birleştirmek amacıyla hazırlanmış ve Microsoft  tarafından .NET uygulamaları geliştirmek için en uygun dil olarak tanımlanıyor. Bir parça inceleyen herkesin göreceği gibi Java’ya oldukça benzeyen bir dil, ancak Microsoft bir C#’ı  sıfırdan tasarlarken elde edebileceği her avantajı değerlendirmiş, ve C#’a gerçekten hoşa gidecek bir sürü  özellik eklemiş.C#, Java programcılarına oldukça tanıdık gelecek bir yapıya sahip.

Peki bir programlama dilinden bu kadar bahsedip de bir “Hello World” örneği vermeden geçmek olur mu ? Tabii ki olmaz!

 

 

 
// C# ile bir merhaba programı
class Merhaba 
{
   static void Main() 
   {
      System.Console.WriteLine("Merhaba!");
   }
}

 

İşte karşınızda kısa fakat eksiksiz bir C# programı. Her ne kadar bu kısacık kod ile dili tanımanız mümkün olmasa da, dilin  önemli bazı özelliklerine ait ipuçları var.

İlk olarak syntax, yani sözdizimine bakarsak, C, C++, java gibi dillerle yakından akraba olduğunu hemen belli ediyor. Bir komut satırını bitirmek için “;” kullanılıyor, ve bu synatx’ı kullanmaya yeni başlayan herkesin nedense itinayla nefret ettiği “{}” küme parantezleri de blokları belirtmek için mevcut.Bu tür şekilsel akrabalıkları  sayesinde, C# bahsi geçen diğer diller ile çalışanlar için kolay bir geçiş aşaması sağlıyor.

C#  yoğun  bir şekilde  object oriented  programlamayı kullanan bir yapıda tasarlanmış . Bu paragidmanın gerektirdiği sınıflar, kalıtım, polimorfizm gibi kavramlar destekleniyor.  Programın başlangıç noktası olan Main() fonksiyonu da  merhaba sınıfı içinde. C++ ve C’ye aşina olan programcılar için hemen belirtmeliyim: C# global değişkenler ve Fonksiyonlara pek sıcak bakmıyor. Mutlaka sınıfları kullanmalısınız.

Yukarıdaki örnekte Main fonksiyonunun void döndürdüğünü görüyoruz, ancak int de döndürebilir, veya argümanlar da alabilirdi .

System.Console.WriteLine(“Merhaba!”); satırı ile çağırılan WriteLine metodu ise komut satırına “Merhaba!” yazmak için. Bu satırın yazılışının C++ ve Java ile çalışmış programcılara  tanıdık geleceğini tahmin ediyorum.Bu dillere daha önce hiç göz atmamış olanlar için, bu satırın, sınıflar ve sınıflara ait bir metodun çağırılması  ile ilgili bir miktar bilgi gerektirdiğini söylemeliyim.

Tahmin edeceğiniz gibi, bu program derlenip çalıştığı zaman, komut satırına Merhaba! yazıyor.

C# ile ilgili bu ufak örneğin ardından isterseniz hemen aklınızda oluşabilecek sorulara yanıt bulmaya çalışalım :

 

Neden C# öğreneyim ?

 

İyi bir soru, hele  hakim olduğunuz bir programlama dili varsa.. Ancak bu sorunun yanıtı bir parça C#’ın üzerinde çalıştığı .NET framework ile ilgili.

C#’ın diğer dillere göre belki de en büyük avantajı, tamamen .NET ile paralel geliştirilmesi sayesinde bu framework üzerinde maksimum verimi sağlaması. Hatta .NET2İn bazı kısıımları da C# ile yazıldı.

Microsoft .NET için program geliştirirken yer yerde C#’ı kullanmanıza izin veriyor. MFC programcılarının sevinç gözyaşları ile karşılayacağı MFC’den çok daha üstün ve tutarlı .NET class’ları ve masaüstü uygulamaları geliştirenlerin favorisi olacak Winforms gibi yeni kütüphaneler’e, C# ile erişebilir, Visual C# görsel geliştirme ortamını ( visual studio .NET’in bir parçası olacak ) kullanarak çalışabilirsiniz.ASP.NET olarak isimlendirilen yeni kuşak sunucu taraflı uygulama geliştirme teknolojisi de C#’a tam destek veriyor

Bir başka önemli faktör de, zaten kullanmakta olduğunuz dil ile ilgili yapmanız gerekecek çalışmalar. Evet, .NET üzerinde birazdan değineceğimiz CLR sayesinde bir çok programlama dilini kullanmak mümkün, fakat C++’ı veya visual Basic’i .NET üzerinde kullanacaksanız, sizi yapılması gereken bir iki ufak iş bekliyor. NET üzerinde CLR kullanarak çalışacak bir programı belli kurallara uyarak yazmanız gerekiyor,. (CLR’ye birazdan geliyoruz) Özellikle Visual Basic programcılarını çok yoğun bir çalışma bekliyor, çünkü  Visual Basic’de çok büyük değişiklikler var. Visual C++ ise gücünden bir şey yitirmiş değil, ancak C++’ın sahip olduğu özelliklerin büyük kısmı 100% .NET uyumlu programlar yazmak isterseniz kullanılmıyor.Yani C# sıfırdan .NET için yaratılmış bir dil olarak bariz bir avantaja sahip. C# ile bir parça çalışır, örnek kodları incelerseniz, .NET ile kusursuz bir entegrasyon sağladığını göreceksiniz.

 

C# ’ın başlarda değindiğimiz programlama ile ilgili sorunlara ne tür bir çözüm getirdiğini görmek için, bir parça .NET, CLR ve C# ilişkisine göz atmak yerinde olur.

 

.NET ve CLR

.NET framework bizlere CLR ( Common Language Runtime ) isimli bir kontrollü program yürütme ortamı sunuyor. CLR, kendisine yönelik yazılmış programlar için , önceden başımızı oldukça ağrıtan, değişik diller arasındaki ilişkileri bizim için sağlıyor, ve hata yapma olasılığınız yüksek olan kaynak yönetimi gibi konularda yükü sizin sırtınızdan alıyor. Tabii ki CLR için bu bir parça yüzeysel bir  bir tanım, ancak, C# ile ilişkisini anlatmak için şimdilik bizi idare eder.

 

Bir C# programı nasıl çalışıyor?

C# aslında Java’ya benzer sayılabilecek bir metod ile çalışıyor. Yazdığınız kod alıştığınız anlamda derlenerek exe uzantılı bir dosyaya dönüşmüyor. Bu kod ilk başta, C# derleyicisi tarafından MSIL ( Microsoft Intermediate language ) adı verilen bir ara dile dönüştürülüyor. Bu ara dil işletim sisteminden bağımsız, dolayısı ile, .NET uygulamaları her platformda çalışabilecek bir altyapıya sahip.Daha sonra CLR, yazdığınız kodu anında derleyerek çalıştırıyor.

Bu kadar teknik bilgiden sonra, daha önce belirlediğimiz sorunlara C# ve CLR sayesinde nasıl çözüm getirebileceğimize bakalım :

 

  • CLR için yazılmış bir program hangi dilde yazılırsa yazılsın sonuçta MSIL’e yani  aynı  koda dönüşecektir. Dolayısıyla artık dil seçimi yaparken “performans” ile ilgili kaygılarınız olmayacaktır . Yani C# size CLR ile çalışan diğer diller ile eşit bir performans sunar, kolay kullanılmasının bedelini performanstan ödün vererek ödetmez.
  • Belki de ön önemli nokta, CLR sayesinde .NET üzerinde kullanılan tüm diller, kusursuz bir şekilde birlikte çalışırlar. Bir dilde yaratılmış objeler, diğer dillerde CLR sayesinde kolaylıkla kullanılabilir. Siz hangi dilde ne veri tipi var, ne veri tipi yok diye kafanızı yormak zorunda kalmadan, bu tür işlemleri CLR’a bırakabilirsiniz. Yani C# ile diğer dillere erişmekte hiçbir sıkıntı çekmezsiniz, Visual Basic, veya c++ ile yazılmış .NET bileşenlerini bir sınırlama olmadan kullanabilirsiniz.
  • Her programcının ara sıra başına iş açan kaynakların yönetimi otomatik olarak CLR tarafından idare edilir; yani C# ile yazdığınız kodun kullandığı kaynakları takip etmek zorunda değilsiniz.

 

Eğer CLR için yazdığınız kodda daha fazla kontrol isterseniz, dizginleri ele alıp, C# içinde,  (diğer dillerle uyumluluğu bir kenara bırakıp) “unmanaged” yani kontrolu size ait, klasik C kodu bile yazabilirsiniz.!

 

Buraya kadar değindiğimiz noktaları bir araya toplarsak, C#’ın ileride Micsrosoft’un da desteği ile oldukça popüler olan bir dil olacağını tahmin etmek zor değil . Şu anda Microsoft’un web sitesinden ücretsiz olarak indirebileceğiniz .NET beta 1 SDK sayesinde, C# ‘ı öğrenmek için bir C# derleyicisine, çok detaylı dokümantasyona ve bir çok örneğe ulaşabilirsiniz.Microsoft’un çok geniş online  dokümantasyonu (http://msdn.microsoft.com)  harici bir çok web sitesi de C# hakkında son derece detaylı bilgiler ve örnek kodlarla sizi bekliyor.

http://www.gotdotnet.com

http://www.csharp-corner.com

http://www.devx.com

http://www.devdex.com

http://www.csharpindex.com

gibi web sitelerinde sınırsız kaynak bulabilirsiniz.Sorularınızı sormak için Usenet üzerinde C# ile ilgili gruplardan da yararlanabilirsiniz.Bu kaynaklara göz atıp, bir parça araştırdığınız zaman göreceksiniz ki C#, gücü, basitliği, ve .NET ile  kusursuz entegrasyonu ile tam anlamıyla Windows için geleceğin programlama dili.