Software Design Principles (Yazılım Tasarım Prensipleri)

  Tasarım prensipleri, yazılım geliştirirken hatalı yapılan tasarımları önlememize ve ideal bir yazılım oluşturmamıza yardımcı olmak amacıyla hazırlanmış bir rehberdir. Bu prensipler Robert Martin tarafından ilk olarak “Agile Software Development: Principles, Patterns, and Practices” kitabında bir araya getirilmiştir. Hazırlanan rehbere göre kötü tasarımın önüne geçmek için uzak durulması gereken 3 önemli vaka bulunmaktadır;    …Read moreRead more

Dependency Inversion Principle (DIP)

“High-level modules should not depend on low-level modules. Both should depend on abstractions.” “Abstractions should not depend on details. Details should depend on abstractions.” Prensip temel olarak, üst modüller (sınıflar) ve alt modüller (sınıflar) arasında kuvvetli bir bağ olmamasını gerektiği ve alt ve üst modüller (sınıflar) arasında sadece soyut (abstract) bir bağ olmasını önermektedir. Örnek…Read moreRead more

Interface Segregation Principle (ISP)

“Clients should not be forced to depend on methods they do not use.” Prensip temel olarak, genişletilecek sınıfların kullanmayacağı, metodlar yada özellikleri içeren interface’leri yada ana soyut (base abstract) sınıfları; birbiriyle olan ilişkileri (cohesive) ve işlevlerine göre ayrı interface’lere ayırmamız gerektiğini belirtir. Peki böyle bir işlemin bize ne anlamda yararı olacaktır? Örneğin bir sınıf tasarladığımızda…Read moreRead more

Liskov’s Substitution Principle (LSP)

“An object should be substitutable by its base class (or interface). Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.” Türetilmiş sınıflar türetildikleri ana sınıf (base class) ile yer değiştirilebilir olmalıdır. Bir başka deyişle türetilen sınıflardan oluşturulan nesneler türetildikleri ana sınıfların (base class)…Read moreRead more

Open Closed Principle (OCP)

”Software entities (Classes, modules, functions) should be OPEN for EXTENSION, CLOSED for MODIFICATION.” Geliştirilen sistemlerin yaşam süreleri boyunca değişimlere uğrayabileceği göz önüne alındığında, bu prensip genişletilmeye açık ama değişikliğe kapalı varlıkların (Sınıf, Method vs.) kullanılmasını önerir. Peki yazılımın kaynak kodunu değiştirmeden, geliştirdiğimiz modullerin böyle bir davranış sergilemesini sağlayabiliriz? Bu soruyu soyutlayarak (abstraction) diye cevaplayabiliriz. Bir…Read moreRead more