Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
C# Programlama Rehberi - 2
#1
16. Temel fonksiyonelitelikleri geniþletmek için sýnýf türetmeye baþvurmayýn: [/COLOR]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 keþ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ý eklemeniz 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ýþtýrsa bile? Ýlk hali ile Çiz( þekil ) olan metodumuzun sonradan Çiz( þekil, kalem ) versiyonuna ihtiyaç duyarsak Çiz( þekil ) metodunu koruyun. Zaten nesne yönelimli programlama 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 kompozisyonu 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 elemaný 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.

[COLOR="blue"]Ç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 koordinatlarýný deðiþtiren özelliðe veya metoduna Dörtgen nesnemizden kolayca ulaþabiliriz ve sadeliði koruyabiliriz. Örnek olarak:

Code:
Dörtgen dörtgenim = new Dörtgen();

dörtgenim.n1.X = 25;
dörtgenim.n1.Y = 43;

kullanýmý daha hoþ olmazmýydý ?[/COLOR]

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 kendinize 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ürel programlama yaptýktan sonra nesne yönelimli 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. Programdaki nesneler programýn kendisini 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 alanlarý 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...
Reply
#2
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þlemi için sizin proje grubundan birinin kolundan tutun va masaya oturturun( bunun bir danýþ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...
Reply


Possibly Related Threads...
Thread Author Replies Views Last Post
  C Programlama Diline Giri Serkan006 0 354 01.05.11, 01:08:42
Last Post: Serkan006
  C Programlama Dilinde lk Programmz Serkan006 0 343 01.05.11, 01:08:28
Last Post: Serkan006
  C Programlama Diline Giri Serkan006 0 366 01.05.11, 00:44:46
Last Post: Serkan006
  C# Programlama Rehberi - 1 TazZ 3 675 19.02.11, 17:16:06
Last Post: TazZ
  C# Programlama Rehberi - 3 TazZ 0 611 19.02.11, 03:46:01
Last Post: TazZ



Users browsing this thread: 1 Guest(s)