Kural olarak, yazılım sistemleri gerçek uygulamalarda kullanılıncaya kadar iyi çalışmaz ve defalarca başarısız olur.
- David Parnas
Kural olarak, yazılım sistemleri gerçek uygulamalarda kullanılıncaya kadar iyi çalışmaz ve defalarca başarısız olur.
- David Parnas
Nesne yönelimli programlama (OOP), PHP gibi modern programlama dillerinde önemli bir rol oynar ve kodun daha düzenli, sürdürülebilir ve anlaşılır olmasını sağlar. PHP'de, abstract ve interface kavramları, nesne yönelimli tasarımın iki önemli unsuru olarak karşımıza çıkar. Bu yazımda, abstract sınıflar ile interface'ler arasındaki farkları anlatacağız.
### Abstract Sınıflar:
1. **Tamamlanmamış Sınıflar**: Abstract sınıflar, kendilerine özgü işlevleri olmayan, yani tamamlanmamış sınıflardır. Yani, bir abstract sınıf, içerisinde tanımlanmamış bir veya daha fazla metod içerebilir.
2. **Somut ve Soyut Metodlar**: Bir abstract sınıfın içinde hem somut (kod bloğu içeren) hem de soyut (sadece imza belirtilen, ancak kod içermeyen) metodlar bulunabilir.
3. **İçerik Sağlayıcı**: Abstract sınıflar, alt sınıflarının ortak davranışları sağlamak için kullanılır. Yani, ortak metodları içerebilir ve bu metodların alt sınıflar tarafından uygulanması beklenir.
4. **"abstract" Anahtar Kelimesi**: Bir sınıfı abstract yapmak için, sınıfın önüne "abstract" anahtar kelimesi eklenir.
<?php
abstract class BaseClass {
abstract public function someMethod();
public function anotherMethod() {
// Some code here
}
}
?>
5. **Kalıtım**: Abstract sınıflar, diğer sınıflar tarafından miras alınabilir ve alt sınıflarında abstract metodların implementasyonunu zorunlu kılar.
### Interface'ler:
1. **Tamamen Soyut**: Interface'ler tamamen soyut yani içerisinde hiçbir somut metod barındırmazlar. Yani, sadece metod imzalarını içerirler ve metodların nasıl çalışacağına dair herhangi bir kod içermezler.
2. **Birden Çok Kalıtım**: PHP'de çoklu kalıtım desteklenmez, ancak bir sınıf birden fazla interface'i uygulayabilir. Böylece, bir sınıfın birden fazla interface'deki metodları uygulaması beklenir.
3. **"interface" Anahtar Kelimesi**: Bir interface tanımlamak için, sınıf anahtar kelimesi yerine "interface" anahtar kelimesi kullanılır.
<?php
interface MyInterface {
public function someMethod();
public function anotherMethod();
}
?>
4. **Kalıtım ve Uygulama**: Bir sınıf, `implements` anahtar kelimesi ile bir veya birden fazla interface'i uygulayabilir.
<?php
class MyClass implements MyInterface {
public function someMethod() {
// Implementation of the method
}
public function anotherMethod() {
// Implementation of the method
}
}
?>
### Hangisini Kullanmalıyım?
Abstract sınıflar ve interface'ler, farklı senaryolara yönelik farklı kullanımlara sahiptir. Abstract sınıflar, ortak kodu paylaşmak istediğiniz durumlarda ve bazı metodları alt sınıflara bırakmak istediğinizde kullanışlıdır. Interface'ler ise, farklı sınıfların aynı davranışı sergilemesini istediğiniz durumlarda ve bir sınıfın birden fazla davranışa sahip olmasını istediğinizde tercih edilir.
Özetle, abstract sınıflar, somut ve soyut metodları bir araya getirerek kalıtım kullanımı için uygundurken, interface'ler tamamen soyut yapıları temsil eder ve çoklu kalıtımın yerini alır. Projelerinizin ihtiyaçlarına ve tasarımınıza göre hangisinin daha uygun olduğunu belirleyebilirsiniz.
0 Yorum
Yorum Bulunmuyor...