Tasarım desenlerinin yazılım sistemi sürecine sağladığı diğer katkılar nelerdir? (Motivasyon, Takım içi iletişim, Kod Kalitesi)

Yazılım tasarımının ve geliştirilen kodların kaliteli olması (Yaygın ve bilenen yaklaşımlar), iş tatmini açısından önemlidir. Diğer bir bakış açısıyla, yazılım sistemi geliştirme kalitesi düşük olduğunda, iş tatmini de düşmektedir. Edindiğimiz tecrübelere göre, kısa zamanda iş arayışının sebeplerinden bir tanesi de, yapılan işin düşük kalitede olmasıdır.

Tasarım desenleri, tecrübeli kişiler arasında ortak bir terminoloji ve iletişim dili olarak kullanılmaktadır. “Sistemin şu kısmında, bu tasarım desenini kullandık?”, “Bu problemin çözümü için, şu deseni kullanabilirsiniz?” gibi. Tasarım desenlerinin kullanıldığı ilgili bölümlerde, kodun anlaşılabilirlik seviyesi de yükselmiş olacaktır. Bireysel olarak tecrübe edinmiş kişiler, tüm takım çalışanları ile bu tecrübelerini paylaşarak, yazılım geliştirme süreçlerine katkı sağlayabilirler.

Prosedürel dillerden Nesne temelli dillere geçiş dönemi ve tasarım desenleri

Tasarım desenlerinin yayına hazırlandığı dönemi incelediğimizde, prosedürel dillerden(Pascal, Cobol vb) nesne temelli dillere yaygın geçiş döneminin ilk zamanlarıdır. (90 yılların başı) Bu geçiş döneminde; Nesne temelli yaklaşımda yeni olanlar, daha önceki bilgilerini kullanarak kod yazmışlardır. Özellikle; sınıfı sadece bir fonksiyon kütüphanesi gibi görüp, çok fazla metot yazmak gibi. Bu şekilde geliştirilen yazılımların, kod kalitesi ve sürdürülebilirliği ile ilgili sıkıntılar yaşanmış. Bu sıkıntılara çözüm olabilmek için, nesne temelli yaklaşım tüm detayları ile irdelenmiş, faydalı çözüm yaklaşımları geliştirilmiş ve paylaşılmıştır. Tasarım desenleri yayını böyle bir zamanın mahsülüdür. Bu alanda verilen diğer eserlere de baktığımızda, 90’lı yıllar, nesne temelli yaklaşımın altın çağı olarak adlandırılabilir. Hatta, bu alanda derinleşmek isteyen kişiler, bu zaman diliminde yazılan eserlere müracaat etmelidir.

Özetle; İlk adaptasyon dönemi geri kalmıştır. Bugün itibarı ile, biz hala o geçiş dönemlerinde yapılan hataları tekrarlamamalıyız. Çözüm bekleyen güncel problemlerimiz var. Geçmiş kazanımları çok iyi öğrenmek ve üzerine yeni şeyler bina etmek zorundayız.

Tasarım desenlerinin nesne temelli tasarıma katkıları nelerdir?

Tasarım desenleri, bir taraftan tekrar eden problemlere denenmiş ve kaliteli çözüm yaklaşımları sunarken, diğer taraftan da nesne temelli yaklaşımın doğru anlaşılması ve kullanılmasına önemli katkılar sağlamıştır.

Nesne,Sınıf,Arayüz,Kalıtım,Çok şekillilik gibi temel özellikleri hepimiz biliyoruz. Pekala bunları çözüm aşamasında nasıl kullanacağız? Elimizde un, yağ ve şeker var. Nasıl lezzetli helva yapacağız? Her bir özelliği kullanırken, bunların sınırları neler olacak? Sınıflara çok fazla sayıda metot eklediğimizde, bir çok sınıfa somut referanslar ile bağımlılık oluşturduğumuzda, uzun boylu kalıtım hiyerarşileri oluşturduğumuzda, bizi kim tutacak? Kullandığımız geliştirme ortamları, bizi bu anlamda kısıtlamıyor.

