Konsep PBO (inheritance, polimorfise, interface)
D. Inheritance
Class
dapat didefinisikan dengan referensi pada class yang lain yang telah
terdefinisi. Inheritance merupakan pewarisan atribut dan method
pada sebuah class yang diperoleh dari class yang telah terdefinisi tersebut.
Setiap subclass akan mewarisi state (
variabel-variabel ) dan behaviour ( methodmethod) dari superclass-nya.
Subclass kemudian dapat menambahkan state dan behaviour
baru yang spesifik dan dapat pula memodifikasi ( override )
state dan behaviour yang diturunkan oleh superclass-nya.
Keuntungan dari inheritance
adalah :
Subclass menyediakan state/behaviour yang
spesifik yang membedakannya dengan superclass, hal ini akan
memungkinkan programmer Java untuk menggunakan ulang source code dari
superclass yang telah ada.
Programmer
Java dapat mendefinisikan superclass khusus yang bersifat
generik, yang disebut abstract class, untuk mendefinisikan class
dengan behaviour dan state secara umum.
Istilah dalam inheritance yang
perlu diperhatikan :
Extends
Keyword ini harus kita tambahkan
pada definisi class yang menjadi subclass.
Superclass
Superclass digunakan untuk
menunjukkan hirarki class yang berarti class dasar dari subclass/class anak.
Subclass
Subclass adalah class anak atau
turunan secara hirarki dari superclass.
Super
Keyword ini digunakan untuk
memanggil konstruktor dari superclass atau menjadi variabel yang mengacu pada
superclass.
Methode Overriding
Pendefinisian ulang method yang
sama pada subclass.
Dalam inheritance,
method overriding berbeda dengan method overloading.
Kalau method overriding adalah mendefinisikan kembali method yang
sama, baik nama method maupun signature atau parameter yang diperlukan dalam
subclass, kalau method overloading adalah mendefinisikan method
yang memiliki nama yang sama, tetapi dengan signature yang berbeda dalam
definisi class yang sama.
Contoh Inheritance.java
class
A {
int
x;
int
y;
void
TampilkanNilaixy() {
System.out.println("Nilai
x : " + x + ", y : " + y);
}
}
class
B extends A {
int
z;
void
TampilkanJumlah() {
//subclass
dapat mengakses member dari superclass
System.out.println("Jumlah
: " + (x+y+z));
}
}
class
Inheritance {
public
static void main(String[] args) {
A
VarsuperOb = new A();
B
VarsubOb = new B();
System.out.println("SuperClass");
VarsuperOb.x
= 10;
VarsuperOb.y
= 20;
VarsuperOb.TampilkanNilaixy();
System.out.println("SubClass");
//member
superclass dapat diakses dari subclass nya
VarsubOb.x
= 5;
VarsubOb.y
= 4;
VarsubOb.TampilkanNilaixy();
System.out.println("SubClass
Jumlah");
//member
tambahan yang hanya ada dalam subclass
VarsubOb.z
= 30;
VarsubOb.TampilkanJumlah();
System.out.println("SubClass");
VarsubOb.x
= 15;
VarsubOb.y
= 14;
VarsubOb.TampilkanNilaixy();
System.out.println("SuperClass");
VarsuperOb.x
= 10;
VarsuperOb.y
= 20;
//super.x
= 100; error
//super.y
= 200; error
VarsuperOb.TampilkanNilaixy();
System.out.println("SubClass
Jumlah");
VarsubOb.z
= 60;
VarsubOb.TampilkanJumlah();
}
}
E. Polimorfisme
Kata polimorfisme
yang berarti satu objek dengan banyak bentuk yang berbeda, adalah
konsep sederhana dalam bahasa pemrograman berorientasi objek yang berarti
kemampuan dari suatu variabel referensi objek untuk memiliki aksi berbeda bila
method yang sama dipanggil, dimana aksi method tergantung dari tipe objeknya.
Kondisi yang harus dipenuhi supaya polimorfisme dapat
diimplementasikan adalah :
Method yang dipanggil harus
melalui variabel dari basis class atau superclass.
Method yang dipanggil harus juga
menjadi method dari basis class.
Signature method harus sama baik
pada superclass maupun subclass.
Method access attribute pada
subclass tidak boleh lebih terbatas dari basis class.
Contoh Polimorfisme.java
abstract
class Bentuk {
protected
int panjang;
protected
int lebar;
public
String getBentuk() {
return
"Bentuk Dasar";
}
public
abstract int hitungLuas();
}
class
BujurSangkar extends Bentuk {
public
BujurSangkar(int panjang1, int lebar1) {
this.panjang
= panjang1;
this.lebar
= lebar1;
}
public
String getBentuk() {
return
"Bentuk Bujur Sangkar";
}
public
int hitungLuas() {
return
panjang*lebar;
}
}
class
SegiTiga extends Bentuk {
public
SegiTiga(int panjang2, int lebar2) {
this.panjang
= panjang2;
this.lebar
= lebar2;
}
//public
String getBentuk() {
//return
"Bentuk Segi Tiga";
//return
"";
//}
public
int hitungLuas() {
return
this.panjang*this.lebar/2;
}
}
class
Polimorfisme {
public
static void cetakLuasBentuk(Bentuk btk) {
System.out.println(btk.getBentuk()
+ " dengan luas " +
btk.hitungLuas());
}
public
static void main(String[] args) {
BujurSangkar
bs = new BujurSangkar(10,20);
BujurSangkar
bs1 = new BujurSangkar(10,20);
SegiTiga
st = new SegiTiga(5,10);
SegiTiga
st1 = new SegiTiga(50,100);
cetakLuasBentuk(bs);
cetakLuasBentuk(bs1);
cetakLuasBentuk(st);
cetakLuasBentuk(st1);
}
}
F. Interface
Pada
Java juga dikenal konsep interface, yang merupakan device yang digunakan
untuk komunikasi antar objek berbeda yang tidak memiliki hubungan apapun. Interface
bisa dikatakan sebagai protokol komunikasi antar objek tersebut.
Contoh Interface.java
interface Control {
public
void pindahChannel(int channel);
public
void PerbesarVolume(int intensitas);
public
void PerkecilVolume(int intensitas);
}
class
TelevisiA implements Control {
String[]
channelTv = {"RCTI","SCTV","INDOSIAR","TRANS
TV","TPI"};
public
void pindahChannel(int channel) {
System.out.println("Pindah
channel pada tv A ke : " + channelTv[channel]);
}
public
void PerbesarVolume(int intensitas) {
System.out.println("Perbesar
intensitas volume pada tv A sebanyak : " +
intensitas);
}
public
void PerkecilVolume(int intensitas) {
System.out.println("Perkecil
intensitas volume pada tv A sebanyak : " +
intensitas);
}
}
class
TelevisiB implements Control {
String[]
chanTv = {"TVRI","LA TV","TV
7","RCTI","SCTV"};
public
void pindahChannel(int channel) {
System.out.println("Perintah
pindah channel pada tv B ke : " +
chanTv[channel]);
}
public
void PerbesarVolume(int intensitas) {
System.out.println("Perbesar
intensitas volume pada tv B sebanyak : " +
intensitas);
}
public
void PerkecilVolume(int intensitas) {
System.out.println("Perkecil
intensitas volume pada tv B sebanyak : " +
intensitas);
}
}
class
RemoteControl {
public
static final int PINDAH_CHANNEL = 1;
public
static final int PERBESAR_VOLUME = 2;
public
static final int PERKECIL_VOLUME = 3;
public
void kirimPerintahKeTv(int aksi,Control tv,int tombol) {
switch(aksi)
{
case
PINDAH_CHANNEL:
tv.pindahChannel(tombol);
break;
case
PERBESAR_VOLUME:
tv.PerbesarVolume(tombol);
break;
case
PERKECIL_VOLUME:
tv.PerkecilVolume(tombol);
}
}
}
class
Interface {
public static void main(String[]
args) {
TelevisiA
tvA = new TelevisiA();
TelevisiB
tvB = new TelevisiB();
RemoteControl
rc = new RemoteControl();
//Kirim
perintah ke tvA
rc.kirimPerintahKeTv(RemoteControl.PINDAH_CHANNEL,tvA,2);
rc.kirimPerintahKeTv(RemoteControl.PERBESAR_VOLUME,tvA,5);
//Kirim
perintah ke tvB
rc.kirimPerintahKeTv(RemoteControl.PINDAH_CHANNEL,tvB,1);
rc.kirimPerintahKeTv(RemoteControl.PERKECIL_VOLUME,tvB,3);
}
}
Komentar
Posting Komentar