Eğer bir sınıf (class), bileşen (component) ya da paket (package) gibi gizli olmayan (public) sistemler kodluyorsanız, sistemden beklenen davranışları kodlamanız sisteminizi daha anlaşılır yapacaktır. Bu, sınıflar için bir fonksiyon olabilir. Ya da bir bileşen oluşturuyorsanız, içinde olması beklenebilecek bir sınıf da olabilir.

Biliyorum, böyle anlatınca oldukça soyut geliyor; fakat şöyle düşünün: Hangi dilde kod yazarsak yazalım, o dilin gizli olmayan fonksiyonlarını kullanabiliyoruz. Diyelim ki PHP dilinde kod yazıyoruz ve yazdığımız kod tarihlerin manipülasyonuyla ilgili. PHP’nin bu konu üzerine bir sınıfı mevcut: DateTime.

Yine diyelim ki, iki farklı tarihi birbiriyle karşılaştırmamız gerekiyor. İçgüdüsel olarak DateTime sınıfından beklentimiz ne olur? Şahsen, ben < ve > operatörleriyle karşılaştırma yapabilmeyi beklerim. PHP de zaten buna izin verir.

Bu gibi beklenen davranışların yerine getirilmediğini görmek, kodunuzu kullanan kişide (bu siz de olabilirsiniz!) güvensizliğe sebep olur. Güven bir sistem için çok önemlidir. Çünkü güvendiğiniz bir sistemi, sadece sınıf ya da fonksiyon isimlerine bakarak kullanırsınız. Güvenmezseniz, kullandığınız fonksiyonların doğru sonuç vereceğinden emin olmak için o fonksiyonların nasıl kodlandığını bilmeye eğilimli olursunuz. Bu yüzden kaynak kodu açıp okuyarak zaman kaybedersiniz.

Örnek

Yukarda oldukça kaba bir örnek verdim. Şimdi bir de kod üzerinden daha detaylıca inceleyelim:

<?php

class Book // Kitap
{
   // currentPage: Şimdiki sayfa
   private $currentPage;
   // pages: Sayfalar
   private $pages;

   // read: Oku
   public function read(): string
   {
      return $this->pages[$this->currentPage];
   }
}

Yukarıdaki örnekte sadece bir adet gizli olmayan fonksiyonumuz var: read(). Bu fonksiyonun yaptığı şey çok basit. Kitapta kaldığımız sayfayı ($currentPage) bize yazı olarak veriyor.

Diyelim ki birileri yukarıdaki sınıfı kodladı. Varsayın ki kitap sayfaları da $pages değişkeninde kayıtlı. Siz de bu sınıfı kullanarak bir arayüz hazırlıyorsunuz. Amacınız bir kitabın web üzerinden okunabilmesini sağlamak. Bu sınıfı olduğu gibi kullanarak amacınıza ulaşabileceğiniz bir yol görebiliyor musunuz? Göremezsiniz; çünkü yok.

Bu sınıf, örnek gereği oldukça kısa. Fakat gerçek hayatta karşılaştığımız kodlar çok daha uzun ve daha karmaşık. Sınıfı kodlayan yazılımcı beklenen davranışları yerine getirmediği için, şimdi siz tüm bu kodu okumak zorunda kalacaksınız. Sınıfın yazarına olan güveniniz sarsılacak.

Temizlik zamanı

Yukarıdaki sınıfta $currentPage‘in görünürlüğünü private‘tan public‘e çevirmek aslında sorunumuzu çözer. Bu değişken artık gizli olmayacağı için, kaldığımız sayfayı artırıp azaltarak okunacak olan sayfayı manipüle edebiliriz. Fakat bu, sınıfın daha da kirlenmesine sebep olur ve sizden sonra gelecek bir başka yazılımcının koda olan güveni bu kez sıfırlanır.

Bunun yerine yapabileceğimiz çok daha basit bir şey var: Beklediğimiz davranışı yerine getirmek. Burda beklediğimiz davranış nedir? Sayfa çevirebilmek. 🙂

<?php

class Book // Kitap
{
   // currentPage: Şimdiki sayfa
   private $currentPage;
   // pages: Sayfalar
   private $pages;

   // read: Oku
   public function read(): string
   {
      return $this->pages[$this->currentPage];
   }

   // previousPage: Önceki sayfa
   public function previousPage(): void
   {
      $this->currentPage--;
   }

   // nextPage: Sonraki sayfa
   public function nextPage(): void
   {
      $this->currentPage++;
   }
}

İki fonksiyon ekleyerek sınıfımızı tamamlamış olduk. Böylece, kitap okuma üzerine olan bir sınıf olan Book, sayfaları çevirebileceğimiz fonksiyonları da yerine getirmiş oldu.

Yorum Gönderin

Bir Cevap Yazın

%d blogcu bunu beğendi: