Tasarım Desenleri Nedir ?
Tasarım desenleri, ilk olarak 70’li yılların sonlarında bir mimar olan Christopher Alexander tarafından tanıtılmaya başlandı. Yazar bu yıllarda konuyla ilgili “A Pattern Language” ve “A Timeless Way of Building” isimli iki tane de kitap yayımladı. Daha sonra onun fikirleri yazılım tasarımına aktarılır. Yazılım tasarımları, 1987 yılında OOPSLA konferansında ele alındı. 90’lı yılların başlarında ise “Eric Gamma”, “Richard Helm”, “Grady Booch” ve “Kent Beck” gibi çeşitli yazarlar tarafından çeşitli yazı ve makalelerde konu edildi. 1994 yılında ise, “Erich Gamma”, “Richard Helm”, “Ralph Johnson”, ve “John Vlissides” isimli yazarların “Design Patterns: Elements of Reusable Object-Oriented Software” isimli kitaplarını yayınladıktan sonra popülerlik kazandı. Kitapta 23 adet tasarım deseni açıklanmaktadır. Kitabın bu yazaları genellikle 4 adam ( gang of four ( GoF ) ) şeklinde adlandırılırlar.
Sınıf Tasarım Prensipleri
Tek Sorumluluk Prensibi:
Tom DeMarco’nun 1979 yılındaki “Structured Analysis and Systems Specification” kitabında yer alan prensiptir. Her sınıf yalnızca tek bir sorumluluk alanına sahip olmalıdır. Sınıfın değişmesi için tek bir nedeni, tek bir sorumluluğu olmalıdır.
Açık/Kapalı Prensibi:
Bir sınıf genişlemeye açık, değişmeye kapalı olmalıdır. Yeni özellik, yeni kod eklenirken, halihazırda olan kodları bozmamalıdır. Fakat kolayca genişlemeye açık olmalıdır. Bunu soyut sınıflar kullanarak gerçekleştirebiliriz.
Liskov Yerine Kullanma Prensibi:
Alt sınıflar, üst sınıfların yerine kullanılabilmelidirler. Alt sınıfların üst sınıfla aynı davranışı göstermelidir. Fakat bazı durumlarda bu prensip çiğnenir. Bunlardan biri de dikdörtgen-kare sorunudur. Kare de bir dikdörtgen olduğu için kare sınıfını dikdörtgen sınıfından türetirsiniz. Dikdörtgen sınıfında uzunluk ve genişlik değiştiren yordamlar bulunur. Fakat kare sınıfında bu yordamlardan birini gerçekleştirirken, diğer kenarın da aynı uzunlukta olmasını sağlamalısınız. Bu durumda üst ve alt sınıf aynı davranışı göstermemektedir.
Tersine Dönen Bağımlılık Prensibi:
Detaylar üst sınıflara ( arayüz sınıfı veya soyut sınıf ) bağlı olmalı. Üst sınıflar alt sınıflara bağlı olmamalı. Bunu önlemek için üst sınıf düzeyi arttırılarak, detay alt sınıflar, biraz daha az detaylı ama eski üst sınıftan daha detaysız, yeni oluşturulan üst sınıflardan türetilirler. Yani alt sınıfın detaylarına uysun diye, üst sınıfın yapısı çok detaylandırılmamalıdır.
Arayüz Ayırma Prensibi:
Sınıflar yalnızca ihtiyaç duyduğu arayüz sınıflarından türetilmelidir. Yani uzun ve genel bir arayüz sınıfındansa, parçalara bölünmüş ve özelleşmiş arayüz sınıfları yaratmak daha yerindedir. Böylece sınıflar gereksiz ve işine yaramayan bir çok yordamı olan arayüz sınıflarından türemezler.
Tasarım desenleri
Tasarım desenleri, kurucu, yapısal ve davranışsal olmak üzere üçe ayrılır.
Kurucu tasarım desenleri, nesne yaratma görevini sistemden soyutlar. Sistemi nesnelerin belli kural ve ön şartlara göre yaratılmalarından bağımsız kılar. Sisteme nesnelerin nasıl, hangi nesne, ne zaman yaratılacak gibi konularda esneklik sağlarlar. Nesnelerin yaratılma sorumluluğunu, sistemin mantığından ayırır.
Yapısal tasarım desenleri, sınıf ve nesnelerin daha büyük yapılar oluşturmak için nasıl bir araya geldikleriyle ilgilenirler. Sisteme yeni bir özellik getirme, sistemin genişlemesi konusunda sisteme esneklik kazandırırlar.
Davranışsal tasarım desenleri, algoritmalar ve sorumlulukların nesneler arasındaki geçişleriyle ilgilenirler. Nesnelerin birbirleriyle nasıl iletişim kurduklarını incelerler. Çalışma zamanında, karmaşık kontrol akışlarını belli bir disipline bağlamaya çalışırlar.
Kaynak
www.tasarimdesenleri.com