Yazılım sektörü gün geçtikçe ilerliyor. İlerleyen bu sektörde herkes kod yazmaya başlıyor ve yazılan kodlar bir birinden çok farklı yapılarda olabiliyor. Bu farklı yapıları okuyup anlamak ve geliştirmek gün geçtikçe yazılımcılar için zorlaşıyor. İşte bu zorluğu ortadan kaldırabilmek adına uluslar arası kapsamda bazı prensipler benimseniyor. Bu prensipler tam anlamı ile yazılımcılara işi kolaylaştırmak için yapılmaktadır. Bu yazıda bu prensiplerden birisi olan SOLID prensibini ele alacağım.
Solid Nedir?
İlk paragrafta kısaca bahsettiğim gibi kendisi bir kod yazma prensibidir. Amacı yazılan kodun okunabilirliğini arttırmak, güncellenmesini kolaylaştırmak ve esnek bir kod yapısı oluşturmaktır. Temelinde Object Oriented Programming yani nesne tabanlı programlama bulunmaktadır. Solid yapısında 5 adet kural bulunmaktadır. Şimdi bu kuralları sırası ile ele alalım.
Single Responsibility
Bu İngilizce kelime ikilisini Türkçe’ye çevirmemiz tek sorumluluk mümkündür. Her bir sınıfın değişmesinin sadece bir nedeni olmalıdır. Her bir metodun sadece bir görevi olmalıdır. Bir metot aynı anda birden fazla modelde değişiklik yapamaz. Uzun bir fonksiyon yazmak yerine parçalı yapıda bir kaç parça fonksiyon yazmak bizim için hedeftir. Tahmin edebileceğiniz gibi bu prensip sayesinde projede yapılan değişiklikler sonrası tahmin etmediğimiz durumların ortaya çıkması engellenmektedir.
Open / Closed
Oluşturduğumuz nesnelerin gelişmeye açık ancak değişime kapalı olması hedeflenmiştir. Bu prensibi bir örnek ile açıklarsam bence çok daha hızlı bir şekilde anlaşılacağım. Arabayı bir nesne olarak düşünelim ve bu nesnenin vaz geçilmez özellikleri vardır. 4 adet tekeri ve 1 adet direksiyonu olması gibi. Nesne değişime kapalı olduğu için bu özellikleri değiştiremeyiz ancak araba nesnemiz gelişmeye açık olduğundan dolayı arabamıza bir müzik seti takabiliriz. Nesnelerimiz gelişime, yeniliğe açıktır ancak değişime kesinlikle kapalıdır.
Liskov’s Substitution
Bu prensip miraslar ile alakalıdır. Miras sistemini kullanan sınıflar arasında bu prensip kullanılmalıdır. Herhangi bir sınıfın başka bir sınıftan miras aldığını düşünelim. Miras alan sınıf miras aldığı sınıfa ait yani bir üst nesil olan nesneye ait tüm özellikleri kullanmalıdır. Bir üst nesneyi değiştirmemelidir. Kendisine ait özellikleri olabilir ancak bir üst nesilden bu özel özellikler bağımsızdır. Yeri geldiğinde her 2 nesneyi de farklı birer modül gibi ayırabilmelisiniz.
Interface Segregation
Herhangi bir nesne kullanmadığı bir arayüzü kullanmaya maruz bırakılamaz. Herhangi bir nesne referans aldığı arayüzün her metodunu kullanmaya maruz bırakılamaz. Arayüzler her nesneye uyum sağlaması açısından bu arayüzü referans alan tüm nesnelerin kullanmadığı metotlar gereksiz yere eklenmemelidir.
Dependency Inversion
Miras alınan 2 nesneyi yeniden düşünelim. Bu 2 nesneden üst hiyerarşide olan alt seviye olana bağlı olmamalıdır. Alt sınıfta yapılan değişiklik üst seviyeyi etkilememelidir.
Çocukluğumdan beri arabalara olan ilgim babam sayesinde başlamıştır. Araba manyağı seviyesinde bir ilgim var ancak bunu her ortamda dile getirmem. Teknolojiye ve bilgisayara olan ilgim kendimi tanımaya başladım başlayalı oldu. Şimdi ise kendimce kod yazabilen bir bilgisayar mühendisi olarak çalışıyorum.