|  | 
        
            | 
                    
                        | C# Programlama Rehberi - 2 |  |  
                        | 
	
    
		
            | Gönderiliyor lütfen bekleyin... | 
 |  | 
        
            | Geçen gece evdeki 
  bilgisayarımda elektronik kitapalrıımı karıştırıken rastlantı eseri gözüme takılan 
  ve okuduğumda çok hoşuma giden bir rehber oldu. Rehberde C# ile nesne yeönelimli 
  yazılım geliştirirken hem tasarım hem de uygulama şamasında bizlere çok yradımcı 
  olacak tavsiyeler bulunmaktaydı. Bu altın değerindeki öğütleri tüm yazılımcı 
  arkadaşlarla paylaşmak istedim. Hatta okurken kendi kendime yaptığım yorumları 
  da Çevirmenin Notu 
  şeklinde sizlere aktarmayı uygun gördüm. 
 Rehberde altmışın 
  üzerinde madde olmakla birlikte bunların yarıya yakını sistem analizi ve tasarımı 
  ile ilgilidir. Diğer kalan ksımı ise sistemin uygulanması(implementasyonu) konusunu 
  kapsamaktadır. Bu 
  makalenin başlangıcı olan  
  C# Programlama Rehberi - 1’i burdan okuayabilirsiniz.
 
 Bu 
  belge Thinking In C# (Larry O’Brien & Bruce Eckel ) kitabının sonundaki 
  EK C’den Türkçe’ye çevrilmiştir.
 
 Bu dökümanda; 
  yazılım geliştirirken alt seviye tasarım ve kod yazma husuunda biz programcılara 
  yardım edecek, rehber olacak, bir takım öneriler bulunmaktadır. Burda yazılanlar 
  birer öneri olup birer kural olarak algılanmamalıdır. Dökümanda bahsedilenler 
  önceki deneyimlere dayanarak ortaya çıkan parlak fikirler olarak da görülebilir.
 
 16. 
  Temel fonksiyonelitelikleri genişletmek için sınıf türetmeye başvurmayın: 
  Eğer arayüz elemanlarından biri o sınıf için vazgeçilmez ise, o eleman ana sınıfta 
  bulunmalıdır. Eğer yeni metotlar eklerken kalıtım kullanıyorsanız tasarımınızı 
  bir kere daha gözden geçirmeyi aklınıza getirin.
 
 17. 
  Azar Azar: Herhangi bir sınıf için; olabildiğince az arayüz 
  ile işe başlayın. Sınıfınız hali hazırdaki problemi çözecek kadar yetenekli 
  olursa başarılır. Sınıf ile ilgi şu an ihtiyaç duyulmayan elemanları eklemeye 
  kalkmayın. Sınıfınız kullanıldıkça onu genişletmenin yollarını, ihtiyaca binaen, 
  zaten kaşfedeceksiniz. Fakat bir sınıf herhangi başka bir kod tarafında kullanımda 
  iken sınıfın yeteneklerini kısmaya kalkmak ölümcül bir hata olacaktır. Eğer 
  yeni yeteneklere ihityacınız varsa bunları eklemniz sadece sınıfın kodunu tekrar 
  derlemek gerektirecektir. Eğer yeni ekledikleriniz arayüzde değişiklikler gerektiriyorsa, 
  eski arayüzü genişletin sadece. Eski arayüzü değiştirmek size ciddi anlamda 
  sorunlar yaratabilir. Ayrıca metot(lar)a yeni argüman ekleyeceğiniz durumlarda 
  arayüzün eski halini koruması için çok biçimlilikten faydalanın. Yani metotlara 
  aşırı yükleme yapın.
 
 Çevirmenin 
  Notu: Aynı örneğimize( geometrik şekiller) devam edecek olursak; 
  ilk başta sizin ihtiyacınız olmadığı halde kalem ve çizgiTipi’ni belirteren 
  Çiz() metotlarını yazmayın. Her ne kadar işimizin olabildiğince ince düşünmeye 
  bizi alırsa bile? İlk hali ile Çiz( şekil ) olan metodumuzun sonradan Çiz( şekil, 
  kalem ) versiyonuna ihtiyaç duyarsak Çiz( şekil ) metodunu koruyun. Zaten nesne 
  yöenlimli proramlama yapıyoruz. Onun nimetlerinden biri olan çok biçimlilik 
  bize büyük bir nimet olarak verilmiş.
 
 18. 
  Sınıflarınızın mantıklı olduğuna emin olmak için onları sesli biçimde okuyunuz: 
  Özellikle ana ve türeyen sınıflar arasındaki “is-a” ve sınıf içindeki nesnelerin, 
  sınıf ile olan “has-a“ilişkilerine dikkat ediniz.
 
 Çevirmenin 
  Notu: Kare bir Dikdörtgen sınıfından türemiştir. O zaman kare bir 
  dikdörtgendir denilebilmeli ( “is-a” ilişkisi ). Öte yandan Dörtgen nesnemizin 
  köşelerinin koordinatlarını tutmak için 4 tane noktamızın olduğunu varsayalım. 
  Bu durumda her bir bir nokta nesesi Dörtgen sınıfının birer eleamanıdır( “has-a“ 
  ilişkisi )
 
 20. 
  Kalıtım ve kompozisyon arasında karar vermek durumunda kalırsanız türeyen sınıftan 
  temel sınıfa yukarı tür dönüşümüne ihtiyacınızın olup olmadığını kendinize sorunuz: 
  Eğer böyle bir tür dönüşümüne gerek duymacaksanız kopozisyonu tercih edin. Bu 
  sayede çok sayıda temel sınıf oluşmasını önlemiş olursunuz. Yok eğer kalıtım 
  kullanırsanız; sınıfınızı kullananlar yukarı yönde tür dönüşünü yapmaları gerektiği 
  hissine kapılabilirler.
 
 21. 
  Sınıf içindeki değerlerdeki değişmeler ve temel sınıflardaki metotların üstüne 
  yazılması için üye değişkenlerini kullanarak sınıfınızın farklı işler yapmasını 
  sağlayın: Eğer sınıfınızdaki bir takım metotlar aldıkları parametre 
  veya üye değişkenlerinin değerlerine göre davranışlarını değiştiriyorlarsa; 
  tekrar bir tasarım yaparak daha iyi sonuçlar elde edebilirsiniz. Yeni tasarımızda 
  değişik sınıf davranışları için türeyen sınıflar ve metotların üstüne yazmayı 
  kullanmanız gerekecektir.
 
 22. 
  Metotlara aşırı yüklemeyi kullanın: Bir metot kendisine geçirilen 
  argümanların tiplerine bakarak çalışmasında koşullu ifadelere yer vermemeli. 
  Bunun yerine iki veya daha fazla aşırı yüklenmiş metot hazırlamak daha uygun 
  olacaktır.
 
 23. 
  Bazen basit bir kompozisyon işe yarar: Herhangi bir havayolu 
  şirketindeki “yolcu konforu sistemi” birbirinden bağımsız elemanlar oluşacaktır: 
  koltuk, klima, video vb.. Bunlarda her bir uçak için yüzlerce oluşturmak gerekecektir. 
  Her bir elemanı private üye değişken yapıp, onların her bir işlemi içinde yeni 
  arayüz oluşturmak çok mantıklımıdır? Onun yerine her bir eleanı public üye değişkeni 
  olarak tanımlamak ve bu üye değişkenlerin metot ve özelliklerine ulaşmayı serbest 
  bırakmak daha akılcı ve yeteri kadar güvenli bir çözüm olur. Öte yandan basit 
  kompozisyonun her zaman doğru bir çözmü olmamasına rağmen bu durumda işe yarayacaktır.
 
 Çevirmenin 
  Notu: Sizin de bildiğiniz 
  gibi herhangi bir dörtgeni belirmek için 4 tane noktaya ihtiyacımız olacaktır. 
  Noktalarımızın isimleri n1, n2, n3 ve n4 olsun. Bunlardan herhangi birinin X 
  ve Y koordinatlarını değiştirmek için Dörtgen sınıfımız içinde 4 veya daha fazla 
  metot tanımlamaya ve Dörtgen sınıfının arayüzünü genişletmek ne kadar mantıklı 
  sizce? Eğer biz noktalarımızı public tanımlarsak onların koordinat değiştirme 
  özellik veya metoduna Dörtgen nesnemizden kolayca ulaşabiliriz ve sadeliği koruyabiliriz. 
  Örnek olarak:
 
 Dörtgen 
  dörtgenim = new Dörtgen();
 
 dörtgenim.n1.X 
  = 25;
 dörtgenim.n1.Y = 43;
 
 kullanımı 
  daha hoş olmazmıydı ?
 
 24. 
  Sizin kodunuzu kullanacak ve bakımını yapacak programcıları düşünün: 
  Sınıfınlarınızı olabildiğince açık, net ve temiz tasarlayın. İlerki muhtemel 
  değişikleri düşünerek olabildiğince kolay değiştirebilir sınıflar tasarlayın.
 
 Çevirmenin 
  Notu: Bilmiyorum siziz başınıza hiç geldi mi? Maalesef çok defa 
  başkasının hızlı ve kötü yazmış olduğu kodu değiştirmek zorunda kaldım. Hele 
  birileri yüzlerce satırlık kodda tek satır yorum yazmadıysa ve değişken isimleri 
  x1, z, t gibiyse çıldırmak elde değil. Aslında kendim bile 3 gün önce yazdığım 
  kodda neler olup bittiğini anlamakta zorluk çekiyordum. Bu durumda bol bol yorum 
  satırı yazmak, değişken, metot ve diğer sınıf üyelerinin isimleri amaçları doğrultusunda 
  yazmak en mantıklısı. Yoksa değil başkası kendi kodunuzun bakımını yaparken 
  bile kendizie hakaret etmemeniz kaçınılmazdır!
 
 25. 
  Çok büyük nesne sendromuna düşmeyin: “Bu ne demek şimdi?” gibi 
  bir soru aklınıza gelecektir. Hemen açıklayalım isterseniz. Bu tür vakalarda 
  genelde uzun süre prosedüerk programlama yaptıktan sonra nesne yöenlimli programlama 
  yeni geçiş yapmışlarda görülür. Genelde belirtileri ise koca programı bir veya 
  iki nesne ile halletmeye çalışmalarıdır. Porgramdaki nesneler programın kendisin 
  değil sadece programdaki değişik ve küçük kavramları temsil etmelidir.
 
 Çevirmenin 
  Notu: Bu birazda müslüman mahallesinde salyangoz satmaya benziyor. 
  Bir ipucu: sistem ile ilgili senaryoda isimler nesne olurken fiiller birer metot 
  olurlar.
 
 26. Eğer 
  sınıf içinde herhangi bir şeyi çirkin veya hoş olayana bir şekilde yaptıysanız, 
  en azından bu çirkinliği sınıf içinde belirtiniz.
 
 Çevirmenin 
  Notu: Yani delikanlı programcı ol canımı ye demek isteniyor burda...:-)
 
 27. 
  Nesneleriniz sadece bir takım verileri tutmak için kullanılmamalı: 
  Sınıflarınızın üye değişkenleri gibi iyi tanımlanmış çeşitli davranışları(metotları) 
  da bulunmalıdır. Genelde veri yapıları verileri tutmak için iyi bir yol olmalarına 
  rağmen çok nadiren sadece verileri tutan sınıflar da tanımlamak ve kullanıma 
  açmak zorunda kalabilirsiniz.
 
 28. 
  Önce Kompozisyonu deneyin: Eğer gerçekten gerekiyorsa kalıtımı 
  kullanın. Kompozisyonun sizin ihtiyaçlarınızı karşıladığı durumlarda yine de 
  kalıtım yapmayı seçerseniz gereksiz yere sistemi karmaşıklaştırmış olursunuz.
 
 29. 
  Kalıtım ve metotlara aşırı yükleme ile davranışlardaki çeşitliliği ve alanlar 
  ile durumdaki değişkenlikleri ifade ediniz: En uçtaki örnek 
  olarak değişlik nesnelerin renklerini belirtmek için o nesneleri Renk sınıfından 
  türetme yerine her birinde renk isimli al anları kullanmak verilebilir.
 
 30. 
  Uyuşmazlıklara dikkat edin: Birbirinden farklı gibi duran iki 
  farklı sınıfın aslında aynı temellere sahip olabilirler. Bu durumda birini diğerinden 
  türetmeniz tavsiye edilebilir. Fakat, tam anlamıyla bir ana ve türeyen sınıf 
  ilişkisi göremediyseniz ikisi için tek bir ana sınıf yapın ve bu ana sınıftan 
  iki sınıfınız da türesin. Belki biraz fazla kod yazmış olacaksınız ama; hem 
  kalıtımın faydalarından yararlanacaksınız hem de tasarımızla ilgili çok önemli 
  bir noktayı keşfedeceksiniz.
 
 31. 
  Kalıtım sırasında sınırlandırmalara dikkat edin: En doğru tasarımda 
  kalıtım ile yeni sınıfa bir takım yenilikler eklenir. Diğer taraftan kalıtımla 
  oluşturulan sınıfa yeni bir şeyler eklenmemiş ve ana sınıftaki bazı yetenekler 
  silinmiş veya kısıtlanmışsa bu tasarıma şüpheyle bakılır. Yalnız “kurallar kırılmak 
  için yapılmıştır” düsturu bazı durumlarda geçerlidir. Eğer çok eski bir sınıf 
  kütüphanesi üzerinde çalışıyorsanız ve hali hazırdaki sınıf hiyerarşisi sizin 
  dilediğiniz gibi değilse türeyen bir sınıfı hiyerarşinin bir üst basamağına 
  taşımanız da gerekiyorsa yapacak bir şey yok. Yani türettiğiniz bir sınıfın, 
  temel sınıftan gelen bir takım özelliklerini kısıtlamanız gerekiyor...
 
 32. 
  Analizdeki paralelliklere dikkat edin: Projelerde oğu zaman 
  herşeyi tam olarak öğrenmeden işe koyulmamız gerekiyor. Bu tür durumlarda olası 
  tüm ihtimalleri düşünüp onlara göre bir çok şey tasarlamak yerine ilerdeki değişmelere 
  göre değişime açık bir sistem tasarlamak daha mantıklı. Ne de olsa neyin nasıl 
  olacağını bilmek için neyin ne olduğunu bilmek gerekir. Nesne yönelimli metodoloji 
  sayesinde ilerde sınıflarınızın değişmesi sistemin bütünlüğüne karşı büyük bir 
  tehlike oluşturmayacaktır.
 
 Çevirmenin 
  Notu: Nesne yönelimli programlanın bu yanını seviyorum. Bir sınıfın 
  arayüzünü değiştirmemek kaydı ile içinde ne yaparsan yap. Kimseyi rahatsız etmediğine 
  de emin olabilirsin. Eğer projenin tamamı hakkında yeteri kadar bilgiye sahip 
  değilsen ve bunu hemen elde etme şansın yoksa bildiğin kısımdan başla ve gerisini 
  sonra yaparsın ama çok dikkatli olmak şartı ile...
 
 33. 
  Eğer güzel bir analiz, tasarım, ve implementasyon yaptığınıza kanaat getiriyorsanız; 
  çalışmanızı adım adım inceleyiniz: İnceleme işelmi için sizin 
  proje grubundan birinin kolundan tutun va masaya oturturun( bunun bir sanışman 
  olmasına gerek yok! ). Onunla birlikte yaptığınız çalışmayı adım adım ve detaylı 
  bir biçimde gözden geçirin. O kişi sizin göremediğiniz bir çok şeyi kolayca 
  görecektir ki bu birlikte çalışmanın size ve patronunuza zaman ve para bakımından 
  epey bir miktar tasarruf ettireceğine emin olabilirsiniz.
 
 Çevirmenin 
  Notu: Açıkcası kendimde bu yöntemi kullanıyorum. Kimse böyle 
  bir yol izle demedi ama işi sağlam yapmaka adına başka bir proje grubundan birini 
  çekiyorum yanıma; kardeş bak bakalım olmuş mu? Eksik gedik veya gereksiz nereleri 
  var sence? İşin kötüsü her defasında kaydeğer değişiklikleri yapmak zorunda 
  kalıyorum. Ama projenin ilerleyen kısımlarında çok rahat ettiğimi de belirtmek 
  isterim...
 
 
 
                Makale:C# Programlama Rehberi - 2 C#, Visual C# ve .NET Ahmet Faruk Nacaroğlu
 | 
        
            |  | 
        
            |  | 
        
            | 
                    
                        
                            
                        
                            Eklenen Son 10 
                            Bu Konuda Geçmiş 10 
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                            Son Eklenen 10 Makale Yükleniyor
                         
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         | 
        
            |  |