You are on page 1of 7

irket yneticileri gelitirilecek proje iin bir programlama dilini semek zorunda kaldnda genelikle u soruyu sorar : Hangi

programlama dili ile projeyi en etkin ve en hzl ekilde mterime sunabileceim hale getirebilirim? Bu sorunun zmne ulamak o kadar da kolay olmuyor maalesef. zme zor ulamada programlama dillerinin fazla olmasnn etkisi omakla beraber her bir programlama dilinin sunduu standart ktphanenin farkl olmasnn da etkisi olduka fazladr. zellikle gnmz i uygulamalar birden fazla platformu destelemek zorunda kalmtr. Buda seilecek uygulama gelitirme ortamnn nemini akca gstermektedir. Uygulamalarn internet ortamna tanmas ile birlikte bir programlama dilinden beklenen zelliklerde doal olarak deimitir. 1970 li yllarda bir mikroilemciyi programlamak ne denli nemli olduysa 2000li yllarda interneti programlamak o kadar nemli olmutur. nternetin i dnyasna girii ile birlikte gelitirilen uygulamalardan beklenenler de deimitir. Bu durum doal olarak uygulama gelitiricileri dorudan etkilemitir. nternet ortamnda alan ve datk yapda alabilen ok ynl bir uygulama gelitirmek eski yntemlerle imkansz deildir ancak inanlmaz derecede zaman ve insan gc gerektirmektedir. Bu zoruluklar amak iin gelien teknolojiye ve isteklere paralel olarak programlama dilleri de doal geliim iine girmitir. Bu yazda son yllarda i ve kiisel uygulama gelitiricilerin adn ska duyduu C# programlama dili ve dier dillerle olan ilikisi anlatlacaktr. C# programlama dilinin sunduu imkanlar anlatmaya balamadan nce programlama dillerinin tarihsel geliimine gz atmak gerekir. Zira C# dili yllardr youn bir ekilde kullanlan C,C++ ve JAVA dillerinin temelleri zerine kurulmutur. unu da hemen belirtelim ki, son gelitirilen ilk gelitirilenden ou zaman daha iyi olacaktr. Bu yzden eski ile yeniyi karlatrrken ticari amalar bir kenara brakp objektif bir gzle deerlendirmek gerekir. C# konumadan nce C, C++ ve C# ile yakndan ilikili olan JAVAdan bahsetmek gerekir.

C dili ve Yapsal Programlama


Dndklerimizi makinelere yaptrma isteimizin bir sonucu olarak programlama dilleri domutur. Makineleri anlamak insanolu iin o kadar da kolay olmamtr. Zira makinelerin(bilgisayarlarn) anlad dilden konumak insanlar iin gerekten zor bir itir. Gn getike makineleri anlamak ve onlar programlamak iin yeni araylar iine girildi. Somutlatrlm makine komutlar sayesinde bilgisayarlar daha etkili bir ekilde ynetmek mmkn hale gelmitir. Zaman ilerledike bilgisayarlar sadece belirli bilimsel hesaplamalar yapmak iin kullanlan ara olmaktan kp insanlarn yaamlarnda rutin ileri yapabilecek ara haline geldi. Bilgisayarlarn insanlarn ihtiyalarna hzl bir ekilde cevap verebilmesi iin onlar hzl bir ekilde programlamak gerekiyordu. Klasik yntemlerle(makine komutlaryla) hzl zmler retilemez hale gelince daha yksek seviyeli programlama dillerine ihtiya duyuldu. 1980li yllarda en ok kullanlan programlama dili olan C bu anlamda atlm byk bir admdr. Yapsal

