15 Mayıs 2010 Cumartesi

C#'da Encapsulation Kavrami

Kisaca encapsulation icin, nesneler arasi etkilesimi kontrol altina almak diyebiliriz. Birbirleriyle olan iliskilerini korumak da diyebiliriz aslinda. Ornek uzerinden gidersek daha rahat anlatabiliriz durumu. Programimizda basit olarak bir yas sinifi olusturup bunun nesnesini cikarttiktan sonra ornegin kullanicinin yasi 200 girilmis olsun, buna izin vermememiz gerekir saglikli bir kod yazmak istersek. Bunun icin bizim yas sinifinda property yazip yas ozelligini koruma altina almamiz gerekir. Kisaca kodlarla da anlatmak istersek;

private byte _yas;
public byte Yas
{
get { return _yas; } //propertiesler arka planda metot gibi yaziliyor. programi kolaylastiriyor.
set {
if (value > 18 && value <99)
_yas = value;
else
Console.WriteLine("Hata"); } }


Yukarida da gordugumuz gibi oncelikle tanimlamayi private erisim belirleyicisiyle yapiyoruz. Isimlendirme kurali cercevesinde, degisken isimlerini '_' ile baslayip, kucuk harfle devam ediyoruz. Her private metot gibi bu degiskenlerin de get set'lerini yazip kontrolumuzu ve degerimizi aliyoruz. Iste bu get set metotlarina properties'i diyecegiz. Burada set ile yas degerinin 18 ile 99 degeri arasinda olmasini aksi taktirde hata mesajini yazdirmasini isteyecegiz. Properties ile ilgili bilmemiz gereken son sey de, arka planda metot gibi davranmalari. Ki IL Disassambler ile IL kodlarini incelersek yazdigimiz properties'in metot olarak code'larda bulundugunu goruruz. Aslinda basitce dusunursek arka planda yaptigi is, metot gibi ama bizim amacimiz da, ornegin kdv oranini hesaplarken, bunun icin ozel metot yapip ona gorev vermektense, Kdv sinifinin ozelligi gibi gorev yuklemek. Bu da birden fazla urun icin islem yapacagimizda ayri ayri fonksiyon calistirip onlara deger gondermektense, o sinifin bir ozelligi gibi davranip sonucu hesaplatmasini istememiz, daha profesyonel bir kodlama saglayacaktir programimiza.

*Ipucu: degiskenlerimizi yazdiktan sonra properties'ini elle yazmayip kisaca klavye kisayollarindan visual studio'nun yazmasini istiyorsak, klavyeden imlecimiz degiskenimizin yanindayken ctrl+R+E dersek, sevgili ide'miz bizim icin tum properties'i yazmis olacak. Hem beynimiz, hem ellerimiz yorulmamis olacak boylece. ;)

8 Mayıs 2010 Cumartesi

C# Resources Kullanimi

Bir ustteki yazida da belirttigim gibi assembly kavrami 4 kisimdan olusuyordu ve bunlardan biri de resources idi. Kisaca hatirlatalim, resources, yazdigimiz programda kullandigimiz resimler, ses dosyalari, ikonlar ... vs. gibi dosyalari programimiza montelememizi sagliyor. Peki nedir bunun avantaji. Ornegin programda biz resimler klasorunden bir resim cektik. Baska bilgisayarda, kodumuzu calistirdigimiz zaman o resim gozukmeyecek, cunku bilgisayarda resimler klasoru olmayacak, olsa bile kullandigimiz resim olmayacak. Biz resmi kodumuza koydugumuz zaman, her makinede sorunsuz sekilde calisacak bir yapi olusturmus olacagiz. Bu ayni zamanda profesyonel kodlamayi da olusturmus oluyor.

Simdi kisaca bu islemi nasil yapacagimizi gosterelim.

Proje sayfamizdan, solution explorerda projeyi sag tiklayip add-new item diyoruz.


Cikan sayfadan resources'i secip, istersek ismini de degistirebiliriz.

Add/Ekle dedikten sonra cikan sayfadan (add source-add existing file) diyip yuklemek istediginiz resmin yolunu verdikten sonra, kullanacaginiz resim, muzik vs. gibi dosyalar kodumuzun icine girmis oluyor. Boylelikle, bundan sonra kullandigimiz dosyalar tum bilgisayarlarda calisacak, sorunsuz bir sekilde cikti verecektir...

4 Mayıs 2010 Salı

C#'da Assembly Kavrami ve Runtime Sureci

