Merhaba arkadaşlar, bu yazımda .net platformunu ve c# dili ile olan ilişkisini anlatacağım. Bir programlama dilinde geliştirilen bir uygulamayı bilgisayarımızın anlamasını sağlamamız için uygulamanın 1 ve 0 lara yani binary koda çevrilmesi gekmektedir. Örneğin bir C kodunu çalıştırabilmemiz için onu makinemize tanıtmamız gerekir. Bu tanıtma işlemini ise derleyiciler üstlenmektedir. Yazdığımız kodları hatalardan ayıklayarak çalışan bir uygulama elde etmemizi sağlar. Ancak bu oluşturmuş olduğumuz dosyalar platfordan bağımsız değildir. yani farklı bir yapı altında çalışmayacaktır. Bir örnek vermek gerekirse Windows işletim sisteminde geliştirilen bir uygulamayı Linux işletim sisteminde çalıştıramayacağımız gibi.
Burada devreye platformdan bağımsız yapılar girmektedir. Bunlardan en çok bilineni ise Java’dır. Java Runtime Environment (JRE) sayesinde platformdan bağımsız bir şekilde bir kez yaz her yerde çalıştır mantığına kavuşmuştur.
Peki bu Java nasıl çalışır ?
Yukarda da görüldüğü gibi Java kodu derlendikten sonra “.class” uzantılı bytecode’a çevrilir. Bu bytecode çalıştırıldığında ise JRE tarafından assambly e çevrilir.
.Net Framework ise Platformdan bağımsızlığa ek, dilden bağımsız bir yapıyı sunmuştur bizlere. Kısaca değinecek olursak .net platformuna bağlı dillerde geliştirilen dll veya exe’ler birbirleriyle ortak bir aradil sayesinde iletişimde bulunabilirler.
.Net platformuna ait herhangi bir dil ile (c++.net,Java.net,Python.net,Delph.net,c#.net,vb.net vb) geliştirilen bir uygulama Ara Dil (Intermediate Language,CIL-> Ortak Ara Dil -> common intermediate language,MSIL-> microsoft ara dil) ‘e çevrilir. Bu ara dil dll veya exe türündeki çıktılardır. Bu çıktılar farklı dilde geliştirilen projelerde kullanılabilir. Bu çıktılar .net frameworkünün temel kütüphaneleri(base library) sayesinde assambly’e çevrilirler.Böylelikle hem platfomdan hem de dilden bağımsızlık sağlanmış olur.
Peki bu temel kütüphaneler nelerdir ?
CLR(Common Language Runtime):CLR çalışma zamanı servislerinden sorumludur. Programlama dillerinin entegrasyonu(language integration), güvenlik(security), bellek(memory), süreç(process) ve thread(is parçacigi) yönetimi çalışma zamanı servislerindendir. CLR bunun yani sira gelistirme zamaninda da bazi rollere sahiptir, örnegin tip güvenliginin saglanmasi gibi.
Common Language Runtime, .NET Framework ile yazilmis uygulamalarin isletiminden sorumludur. Yürütme organı gibi bir görev üstlenmektedir.
CLR’nin sagladigi ve sorumlu oldugu bazi servisler asagida listelenmektedir:
- Kod yönetimi(Code Management): Loading ve Execution
- Uygulama belleginin izolasyonu
- Tip güvenliginin(type safety) dogrulanmasi
- IL(Intermediate Language) kodunun dogal makina koduna(native code) dönüsümünün saglanmasi ve data(tipe ait detaylandirilmis bilgiler) bilgisine erisimin saglanmasi
- Yönetilebilir nesnelerin(managed object) bellek yönetiminin saglanmasi
- Kod erisim güvenliginin(code access security) uygulanmasi
- Istisna yönetimi(Exception Management)
- Yönetilebilir kodlar, COM nesneleri ve hazir DLL’lerin birbirleri arasinda isletimlerinin saglanmasi
- Nesne otomasyonunun saglanmasi
- Uygulama gelistiriciler için servislerin saglanmasi(debugging vb.)
BCL(Base Class Library):Temel siniflar; giris/çikis(input/output), string islemleri, güvenlik yönetimi, ağ iletişimi, thread yönetimi, metin işleme ve kullanıcı arayüz tasarımı gibi standart fonksiyonlari kapsamaktadir.
ADO.NET sınıfları; OLE DB, ODBC, Oracle ve SQL Server arayüzleri üzerinden veriye erişimi sağlamaktadır. XML siniflari ise XML manipulasyonu, XML veri içerisinde arama yapabilme ve dönüşüm fonksiyonlari gibi temel fonksiyonlara sahiptir. ASP.NET sınıfları web tabanlı uygulamalar ve web servisleri geliştirebilmek için destek sağlamaktadır. Windows Forms sınıfları ise masaüstü uygulamaları geliştirebilmeyi sağlamaktadır.
Temel Sınıf kütüphaneleri, .NET Framework dilleri arasında ortak, tutarlı bir geliştirme arayüzü sağlamaktadir.
CLS(Common Language Specification):Farklı dillerin ortak olan özelliklerini tanımlar. Böyle farklı dillerde yazılmış programların birlikte çalışmasına olanak tanır.
CTS(Common Type System):Veri tipleri ile ilgili kuralları tanımlar ve böylece farklı dillerde yazılmış olan programların birlikte çalışmasına olanak tanır.
Bu bilgilerden sonra .Net i kısaca tanımlamak gerekirse platform ve dilden bağımsızlık amacıyla geliştirilmiş gelişmiş bir sınıf kütüphanesine sahip bir çatıdır. C# ise bu platformda uygulama yazmak amacıyla geliştirilmiş bir programlama dilidir.
C# ile bir uygulama geliştireceğiniz zaman .Net platformunun bilgisayarınızda yüklü olması gerekmektedir. Bir txt editörü ile basit bir uygulama yazmak mümkündür. Ancak yazılımcılar bunu amelelik olarak görmektedirler =). Bir çok yazılım geliştirme aracı bizi bu amelelikten kurtarmıştır. Bunların arasında en profesyonel olanı ise Visual Studio’dur. Bu aralar 2012 versiyonunun lansmanı yapılmış olsa da 2010 dan pek bir farkının olduğunu düşünmemekteyim. Bende VS 2010 versiyonu olduğu için uygulamalarımızın çoğunu bu IDE ile geliştireceğiz.
IDE(Integrated Development Environment): Uygulama geliştirme aracıdır.VS 2010 kullanıcıya birçok kolaylık sağlar. Bunlardan başlıcaları Derleyici,Intellisense,Debug,Hata Yönetimi’dir.
Derleyici :Programcılıkta, bir programlama dilinde yazılmış olan kaynak kodunu başka bir dile (genellikle makine koduna) çeviren yazılım. Derleyiciye bunu yaptırmaktaki amaç genellikle çalışabilir bir yazılım elde etmektir. http://tr.wikipedia.org/wiki/Derleyici
Ancak bu C# da biraz farklıdır. VS kodları derlediğinde IL(ara dil) olarak bir çıktı oluşturur. Bu IL çalıştırıldığında .Net bu çıktıyı assambly’e çevirir.
Intellisense : Bir sınıfa ait özelliklerin otomatik olarak gösterilmesidir. ctrl + space ile kullanılacağı gibi, sınıf veya değişken vb gibi nesnelerden sonra “.”(nokta) ile de kullanabileceğiniz özellikler otomatik getirilir.
Debug: Debug modu ile yazmış olduğunuz kodları adım adım inceleyebilirsiniz. Bunun için F10(satır satır ilerler),F11 (bir dallanma varsa içine girerek ilerler) kullanabilirsiniz. Ayrıca breakpoint ile istediğiniz bir kod satırına kadar otomtik çalıştırmasını da sağlayabilirsiniz. Debug özelliği yazılım geliştiricilere çok büyük kolaylıklar sağlamıştır. (Düşünenden Allah razı olsun :P)
Hata Yönetimi: Bu konuya daha ilerki yazılarımda daha detaylı değineceğim. Şimdilik bilmemiz gereken uygulamada hata olutuğunda programın kapatmasını engellemek ve kaldığı yerden devam etmesini sağlamak, oluşan beklenmedik hataları yakalamak için çok faydalı bir yöntemdir.
Bu yazım da buraya kadar. Bir sonraki yazımda görüşmek üzere.