programlama modeli her ne kadar C dilinden nce de yaplyor idiyse de asl byk gelimeler C dili ile birlikte olmutur. C gibi makine diline gre yksek seviyeli programlama dilleri ile byk projeler yaplabiliyordu. Artk uygulamalar sadece bilimsel alma arac olmaktan kp i dnyasnda kullanlabilen uygulamalar haline geldi. Btn bu iyi gelimelerin yannda zaman su gibi akp gidiyordu, buna paralel olarak projeler byyor ve teknoloji artan ivmeyle geliiyordu. Yava yava anlald ki C dili ok byk projelerde yetersiz kalyordu. Yeni bir programlama modeline ihtiya duyuldu ve C++ dilinin temelleri atld.

C++ ve Nesne Ynelimli Programlama


Yapsal programlama modeliyle ok byk projeleri kontrol altna almak neredeyse imkanszdr. Bu sorunun stesinden gelmek iin yeni bir model gerekiyordu. Nihayet Bjarne Stroustrup tarafndan C dili baz alnarak yeni bir programlama dili gelitirildi. Bu dilin ad : C++tr. C++, Cnin zerine inaa edildii iin ilk balarda C with Classes(Snfl C) olarak adlandrld. Peki bu dil Cden farkl olarak programclara ne sunuyordu? C++ dilinin sunduu en byk yenilik nesne ynelimli programlamay destekliyor olmasdr. Nesne ynelimli programlama teknii gnmzde de yaygn bir ekilde kullanlan bir tekniktir. Bu teknik gerek hayat modellemede byk bir baar salamaktadr. Sz gelimi bir projeyi paralara ayrp bu paralar arasnda programlama yolu ile balantlar kurmak ok basit hale gelmitir. Nesne ynelimli programlama teknii proje gelitirme aamasnda burada sayamayacamz birok kolaylk salamaktadr. C++ dilinin dier bir zelliide C programclarna hitap etmesiydi. C dilindeki temel kurallar aynen C++ dilinde de mevcuttur. Bu yzden C++ dilini ve nesne ynelimli programlama tekniine gei yapmak iin C dilini iyi bilmek gerekir. Daha dorusu C++ dilini sadece nesne ynelimli programlamay destekliyor eklinde dnmemek gerekir. Gnmzde birok alt seviye ilemlerde(haberleme, iletim sistemi, aygt srcleri) C++ dilinin youn bir ekilde kullanlmas bunun bir kantdr.

nternetin Geliimi ve JAVA Dili


nternetiin geliimi bilgisayar dnyasndaki en nemli ilerlemelerden biridir. Programlama dnyasnda JAVA dilinin ortaya kmas en az internetin ilerlemesi kadar nemlidir. nk C ve C++ dilleri ile yalnzca belirli sistemlere ynelik uygulamalar gelitirilebiliyordu. Oysa internet sayesinde birok farkl sistem birbirine balanr hale gelmitir. Artk sistemlerden bamsz uygulama gelitirmek gerekiyordu. Daha dorusu interneti hedef alacak uygulama gelitirmek gerekiyordu. Programclar gelien internet ortamna yabanc kalamazd. Bu ama dorultusunda Sun Microsystems isimli firma nceleri OAK olarak anlan JAVA isimli programlama dilini ortaya kard. JAVA, dil olarak C++ dilinin devam gibi dnlebilir. Ama ama tamamen farkldr. Zira Sun firmas ortaya JAVA dili ile birlikte yeni bir uygulama gelitirme modelide sunmaktayd. Bu programlama modelinde en byk hedef sistemler aras tanabilir kod yazmaktr. Yani bir

