Penggunaan fungsi INHERATANCE pada PHP

Seperti yang sudah kita pelajari pada tulisan sebelumnya: sebuah class atau objek bisa saling berhubungan dengan class yang lain.

Salah satu bentuk hubungannya adalah inheritance (pewarisan). Hubungan ini seperti hubungan keluarga antara orang tua dan anak.

Sebuah class di Java, bisa memiliki satu atau lebih keturunan atau class anak. Class anak akan memiliki warisan properti dan method dari class ibu.

Pada tutorial ini kita akan belajar:

  1. Kenapa kita harus menggunakan inheritance?
  2. Contoh Program inheritance
  3. Method Overriding

Mari kita mulai…

Kenapa Kita Harus Menggunakan Inheritance?

Misalkan dalam Game, kita akan membuat class-class musuh dengan perilaku yang berbeda.

Penggunaan fungsi INHERATANCE pada PHP

Lalu kita membuat kode untuk masing-masing kelas seperti ini:

File:

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
8

class Zombie {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }
}

File:

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
9

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}

File:

class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
0

class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}

Apakah boleh seperti ini?

Ya, boleh-boleh saja. Akan Tapi tidak efektif, karena kita menulis berulang-ulang properti dan method yang sama.

Bagaimana solusinya?

Kita harus menggunakan inheritance.

Mari kita lihat memeber class yang sama:

Penggunaan fungsi INHERATANCE pada PHP

Setelah menggunakan inheritance, maka akan menjadi seperti ini:

Penggunaan fungsi INHERATANCE pada PHP

Oya, inheritance di StarUML digambarkan dengan garis hubung Generalization.

Class

class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
1 adalah class induk yang memiliki anak
class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
2,
class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
3, dan
class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
4. Apapun properti yang ada di class induk, akan dimiliki juga oleh class anak.

Lalu bagaimana bentuk kodenya dalam Java?

Bentuk kodenya akan seperti ini:

File:

class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
5

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}

Pada class anak, kita menggunakan kata kunci

class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
6 untuk menyatakan kalau dia adalah class turunan dari
class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
1.

File:

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
8

class Zombie extends Enemy {
    void walk(){
        System.out.println("Zombie jalan-jalan");
    }
}

File:

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
9

class Pocong extends Enemy {
    void jump(){
        System.out.println("loncat-loncat!");
    }
}

File:

class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
0

class Burung extends Enemy {
    void walk(){
        System.out.println("Burung berjalan");
    }
    void jump(){
        System.out.println("Burung loncat-loncat");
    }
    void fly(){
        System.out.println("Burung Terbang...");
    }
}

Lalu, bila kita ingin membuat objek dari class-class tersebut, Kita bisa membuatnya seperti ini:

Enemy monster = new Enemy();
Zombie zumbi = new Zombie();
Pocong hantuPocong = new Pocong();
Burung garuda = new Burung();

Contoh Program Inheritance

Setelah memahami konsep inheritance, sekarang mari kita buat contoh program sederhana.

Program yang akan kita buat untuk berfungsi untuk menghitung luas dan keliling bangun datar.

Bentuk class diagramnya seperti ini:

Penggunaan fungsi INHERATANCE pada PHP

Baik, mari kita buat semua class-class-nya.

Buka Netbeans, pada Porject yang kemarin, buatlah package baru bernama inheritance di dalam Source Packages.

Penggunaan fungsi INHERATANCE pada PHP

Isi nama package dengan inheritance.

Penggunaan fungsi INHERATANCE pada PHP

Berikutnya buatlah class-class baru berdasarkan diagram di atas.

File:

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
1

package inheritance;

public class BangunDatar {
    
    float luas(){
        System.out.println("Menghitung laus bangun datar");
        return 0;
    }
    
    float keliling(){
        System.out.println("Menghitung keliling bangun datar");
        return 0;
    }
    
}

File:

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
2

package inheritance;

public class Persegi extends BangunDatar {
    float sisi;   
}

File:

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
3

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
0

File:

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
4

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
1

File:

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
5

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
2

File:

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
6

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
3

Setelah itu, coba jalankan class

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
7, maka hasilnya:

Penggunaan fungsi INHERATANCE pada PHP

Kenapa hasilnya bisa begitu?

Karena yang kita panggil sebenarnya adalah method

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
8 dan
class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
9 milik si induk (
class Zombie extends Enemy {
    void walk(){
        System.out.println("Zombie jalan-jalan");
    }
}
0).

Objek anak dari

class Zombie extends Enemy {
    void walk(){
        System.out.println("Zombie jalan-jalan");
    }
}
0 belum memiliki method
class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
8 dan
class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
9, akhirnya mengambil milik induknya.

Lalu bagaimana kalau kita ingin membuat agar semua class anak memiliki method

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
8 dan
class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
9 yang berbeda dari induk?

Jawabanya: menggunakan method overriding.

Method Overriding

Method Overriding dilakukan saat kita ingin membuat ulang sebuah method pada sub-class atau class anak.

Method Overriding dapat dibuat dengan menambahkan anotasi

class Zombie extends Enemy {
    void walk(){
        System.out.println("Zombie jalan-jalan");
    }
}
6 di atas nama method atau sebelum pembuatan method.

Contoh:

class Zombie extends Enemy {
    void walk(){
        System.out.println("Zombie jalan-jalan");
    }
}
7

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
4

Artinya kita menulis ulang method

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
8 dan
class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
9 di class anak.

Sekarang mari kita buat method overriding untuk semua class anak.

File:

class Pocong extends Enemy {
    void jump(){
        System.out.println("loncat-loncat!");
    }
}
0

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
5

Dalam rumus luas dan keliling lingkaran, kita bisa memanfaatkan konstanta

class Pocong extends Enemy {
    void jump(){
        System.out.println("loncat-loncat!");
    }
}
1 sebagai nilai PI. Konstanta ini sudah ada di Java.

File:

class Pocong extends Enemy {
    void jump(){
        System.out.println("loncat-loncat!");
    }
}
2

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
6

File:

class Pocong extends Enemy {
    void jump(){
        System.out.println("loncat-loncat!");
    }
}
3

class Pocong {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void jump(){
        //...
    }
}
7

Untuk class

class Pocong extends Enemy {
    void jump(){
        System.out.println("loncat-loncat!");
    }
}
4, kita hanya melakukan override terhadap method
class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
8 saja. Karena untuk method
class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
9, segitiga memiliki rumus yang berbeda-beda.

…atau mungkin bisa diturunkan lagi class segitiga ini menjadi:

class Pocong extends Enemy {
    void jump(){
        System.out.println("loncat-loncat!");
    }
}
7,
class Pocong extends Enemy {
    void jump(){
        System.out.println("loncat-loncat!");
    }
}
8,
class Pocong extends Enemy {
    void jump(){
        System.out.println("loncat-loncat!");
    }
}
9, dsb.

Sekarang mari kita coba eksekusi class

class Enemy {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        System.out.println("Serang!");
    }
}
7 lagi:

Penggunaan fungsi INHERATANCE pada PHP

Tunggu dulu!

Tadi di awal katanya tidak efisien menulis berulang-ulang, lah ini?

Iya di awal kita menulis atribut dari

class Burung {
    String name;
    int hp;
    int attackPoin;

    void attack(){
        // ...
    }

    void walk(){
        //...
    }

    void jump(){
        //...
    }

    void fly(){
        //...
    }
}
1 yang sama berulang-ulang. Berbeda dengan yang ini, kita memang menulis method yang sama. Tapi isi atau rumus di dalam method-nya berbeda-beda.

Ini nanti akan kita bahas dalam Polymorfisme (banyak bentuk).

Akhir Kata…

Inheritance adalah salah satu pilar penting dalam OOP yang harus dipahami. Karena kita akan sering menggunakannya dalam pembuatan program.

Kapan menggunakan inheritance?

Kita baru perlu menerapkan inheritance Kita baru perlu menerapkan inheritance pada saat kita jumpai ada suatu class yang dapat diperluas dari class lain yang dapat diperluas dari class lain. class maka perilaku tersebut secara otomatis class, maka perilaku tersebut secara otomatis diwariskan ke subclass.

Apa itu inheritance pada PHP?

Pewarisan atau inheritance dalam Object-Oriented PHP adalah mewariskan property dan method baik public maupun protected kepada class lain.

Kenapa menggunakan inheritance?

Mengapa Menggunakan Inheritance? Konsep inheritance atau pewarisan akan sangat berguna ketika suatu kode ingin digunakan kembali pada sebuah class baru atau menggunakan kembali atribut dan method dari sebuah class yang telah ada ketika Anda membuat sebuah class baru.

Jelaskan apa itu inheritance dan berikan contoh?

Pengertian Inheritance dan Contohnya Dalam konsep OOP, inheritance adalah suatu kemampuan membentuk class baru yang memiliki fungsi turunan dan mirip dengan fungsi yang sudah ada sebelumnya. Dengan kata lain, inheritance menurunkan atau mewariskan metode yang dimilikinya kepada class lain.