Özet - Arayüzler
interface, implements ve polymorphism'le ödeme yöntemi sistemi yazarsın.
Özet - Arayüzler
Bu grupta beş kavram öğrendin:
interface: method imzalarını listeleyen sözleşme.implements: sınıfın sözleşmeyi kabul etmesi; tüm methodlar yazılır.- çoklu interface: virgülle birden fazla sözleşme birleştirme.
- polymorphism: aynı interface'i uygulayan sınıfları ortak tipte kullanma.
- interface vs abstract: capability için interface, ortak temel için abstract.
Şimdi tüm bunları bir ödeme yöntemi sisteminde birleştireceksin: Payable interface'i ve iki uygulayan sınıf.
Uygulama Payable interface ile ödeme sistemi
Önce interface Payable { public function pay(int $amount): string; } tanımla. Sonra class CashPayment implements Payable ve class CardPayment implements Payable yaz. Her ikisinde de pay(int $amount): string methodu olsun; CashPayment return "Cash: " . $amount, CardPayment return "Card: " . $amount döndürsün. Sonra function processPayment(Payable $method, int $amount): void { echo $method->pay($amount) . "\n"; } yaz ve processPayment(new CashPayment(), 100) ile processPayment(new CardPayment(), 250) çağır.
Örnek çözümü göster
Önce interface Payable'ı tanımla. CashPayment ve CardPayment sınıflarını implements Payable ile yaz, herbirinde pay methodu. Sonra processPayment(Payable $method, int $amount) fonksiyonunu yaz ve iki nesneyle çağır.
Örnek çözüm:
<?php
// Ödeme yöntemi sistemini tanımla
interface Payable {
public function pay(int $amount): string;
}
class CashPayment implements Payable {
public function pay(int $amount): string {
return "Cash: " . $amount;
}
}
class CardPayment implements Payable {
public function pay(int $amount): string {
return "Card: " . $amount;
}
}
function processPayment(Payable $method, int $amount): void {
echo $method->pay($amount) . "\n";
}
processPayment(new CashPayment(), 100);
processPayment(new CardPayment(), 250);
Arayüzler ve sonraki adım
interface, implements, çoklu interface, polymorphism ve interface vs abstract kavramlarını birleştirdin. Ödeme sisteminde tek bir sözleşmeyle farklı yöntemleri aynı fonksiyondan çağırdın; yeni yöntem eklemek yalnızca yeni bir sınıf yazmaktan ibaret.
Unutma: capability için interface, ortak temel için abstract class. Bir sonraki grupta abstract class'ı derinlemesine inceleyeceğiz: abstract method, abstract sınıf tasarımı ve ne zaman kullanılacağı.
Kendini test et
-
tüm arayüz kavramlarını eşleştir
- interface
- Sözleşme
- implements
- Sınıf sözleşmeyi kabul eder
- implements A, B
- Çoklu interface
- Shape $shape
- Polymorphism
-
ödeme yöntemi sistemi için en iyi tasarım?
- Tek sınıfta tüm yöntemleri if/else ile ayırmak
- Payable interface'ini uygulayan ayrı sınıflar yapmak
- Her yöntem için ayrı bir interface tanımlamak
- abstract class olmadan sınıf yazmak
Cevabı göster
Payable interface'ini uygulayan ayrı sınıflar yapmak — Doğru. Payable interface'ini uygulayan ayrı sınıflar polymorphism sağlar; yeni yöntem eklemek kolaydır.
-
sisteme yeni BitcoinPayment eklemek için ne gerekir?
- Mevcut CashPayment ve CardPayment sınıflarını değiştirmek
- processPayment fonksiyonunu yeniden yazmak
- Payable uygulayan yeni bir BitcoinPayment sınıfı eklemek
- interface'i silip yeniden tanımlamak
Cevabı göster
Payable uygulayan yeni bir BitcoinPayment sınıfı eklemek — Doğru. Yeni bir sınıf Payable uyguladığında processPayment değişmeden onu da kabul eder.