uygulamay hem Microsoft platformunda hemde Unix ve Linux platformlarnda altrabilmek hedeflenmitir. Bylece gelitirilen uygulamalar iletim sistemi ve ilemciden bamsz hale gelecektir. Peki sistemler aras bu yksek tanabilirlik nasl olmaktadr? Cevab basit : Ara Dil. Evet, JAVA dilinde yazlm kodlar derlendiinde kodlar makine komutlarn evrilmeden ara kod denilen bytecode a evrilmektedir. Bytecodea evrilen program altrldnda Java Sanal Makinesi devreye girer ve uygulamann altrld sisteme zgn makine kodunu retir. Bu durumda Sun firmasnn bir ok sistemde alabilecek Java Sanal Makinesi retmesi gerekiyordu. Nitekim zamanla gnmzde yaygn kullanlan btn sistemlerde sorunsuz alabilecek Java Sanal Makineleri gelitirildi. Hatta u an iin baz cep telefonlar ve eitli sim kartlarnda bile JAVA programlarn altrabilecek Java Sanal Makineleri mevcuttur. JAVA ile C++ dili her ne kadar birbirine ok benzer olsada ayn kategoride deildir. Elmayla armutu kartrmamak gerekir. Eer JAVA m C++ m diye bir soru sorulursa cevap her ikisi de olacaktr. nk ikisininde kullanm amac farkldr. Bir firma bir proje iin hibir zaman bu iki dilden birisini semek durumunda kalmayacaktr. JAVA ile ayn kefeye koyabileceimiz dil birazdan anlatacam C# dilidir.

C# Dili ve .NET Platformu


JAVAnn platform bamsz kod retmedeki baars su gtrmez bir gerektir. Bir ok kurumsal dev projede JAVA dilinin ve J2EE platformunun olanaklarndan faydalanlmas bunun en nemli gstergesidir. Gnmzde byk projelerde birden fazla programlama dili kullanlabilmektedir. Ancak JAVAnn diller aras uyumlu almaya destek verememesi JAVAnn bir eksiklii olarak grlmtr. Diller aras uyumlu alma alannda en byk baary Microsoft firmas salamtr. Son dnemlerde sklkla kullanlan COM teknolojisi bu uyumlulua bir rnektir. COM sayesinde farkl dillerde yazlan yazlm paracklar dier bir uygulamada kullanlabilmektedir. JAVAnn programlamadaki byk bir boluu doldurmas onun en byk rakibi olan Microsoft firmasnn gznden kamad. En sonunda Microsoftun bir rn olan Visual Studio yazlm gelitirme aracna JAVA y da ekleme karar ald. Visual J++ ad altnda Windows platformuna entegre edilen JAVA dili bu platformda pek baarl olamad. Bu oluumun baarl olmadn gren Microsoft yeni araylar iine girdi. Microsoft bakasnn maln kendi rnne entegre etmek yerine kendi rnn gelitirmeye karar verdi ve .NET yazlm gelitirme platformunu ortaya kard. .NET temel felsefe olarak J2EE platformuna benzemektedir ancak .NETin derinliklerine daldka ok yeni kavramlarla karlarz. Bu yeniliklerden en nemlisi diller aras uyumluluk tur. J2EE platformunda sadece JAVA dili kullanlyorken .NET platformunda birok dil kulanlabilmektedir. Bu dillerin says olduka fazladr. stelik Microsoft tarafndan .NET platformu iin sfrdan yeni bir dil tasarlanmtr. Yap olarak C++ ve JAVA dilllerine benzerlii ile bilinen

bu dil Anders Hejlsberg tarafndan gelitirilen C# (C Sharp)tan baka bir ey deildir.. JAVA, C++ diline nasl benziyorsa C# dilide C++ ve JAVAya benzemektedir. Programlama modeli yine her ortamda da nesne ynelimlidir. Deien ey bu modelin uygulan eklidir. C++ta kaynak kod derleyici tarafndan makine koduna, JAVAda bytecodea C#ta ise IL(Intermediate Language-Ara Dil)a evrilmektedir. Burda vurgulanmas gereken en nemli nokta JAVAda bytecode JAVA sanal makinesi tarafndan yorumlanarak altrlrken, .NETte IL kodlar derlenerek altrlmaktadr. Hemen unu da belirtelim ki, derleme ilemi yorumlama ileminden performans asndan daha ndedir. C# dil olarak C++ ve JAVAya ok benzemektedir. Bu yzden C# dilini konuurken .NET platformunu gz nnde bulundurmalyz. Dilleri sadece birer ara olarak grmemizde fayda var. sterseniz laf daha fazla uzatmadan JAVA/J2EE ve C#/.NETi karlatrp benzerliklerini ve farkllklarn ortaya koyalm ardndan C# dier .NET dillerinden ayran zellikleri inceleyip neden C# sorusuna cevap arayalm.

