Kita kembali lagi ke contoh awal kita ya guys, yaitu Object User dan Object Properti sebagai simulasi pada materi mixin kali ini
.
Konsep mixin
adalah konsep baru dalam pemrograman berorientasi objek dan tidak dimiliki oleh bahasa pemrograman lainnya.
Konsep sederhananya kan begini ya teman-teman
- Sebuah class hanya boleh mengextends satu class saja.
- Sebuah class boleh mengimplementasikan banyak interface/abstract class.
ini adalah konsep dasar dari pewarisan atau inheritance.
dan akan terjadi beberapa hal yang harus kita lakukan jika kita mengextends sebuah class dan mengimplementasikan sebuah interface/abstract class.
- Saat kita mengextends sebuah class, maka kita akan mendapatkan semua properti dan method yang ada di class tersebut tanpa harus menuliskannya di class anaknya.
- Saat kita mengimplementasikan sebuah interface/abstract class, maka kita akan mendapatkan semua properti dan method yang ada di interface/abstract class tersebut dan harus menuliskannya di class anaknya.
- Jika sebuah abstract class digunakan dengan kata kunci
extends
maka kita tetap harus memanggil semua method yang dimiliki dengan tambahan kata kunci@override
di atas method tersebut.
ini perbedaan yang sangat mencolok antara kata kunci extends
dan kata kunci implements
. Namun, ada satu masalah nih guys, yaitu kita ingin ,engextends kelas baru, anggap saja kita punya class jual properti yang akan kita pasang ke class rumah, sedangkan class rumah adalah anak dari class Properti.
Bisa pake metode implement tapi kita harus menuliskan semua method yang ada di class JualProperti, dan ini akan membuat kita menulis kode yang berulang-ulang.
nah, disini lah konsep mixin akan membantu kita untuk mengatasi masalah ini.
Perhatikan kode berikut ini :
abstract class CaraKerjaProperti {
void hitungLuasBangunan();
void hitungLuasTanah();
}
mixin JualProperti {
int hargaProperti = 0;
void kurangiHarga() {
hargaProperti -= 1000000;
}
void tambahHarga() {
hargaProperti += 1000000;
}
}
class Properti {
Properti(
{this.nama,
this.alamat,
this.panjangBangunan,
this.lebarBangunan,
this.panjangTanah,
this.lebarTanah});
String? nama;
String? alamat;
double? panjangBangunan;
double? lebarBangunan;
double? panjangTanah;
double? lebarTanah;
}
class Rumah extends Properti with JualProperti implements CaraKerjaProperti{
@override
void hitungLuasBangunan() {
}
@override
void hitungLuasTanah() {
}
}
Perhatikan class Rumah, kita mengextends class Properti, dan mengimplementasikan interface CaraKerjaProperti, dan juga kita mengmixin class JualProperti.
Kata kunci mixin ini adalah:
- class yang akan dimixin diawali dengan kata kunci
mixin
dan diikuti dengan nama classnya. - class yang akan dimixin tidak boleh mengextends class lain.
- class yang akan dimixin tidak boleh mengimplementasikan interface/abstract class lain.
- class yang akan dimixin tidak boleh memiliki constructor.
- untuk mengimplementasikan class mixin, harus menggunakan kata kunci
with
diikuti dengan nama class mixinnya. - Kata kunci
with
harus digunakan sebelum kataimplements
.
Ilmu adalah dongkrak terbaik untuk merubah nasib hidup manusia. dan ilmu tidak hanya ada dibangku sekolah saja. Belajarlah selagi mampu! Penulis