ile

PHP ile içerik yönetim sistemi – 10 Nesne yönelimli programlama kavramları

tree5

 

Bu yazıya kadar hep bebek adımlarıyla ilerledik. Sıra geldi büyük adımları atmaya. Yazılımımızda sınıf yapısını kullandık. Bu zamana kadar sınıf yapısını aşağı yukarı mantığını kavrayacak şekilde öğrendiniz. Ancak bilmemiz gereken bir sürü şey daha var. Programımızı bu kavramlara uyduralım. Sınıflarımızda tek tek değişiklikler yapalım.

DRY prensibi

DRY yani “Do not Repeat Yourself” kendinizi tekrar etmeyin anlamına gelir. Kodlarınızda sürekli copy paste ettiğiniz aynı şeyler varsa, bunları gruplayıp başka bir yerden çağırabilirsiniz. Burada buna benzer bir örnek yapalım. Mesela bizim sınıflarımızın hepsine $id, $related, $db gibi değişkenler var. Ayrıca hepsinde add, edit, delete, view, show fonksiyonları var. Mesela Kullanıcılar diye yeni bir sınıf yaratmamız gerekiyor. Bu kuralları hiç bilmeyen birinin kodların içinde boğulmasını da istemeyiz.

Add, edit, delete gibi metodlarımız her sınıfta farklı, ama her sınıfta ortak kullandığımız getRelatedData ve connect metodları da var. Bunların hepsini gruplayalım. Soyut bir sınıf yaratalım. Peki soyut sınıf, abstract class nedir? Kendisinden nesne yaratamadığımız, bize rehberlik etmesini istediğimiz, içinde boş bir metod barındıran sınıftır.

Lib klasörümüzün içine Assets.php diye bir dosya oluşturalım. Daha sonra diğer sınıflarımızdan bu dosyada olan bütün kodları silelim. Dikkat abstract olanlara dokunmayalım.

Posts sınıfımız şimdi böyle. Diğer sınıflarda da aynı işlemleri yapalım. Önemli oranda satırdan kurtulduk.

Extends diyerek aslında bir kavramı daha öğrendik sayılır. Miras Alma. Sınıflar birbirlerinden özellikleri  ve metodları devralabilirler. Devraldıkları metodları da değiştirip farklı bir şekilde kullanabilirler. buna da çok biçimlilik diyoruz. (polymorphism) Örneğin, memeli özelliklerini devralan kedi ve köpek sınıfı, memeli sınıfında yer alan ses çıkar metodlarını “hav hav” ve “miyav” diye değiştirmişler. Burda da add, edit, delete gibi aynı isimli ama farklı işlemleri yapan metodlar bu duruma güzel bir örnek oluşturuyorlar.

Kapsülleme

Yani bu kadar anlamsız bir ismi olan bir kavram basitçe nasıl anlatılır ki? Public değişkenlerimiz vardı hatırlarsanız. Bu değişkenlere sınıf dışından erişilebilir ve değiştirilebilirler. Private değişkenlere ise sınıf dışından ulaşılamaz. Genellikle private değişken kullanmak önerilir ki, kodlarımızın üzerinde çalışan diğer arkadaşlar sınıf içindeki değerleri pat diye değiştirmesinler. Peki sınıf dışından erişilemeyen değişkene nasıl ulaşacağız? public getTitle() gibi bir metodla, bunlara get set metodları deniyor. Bu değişkenlere erişirken ve değiştirirken, değerlerin kontrol altında olmalarını sağlıyorlar.

__construct()

Bunun gibi iki alt çizgiyle çalışan metodlar var. Bizim şimdilik ihtiyacımız olan __construct() ve __destruct() metodları. __construct() metodu, sınıftan obje üretildiğinde çalışan metodlar. Biz soyut assets sınıfımızda construct metodunda connect metodunu çağırdık. Bunu neden yaptık? Çünkü eğer connect metodu çağırılmadıysa, sistemin hata vermesini istiyoruz.

Tüm kodlarımızı bu şekilde değiştirdikten sonra kodlarımızın son hali şu şekilde. (İpucu değişiklikler Lib klasöründe) :

https://github.com/mtkocak/merakli/tree/fbf9dddd81217a9cb1b682a8c136e25e28088aed 

Yorumla

Yorum