Bugun C#'a giris yapmadan once, tum bu yapilanlarin arkasinda nasil bir senaryo var, biz f5'e bastigimizda, makine arkada bizim icin neler yapiyor bunlari inceleyecegiz. Onemli mi, bence onemli, cunku yaptigimiz isin mantigini oturtmus oluruz, hata ayiklamada vs. yardimci olur bu bilgiler. Ayrica ufak bir not, bu bilgiler cogu is gorusmelerinde sorulan ve cok az kisinin bilebildigi bilgiler oldugunu da ekleyeyim.

Simdi gelelim konumuza;

Kisaca f5 yaptigimizda islerin nasil calistigini anlatayim. Biz kodlarimizi yazdik, compile etmemiz gerekiyor. Bunu csc.exe yardimiyla yapiyoruz. Makine bunu "IL Code" denilen kodlara ceviriyor. Bunlar makinenin anlamadigi kodlar. Tabi bunlari da makineye tanitmak gerekiyor. Iste burada CLR dedigimiz dil - o da basli basina ayri bir dil aslinda- devreye giriyor ve makineye hello world yazdir diyor. Kisaca calisma mantigi bu. Tabi bu mantik javada'da ayni sekilde isliyor fakat orada, CLR'in yerini "Java Virtual Machine" aliyor.

Sunu da belirtmemiz lazim, cunku programimizi yazip compile ettigimiz zaman surekli su hatalari goruruz, "Runtime error" veya "Compiletime Error". Iste bunlarin nerede sorun cikardigini anlamak icin sunu bilmemiz gerekir ki; bizim kodu yazip, calistirip IL Code'larinin olusturma surecine biz Compile Time derken, IL Code'larin CLR yardimiyla makinenin anlayacagi dile donusturmesi zamanina da Run Time adini veriyoruz.

Simdi sikca duydugumuz bir kavrami daha aciklayalim. Assembly kavrami nedir? Assembly aslinda bir dosyadir, dosya ismidir. Assembly hakkinda bilmemiz gereken sey, icinde nelerin bulundugu ve bunlarin ne gorevi oldugu. Kisaca aciklamak gerekirse, Assembly 4 kisimdan olusuyor;

1-Manifest: Bu kisim assembly yapisinin en ustunde bulunur ve bize assembly'nin kimlik bilgisini verir. Yani kod yazarken sirket kodu, veya urun kodu, versiyon no gibi kimlik bilgileri bu kisimda tutulur. Assembly'nin kimlik karti diyebiliriz Manifest icin. Ayrica sunu da belirtelim, bu kisimda kullanilan dll listesi de bulunur.
2-IL Code: Yukarida da anlatmistik ama kisaca tekrar uzerinden gecelim. Compile time sirasinda olusan kodlardir. Makine bu kodlari anlamaz ve bu kodlari makinenin anlayacagi dile donusturmek gerekir. Iste bu gorevi yapan kisim da C# dilinde CLR iken, Java dilinde Java Virtual Machine'dir.
3-Metadata: Bu kisim da onemli aslinda. Yazdigimiz kodda, hangi tiplerin, bu tiplere ait hangi uyelerin vs. kullanildigini gosteren, bu bilgileri tutan kisimdir. Kisaca su ornegi verirsek, gozunuzde daha iyi canlanir. Ornegin bir class olusturduk, o class'in ismini yazip noktaya bastigimiz zaman intellisense bize yardimci olur, tanimlanan metotlar,degiskenler .vs onumuze getirir. Iste intelisense de bize bunu metadata kismina gidip oradan getiriyor aslinda. Onemli bir kisimdir.
4-Resources: Bu kisim da aslinda onemli bir kisim ama ihtiyac duyuldugunda onemlidir. Yani kullanicinin opsiyonuna baglidir bu kisim. Ornek uzerinden aciklarsak cok iyi anlasilacaktir. Biz kod yazdik ve kodlarin icine resim dosedik. Iste biz bu resimleri eger kendi bilgisayarimizin resimler klasorunden yuklediysek, baska bilgisayar gittigimizde bu resimler olmayacagindan program duzgun calismayacaktir, ama biz resources kismi yardimiyla tum bu resimleri yazdigimiz programa yukluyoruz ve boylece tum bilgisayarlarda sorunsuz calismasi saglaniyor.

Kisaca bilmemiz gerekenler bunlardi aslinda. Ozellikle arka planda neler donuyor kismini merak eden arkadaslar buradan yararlanabilirler. Dedigim gibi is gorusmelerinin de vazgecilmez sorularindandir bunlar :)