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;
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...
Hiç yorum yok:
Yorum Gönder