Liskov Substitution Principle (LSP)

Liskov Substitution Principle (LSP) dalam PHP:

Dalam PHP, LSP dapat diterapkan dengan menggunakan pewarisan kelas dan memastikan bahwa subkelas dapat digunakan tanpa mengubah properti atau perilaku yang diharapkan dari kelas dasar.

Contoh PHP dengan LSP:

class Shape {
    protected $width;
    protected $height;

    public function setWidth($width) {
        $this->width = $width;
    }

    public function setHeight($height) {
        $this->height = $height;
    }

    public function area() {
        return $this->width * $this->height;
    }
}

class Square extends Shape {
    public function setWidth($width) {
        $this->width = $width;
        $this->height = $width;
    }

    public function setHeight($height) {
        $this->width = $height;
        $this->height = $height;
    }
}

Dalam contoh ini, kelas Square adalah subkelas dari Shape. Meskipun Square mengubah metode setWidth() dan setHeight() untuk memastikan bahwa width dan height selalu sama, itu tetap mematuhi Liskov Substitution Principle karena Square masih bisa digunakan sebagai Shape tanpa menghasilkan efek samping yang tidak diinginkan.

Liskov Substitution Principle (LSP) dalam JavaScript:

Dalam JavaScript, LSP diterapkan dengan cara yang mirip dengan PHP. Pastikan bahwa subkelas dapat digunakan di mana saja di mana kelas dasar digunakan, tanpa menimbulkan kesalahan atau perilaku yang tidak diharapkan.

Contoh JavaScript (ES6) dengan LSP:

class Shape {
    constructor(width, height) {
        this.width = width;
        this.height = height;
    }

    area() {
        return this.width * this.height;
    }
}

class Square extends Shape {
    constructor(side) {
        super(side, side);
    }
}

Dalam contoh ini, Square adalah subkelas dari Shape dan mematuhi Liskov Substitution Principle karena itu masih memiliki metode area() yang bekerja sebagaimana mestinya, meskipun hanya menggunakan satu sisi (side) untuk menghitung area.

Liskov Substitution Principle (LSP) dalam Golang:

Dalam Golang, LSP juga diterapkan dengan cara yang serupa. Pastikan bahwa subkelas dapat menggantikan kelas dasar tanpa mengubah perilaku yang diharapkan dari kelas dasar tersebut.

Contoh Golang dengan LSP:

package main

import (
    "fmt"
)

type Shape interface {
    Area() float64
}

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

type Square struct {
    Side float64
}

func (s Square) Area() float64 {
    return s.Side * s.Side
}

func printArea(shape Shape) {
    fmt.Println("Area:", shape.Area())
}

func main() {
    rectangle := Rectangle{Width: 4, Height: 5}
    square := Square{Side: 3}

    printArea(rectangle)
    printArea(square)
}

Dalam contoh ini, Rectangle dan Square mengimplementasikan Shape interface. Kedua jenis bentuk ini dapat digunakan di mana saja di mana Shape diharapkan tanpa menghasilkan efek samping yang tidak diinginkan. Dengan menggunakan printArea(), kita dapat mencetak area dari objek Rectangle dan Square dengan aman, mematuhi Liskov Substitution Principle.

Last updated