Yazılım Dünyası 3 C# Programlama Rehberi Yazı Dizisi 2


C# Programlama Rehberi yazı dizimize 2. günü ile devam ediyoruz.

11. Sınıfları olabildiğince küçük tasarlayın: Her bir sınıfın tek ve iyi belirlenmiş bir amacı olmalı. Eğer sınıf tasarımınız çok karmaşık ve uzun olduysa onu daha basit parçalara ayırmayı deneyin. Herhangi bir sınıfın ne kadar sade olduğunun göstergesi: onun eleman sayısı( metotler, üye değişkenleri vs.. ) ve üzerinde yapılan değişiklerin çok olmasıdır. Bu tür durumlarda sınıfı bölerken bir kaç ipucu olarak şunları kullanın:
• Karmaşık switch yapısı: çok biçimliliği kullamayı deneyin.
• Çok sayıda ve değişik türden işleri yapan metotlar: değişik sınıflar oluşturmayı deneyin.
• Çok sayıda ve değişik türden sınıf üye değişkenleri: değişik sınıflar oluşturmayı deneyin.


12. Çok sayıda argüman alan metotlara dikkat edin: Metotları çağırmak karmaşık hale geldiği gibi, kod içinde metodu çağıran kısımları da okumak ve bakımını yazmak güçleşecektir. O zaman metoda argüman olarak nesne geçirmeyi deneyiniz.

Çevirmenin Notu: Hatta sırf bu amaçla sınıf veya yapı dahi oluşturabilirsiniz. Böylelikle sadeliği korumuş ve uzun vadede çok değişik kazanımlar elde ettiğinizi gözlemleyeceksiniz.

13. Kendinizi tekrarlamayın: Eğer türeyen sınıflardan bir çoğunda tekrarlanan kod parçası olduğunu gözlemlerseniz; o kod parçasını temel sınıfa koyunuz ve onu temel sınıftan çığırın. Bu sayede sadece kodun daha kısa olmasını sağlamazsınız, ayrıca tekrar eden ksımlardaki değişikler için tek bir örneğini değiştirmeniz yeterli olur. Bazen de böyle bir keşif sizin arayüzünüze değerli bir katkı da sağlacaktır.

Çevirmenin Notu: Bir çok nesne yönelimli programlama anlatan kaynaklarda geçen gemotrik şekillerle ilgili bir sınıf kütüphnesini tasarımından örnek verelim. Diyelim sizin kare, dikdörtgen ve eşkaner dörtgen isimli üç sınıfınız var. Bu üç sınıf için gerekli olan Çiz() metodunu herbirinde tekrar tekrar yazmaktansa, üçünün birlikte türediği dörtgen sınıfında yazmak ile daha az kod yazmış olursunuz. İleride ParaleKenar isimli bir sınıfa ihtiyacanız olunca; bu sınıf için tekrardan Çiz() metodunu yazmaktan kurtulursunuz. Hatta ilk versiyonda tek bir kalem (sabit kalınlık ve renk) ile çizim yaparken ilerki versiyonlarda farklı kalemler( kalınlık ve renk detaylarıyla) ile çizmek gibi özellikler ekleyince tüm dörtgenler için tekbir Çiz() metodu tanımlamanın size kazandıracağı zamanı ve sistemin sadeliğini düşünün bir!

14. switch ve çoklu if-else yapılarını gözlemleyin: Bunlar genelde tip-kontrollü kodlamanın göstergesidir. Yani, siz tip bilgisine göre hangi kodu çalıştıracağınıza karar veriyorsunuz(genelde tip bilgisi belli olmayabilir) demektir. Bu tür durumlarda switch ve ve if-else yapıları yerine kalıtım ve çok biçimliliği kullanın. Çok biçimli bir metot sizin yerinize tip kontrolünü yapar ve argüman tipine göre gerekli işleri yapar veya türeyen sınıflar vasıtası ile yaptırır. Yine kodunuz daha kolay okunabilir ve kolayca genişleyebilir bir hal alır.

Çevirmenin Notu: Yine gemoetrik şekiller ile ilgili sınıf kütüphanemizi düşünelim. Çiz() metodu 3 farklı parametreye bağımlı olarak işini yaptığını varsayalım. Bunlardan birincisi şekil, ikinicisi kalem ve üçüncüsü ise çizgi tipi (kesikli, noktalı, normal veya herhangi başka bir özel şekillerden biri..). Sizin de farkedeceğiniz gibi minumum olarak bizim şekil parametresidir. Diğerleri ise seçimliktir(opsiyonel).

Bu durumda tüm parametre kombinasyonlarında göre ya dört farklı metot yazmalıyız ki bunların isimleri farklı olmalıdır:

a. Çiz_Tam( şekil, kalem, çizgiTipi )
b. Çiz( şekil )
c. Çiz_Kalemli( şekil, kalem )
d. Çiz_Şekilli (şekil, ÇizgiTipi )

Ya da tek bir çiz metoduna kalem ve çizgiTipi nesnelerinin birini veya ikisini null olarak geçirmeli ve biraz karmaşık if-else ifadesi kullanmalıyız. Her iki durumda da tasarmızın karmaşıklığı ve kullanım zorluğu olduğu açıktır. Ama biz çok nesne yönelimli programlamanın en temel özelliklerinden biri olan biçimlilik(polymorphism) ile bu tür sorunları kolayca aşabiliriz. Metot isimleri aynı kalmak şartı ile parametre lsitelerini değiştirince Çiz metodunun 4 farklı hali şunlar olacaktır:

a. Çiz( şekil, kalem, çizgiTipi )
b. Çiz( şekil )
c. Çiz( şekil, kalem )
d. Çizi( şekil, ÇizgiTipi )

15. Tasarım aşamasında, değişebilir ve değişmeyen parçaları ayırmaya çalışın: Sistemde değişebilir elemanların olup olmadığını araştırın. Değişebilirleri ayrı sınıflar olarak tasarlayın ki ilerde bunlardaki değişmeler tüm sistem tasarımını veya önemli bir bölümünü değiştirmeye zorlamasın sizi.

DEVAMI ÇOK YAKINDA...


Yorumlar