Kodlama yaparken başımıza buyruk istediğimiz kodları istediğimiz şekilde yerleştirerek, kopyala yapıştır ile aynı işlemi yapan kodları yüzlerce yerde tekrar tekrar kullanarak da bir program veya proje geliştirilebilir. Ancak bu karmaşa projeyi bir süre sonra ilerlemez hale getirir veya projeye yeni katılıma izin vermez hale dönüşür. Günümüzde herhangi bir yazılım ürününü geliştirirken karmaşık yapıdan çıkıp modüler bir yapıyı seçmemiz gerekir. Çünkü karmaşık sistemler modüler sistemlere göre aşağıdaki gibi kötü sonuçlarla oluşturduğumuz projeyi sonlandırabilir.
| Karmasik Sistemlerde | Modüler Sistemlerde | |
| Kodların çalışma prensibini anlamak zor | Daha kolay anlaşılır | |
| Hata aramak çok zordur uzun sürer | Hatalar kısa sürede bulunur | |
| Yazılan kod blokları tekrar tekrar kullanılamaz | Modüller tekrar tekrar farklı projelerde kullanılır | |
| Regresyon Etkisi çok fazla | Regresyon Etkisi daha az |
Cohesion Nedir?
Modül iç benzerliği (aynı amaca hizmet edecek kodlar)
Coupling Nedir?
Modüllerin birbirine olan benzerliği veya bağımlılığı
Bizim prensibimiz her zaman “LOW COUPLING HIGH COHESION” olmalıdır.
Cohesion Çeşitleri
Kohezyon 1’den 7’ye doğru iyileşir. Yani “Bilgiye Dayalı Kohezyon” olası en iyi durumdur.
- Tesadüfi Kohezyon (Coincidental)
- Birbiri ile alakalı olmayan işlemleri içerir.
- Bakimi zordur.
- Yeniden kullanım zordur.
- Çözüm: Her bir alakasız kısım ayrı bir modül olarak ayrılmalıdır.
- Mantiksal Kohezyon (Logical)
- if/switch yapısı ile birden fazla ve alakasız işlemin ayni modülde olması.
- Bakim zor.
- Yeniden Kullanım zor.
- Ekleme ve Genişletme uzun uğraş ve yeni kodlar gerektirir.
- Zamana Bagli(Ard arda) Kohezyon (Temporal)
- Birden fazla işlemin birbiri ardına yapılması durumudur.
- Bazı durumlarda zorunludur. (Ard arda yapilmasi gerekli olan durumlar)
- Yeniden kullanımı zordur
- İsleme Bağlı Kohezyon (Procedural)
- Birbiri ile ilişkili işlemler aynı modül içirişindedir.
- Modülde birden fazla işlem yapılmaktadır.
- Yeniden Kullanımı zordur.
- İletişime Bağlı Kohezyon (Communicational)
- Ayni veri üzerinden birden fazla kod bloğunun birden fazla işlem yapması.
- Yeniden kullanım zordur.
- Fonksiyonel Kohezyon (Functional)
- Bir modül içinde tek bir işlem yapılır.
- Yeniden Kullanılabilir (farklı projelerde)
- Bakim ve Geliştirmesi kolaydır.
- Regresyon Etkisi düşüktür.
- Bilgiye Dayalı Kohezyon (Informational)
- Tek bir veri üzerinde işlem yapar.
- Encapsulation(kapsüle etme) yapılabilir.
- Yeniden Kullanılabilir.
- Bakimi ve Geliştirmesi Kolay.
Coupling Çeşitleri
Kohezyon 1’den 5’e doğru iyileşir. Yani “Data Coupling” en iyi durumdur.
- İçerik Benzeşimi (Content Coupling)
- Bir modül farklı bir modülün kodlarını kullanıyorsa,
- Bu durum modüler yapıya çok ters bir durumdur.
- VBasic’de go to terimi buna sebep olur.
- Regresyon yüksek, yeniden kullanım imkânsız.
- Ortak Veri (Common Coupling)
- İki Modül ayni global datayı kullanıyorsa,
- Eğer iki modülde okuma yapıyorsa sorun yok, ama herhangi biri veya ikisi veriyi değiştiriyorsa sıkıntı vardır.
- Yeniden Kullanım zordur.
- Control Coupling
- Bir modül başka bir modülden veri alıyor,
- IF yapısında kontrol sağlanıyorsa gönderen modül alan modülü kontrol ediyor demektir.
- Modüller bir biri içine geçmiş ve kontrolü bağımlıdır.(Modül yapısına ters).
- Stamp Coupling
- Bir modülden diğer modülü ihtiyaç fazlası veri göndermesi durumu.
- En az yetki prensibine terstir.
- Yeniden Kullanması zordur.
- Data Coupling (istenilen durum)
- Bir modülden diğer modüle mesaj göndermesi.
- Kolay Bakim ve Geliştirme.
- Yeniden Kullanılabilir.






