Makale Özeti

C#a Genel Bakış

Makale

C# Windows uygulamaları geliştirmek için C++ ve Visual Basic programlama dillerine alternatif olarak Visual Studio .NET ile birlikte gündeme gelen bir uygulama geliştime dilidir.

C#, bize Visual Studio’da yalnızca C++ ile erişebildiğimiz yerlere ulaşabilmemizin yanısıra Visual Basic kadar kolay bir kullanım sağlar. Özellikle .NET için geliştirildiğinden .NET kod yapısına en uygun dil olarak bakabiliriz C# ’a. Bu nedenle C#, .NET framework’ünü daha kolay ve daha etkin kullanır. Orta seviye bir programla dili olması ise Visual Basic ve C++’ın en iyi özelliklerini içermesini ve tam bir OOP (Object Oriented Programming) ortamı sunmasını sağlar.

C#’ı .NET framework’ünden ayrı olarak incelemek yerine bütünün bir parçası olarak ele almak gerekir. Çünkü .NET ile geliştirilen CLR (Common Language Runtime – JVM[Java Virtual Machine]’e benzeyen ve birbirinden farklı dillerin IL(Intermediate Language)’e compile edilerek oratak çalışmasını sağlayan yapı olarak tanımlayabiliriz), .NET kodlarının ortak çalışmasına izin vermektedir. Bu şu anlama gelir ister C#, ister C++, ister Visual Basic, uygulamamızı hangi platformda yazarsak yazalım çatımız hep aynıdır.

.NET, genel amaçlı yazılmış windows platformu programlarında bir devrimdir. .NET’in sağladığı birçok avantaj vardır; kullanımı kolay nesne modellemesi, Garbage Collection’ı sayesinde yaratılan kaynakların otomatik olarak temizlenmesi, SQL ve ADO spesifik Data Access, ASP .NET sayfalarının oluşturulmasına yarayan geliştirilmiş library’ler ve bunlar gibi birçok yapı. Ancak; her ortam için o ortamın özelliklerine ulaşmak elbette belirli mekanizmalar gerektirir. Örnek verecek olursak Windows, C ve C++’da yazılmış bir dil olduğundan yönetim yine C,C++ kodundan ulaşabildiğimiz Windows API ile sağlanır (Bu, Visual Basic’in Windows API’nin bütün özelliklerine kolay erişim sağlayamamasının nedenidir). C#’ın gerçek faydası burada ön plana çıkmaktadır, C# .NET framework’ü için sıfırdan başlanarak tasarlanmış ve bu dilin yazım ve dil özellikleri .NET’in sunduğu kolaylıklardan basit bir şekilde yararlanabilmesi için geliştirilmiştir.

Bir örnek verecek olursak;

System.String .NET class library’sinde bir class’tır ve case convertion’ları, substring’lerin ayıklanması ve string ifadelerin trim’lenmesi gibi bir çok method’a sahiptir. C# compiler’ı bu class’ı otomatik olarak tanıyan kendi string keyword’üne sahiptir.

string MyStr1=”Visual”;
string MyStr2=”Studio”;
string MyStr3=”.net”;
string MyStr4=MyStr1+” “+MyStr2+” “+MyStr3;
MyStr4.ToUpper();
//Sonuç olarak MyStr4’e VISUAL STUDIO .NET değeri atanır.

.NET framework’ü, kullanılan kaynakları boşaltmakta çok başarılıdır. Bu başarının sırrı ise managed code içerisindeki değişkenlerin stack yerine managed heap’de tutulmasıdır. C# bu gibi işlemleri bizim yerimize otomatik olarak yapmaktadır. Tabiiki .NET platformunda Managed C++ ve VB.NET de aynı özelliklerden C# gibi faydalanabilmektedir. Bu yapının sağlanabilmesi ise Visual Basic ve C++’ın yapısında gerçekleştirilen bir takım değişikliklerle mümkün olmuştur. Bu da Visual Basic ve C++ açısından bakıldığında bir upgrade anlamına gelmektedir. Yapıları ne kadar upgrade edildiyse de yeni bir platform için VB ve C’ye geçmişten gelen yazılım geliştirme dilleri olarak bakmak yerinde olacaktır. Bu iki dil bu anlamda .NET platformunda yazılım geliştirirken geçmişten gelen alışkanlık ve syntax yapıları yüzünden tam anlamıyla .NET için dizayn edilmemişlerdir; bu da yazılım geliştirirken C#’a göre bu yazılım geliştirme dillerini dezavantajlı hale getirir. Hatta bu yüzden VB.NET syntax’ının hala tam anlamıyla Object Oriented Programming’e göre dizayn edilmediği tartışmasını ortaya çıkarmıştır.