Tasarım desenleri ile öğrendiğimiz çözüm yaklaşımlarında; Düşük Bağımlılık(Loose Coupling), Yüksek Yakınlık(High Cohesion), Delegasyon(Delegation, Composition), Sorumluluğun dağıtılması(Single Responsibility) ve ilginin ayrıştırılması (Seperation Of Concerns) ve diğer SOLID prensiplerini(OCP,ISP,LSP,DIP) görürüz. İyi bir nesne tasarımı için gerekli olan bu prensipler, tasarım desenlerinde örnekleri ile bize öğretilmiştir.

Tasarım desenlerinden yazılım desenlerine

Tasarım desenleri (GOF Patterns) 23 adettir. 23 farklı probleme çözüm sunulmuştur. Bizim problemlerimizin sayısı ise, çok daha fazladır. Tasarım desenlerinin kendisinden daha çok, ortaya koyulan yaklaşımlar ve bilinen nesne temelli yaklaşım kavramlarının kullanımı bizim için daha değerlidir. Tasarım deseni yayınlanmamış problemlerimizin çözümünde, biz de bu yaklaşımları kullanarak problemlerimize çözüm getirebiliriz.

Tasarım desenleri, nesne temelli yazılım alanında çok kullanılmış ve önemli bir referans olmuştur. Ama, konuya daha üst düzeyden bakabilirsek, bunlar yazılım desenidir. Yazılım alanında, öncesinde ve sonrasında farklı desenler tanıtılmıştır. (Mesajlaşma,Entegrasyon,Veri erişim desenleri) Mesela; MVC deseni, Norveçli bilgisayar uzmanı Trygve Reenskaug tarafından, Smalltalk-80 ortamında çalışırken geliştirilmiştir. (1979)

Yazılım alanında uzmanlaşmak isteyen herkesin, yazılım desenlerini devamlı bir şekilde araştırması, incelemesi ve öğrenmesi çok önemlidir. “Bu problemler sadece bizim problemlerimiz değildir. Problemlerimiz başkaları tarafından çözülmüş olabilir.” anlayışını benimsemeliyiz. İnşallah, bir gün siz de bir yazılım desenini, alanımıza kazandırabilirsiniz.

Tasarım desenleri nedir? (GOF Design Patterns)

Tasarım deseni, özel bir alandaki bir tasarım problemi için geliştirilen çözümün dokümantasyonudur. Bu fikir, Christopher Alexander isminde bir mimar tarafından, mimarlık (inşaat) alanında tanıtıldı. “Bu dilin elemanları desenlerdir. Her bir desen, ortamda devamlı tekrar eden bir problemi tanımlar. Sonra, o probleme temel bir çözüm sunar. Aynı şeyi iki defa yapmadan, bu çözümü milyon defa kullanırsınız.” Christopher Alexander Bu yaklaşım, nesne temelli tasarım alanına da uygulandı. Meşhur tasarım desenleri kitabı ile de önemli bir kaynak olarak kullanıma sunuldu. (Design Patterns: Elements of Reusable Object-Oriented Software. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) (1995)

Tasarım deseni yapısı (dokümantasyonu) şu şekildedir : ( Adı, Amacı, Problem, Çözüm Yaklaşımı [Desen Elemanları, Diagram, Uygulama, Sonuçlar/Dikkat edilmesi gereken durumlar]) Bu çalışma, nesne temelli tasarım alanındaki en önemli gelişmelerden birisidir. Tekrar eden problemlere, denenmiş ve tecrübe edilmiş çözümler sunmuştur. Nesne temelli yaklaşımın daha iyi seviye de öğrenmek için önemli bir referanstır. Nesne Temelli yaklaşım eğitimlerinde, tasarım desenlerinin anlatılması, konunun daha iyi öğrenilmesine katkı sağlayacaktır.