PHP – Soyut Sınıflar

webpage_coding_web_programming_html_script_php_code_website_application_java_css_development_editor_flat_design_icon-512

Soyut sınıflar içerisinde en az bir soyut metot bulunduran sınıflardır. Genel amaçları bir çok işi ortak yapan ortak sınıfları bir araya toplamaktır. Aşağıda buna uygun bir örnek verilmiştir.

Soyut sınıf denilmesinin sebebi soyut metotların sınıf içerisinde bir görev yapmaması miras yolu(kalıtım) ile kendinden türeyen sınıflara devretmesidir. Soyut sınıflar kendi içlerinde soyut metotlar dışında somut metotlarda bulundurabilir. Bu metotlar ezilmezler(override).

Metotlar ve veri alanları soyut sınıfta protected ve public olarak tanımlanmalıdır ki türeyen sınıfta kullanılabilsin. Sadece soyut sınıfta kullanılan bir veri alanı ise private olarak ta kullanılabilir.

Soyut sınıfta tanımlanmış bir durumda türeyen sınıfta ezilirken(override) erişim türünde kısıtlama yapılamaz. Örneğin; soyut sınıfta public olarak tanımlanan bir alan türetilmiş sınıfta public olmak zorundadır. Soyut sınıfta protected olarak tanımlanan bir alan protected veya public olmak zorundadır. Genişletilebilir ama daraltma yapılamaz.

Bir sınıfın soyut olarak tanımlanması için class deyiminin önüne abstract deyimi getirilir. Soyut sınıfta metotların soyut olarak belirlenmesi için erişim tipinin önüne veya function deyiminin önüne abstract deyimim getirilmeli ve gövdesiz bir metot olmalıdır. Soyut sınıfın hiç soyut metodu yoksa o sınıf soyut metot olarak işlem görmez.

Soyut metotlarda sınıf dışında bir değişkene atama yapılamaz. Yani new ile bir sınıf kurulumu yapılamaz.

Bir örnek verelim.

Yukarıda Soyut adında bir soyut sınıf tanımladık. Soyut sınıfımızı extends ile genişletelim. Ortak iş yapan 2 sınıf oluşturalım.

Yukarıdaki örnekte Soyut sınıfından Telefon ve Dogalgaz isminde 2 tane somut sınıf türettik. Soyut sınıfından kurucuyu(__construct) ve Ödeme fonksiyonlarını eziyor, Ödenen metodunu ise kalıtım ile miras alıyoruz.

Ödenen metodu 2 sınıfta da aynı işi yapmaktadır. Kurucu metot ve Ödeme metodu kendi sınıflarının belirledikleri görevi yerine getirmektedir.

Sınıflarımızı kurup sonuçları görelim.

sonuçlar:

Aynı parametreleri girmemize rağmen soyut sınıflar sayesinde sonuçlar farklı çıktı.