C# ile .NET mi JAVA ile J2EE mi?


Saf C# ve JAVA dilleri dnldnde birka nokta dnda bu iki dil birbirine benzemektedir. Bu yzden karlatrma yaparken bu dillerin kullanldklar platformlarda gz nnde bulundurmak gerekir. sterseniz madde madde her bir zellii iki platform iin deerlendirelim. 1-) Mimari : .NET ve J2EE alma biimi olarak birbirine ok benzer. Her iki platformda da uygulama kaynak kodu ara bir koda dntrlr. Aradaki en byk fark bu ara kodun iletilmesi srasnda grlr. .NETte ara kod alma zamannda derlendikten sonra altrlrken JAVAda yorumlanarak altrlr. 2-) alma Zaman(Runtime) Mimarisi : J2EE platformundaki Java Sanal Makinesi ile .NET platformundaki CLR(Common Language Runtime) birimi edeerdedir. JVM, bytecodeun iletilmesinden sorumlu iken CLR, IL kodlarnn iletilmesinden sorumludur. 3-) Sistemler Aras Tanabilirlik : Teorik olarak C# ve JAVA ile yazlm uygulamalar sistemden bamszdrlar. Gnmzde C# ile .NET ortamnda gelitirilen uygulamalarn bir ok mobil cihazda ve Windows sistemlerinde kullanldn dnrsek bu teorinin yava yava geree dnt grlebilir. Yakn bir gelecekte .NET altyapsnn Linux versiyonunun da kaca bilinmektedir. JAVA ise bu konuda kendisini oktan kantlam durumdadr. 4-) Diller Aras Uyumluluk : J2EE platformunda sadece JAVA dili kullanlrken .NET ortamnda C#,C++,VB.NET ve hatta JAVA dili bile kullanlabilmektedir. stelik farkl dillerde yazlm paracklar dier bir dilde sorunsuzca kullanlabilmektedir. Bu sayede btn programclarn .NET platformunda rahat programlama yapabilmesi salanmtr. .NET uyumlu herhangi bir dilde gelitirilen

