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

Tek sorumluluk ilkesi
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.

Thumb
Tek sorumluluk ilkesine aykırı bir sınıf tasarımını gösteren UML diyagramı

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

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads