SOLID Principles Nedir? (SOLID İlkeleri)

SOLID Prensipleri Nedir?

Yazı dizimize Object Oriented Programming Principles (Nesne Yönelimli Programlama İlkeleri) içerisinde yer alan SOLID ile başlıyoruz. Burada SOLID hakkında ufak bir giriş yapacağım ve Nedir bu SOLID sorusuna ön bir cevap vermiş olacağım.

SOLID isminin oluşmasına neden olan prensiplere de her yeni yazımda değineceğim. Haydi o zaman vakit kaybetmeden SOLID ile ilgili ön bilgileri verelim…

SOLID İlkeleri (SOLID Principles), Nesne yönelimli programlama ve tasarım için ortaya çıkmış (object oriented programming and design) 5 adet ilkeden oluşan bir bağımlılık yönetimi (dependency management) biçimidir.

Peki bu SOLID neden ortaya çıkmıştır diye soruyorsunuzdur elbet. Yukarıda da bahsettiğim üzere 5 ilkenin baş harflerini alarak ortaya çıkmış bir kavram. “Amca Bob” (Uncle Bob) diye de bilinen Robert Cecil Martin’in bir sunumuyla hayatımıza girmiş kendileri, gerçekten de çok iyi etmiş zira şuan “kötü mimari tasarım” diye nitelendirdiğimiz sistemleri bu sayede fark ediyoruz… Aslında SOLID’in neye hizmet ettiğini bulduk öyle değil mi?

Biraz daha tanıyalım bu SOLID’i…

Object Oriented Programming Principles (nesne yönelimli programlama ilkeleri) her developer’ın (yazılım geliştirici) bilmesi ve takip etmesi gereken bir konu. Eğer bu ilkeleri bilir ve uygularsanız inanın çok şey kazanırsınız. Her şeyden önce gerçek bir object oriented programming yazılımcı olursunuz, ne demekse 🙂

Nesne Yönelimli Programlama konusu ile ilgili yazdığım başlarken yazısı için burayı tıklayabilirsiniz…

Maalesef bu ve buna benzer ilkelerden, tekniklerden, tasarım kalıplarından (design patterns) bi haber o kadar çok yazılım geliştirici var ki…

Konu yine içimde yara olan başka bir yere gidecek en iyisi ben konuyu dağıtmadan kaldığım yerden devam edeyim…

SOLID ve Bağımlılık Yönetimi (Dependency Management) Arasında Ne Gibi Bir İlişki var?

Bağımlılık yönetimi (dependency management) kötü oluşturulmuş bir yazılımla çalışırken, esnek olmayan bu kodlar başımıza hiç ummayacağımız şekilde sorun olabilir. Aslına bakarsanız bu ilkelerin ortaya çıkmasına asıl neden de sistemlerin esnetilemez, kırılgan ve sabit olmasından kaynaklanması… Bu unsurların neler olduğuna biraz sonra değineceğim. İşte bu esnek olmayan, kırılgan ve sabit kodlarla dolu bu sistemlerde mevcut işlevi değiştirmek ya da yeni özellikler eklemek çok zor olacaktır. Bir modülün herhangi bir yerini değiştirdiğinizde bağımlılık yönetimi kötü olan bu proje için hataların başlangıcı kaçınılmazdır.

Bu durumlara karşı eğer SOLID ilkelerini uygularsanız daha esnek ve sağlam bir proje alt yapısı oluşturmuş olursunuz. Ayrıca yeniden üretilebilirlik olarak elinizde iyi bir proje olur.

OOP Design Principles (Tasarım İlkeleri) tanımlarken, kötü tasarımdan sıyrılarak profesyonel bir yapıda, belirli kurallar çerçevesinde; esnek, kırılgan olmayan ve tekrar kullanılabilir kod üretmek için oluşturulan kurallar silsilesidir diyebiliriz.

Ayrıca sınıflar (Class) için belirlenmiş ilkeler vardır, Principles of Class Design olarak adlandırılan bu ilkeler sayesinde sınıflar üzerindeki modellemelerde uymamız gereken kurallar belirlenir. Sınıflar için uyulması gereken ilkeler, kötü bir mimari tasarıma neden olabilecek 3 unsuru ortadan kaldırmak amacıyla ortaya çıkmıştır. Yukarıda da bahsettiğim bu unsurları biraz açalım isterseniz:

  • Rigidity (Esnemezlik): Oluşturulan mimari tasarımın geliştirmeye ve yeni eklentilere (plug-in) açık olmamasıdır.
  • Fragility (Kırılganlık): Projenin herhangi bir yerinde yapacağınız bir değişikliğin başka bir parçasında sorun çıkarabilmesidir.
  • Immobility (Sabitlik): Geliştirilen parçaların/modülün tekrar kullanımına uygun olmamasıdır.

Yukarıda saydığım bu 3 unsur genel itibari ile bağımlılık seviyesi yüksek sınıf yapılarında görülür. Tabi birbirine sıkı sıkıya bağlı (tight coupling) bu sınıf yapılarında esneklikten, sağlamlıktan ya da tekrar kullanılabilirlikten söz edemeyiz.

O zaman bu ilkeler için şu sonuca vararak en olası tanım yapılabilir, sınıflar arası bağımlığı azaltmak… Loose Coupling konusunda bunu ayrıca irdeleyeceğiz…

SOLID Açılımı ve Tanımı Nedir?

Sürekli bir SOLID tutturduk gidiyoruz, öyle ya ne açılımından bahsettim ne de bu 5 ilkeden.. O zaman işte karşınızda SOLID İlkeleri:

  • SSingle Responsibility Principle (SRP): Nesnenin sadece bir sorumluluğu olmalıdır, yani olası bir değişiklikte tek bir nedene dayandırılmalıdır.
  • OOpen/Closed Principle (OCP): Nesne genişlemeye açık ancak değişikliklere kapalı olmalıdır.
  • LLiskov ‘s Substitution Principle (LSP): Programdaki nesnelerin, programın çalışmasında sorun yaratmadan kendi alt örnekleri ile değiştirilebilir olmasıdır. Bu aynı zamanda sözleşmeyle tasarım (Design by Contract ) olarak bilinir.
  • IInterface Segregation Principle (ISP): Nesnelerin ihtiyaç duymadıkları metodların Interface’lerinden münkün olduğunca ayrıştırılmasıdır.
  • DDependency Inversion Principle (DIP): Yüksek seviyeli sınıflar, düşük seviyeli sınıflara bağlı olmamalı, her ikisi de soyut kavramlara bağlı olmalıdır.

Evet dostlar, bize gerçekçi bir bağımlılık yönetimi sağlayan SOLID İlkelerine giriş yaptık, yukarıda sıraladığım bu 5 ilkenin her birinin detaylarla, C# kod örnekleri ve görsel anlatımla desteklenmiş yazılarını diğer makalelerimde bulabileceksiniz.

9
Kimler Neler Demiş?

avatar
7 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Volkan Barbaros GürcanAli K.cüneyTselim yurtnuran Recent comment authors
  Subscribe  
En Yeniler Eskiler Beğenilenler
Bildir
Ali K.
Ziyaretçi
Ali K.

Örnek kod çalışmalarını bekliyoruz hocam, hatırlatmak istedim 🙂

cüneyT
Ziyaretçi
cüneyT

Çok açıklayıcı olmuş. Teşekkürler.

selim yurt
Ziyaretçi
selim yurt

Yazılarınızdan oldukça faydalanıyorum, teşekkürler.

nuran
Ziyaretçi
nuran

Oncelikle elinize sağlık. Bilgi için teşekkürler.
Fakat makale solid ilkelerinin oraya kadar çok iyi olmuş.
Solid ilkeleri çok yüzeysel şekilde sadece çeviri olmuş. Daha iyi olmalıydı.
(Yapıcı yorum) saygilarimla

ebrar snp
Ziyaretçi
ebrar snp

Hocam merhaba, bu içeriklere ait örnek kodlar yayınlayacak msınız? Malum teorik olunca havada kalıyor.

berna y.
Ziyaretçi
berna y.

Teşekkürler hocam.

ziya aktürk
Ziyaretçi
ziya aktürk

giriş olarak bile doyurucu, teşekkürler.