C# ise karşımıza tertemiz bir defter yaprağı gibi çıkmaktadır. Bunun nedeni ise Microsoft’un C#’ı tam anlamıyla .NET çizgisine göre geliştirmiş olmasıdır. Object Oriented Programming için gerekli syntax dizaynı ve program yazmayı kolaylaştıran yapısı C#’ı .NET framework’ünde çalışmak için mükemmel bir dil haline getirmiştir.

C# tam anlamıyla bir Object Oriented Programming dilidir. Bu özellik ise sadece C#’ın taşıdığı bir özellik değil tabiiki. C++’ta Object Oriented Programming yapısına sahiptir hatta VB bile Object Oriented olarak tanımlanmıştır. Buna rağmen C++ ve VB açısından olaya yaklaştığımızda birtakım problemlerle karşılarız.

C++’ı ele aldığımızda karşımıza tam anlamıyla Object Oriented Programming için geliştirilmiş ve dizayn edilmiş bir programlama dili çıkar ancak geliştirildiği zamanlarda Object Oriented Programming yapısında kodun yeniden kullanımı gibi bir düşünce yoktu. Klasik C++ kodu bütün dilleri desteklemez ve klasik C++’ın çalışabilmesi için, inherit edeceğiniz class’ın orijinal source’undan class header’larına ulaşmanız gerekmektedir.

Daha sonraları COM sayesinde dil uyumluluğu sağlandı ve programlama dilleri (VB,VJ++,C ve C++) çok basit bir şekilde COM objesi olarak yazılan classlara ulaşabildiler. Ancak COM öğrenmesi çok zor bir yapı olması dezavantajını hep taşıdı ve tam anlamıyla klasik Object Oriented Programlama yolunda inheritence’ı destekleyemedi.

Diğer bir yandan VB COM yazma platformu sağlayan ve COM’un karmaşık yapısını uygulama geliştirenlerden gizleyen bir yapıya sahiptir. Ancak çoğu Object Oriented Programming uzmanının da söylediği gibi VB gerçek anlamda OOP modeline sahip değildir çünkü inheritence’ı desteklemez.

C# ise her iki dünyanın avantajlarını bize sunmaktadır. Tam anlamıyla inheritence’ı destekler fakat bunun yanısıra .NET framework’ü source dosyalarımıza ulaşmadan inheritence sağlayabilmek için compile edilmiş durumda bulunan library dosyalarını (assembly) sağlar. Bu sayede .NET programcılık tarihinde ilk kez programlama dilleri arasında çapraz geçişlere izin veren ve gerçek anlamda bir yeniden kullanım olanağı sağlayan bir platform olmuştur.

Inheritence bir class’ın içerisinde başka class’ları base almamızı sağlayan Object Oriented Programming modelin bir özelliğidir. Örneğin standart olarak kullandığınız bir menu,toolbar ve statusbar yapısı var, bir form üzerinde ilgili standartlarınızı yerleştirdiniz, başka bir formda da aynı özellikleri kullanmak istediğinizde tek yapmanız gereken oluşturduğunuz ilk formu base almak ve yeni formunuza inherit etmek. Yeni formunuz inherit ettiğiniz formun bütün özelliklerini içeren yeni bir form olarak karşımıza çıkacaktır. Development tarafından baktığımızda bu işlem bize zaman kazandıran ve yeniden kullanım imkanı sağlayan bir yapıdır.

C# orta seviye bir programlama dilidir. Bir sıralama yapacak olursak C#’ın bu sıralamadaki yeri aşağıdaki gibi olacaktır.

