En İyi Sorular
Zaman Çizelgesi
Sohbet
Bakış Açıları
Tek sorumluluk ilkesi
Bu öğe, yazılım mühendisliğinde her sınıfın yalnızca bir sorumluluğa sahip olması gerektiği prensibini temsil eder. Vikipedi'den, özgür ansiklopediden
Remove ads
Tek sorumluluk ilkesi (TSİ), SOLID yazılım geliştirme ilkelerinden biridir. Bu ilke, bir yazılım bileşeninin yalnızca bir sorumluluğa ve dolayısıyla bir değişiklik nedenine sahip olması gerektiğini savunur. Başka bir ifadeyle, bir sınıf yalnızca tek bir aktörün (kullanıcı ya da işlevsel gereksinim kümesinin) beklentilerine hizmet etmeli, farklı nedenlerle değişebilecek işlevleri bir arada barındırmamalıdır.

Terim ilk olarak Robert C. Martin tarafından ortaya atılmış ve "Bir sınıfın değişmesi için yalnızca bir nedeni olmalıdır." şeklinde ifade edilmiştir.[1]
Remove ads
Tarihçe
Tek sorumluluk ilkesi, yazılım mühendisliğinde modülerlik anlayışının gelişimiyle birlikte şekillenmiştir. David L. Parnas, 1972 yılında yayımladığı "On the Criteria To Be Used in Decomposing Systems into Modules" adlı makalesinde, sistemlerin akış diyagramı temelli değil, değişmesi muhtemel kararları yalıtacak biçimde modüllere ayrılması gerektiğini savunmuştur.[2] Bu görüş, daha sonra SRP'nin temellerinden biri olarak kabul edilmiştir.
Edsger W. Dijkstra ise 1974 yılında "The Separation of Concerns" kavramını ortaya koyarak, yazılım bileşenlerinin birbirinden bağımsız sorumluluklara sahip olması gerektiğini vurgulamıştır.
Remove ads
İlkenin Uygulaması
Özetle
Bakış açısı
Bir yazılım bileşeninin birden fazla sorumluluğu üstlenmesi, değişikliklerin birbirini etkilemesine neden olabilir. Bu durum hem bakımı zorlaştırır hem de hatalara açık bir yapı oluşturur. TSİ, bu türden etkileşimleri önlemek için sınıfların ve modüllerin tek bir göreve odaklanmasını önerir.
- Olumsuz örnek
Aşağıdaki sınıf, hem bordro hesaplaması yapar, hem de veritabanına kayıt işlemi gerçekleştirir. Bu iki işlev farklı nedenlerle değişeceğinden TSİ ihlal edilmektedir:
public class Calisan {
public double maasHesapla() {
// Maaş hesaplama mantığı
}
public void kaydet() {
// Veritabanına kaydetme işlemi
}
public String calismaSaatleriniRaporla() {
// Denetim raporu oluşturma
}
}
Bu sınıf; finans (maaş), BT (veritabanı) ve operasyon (çalışma saati) gibi farklı iş birimlerinin beklentilerini bir arada barındırdığı için birden fazla nedene göre değişmek zorundadır.
- Doğru örnek
Aşağıdaki yapı, her sorumluluğu ayrı sınıflara ayırarak ilkeye uygun şekilde tasarlanmıştır:
public class MaasHesaplayici {
public double maasHesapla(Calisan c) {
// Maaş hesaplama mantığı
}
}
public class CalisanDeposu {
public void kaydet(Calisan c) {
// Veritabanına kaydetme işlemi
}
}
public class ZamanRaporlayici {
public String calismaSaatleriniRaporla(Calisan c) {
// Denetim raporu
}
}
Bu tasarımda her sınıf yalnızca tek bir işlevden sorumludur. Böylece herhangi bir değişiklik, sadece ilgili sınıfı etkiler.
Remove ads
Önemi
TSİ, yazılım sistemlerinde değişime karşı dayanıklı, sürdürülebilir ve okunabilir bir yapı oluşturulmasını sağlar. Bu yaklaşım; yüksek içsel tutarlılığa (cohesion) sahip bileşenlerin oluşturulmasına, farklı nedenlerle değişen yapıların ayrılmasına ve hataların sınırlandırılmasına yardımcı olur.
Kaynakça
Ayrıca Bakınız
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads
