SOLİD Prensipleri ve Örnekleri
SOLID Prensipleri: 2000 Yıllarında Robert Cecil Martin kod karmaşıklığına, tekrar eden kodlara ve bir yazılımın kişiden bağımsız ilerlemesine yönelik bir takım çalışmalara imza atıyor. Bu çalışmalardan SOLID yani nesne yönelimli programlama için 5 temel prensip ortaya çıkmıştır.
Bu prensipler şunlardır;
Single Responsibility Principle
Open/Closed Principle
Liskov ‘s Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
Single Responsibility Principle (Tekil Sorumluluk Prensibi)
“Bir sınıfın sadece bir sorumluluğu olmalı”
Her bir method sadece kendisine verilen işi yapar aynı anda birden fazla modeli update etmez. Bu isterseniz sınıf olur, isterseniz interface ve onun implementasyonu olur isterseniz de method olur.
Örnek Kod:
Person.java |
|
Account.java |
Verilen örnekte, iki sınıf Kişi ve Hesap var. Her ikisinin de kendi özel bilgilerini saklama sorumluluğu vardır. Person.java’nın bilgilerini değiştirmek istiyorsak, Account.java sınıfında değişiklik yapmak gerekmez. |
Open/Closed (Açık/Kapalı) Prensibi
“Yazılım bileşenleri geliştirmeye açık, ancak değişiklik için kapalı olmalıdır”
Oluşturduğunuz nesneler zaman içerisinde ek özellikler kazanabilir genişlemeye açık olurlar bu normal bir yazılım projesinde kaçınılmaz bir durumdur. Ama temel nesne değişime kapalı tutulmalıdır.
Örnek Kod: |
Sınıflar istek işleme mantığını geçersiz kılmak üzere genişletilir. Liskov’un Yerine Geçme Prensibi(Liskov Substitution Principle – LSP)
Eğer nesne kalıtım aldığı objenin tüm özelliklerini kullanmaz ise ortaya gereksiz kod yığınları oluşur ve sonrasında kalıtım alınan objenin diğerlerinden ayrılması için yeni kod ihtiyaç olur ve bu durum son derece verimsiz bir yazılıma sebep olur. Örnek Kod:
|
Her kitabın her zaman sabit görüntüleme biçiminde bir ISBN numarası vardır. Veritabanında ve kullanıcı arayüzünde ISBN’nin ayrı temsilleri olabilir.
Interface Segregation Principle (Arayüz Ayrımı)
“Müşteriler kullanmayacakları gereksiz yöntemleri uygulamaya zorlanmamalıdır”
Arayüz ayırım prensibi, bir arayüze gerektiğinden fazla yetenek eklenmemesi gerektiğini söyler. Nesnelerin ihtiyaç duymadıkları fonksiyonların Interface’lerinden mümkün olduğunca ayrıştırılmasıdır.
public
class
MouseMotionListenerImpl
implements
MouseMotionListener
{
@Override
public
void
mouseDragged(MouseEvent e) {
//handler code
}
@Override
public
void
mouseMoved(MouseEvent e) {
//handler code
}
}
Her işlem için farklı dinleyici sınıfları var, sadece olaylar için işleyiciler yazmamız gerekiyor. Her zaman, herhangi bir olayı ele almak, sadece ilgili dinleyiciyi bulur ve ilgili işlemler uygulanır.
Dependency Inversion Principle (Bağımlılık Değişimi)
Bağımlılığın ters çevirilmesi ilkesine göre üst seviye sınıflar, modüller, methodlar vs. alt seviyeli sınıflara bağımlı olmamalıdır. Alt sınıflarda yapılan değişiklikler üst sınıfları etkilememelidir. 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.
Kaynak: https://howtodoinjava.com/best-practices/5-class-design-principles-solid-in-java/
0 yorum