Fonksiyon : Bir sınıf içindeki birbirine bağlı yada bağımsız yapılan işlem parçalarının birbirinden ayrılması olarak atfedilebilir.

Basit bir örnek ile anlatacak olursak ;

Sizin bir Email sınıfınız olsun ve bu sınıfın görevlerinden birisi email göndermek, diğeri ise inbox'ınıza gelen email'leri göstermek olsun.


Email.class

sendEmail();
receiveEmail();


Yukarıdaki görev ayrımı sınıfın bakış açısından basit bir mantıksal ayrım çünkü bu sınıf üzerindeki iki metodun görevleri yani fonksiyoneliteleri farklı.

Yani bu mantıksal ayrımı siz tek bir metod içindede yapabilirdiniz. Mesela;

Email.class

sendReceiveEmail(deger){
if(deger == ISLEMTIPI.GONDER)
//TODO : Gönderme işlemleri
}else if (deger == ISLEMTIPI.AL){
//TODO : Mail Alım işlemleri
}


Fakat bu örnek hem kodun okunabilirliğini hemde yazılım prensipleri için kötü bir kullanım olur.

Sınıf bazlı bakış açısından fonksiyonun içinden bakış açısına geçelim.

Mesela sendEmail(); metodumuz. BU metodumuzun görevi mail göndermek ama bu metod amiane tabirler "hayvan" gibi bir metod olur. Biz bu metodu, kendi içindeki fonksiyonelitesine göre fonksiyonlara parçalamalıyız.

Mesela;

void sendEmail(){
if(checkInternetConnection()){ //Internet bağlantısını kontrol et
setHeader();//Mailin başlıklarını oluştur
prepareContent();//Mailin içeriğini oluştur
send();//Maili gönder
}else{
//TODO : hata fırlat
}

}

private boolean checkInternetConnection(){

}

private void setHeader(){

}

private void prepareContent(){

}

void send(){
}

Bu şekilde bir yaklaşım, sizin bu mail gönderimi işlemi yaparken, ne tür işlemler yaptığınızı ve oluşabilecek her hata için hangi noktada hata yaptığınızın tesğitinde ve kodun okunabilirliği/unit testlerinin yapılabilirliğinide artırmış olur.