0

Merhaba, geliştirdiği her uygulamada nesne yönelimli programlama tekniklerini kullanan yazılımcı dostlarım! Bu yazımda sizlere nesne yönelimli tasarım ilkelerinden bahsedeceğim. Yani temel olarak; “projede kullandığım sınıfları nasıl daha iyi nasıl tasarlarım” konusuna eğileceğiz.

Ele aldığımız bu konu da, birkaç makaleden oluşacak büyük olasılıkla. Her bir makalede, bir prensibi anlatmayı düşünüyorum. Sonrasında da, bu prensiplerin ortaya çıkardığı bazı problem çözüm yöntemlerini göreceğiz birlikte.

İnsanoğlu, geliştirdiği her şeyde deneme – yanılma yöntemi izleyen bir varlık. Bunu çevrenizdeki her ürün için düşünebilirsiniz (gerçi sadece ürün değil, yaşam biçimlerimiz için de geçerli bu). Bir cihaz ilk ortaya çıktığında daha az işlevsel ve daha çok sorunlu bir durumdadır. Ancak zamanla, (deneme yanılmayla) ek özellikler eklenerek, işlevselliği arttırılarak mükemmelleşme yolunda ilerler. Gelin görün ki, söz konusu cihazın yeni bir modelini üretmeye girişen her mühendis sıfırdan başlayamaz. Bir önceki versiyonlardan edinilmiş olan bilgiyi kullanarak yeni modeli ortaya çıkarmaya çalışır.

Mesela bir aşçıyı ele alalım. Bu mesleğe atılırken, kendisinden önce keşfedilmiş yemekleri ve bu yemek yapma yöntemlerini biliyor olması beklenir. Biraz da yeteneği varsa harikalar yaratan bir sanatçıya dönüşebilir. Peki bu örnekten devam edersek iyi yemek nasıl yapılır sorusundan önce ne aşçımızın neyi bilmesi gerekir? Eğer “Kötü yemek nedir” sorusuna cevap verebiliyorsa, iyi yemeği yapmaya bir adım daha yaklaşmış demektir. İşte bu “kötü yemek” tanımı da deneme – yanılma yöntemleri ile tespit edilmiştir.

Bir an fark ettim de, yine felsefenin dibine vurmuşuz. Toparlayalım. Nesne Yönelimli tasarımlarımızı nasıl iyileştiririz sorusuna geçmeden önce kötü tasarım nedir bunu kavramamız lazım. Bu konuda büyük üstat Martin Fowler’ın tanımına ve Şişman Adam’ın anlatımına başvuracağız.

Martin abiye göre kötü tasarımın üç bulgusu vardır. Önce bunları anlamaya çalışalım.

1.Sertlik

Tasarladığınız sınıflar içerisinde mimari ya da fonksiyonel değişiklik yapmak çok zorsa ve zaman kaybettiriyorsa (ki yazılım projelerinde vakit nakittir), bu tasarım sorunlu bir tasarımdır. Bir sınıfta yaptığınız değişiklik, o sınıfa bağlı diğer sınıflarda da değişiklik yapmanızı zorunlu kılar. Yani nesneler birbiriyle sıkı sıkıya bağlıdır. Hiç çekilmez bir durumdur bu. Çünkü değişimin nerede biteceği (ne kadar süreceği) öngörülemez. Her şey arapsaçı gibi karmakarışık bir durumdadır. Zaman harcadıkça, patrondan veya müşteriden zılgıt yeme ihtimaliniz artar.

2.Kırılganlık

Sertlik kusuru ile yakından ilgilidir. Yaptığınız değişikliklerin etkilerini asla tahmin edemezsiniz. Yani, acaba yaptığınız değişiklik işe yaramakta mıdır? Bu kocaman soru işareti size hüzün verir çünkü bir dahaki bozulmanın nereden (hangi sınıftan) kaynaklanacağını bilemezsiniz. Tasarımınız, pamuk ipliğine bağlı bir vaziyettedir. Her an devrilebilir!

3.Hareketsizlik

Yazdığınız nesnenin en mühim özelliklerinden biri, yeniden kullanılabilir olmasıdır. Eğer bu zor ise, tasarımınız sıkıntılı demektir. Bunu şöyle ifade edelim; başka uygulamalarda da kullanabileceğiniz birçok faydalı modülden oluşan büyük bir projeniz olsun. Fakat eğer bu modülleri sistemden ayırmak büyük bir risk taşıyor ise hareketsiz bir tasarımınız var demektir. Maalesef, çoğu tasarım bu dertten mustariptir.

İşte mimari açıdan kötü tasarlanmış bir uygulamanın sorunları bunlar. Peki, bu sorunların üstesinden nasıl gelebiliriz acaba? İşte tam da bu noktada, 5 adet prensip karşımıza çıkıyor. Bunların isimleri ise şöyle:

  • Tekil Sorumluluk Prensibi (Single Responsibility Principle)
  • Açıklık – Kapalılık Prensibi (Open – Closed Principle)
  • Liskov’un Yer değiştirme prensibi (Liskov’s Substitution Principle)
  • Interface Ayrım Prensibi (Interface Segregation Principle)
  • Bağlılığı Ters Çevirme Prensibi (Dependency Injection Principle)

İngilizcelerinin ilk harfi ile SOLID, bizim sağlıklı tasarımlar yapmamıza olanak sağlayan prensipler bütünüdür sevgili dostlarım.

Evet. Bundan sonraki yazılarımızda, bu prensipleri şahane örneklerle inceliyor olacağız.

O zamana kadar ayağınızı sıcak, başınızı serin tutun.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Bu İçeriğe Tepkin Ne Oldu?
  • 1
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 1
    sevdim_
    Sevdim!
  • 1
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 1
    k_zd_m_
    Kızdım!

1980 İstanbul doğumlu Türkay Ürkmez, 2000 yılında Eskişehir Anadolu Üniversitesi Mekatronik bölümünden mezun oldu. 1998 yılından bu yana Microsoft ürünleri üzerine uygulama geliştiren Türkay’ın en sevdiği şeylerden biri uzmanlık alanları konusunda eğitsel makaleler hazırlamak ve seminer vermektir. Kendisi ayrıca MCT, MCSD, MCPD ve MCAD sertifikalarına sahiptir.

Yazarın Profili
İlginizi Çekebilir
NHibernate Nedir?

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir