Open/Closed Principle (OCP)

Open/Closed Principle (OCP) dalam PHP:

Dalam PHP, OCP dapat diterapkan dengan menggunakan warisan (inheritance) dan antarmuka (interface). Dengan menerapkan OCP, kelas-kelas harus terbuka untuk perluasan (oleh berarti dapat diwarisi), tetapi tertutup untuk modifikasi (tidak boleh mengubah perilaku kelas yang ada).

Contoh PHP dengan OCP:

interface Shape {
    public function area();
}

class Circle implements Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function area() {
        return 3.14 * $this->radius * $this->radius;
    }
}

class Square implements Shape {
    private $side;

    public function __construct($side) {
        $this->side = $side;
    }

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

Dalam contoh ini, interface Shape mendefinisikan metode area(). Kelas Circle dan Square mengimplementasikan antarmuka Shape dan menyediakan implementasi untuk metode area(). Jika Anda ingin menambahkan bentuk baru, Anda dapat membuat kelas baru yang mengimplementasikan Shape tanpa mengubah kelas-kelas yang sudah ada.

Open/Closed Principle (OCP) dalam JavaScript:

Dalam JavaScript, OCP dapat diterapkan dengan cara yang mirip dengan PHP, dengan menggunakan pewarisan dan antarmuka.

Contoh JavaScript (ES6) dengan OCP:

class Shape {
    area() {
        throw new Error("Method 'area()' must be implemented");
    }
}

class Circle extends Shape {
    constructor(radius) {
        super();
        this.radius = radius;
    }

    area() {
        return Math.PI * this.radius * this.radius;
    }
}

class Square extends Shape {
    constructor(side) {
        super();
        this.side = side;
    }

    area() {
        return this.side * this.side;
    }
}

Dalam contoh ini, Shape adalah kelas dasar yang berisi metode area(). Circle dan Square adalah kelas-kelas turunan yang mewarisi Shape dan mengimplementasikan metode area(). Jika Anda ingin menambahkan bentuk baru, Anda hanya perlu membuat kelas baru yang mengimplementasikan Shape.

Open/Closed Principle (OCP) dalam Golang:

Dalam Golang, OCP dapat diterapkan dengan menggunakan interface dan implementasi interface yang dapat di-extend.

Contoh Golang dengan OCP:

package main

import (
    "fmt"
    "math"
)

type Shape interface {
    Area() float64
}

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

type Square struct {
    Side float64
}

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

func main() {
    circle := Circle{Radius: 5}
    square := Square{Side: 4}

    fmt.Println("Circle area:", circle.Area())
    fmt.Println("Square area:", square.Area())
}

Dalam contoh ini, Shape adalah interface yang menyatakan metode Area(). Circle dan Square adalah implementasi dari Shape. Dengan menggunakan interface, kita dapat membuat bentuk baru yang mengimplementasikan Shape tanpa mengubah kode yang sudah ada.

Dengan menerapkan OCP, kita dapat menambahkan fungsionalitas baru ke dalam sistem tanpa mengubah kode yang sudah ada, memungkinkan perluasan fungsionalitas tanpa memengaruhi perilaku kelas yang ada.

Last updated