You are on page 1of 17

ETM : .

NET UYGULAMA GELTRME PLATFORMU

Blm : .NET Uygulama Gelitirme Platformu Konu : .NET Framework Nedir?

Page 1 of 17

.NET Framework Nedir?


.NET Framework, Microsoft tarafndan gelitirilen, ak internet protokolleri ve standartlar zerine kurulmu komple bir uygulama gelitirme platformudur. Buradaki uygulama kavramnn kapsam ok genitir. Bir masast uygulamasndan bir web tarayc uygulamasna kadar her ey bu platform iinde dnlmtr ve desteklenmitir. Bu uygulamalarn birbirleriyle ve gelitirildii ortam farketmeksizin dnyadaki tm uygulamalarla iletiimi iin kolayca web servisleri oluturulmasna imkn verilmitir. Bu platform, iletim sisteminden ve donanmdan daha st seviyede tanabilir olarak tasarlanmtr. .Net mimarisi, ortak bir yrtme ortam (runtime environment), ortak bir deiken tr sistemi, ve birbirleriyle balantl ktphanelerden oluur.

2 / 17

ETM : .NET UYGULAMA GELTRME PLATFORMU

Blm : .NET Uygulama Gelitirme Platformu Konu : .NET Vizyonunun Oluumu

3 / 17

.NET Vizyonunun Oluumu


.NET platformu, Microsoft tarafndan gelitirilmi ve platformdan bamsz bir ekilde uygulama gelitirilmesini salayan bir ortamdr. Salad oklu dil destei sayesinde programclarn tek bir dile baml kalmadan (hatta farkl dilleri bir arada kullanmasn salayarak) deiik tipte uygulamalar gelitirmelerine olanak salar. Masast (Windows, konsol), web, mobil, web servisi, windows servisi, remoting sz konusu uygulama eitlerinden bazlardr.

4 / 17

ETM : .NET UYGULAMA GELTRME PLATFORMU

Blm : .NET Uygulama Gelitirme Platformu Konu : .NETin Getirdii zmler

5 / 17

.NETin Getirdii zmler


Varolan kodlarla tam alabilirlik destei: Varolan COM binaryleri ile yeni .NET binaryleri bir arada uyumlu olarak alabilirler, ayrca tam tersi de geerlidir. Ayn zamanda .NET kodundan C -tabanl ktphanelerin arlmasna izin verilir. Tm .NET dilleri tarafndan paylalan ortak bir alma zaman: .NET ortamnda program gelitirirken (kullanlan dilden ve uygulama tipinden -web,masast- bamsz olmak zere) alma zaman prensiplerini belirleyen ve temellerini salayan Ortak alma Zaman (Common Language Runtime), daha nce uygulama gelitiricinin dnmek zorunda olduu birok iin stesinden gelir (Bellek ynetimi (Memory management), tip gvenlii (Type safety), istisna ynetimi (Exception handling) vb). oklu dil destei: Microsoft radikal bir karar alarak CLR ile uyumlu her .NET dilinin kullanlmasna olanak salyor. Visual Studio 2010 ile gelen yazlm gelitirme kitinde C#, VB.NET, J#.NET ve C++.NET kullanarak program gelitirilebiliyor. te yandan .NET ortamna entegrasyonu tamamlanm 50den fazla programlama diliyle de uygulama gelitirilebilir. (rnek: Delphi.NET, Perl for .NET)

Tm .NET dilleri tarafndan paylalan ortak temel snf ktphanesi: Artk karmak API arlar sona erdi. .NET ile birlikte uygulama gelitiricinin hizmetine sunulan 3500den fazla snftan oluan zengin ktphane, daha hzl program gelitirme imkan ve btn .NET dilleri tarafndan kullanlan tutarl bir nesne modeli sunuyor. Programlama modelinden bamsz uygulama gelitirme ortam: Tek bir uygulama gelitirme ortam (Visual Studio 2010) kullanarak ASP.NET, masast form (windows), mobil, web servisi ve remoting uygulamalar gelitirilebilir.

Basitletirilmi masast uygulama gelitirme ve yaynlama modeli: .NET ortamnda gelitirilen bir masast uygulamas, herhangi bir windows iletim sisteminin kurulu olduu makinede altrlabilir, gereken tek ey .NET Frameworknn kurulu olmasdr. Ayrca sistem kayt defterine (registry) yazlmasna gerek yoktur. Bunun yannda .NET ayn makinede bir .dllin farkl versiyonlar ile allmasna izin verdii iin .dll cehennemi (.dll hell) ad verilen durum olumamaktadr.

6 / 17

ETM : .NET UYGULAMA GELTRME PLATFORMU

Blm : .NET Uygulama Gelitirme Platformu Konu : .NETin Yap Talar

7 / 17

.NETin Yaptalar
.NETin salad baz avantajlar incelendi, imdi de bu avantajlar hayata geirmek iin gereken (birbirleriyle balantl) yapta incelenecek: CLR, CTS ve CLS. Yazlm gelitiricinin bak asyla .NET yeni bir alma zaman ve ok ynl bir temel snf ktphanesi olarak grlebilir.

Ortak alma Zaman (Common Language Runtime -CLR-)


alma zaman ortam, Common Language Runtime (ortak alma zaman) olarak adlandrlr ve CLR ksaltmasyla anlr. CLRn birincil rol .NET tiplerinin yerini renmek, bu tipleri kendi ortamna yklemek ve ynetmektir. CLR ayrca bellek ynetimi ve tip gvenlik kontrollerini yerine getirmek gibi birok alt seviye ayrntdan da sorumludur.

Ortak Tip Sistemi (Common Type System -CTS-)


.NET platformunun bir dier yapta Common Type System (ortak tip sitemi)dir ve ksaca CTS olarak anlr. CTS spesifikasyonlar, alma zaman tarafndan desteklenen btn veri tipleri ve programlama yaplarn tanmlar, bu yaplarn birbirleriyle nasl etkileeceklerini aka belirtir ve .NET metadata formatnda nasl temsil edileceklerinin ayrntlarn belirler (metadata hakknda ayrntl bilgiye bir sonraki blmde eriilebilir). Bylece .NET destekli tiplerin, ayn veri tiplerini kullanabilmesi salanabilmektedir.

Ortak Dil Spesifikasyonlar (Common Language Spesification -CLS-)


.NET tabanl bir programlama dili, ortak tip sistemi CTS tarafndan tanmlanan her bir zellii desteklemeyebilir. Common Language Specification (ortak dil spesifikasyonu), tm .NET dillerinin orta noktada buluabilecei ortak tip ve programlama altyapsn tanmlayan ynerge listesidir. Dolaysyla CLS uyumlu zelliklere sahip bir .NET tipi gelitirilirse, bu tipi dier btn .NET dillerinin kullanabilecei garanti edilmi olur. Tersine CLS snrlarnn dnda bir veri tipi ya da programlama yaps oluturulursa, bu kod ktphanesi ile btn .NET dillerinin salkl bir ekilde etkileebilecei garanti edilemez.

Temel Snf Ktphanesi (Base Class Library)


CLR ve CTS/CLS spesifikasyonlarna ek olarak .NET platformu, tm .NET programlama dillerinin kullanabilecei Base Class Libraryi (temel snf ktphanesi) sunar. Her biri belli bir grevi yerine getirmekle sorumlu olan snflardan oluan bu ktphane hem temel iler (thread -kanal-, dosya giri k,grafiksel grnm) iin kullanlacak tipleri ierir hem de gerek hayat uygulamalarnn ihtiya duyaca birok servise destek salar. rnein temel snf ktphanesinin bize salad tipler veritaban eriimi, xml etkileimleri, programatik gvenlik konularn ele almay ve web,masast ya da konsol tabanl kullanc ara yzleri gelitirmeyi ok kolaylatrr. .NET platformunun yazlm gelitiricilere sunduu bu koleksiyonun gzel yanlarndan biri de kullanlmasnn son derece kolay olmasdr. Kullanlan isimler o kadar aklaycdr ki temel ingilizce bilgisine sahip birisi iin sezgisel olarak hangi yenin kullanacann bulunmas ok fazla zaman almamaktadr.

8 / 17

.NET Framework temel bileenleri : CLR,CTS,CLS ve BCL

C# : Gemii Olmayan Bir Dil