· Assembly

o C,C++

§ C#,J++

· Visual Basic

o VBA, Scripting Dilleri

Listemizde yukarıdan aşağıya doğru inecek olursak aşağıya indikçe dillerin öğrenimi kolaylaşır.Daha az kod yazarak ve daha az zaman harcayarak istediğimiz projeleri gerçekleştirebiliriz. Assembly ile yazılım geliştiriyorsak hiç alışık olmadığımız bir performansla karşılaşırız ancak assembly öğrenmesi, yazılım geliştirmesi en zor platformlardan birisidir. Bu nedenle assembly dili ile yazılmış programlar genellikle çok yüksek performansın ön planda olması gereken bazı device driver’lar, oyun subroutine’leri ve işletim sistemlerinin temel dosyalarıdır (win.com gibi). C++ ise GUI (Graphical User Interface) geliştirmek için tercih edilmesi gereken bir dildir. Eğer daha basit bir şekilde GUI’ler geliştirmek istiyorsak tercihimiz tabiiki Visual Basic olmalıdır. GUI’lerde performans ön planda değildir çünkü burada limit faktörü kullanıcıdadır yani kullanıcının mouse’ı hızlı tıklamasındadır!..

C#, Visual Basic ile C++ arasında bulunan boşluğu gidermek için dizayn edilmiştir. C#, C++ ile yazılabilen ve yazılırken C++ kadar zor olmayan aynı zamanda Visual Basic’ten daha yüksekte program yazmak isteyen yazılımcıları hedef almıştır. C++ ve VB arasındaki boşluğu dolduran ve pek tatmin edici olmayan J++ bu durumuna rağmen C# ile birçok yönden benzerlik göstemektedir. C#, C++’ın syntax’ına çok benzeyen bir syntax’a sahiptir ve C++’ın birçok özelliğini destekler örneğin inheritence (multiple olmamasına rağmen). Bu nedenle C++ programcıları C#’ı çok kolay bir şekilde öğrenebileceklerdir. Visual Basic programcıları kendilerini yepyeni bir syntax ve birçok object oriented kavramı ile karşı karşıya bulacaklardır ancak C#’ı öğrenmek, C++’ı öğrenmekten çok daha kolaydır.

C#’ın C++ ve Visual Basic arasında bir dil olduğuna iyi bir örnek olarak memory management gösterilebilir. Visual Basic’deki tek memory management şudur: nesnelerle işiniz bittiğinde set nesne=nothing demeniz yeterlidir, bunu yapmayı unutursanız olacak tek kötü şey sistem kaynakları ve memory’nin gerektiğinden biraz daha uzun bir süre kullanılması olacaktır.

Diğer taraftan, C++ developer’lara hangi değişkenin hafızada ne kadar kalacağının ayarını yapma imkanı vermek ve böylelikle hafızanın daha etkin kullanımını sağlamakla kalmaz, bunu nerdeyse zorunlu kılar. C++’da yazılmış programların memory management bug’larına maruz kalmaları ve hafızada kayıplara yol açması Visual Basic’de gerçekleşmez.

C# memory management’ta Visual Basic’in yolunu izler, yani sorumluluk dilin kendisindedir. Ancak VB’nin aksine C#’da memory’yi kendiniz sınıflandırmak isterseniz yazdığınız kodun bir bölümünü unsafe olarak belirtebilir ve sonra da C++’da olduğu gibi Memory için yer ayırıp daha sonra bu kısmı boşaltabilirsiniz.

Şu ana kadar bahsettiklerimizi değerlendirecek olursak Microsoft’un .NET platformuna uygun olarak ürettiği C#’a Visual Basic yada C++ dilleri ile uygulama geliştiren developerların aynı çatı altında toplanacağı bir yapı olarak bakabiliriz. Daha az zaman harcayarak, daha az kod yazarak daha güçlü applikasyonlar geliştirmek için C# mükemmel bir platform gibi gözüküyor. C# ile tanışmak ve çalışmak gerçekten heyecan verici. İyi ki doğdun C#.

Oğuzhan ÖRDE
MCSD,MCDBA,MCP,MCT,ATECH