Coupling ve Cohesion Kavramları Nedir?
Merhabalar, bu yazımda nesneye yönelik programlama dahilinde yazılım mühendisliğinde bahsi geçen Bağlaşım (Coupling) ve Yapışkanlık (Cohesion) kavramlarını açıklamak istiyorum.
Bağlaşım (Coupling): Birden fazla sınıf/nesne arasında ilişkiyi temsil etmektedir. Burada iki alt kavram daha ortaya çıkıyor; Gevşek bağlılık ( Loosely Coupled) ve Sıkı bağlılık (Tightly Coupled). Nesneye yönelik programlama dillerinde bir sınıfın diğerine erişmesi/içermesi Kalıtım ya da Bir sınıfın diğer sınıfa bir referans (bağ) ile bağlanması yöntemleriyle gerçekleşiyor. Sıkı sıkıya bağlılık kavramında; İlişki içerisinde bulunan bir sınıf üzerinde yapılacak değişiklik, diğer bağlantılı sınıfları da etkileyebiliyor. Bu da modülerliği ve bakım maliyetlerini etkileyen bir unsur. Bu sebeple Yazılım Mühendisliğinde nesneler arasındaki ilişkinin sıkı olmaması yani gevşek bağlı (loosely coupled) olması istenir. Yani bir sınıf üzerinde yapılan değişikliğin diğer sınıflara sıçramaması istenir.
Yapışkanlık (Cohesion): Sınıflar arası ilişkinin gevşek bağlı olması istenirken, sınıflar içersindeki yordamların ve veri alanlarının yapışkan/bağlantılı olması istenir. Bir sınıf Single responsibility principle çerçevesinde yalnızca tek bir görevi gerçekleştirmelidir. Eğer bir sınıf içerisinde birden fazla değişik iş yapan yordamlar ya da bağımsız veri alanları bulunuyorsa, bu iş grupları farklı sınıflar halinde ayrıştırılmalıdır. Bir sınıf içerisindeki yordamlar ortak veri alanlarını kullanmıyorlarsa ya da yaptıkları iş bakımından tamamen ayrık iseler, onları aynı kümenin içinde barındırmanın bir anlamı da bulunmamakta. Yapışkanlık derecesi düşük sınıflar modülerliği ve yazılım bakımını tehdit eden bir unsurdur.
Şimdi bu kavramları gerçek dünya ilişkileri yönünden değerlendirelim. Bir “A” firması olsun ve bu firmanın alt birimleri bulunsun (Örn: Muhasebe, Pazarlama, Teknik Destek, Yönetim). Gerçek dünya şartlarında bu birimler arası ilişkinin ayrık olması beklenirken, her birimin kendi içindeki ilişkinin ise sıkı sıkıya ilintili olması beklenir. Aynı düzen yazılım geliştirkende aynı olmalıdır. Birimler (sınıflar) gevşek bağlı olmalı iken, Her bir birim (metodlar) sıkı sıkıya ilişkili/ yapışkan olmalıdır.
Sınıflar içinde ne kadar farklı iş gören ayrık güzergah varsa, bu ayrık yolların sayısı LCOM4 (Lack of Cohesion Methods) olarak isimlendiriliyor. 4 sayısı LCOM hesaplarken kullanılan yöntemlerden bir tanesi, her bir LCOM hesaplamanın kendine ait matematiksel de bir formülü bulunuyor.
Yukarıda kare kutu şeklinde iki sınıf bulunuyor. A <-> E arası mavi şekiller metodları, x ve ye ise sınıflara ait veri alanlarını / değişkenleri temsil ediyor. A metodu B metodunu çağırırken bu işlemlerde x veri alanı kullanılıyor, fakat bu görevi icra etmek için C, D, E metodlarına ve y kaynağına gerek yok. Yani 2 ayrık küme olduğunu görüyoruz.
Bir sınıf içerisindeki ilişki sağ taraftaki şekilde olduğu gibi olmalı, yani metod ve değişkenler arası ilişki ayrık olmamalı. LCOMx değerinde arzu edilen sayı 1′ dir. Yani bir sınıfa karşılık bir görev. Bir yazılım projesinde LCOM değeri mümkün olduğunca 1 ya da 1′ e yakın bir değer olmalı. LCOM değerinin 2 yada 2′ den büyük bir değer olması, o sınıfın ayrıştırılması gerektiğine işarettir.
Yazılım kalitesinde LCOM önemli bir unsur, bu maksatla yazılım geliştiriciler tek sınıf tek görev yaklaşımına uygun davranmalı.
Tekrar görüşmek dileğiyle..
Tag:bağlaşım, coupling, lcom4, yapışkanlık
2 Comments
Guzel yazi olmus hocam.Elinize salik 🙂
Teşekkürler içerik için… Sınavda çıkar muhtemelen