.NETin nceki teknolojilere gre ne kadar radikal bir proje olduunun gstergesi olarak Microsoft, bu yeni platforma zel yeni bir programlama dili gelitirdi. Bu dil modern nesne ynelimli dizayn metodolojisi zerine kuruldu ve Microsoft C# gelitirirken yllardr nesne ynelimli prensiplere sahip benzer dillerden elde ettii tecrbelerden faydaland. Sonu olarak ortaya szdizimi son derece temiz, renmesi ve yazmas kolay, ayrca gl ve esnek bir dil kt. C#n Microsoft.NET platformu ile gelmesi ile ilgili olarak anlalmas gereken nemli noktalardan biri, sadece .NET alma zamannda alacak kod retmesidir. C# hibir zaman COM ya da Win32 API uygulamas gelitirirken kullanlamaz. Teknik bir ifadeyle .NET alma zamannda ilenecek kodu tanmlayan terim managed code (ynetimli kod) ; ynetimli kod ieren binary birimin .NET dnyasndaki terim karl ise assembly dir. Aksine dorudan .NET alma zaman tarafndan ilenmeyen kod ise unmanaged code olarak adlandrlr. rnein C,C++ gibi diller yardmyla gelitirilebilirler.

9 / 17

ETM : .NET UYGULAMA GELTRME PLATFORMU

Blm : .NET Uygulama Gelitirme Platformu Konu : Assembly Nedir?

10 / 17

Assembly Nedir?
Hangi .NET dilinin kullanldndan bamsz olarak .NET binaryleri bir dosya uzants alrlar (*.dll ya da *.exe). Burada dikkati ekilmesi gereken nokta bu binarylerin iletim sistemine zel komutlar iermemesidir. Bunun yerine .NET binaryleri, platformdan bamsz Common Intermediate Language(CIL) adndaki ara dili ierirler.

Tm .NET derleyicileri kaynak kodu assembly ierisinde CILe derler. IL ksaltmas ile ilgili bir noktaya dikkat ekmek gerekiyor. .NETin gelitirilme aamasnda ILin resmi ad Microsoft intermediate language (MSIL) iken final srmyle birlikte bu terim Common intermediate language (CIL) olarak deitirildi. Dolaysyla kaynaklarda geen MSIL ve CIL ayn kavram iaret etmektedir. .NET ortamndaki bir programlama dilinin derleyicisi kullanlarak bir .dll ya da .exe oluturulduunda bu bir assembly ierisine koyulur. Daha nce bahsedildii gibi assembly, CIL kodu ierir ve bu kod, ihtiya duyulana kadar platforma zel bilgil ere derlenmez. Burada ihtiya duyulan nokta ile kastedilen, .NET alma zaman tarafndan kullanlmak zere bavurulan IL kod bloudur (Metot ars gibi) unu da eklemek gerekir ki binary dosya (.exe ya da .dll uzantl) ile assembly tektir ve ayn kavramlardr; alt seviye bir programlama dili olan Assembly ile sadece isim benzerlii vardr. Ayrca altrlabilir kod (.exe) ve ktphane kodu (.dll) ayn assembly yapsna sahiptir ve terim olarak her ikisi de assembly olarak arlr. Aralarndaki tek gerek fark altrlabilir assembly (.exe) program iin ana giri noktas (Main metodu) ierirken, ktphane assemblysi (.dll) bunu iermez.

11 / 17

Metadata ve Manifesto
Assembly, CIL dnda bir de metadata ierir. Tip metadata, binary ierisindeki her bir tipin ayrt edici zelliklerini tanmlar. Daha aydnlatc olmas asndan yle bir rnek verelim: Mevcut evimizden baka bir eve tanrken eyalar kutulara koyarz. Eer kutularn zerine tek tek ierisinde neler olduunu bir kada yazp yaptrrsak yeni evimizde aarken aradmz kolayca buluruz. Metadata, kutunun zerindeki bu listedir ve assembly ierisindeki .dll ya da .exenin sahip olduu tm tipler hakknda bilgi ierir. rnein X adnda bir snf varsa, tip metadas X snfnn tredii snf, varsa hangi arayzleri uygulad gibi ayrntlar tarken, X tipinin her bir yesinin tm tanmlamalarn da ierir. Bir assemblyde ayn zamanda kendisini tanmlayan bilgileri ieren assembly metadata blm bulunur. Assembly ad, versiyonu, kltr bilgisi, ksa bir aklama, baka assemblylere olan referanslar gibi bilgilerin tamamna assembly metadata denir ve manifesto adyla assembly ierisinde yer alr. Bir assemblynin assembly metadatas tamasnn arkasndaki gerek, ierisindeki kodu aran uygulama ya da dier assemblylerin o assemblyyi nasl kullanacaklarn renmek iin registryye ya da baka bir veri kaynana bavurmalarna gerek kalmamasdr. yleyse bir assembly ierisindeki kaynak kodun CIL karl, tip metadatas, manifesto bilgisi ve kaynaklar yer alr.

Drt bileeni ile bir .NET assemblysi

12 / 17

ETM : .NET UYGULAMA GELTRME PLATFORMU

Blm : .NET Uygulama Gelitirme Platformu Konu : Ortak Ara Dilin Rol

13 / 17

Ortak Ara Dilin (Common Intermediate Language) Rol .NET assemblyleri hakknda elde edilen bilgiler nda platformun ortak ara dilinin (CIL) rol biraz daha ayrntl incelenebilir. CIL, herhangi bir platform -zel direktif setinin yerine gemitir. Seilen .NET tabanl dilin hangisi olduundan bamsz, ilgili derleyici CIL direktifleri retir. rnek olarak aadaki C# kodu basit bir hesap makinesini modelliyor. imdilik szdizimi ile ok ilgilenmeye gerek yok; ancak HesapMak snfnn ierisindeki Topla() metodunun formatna dikkat: //Hesap.cs using System; namespace HesapMakinesiOrnek { //C# hesap makinesi public class HesapMak { public int Topla(int x, int y) { return x + y; } } //Bu snf, programn giri noktasn ierir. class HesapMakUygulamasi { static void Main(string[] args) { HesapMak hesap = new HesapMak(); int cevap = hesap.Topla(23, 41); Console.WriteLine("23 + 41 = {0}", cevap); Console.ReadLine(); } } } C# derleyicisi (csc.exe) ile bu kaynak kod dosyas derlendiinde; CIL direktifleri Manifest HesapMak ile HesapMakUygulamasi snflarnn her ayrntsn tanmlayan metadata bilgisi

ieren tek dosyal (single-file) bir *.exe assembly elde ederiz. Bu assembly ildasm.exe ile alrsa Topla() metodunun CIL kullanlarak aadaki gibi temsil edildii grlr. (Visual Studio 2010 Tools altndaki Visual Studio 2010 Command Prompta ildasm.exe yazlarak bu ara alabilir ve ilgili .dll ya da .exenin yolu gsterilir) :

.method public hidebysig instance int32 Topla(int32 x,


14 / 17

int32 y) cil managed { // Code size 9 (0x9) .maxstack 2 .locals init ([0] int32 CS$1$0000) IL_0000: nop IL_0001: ldarg.1 IL_0002: ldarg.2 IL_0003: add IL_0004: stloc.0 IL_0005: br.s IL_0007 IL_0007: ldloc.0 IL_0008: ret } // end of method HesapMak::Topla

Bu metot iin retilen CIL kodundan pek bir ey anlalmamas ok nemli deildir. Burada zerinde durulmas gereken nokta u ki; C# derleyicisi iletim sistemine zel kodlar deil, CIL retir. Tekrarlamakta fayda var, bu zellik btn .NET tabanl derleyiciler iin geerlidir. Bunu gsterebilmek iin ayn uygulamann C# yerine Visual Basic .NET (VB.NET) kullanlarak yazldn varsayalm : 'Hesap.cs Imports System Namespace HesapMakinesiOrnek 'Bir VB.NET 'Modlsadece static yeler ieren bir snftr. Module HesapMakUygulamasi Sub Main() Dim hesap As New HesapMak Dim sonuc As Integer sonuc = hesap.Topla(23, 41) Console.WriteLine("23 + 41 = {0}", sonuc) Console.ReadLine() End Sub End Module //C# hesap makinesi Class HesapMak Public Function Topla(ByVal x As Integer, ByVal y As Integer) As Integer Return x + y End Function End Class End Namespace

Eer Topla() metodunun CIL direktiflerine bakacak olursak C# kaynak kodu iin retilenlerin VB.NET iin retilenlerle ayn olduunu grrz.
15 / 17

.method public instance int32 Topla(int32 x, int32 y) cil managed { // Code size 9 (0x9) .maxstack 2 .locals init ([0] int32 Topla) IL_0000: nop IL_0001: ldarg.1 IL_0002: ldarg.2 IL_0003: add.ovf IL_0004: stloc.0 IL_0005: br.s IL_0007 IL_0007: ldloc.0 IL_0008: ret } // end of method HesapMak::Topla

CILin Yararlar
Bu noktada kaynak kodun platforma zel komut setine (makine diline) deil de CILe derlenmesinden tam olarak ne elde edildii merak edilebilir. Bunun cevab ncelikle dil entegrasyonudur. Yukarda da grdmz gibi btn .NET tabanl derleyiciler neredeyse ayn CIL kodunu retiyorlar. Dolaysyla btn diller iyi-tanmlanm bu binary ortamda aralarnda anlaabileceklerdir. Terimler u an iin yabanc gelebilir; ancak aadaki rnekler verilebilir Bir dilde yazlm snf, baka dilde yazlm bir snfn yelerini kaltm yoluyla kullanabilir. Bir snf hangi dilde gelitirildiinden bamsz olarak baka bir snf rneini ierebilir. Nesneler ya da nesne referanslar metotlar arasnda parametre o larak geirilebilir. Farkl dillerde yazlm metotlar arrken hata ayklayc ile metot armlar arasnda gezilebilir; yani farkl dillerdeki kaynak kodlar arasnda adm adm ilerlenebilir.

Ayrca CILin platformdan bamsz olmasndan yola karak .NET Frameworkn de platformdan bamsz olduunu syleyebiliriz. (Tek bir kod blounun saysz iletim sistemi zerinde alabilmesi) Bu platform-bamszlk Windows iletim sistemlerinde geerli olmakla beraber bir -ok Windows olmayan platformda deneme aamasnda da olsa uygulamalar mevcuttur. (Mono ve Portable.NET projeleri) zet olarak CILin getirdiklerine baklnca iin en gzel yan .NETin yazlm gelitiriciye hangi dil ile bunu yapmak istedii seeneini sunmasdr.

CILin Platforma zel Koda Derlenmesi


Herhangi bir dilde yazlm uygulamann bir bilgisayarda almas iin mutlaka bilgisayarn anlayaca komutlara dntrlmesi gereklidir. .NET assemblyleri platforma zel kod yerine CIL ierdiinden dolay kullanlmadan nce makine koduna derlenmelidirler. CILi uygulamann alt makine iin anlaml talimatlara dntren derleyiciye just-in-time compiler (tam zamannda derleyici) ad verilir ve ayn zamanda jitter olarak da anlr. .NET alma zaman ortam, her biri zerinde alt iletim sistemi iin optimize edilmi, her CPU iin bir JIT derleyicisi kullanr ve bu optimizasyonu otomatik yapar. rnein cep bilgisayar gibi kk akll cihazlarda yaynlanmak zere bir .NET uygulamas gelitiriliyorsa, dk bellek ortamnda almas iin uygun jitter kullanlr. Dier yandan gelitirilen assembly bir yedek
16 / 17

sunucuda datlacaksa (bellek ou zaman sorun olmayacaktr) jitter yksek bellekli ortamda ilevini yerine getirmesi iin optimize edilecektir. Bu yolla yazlm gelitiriciler, etkin bir ekilde tam-zamannda-derlenecek ve farkl mimariler kullanlarak altrlacak kod bloklar yazabilirler. Btn bunlara ek olarak kullanlan jitter ile CIL komutlar uygun makine kodlarna derlendiinde, sonular uygun bir yolla hedef iletim sisteminin belleinde saklanacaktr. Buna gre DosyayaYaz() isimli metoda bir ar yaplrsa, ilk arda CIL komutlar platforma zel kodlara derlenecek ve sonraki kullanmlar iin hafzada tutulacaktr. Dolaysyla DosyayaYaz() metodunun ikinci arlnda CILi yeniden derlemeye gerek kalmayacaktr.

Bu ders notu, Ak Akademi projesi erevesinde TCM tarafndan Microsoft Trkiye iin hazrlanmtr. Tm haklar Microsoft Trkiye ye aittir. zinsiz oaltlamaz, para ile satlamaz.

17 / 17

You might also like