btn uygulamalar ayn ara koda dntrld iin .NET dilleri arasnda byk performans farkllklar meydana gelmez. 5-) Web Servisi Kullanm : Web Servisleri datk yapda gelitirilen uygulamalarn temel paras olmutur. zellikle iletiimin XML tabanl olmas web servislerinin nemini gstermektedir. Her iki dil ile web servislerine erimek mmkn olsada C# ile bir web servisini kullanmak olduka kolaydr. C# ve .NETin web servislerine kolay erimesi bir avantaj olarak grlebilir. 6-) Bellek Ynetimi : C#ta aynen JAVAda olduu gibi kullanlan nesneleri toplama programcnn grevi deildir. Kullanlmayan gereksiz nesneler gereksiz nesne toplaycs tarafndan zaman geldiinde bellekten silinirler. Buna ramen C# programclar isterse bellei kendileri de ynetebilir. Yani C# dilinde bellek adreslerini tutan gstericiler(pointer) hala kullanlabilmektedir. JAVA dilinde bu imkan yoktur. C# JAVA dan ayran en byk fark budur. Zira gsterici kullanm sayesinde geriye dnk uyumlulukta salanabilmektedir. rnein parametre olarak bir gsterici alan sistem fonksiyonunu C#ta kullanmak mmkndr. 7-) Veri Tipleri : C# dilinin temel felsefesi hereyin bir nesne olmasdr. Temel veri trleride dahil olmak zere herey birer nesne olarak tanmlanr. C# ve JAVA salad temel veri trleri bakmndan birbirlerine ok yakndr. 8-) Tekrar Kullanlabilirlik : Nesne ynelimli programlama modelinin en nemli zellii gelitirilen snflarn paketlenerek sonradan tekrar tekrar farkl uygulamalarda kullanlabilmesidir. C# ta snflar isim alanlar(namespace) ierisinde paketlenerek dier uygulamalar iinde kullanlabilir. Javada ise snflar package dediimiz bir kavramla paketlenir. Sonu olarak her iki dilde eit oranda bu zellii desteklemektedir. Ancak C#ta snflarn organizasyonu daha estetik bir ekilde dzenlenmektedir. 9-) Kontrol Mekanizmalar : Kodlarn iinde en ok grlen bloklar olan for,while ve if gibi yaplar her iki dilde de vardr. C#ta JAVA dilinde olmayan ayrca foreach dngs bulunmaktadr. foreach dngs ile koleksiyon tabanl nesnelerin elemanlar arasnda tek ynde rahata dolalabilmektedir. 10-) Tretme ve ok Biimlilik : Nesne ynelimli programlama modelinin C++ dilinden beri kullanlan mekanizmalar olan tretme ve ok biimlilik her iki dilde de mevcuttur. C++tan farkl olarak C# ve Javada sadece tekli tretme mevcuttur. 11-) stisnai Durumlar Ynetme : Uygulamlarn en byk dman olan istisnai durumlarn(exceptions) her iki dilde de ele aln biimi hemen hemen ayndr. 12-) Snf Ktphanesi : Veritaban ve dosya ilemleri gibi burada sayamayacamz bir ok temel ii yapan snflar .NET ve J2EE platformunda mevcuttur. Gerek bu snflarn organizasyonu gerekse de snflarn kullanl biimi bakmndan .NET platformunun daha avantajl olduunu syleyebiliriz. Btn bu maddeler bir btn olarak ele alndnda C#n JAVAdan bir kademe nde olduu grlmektedir. Bu durum elbette proje yneticilerinin seimlerini

etkilemektedir. Microsoft faktrnde gz nnde bulundurursak C# ve .NETin gelecekte ok i yapacan sylemek iin mneccim olmaya gerek yok. Bu arada JAVAnn halen yaygn bir ekilde kullanldn da gzard etmemeliyiz. Bu durum C# ve JAVAnn seiminde sadece teknik zelliklerin deil ayn zamanda Windows ve Linuxte olduu gibi sosyal etkenlerinde rol bulunduunu gsteriyor. Buraya kadar sylediklerimden belki yle bir soru iareti domu olabilir : C# m JAVA m sorusunu C# m C++ m eklinde sorsak neler deiir? Cevap : ok ey deiir. Evet C#n JAVA ile olan ilikisi C++ ile olan ilikisinden tamamen farkldr. C# ile JAVAy ancak saf dil olarak karlatrabiliriz. Yani dilin sentaksndan bahsediyorum. Bu iki dilin kullanld ortam farkldr. Birinde bir sisteme zgn makine kodu retilirken dierinde sistemden bamsz ara bir kod oluturulmaktadr. Bu durumda C++ ve C# bir btn olarak karlatrmay kiisel olarak doru bulmuyorum. nk ikisi farkl kategorilerde yaryor. Eer bir gn .NETin rettii ara koddaki komutlar ile alan mikroilemci gelitirilirse o zaman belki C# ile C++ karlatrabiliriz. Peki C# m C++? Cevap : Her ikiside. Eer irketiniz Intel ilemciler iin bir iletim sistemi gelitiriyorsa elbette C++ ve C dilleri seilmelidir. irketiniz datk yapda ok geni bir alma a olan bir uygulama gelitiriyorsa o zaman C# ve .NETi semeniz daha doru olacaktr. Bu seim bir projede hangi dilin kullanlacan deerlendirmek iindi. e bir de programclar asndan bakalm. Bir programcnn hem C++ hem C# hemde JAVA bilmesine gerek var m? Bence gerek var yada yok. Kesin bir cevab verilemez bu sorunun. Daha dorusu bir programc ihtiya dahilinde herhangi bir programlama dilini kullanabilmelidir. Ancak unu da unutmayalm ki iyi bir programc ok sayda programlama dili bilen demek deildir. yi bir programc .NET platformunda olduu gibi programlama dilinden bamsz kod retebilmelidir.

Dier .NET Dilleri ve C#


Daha ncede dediim gibi .NET paltformunda bir ok programlama dilini kullanabiliriz. Bu dillerin en nemlileri C#, VB.NET, C++.NET ve J# dilleridir. Bu dillerden bir tanesinin zel bir konumu vardr. Tahmin edeceiniz gibi bu dil C#tr. C# .NET platformu iin sfrdan gelitirilmi yeni bir dildir. Dier diller ise eski versiyonlar deitirilerek .NETe uyumlu hale getirilmitir. zellikle Visual Basic dilinin devam gibi grnen VB.NET dilinde bir ok radikal deiiklik yaplmtr. rnein VB dili nesne ynelimli programlama tekniini destekler hale getirilmitir. Bu eklentilerin ok baarl oloduu sylenemez. nk bu ekildeki zoraki eklentiler dilin en bata tasarlanma amacna uygunluunu ortadan kalkmaktadr. Bu amala Microsoft, hem nesne ynelimli programlama tekniine tam destek veren, C++ dilinin gl zelliklerinden yoksun olmayan ve ayn ekilde Visual Basic dilinin kolaylndan esinlenerek C# dilini kard. Peki .NET dilleri arasnda C# tercih etmemize neden olacak baka neler var? Her eyden nce C# renilmesi kolay bir dildir. Az sayda anahtar szck iermesine ramen bir ok olana programcnn hizmetine sunmutur. C# nesne ynelimli programlama diline tam destek verdii iinde seilebilir. C#ta deiken kavram

neredeyse kalkmtr. Bunda btn temel veri trleri de dahil olmak zere btn snflarn Object diye adlandrlan bir snftan tretilmesinin etkisi vardr. C# dili g ve hzllk arasndaki dengeye estetik bir ekilde korumaktadr. Temsilci ve olaylarla VBdeki olay mantna benzer bir model sunarken ayn zamanda gstericileri kullanmaya imkan vererek C++ dilinin gl zelliklerinden yoksun brakmamtr. .NET snf ktphanesinin byk bir ksm C# ile gelitirilmitir. Yani bu ktphaneyi en etkin biimde C# ile kullanabiliriz. Dahas C# dili .NETin alma mimarisi de gznnde bulundurularak sfrdan tasarland iin .NETin btn olanaklarndan en etkin biimde C# ile faydalanabiliriz. C# iin sylenebilecek son sz : C#, modern programlama tekniklerine tam destek veren, internet ann gerektirdii tm yazlm bileenlerini gelitirmeye izin veren, hzl ve etkin bir ekilde kodlama yaplabilen, C++ ve JAVAnn gzel ynlerini alp geriye dnk uyumluluu JAVAda olduu gibi gzard etmeyen bir programlama dilidir.

Sonu
nternetin ve haberleme teknolojisinin ok ileri bir seviyede olduu bir dnemde internet zerinde kullanlabilecek yazlm bileenlerini programlamak son derece nem kazanmtr. Her ne kadar C# ve JAVA ncesi dillerle herey yaplabiliyor olsada projelerin boyutlarnn bymesi bu dillerin artk yetersiz olduunun bir gstergesidir. zellikle yeni nesil i uygulamalarnda C# ve JAVA, C++tan bir adm nde grnyor. Tabi bu durum C++ dilinin kt olduunu gstermez. Nitekim C# ve JAVA dillerinin her ikiside C++ dilini rnek almtr. Deien tek ey gnn ihtiyalardr. Ayn zamanda C# dili JAVA, C++.NET, VB.NET ve J# gibi diller nnde de bir adm nde grnyor.

You might also like