“High Cohesion” ve “Low Coupling” Prensipleri
Bu yazımızda, yazılımın temel ilkelerinden olan “Yüksek Yapışma” (High Cohesion) ve “Düşük Bağlama” (Low Coupling) prensiplerini ele alacağız. Bu iki prensip, yazılım mühendisliği ve özellikle nesne yönelimli tasarımın temel taşlarından sayılır. İyi tasarlanmış bir yazılım sistemi, genellikle yüksek yapışma ve düşük bağlama özelliklerine sahiptir.
Diyelim ki, bir online alışveriş platformu üzerinde çalışıyorsunuz ve bu platform müşterilere ürünleri görüntüleme, sepete ekleme ve satın alma işlemlerini yapma olanağı sunuyor. Bu platform için hem “Yüksek Yapışma” hem de “Düşük Bağlama” prensiplerini nasıl uygulayabiliriz? Şimdi bu iki kavramı daha yakından inceleyelim.
High Cohesion (Yüksek Yapışkanlık)
“High cohesion” prensibi, bir yazılım modülünün içindeki parçaların ne kadar iyi bir arada çalıştığını ifade eder. Yani, bir modül veya sınıfın içindeki işlevlerin, yöntemlerin ve değişkenlerin birbiriyle ne kadar ilgili olduğunu ve birlikte nasıl bir bütün oluşturduklarını gösterir. Bir modülün yüksek yapışması demek, o modüldeki her şeyin tek bir amaç için birleştiği ve birbirini tamamladığı anlamına gelir. Bu durumda, o modülün yalnızca bir işi yapması ve onu da en iyi şekilde yapması beklenir.
Yüksek yapışma prensibine göre, her bir işlevsel alanın net bir şekilde tanımlanmış sorumlulukları olmalıdır ve bu sorumluluklar kendi içlerinde tutarlı olmalıdır. Alışveriş platformunda şu şekilde modüller oluşturabiliriz:
- ProductCatalog: Ürünleri listeler ve ürün detaylarını gösterir. Yalnızca ürün bilgisi sunar ve alışveriş sepeti veya ödeme işlemleri ile ilgilenmez.
- ShoppingCart: Müşterinin seçtiği ürünleri tutar ve sepet işlemlerini yönetir (ekleme, çıkarma, güncelleme).
- CheckoutService: Ödeme işlemini yönetir, ödeme bilgilerini alır ve siparişi onaylar.
Bu modüllerin her biri, sadece kendileri için tanımlanmış işlevleri yerine getirir ve böylece yüksek yapışma prensibine uygun hareket eder.
Yüksek yapışma sayesinde yazılımın okunabilirliği, bakımı ve test edilebilirliği artar. Ayrıca, modüller arası bağımlılık azaldığı için değişiklik yapılması gerektiğinde etki alanı sınırlı kalır ve bu da güncellemelerin daha kolay yapılmasını sağlar.
Low Coupling (Düşük Bağlama)
“Low coupling” ise, modüller arasındaki bağımlılıkların mümkün olduğunca sınırlı tutulması gerektiğini ifade eder. Modüllerin birbirlerine minimal düzeyde veya hiç bağımlı olmaması, sistemdeki değişikliklerin bir modülden diğerine sızmasını önler. Bağlamayı düşük tutmak, sistemde esneklik yaratır ve modüllerin yeniden kullanılabilirliğini artırır. Örneğin:
- ProductCatalog modülü, ürünler hakkında bilgi sağlamakla sınırlıdır ve ShoppingCart modülüne direkt bir referansı yoktur. Bunun yerine, ShoppingCart modülü, kullanıcı bir ürünü sepete eklemek istediğinde, ProductCatalog tarafından sağlanan ürün ID’sini kullanır.
- ShoppingCart modülü, ödeme işlemi için gerekli olan toplam tutar ve seçilen ürünler listesini sağlar, ancak CheckoutService modülünün nasıl çalıştığını bilmeye ihtiyaç duymaz.
- CheckoutService modülü, ödeme işlemi için ShoppingCart modülünden alınan verileri kullanır, ancak sepetin içeriği veya kullanıcı arayüzü detayları ile ilgilenmez.
Bu etkileşimlerin her biri, modüller arasındaki bağımlılıkları azaltır ve böylece düşük bağlama prensibine uygun olur. Modüller arası bu gevşek bağlantı sayesinde, örneğin ProductCatalog modülünde bir değişiklik yapıldığında, ShoppingCart veya CheckoutService modüllerinin etkilenme riski minimize edilir.