SOLID: Liskov Substitution Principle

Programming

SOLID: Liskov Substitution Principle

class แม่ควรที่จะ override จากคลาสลูกได้ทั้งหมด

3 เดือนที่ผ่านมา

1 min read

Liskov Substitution Principle (LSP)

Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.

อ็อบเจ็กต์ของซูเปอร์คลาสควรสามารถแทนที่ด้วยอ็อบเจ็กต์ของคลาสย่อยได้โดยไม่กระทบต่อความถูกต้องของโปรแกรม

พูดง่ายๆ ก็คือ ถ้าคลาส S เป็นคลาสย่อยของคลาส T อ็อบเจ็กต์ประเภท T ควรถูกแทนที่ด้วยอ็อบเจ็กต์ประเภท S โดยไม่เปลี่ยนแปลงความถูกต้องของโปรแกรม

class CreditCard {
    var cardNumber: String
 
    init(cardNumber: String) {
        self.cardNumber = cardNumber
    }
 
    func makePayment(amount: Double) {
        // Default implementation to make a payment
        print("Payment of $\(amount) made with a generic credit card.")
    }
}
 
class VisaCard: CreditCard {
    override func makePayment(amount: Double) {
        print("Payment of $\(amount) made with a Visa card (Card Number: \(cardNumber)).")
    }
}
 
class MasterCard: CreditCard {
    override func makePayment(amount: Double) {
        print("Payment of $\(amount) made with a MasterCard (Card Number: \(cardNumber)).")
    }
}
 
let visa = VisaCard(cardNumber: "1234-5678-9876-5432")
let masterCard = MasterCard(cardNumber: "5678-1234-4321-8765")
 
let cards: [CreditCard] = [visa, masterCard]
for card in cards {
    card.makePayment(amount: 100.0)
}

Tags:

Swift SOLID