Вы находитесь на странице: 1из 55

#11

Inheritance
Objectives
 Memahami konsep dan prinsip utama OOP
 Bisa mengidentifikasi class, object, message, dll.
 Bisa berpikir secara object-oriented

11 July 2013 Algoritma & Pemrograman 2


Konsep OOP [1]
 Kelas (class)
 gabungan data-data dan operasi-operasi (methods)
dengan pembatasan akses (access modifier)
 satu class membentuk satu tipe tersendiri
 Obyek (object)
 personifikasi/instance dari suatu tipe kelas
 OOP memudahkan kita mengatur sistem yang
kompleks. Bagaimana itu bisa dilakukan?

11 July 2013 Algoritma & Pemrograman 3


Konsep OOP [2]
 Diawali dari masalah yang akan dipecahkan
dan berpikir pada tingkat aplikasi, dalam object-
object dan interaksi-interaksi yang diperlukan
 Contoh:
 Jika aplikasinya adalah aplikasi window, maka object-
object yang relevan adalah: window, scroll bar,
tombol dan dialog box
 Jadi, sebuah program object-oriented adalah
sebuah deskripsi atau simulasi dari sebuah
aplikasi. Object-object dalam program adalah
entitas dalam simulasi tersebut.
11 July 2013 Algoritma & Pemrograman 4
External View of Objects
(Problem-Oriented) [1]
 Sebuah object dapat merepresentasikan entitas apa
saja dalam solusi sebuah masalah.
 Contoh: penumpang, agen tiket, antrian, tiket dalam sistem
keberangkatan di airport
 Seorang perancang program harus menciptakan /
menemukan object-object yang sesuai untuk
programnya
 Dalam suatu “program menggambar” obyek-obyek dapat berupa
kotak, elips, lingkaran dan garis
 Object-object berinteraksi dengan saling mengirimkan
pesan (message). Komputasi dicirikan oleh pesan-
pesan yang dikirim dan diterima oleh object-object
dalam program.

11 July 2013 Algoritma & Pemrograman 5


External View of Objects
(Problem-Oriented) [2]
 Komputasi dicirikan dengan observable
behaviour of objects, tidak dengan details of
how that behaviour is implemented

11 July 2013 Algoritma & Pemrograman 6


Internal View of Objects
(Implementation-Oriented)
 Masing-masing object seperti masing-masing komputer
dengan code/program-nya masing-masing dan
mempunyai private memory untuk menyimpan nilai.
 Sebuah pesan dikirim dari satu object ke object lain
dilakukan dengan cara pemanggilan method object
yang menerima pesan; object yang dikirimi pesan
melakukan code/programnya sebagai respon-nya
 Sebagai respon terhadap sebuah pesan, object yang
menerima pesan tersebut mungkin mengubah nilai
dalam private memory-nya, mengirim pesan ke
object lain, dan mungkin mengembalikan nilai.
11 July 2013 Algoritma & Pemrograman 7
Contoh :
// Berkas : KelasMobil2.java

class Mobil{
// Variabel instan
String warna;
int tahunProduksi;

//Method
void isiData (String warnaMobil, int tahunProduksiMobil) {
warna = warnaMobil;
tahunProduksi = tahunProduksiMobil;
}

String ambilWarna () {
return warna;
}

int ambilTahunProduksi () {
return tahunProduksi;
}
}

11 July 2013 Algoritma & Pemrograman 8


Contoh : (lanjutan)
public class KelasMobil2 {
public static void main (String [] args) {
Mobil mobilku = new Mobil ();

//Mengisi variabel instan


mobilku.isiData("Merah", 2003);

//Menampilkan isi variabel instan


System.out.println("Warna :" + mobilku.ambilWarna());
System.out.println("Tahun :" +
mobilku.ambilTahunProduksi());
}
}

11 July 2013 Algoritma & Pemrograman 9


Prinsip OOP
 Berdasarkan empat prinsip utama:
 abstraksi (abstraction)
 pembungkusan (encapsulation)
 pewarisan (inheritance)
 poliformisme (polymorphism)

11 July 2013 Algoritma & Pemrograman 10


Abstraksi [1]
 Untuk memproses sesuatu dari dunia nyata dengan
menggunakan komputer, kita harus menentukan
ciri-ciri/sifat-sifat yang penting yang perlu
direpresentasikan dalam sistem komputer
 Ciri-ciri terpilih bergantung pada apa yang akan kita
lakukan
 Contoh:
Mobil
Rekor polisi ≠ Rekor bengkel
no. mesin no. registrasi
no. registrasi pemilik
pemilik kapan diganti oli
besar pajak deskripsi servis
11 July 2013 Algoritma & Pemrograman 11
Abstraksi [2]
 Abstraksi: proses penentuan ciri-ciri/detil-detil
yang penting dari sebuah object
 Desain program mulai dengan abstraksi

11 July 2013 Algoritma & Pemrograman 12


11 July 2013 Algoritma & Pemrograman 13
Encapsulation
 Encapsulation: penggabungan data dan operasi-
operasi yang bersesuaian menjadi satu kesatuan
 Keutuhan data dijaga dengan adanya pengendalian
akses (information hiding & access modifier)
 Gabungan data dan operasi-operasinya, dengan
pembatasan akses itu disebut kelas (class)
 Satu class membentuk satu tipe data tersendiri
 Instance dari suatu tipe class disebut obyek (object)

11 July 2013 Algoritma & Pemrograman 14


11 July 2013 Algoritma & Pemrograman 15
Encapsulation: Contoh
// fokus pada gizi
public class Buah field
{
private int jumlahGram; method
private int kaloriPerGram;
public int kaloriTotal ()
{
return jumlahGram * kaloriPerGram;
}
}
public class ABC
{ variabel object

Buah apel, mangga, jeruk;
}

11 July 2013 Algoritma & Pemrograman 16


Pewarisan (Inheritance) [1]
 Membuat kelas baru dari kelas yang sudah ada
dengan mengembangkannya (extends).
 Menggunakan kata kunci extends.
 Kelas yang lama dapat mewariskan field dan
methodnya kepada kelas baru.
 Kelas yang baru dapat menambahkan field dan
method baru.

11 July 2013 Algoritma & Pemrograman 17


Pewarisan (Inheritance) [2]
 Inheritance menimbulkan suatu hirarki:
induk superclass
Lebih spesifik
dari pada superclass
anak subclass
 Satu induk saja: single inheritance
 Lebih dari satu induk: multiple inheritance
 Himpunan object-object yang termasuk dalam subclass
merupakan subset dari himpunan object-object yang
termasuk dalam superclass.
 Dalam Java, semua class yang kita buat adalah
subclass dari class built-in yang disebut class Object.
Nama lengkapnya: java.lang.Object

11 July 2013 Algoritma & Pemrograman 18


11 July 2013 Algoritma & Pemrograman 19
Notasi UML (Unified Modeling
Language)
 Dibuat oleh Grady Booch, Ivar
Jacobson, dan James Rumbaugh
 Dalam diagram object, nama class di-
garis-bawah-i
 Dalam diagram class, nama class
tidak di-garis-bawah-i
 Anak panah berasal dari subclass
menuju ke superclass

11 July 2013 Algoritma & Pemrograman 20


Inheritance-Animal, Fish and Cat Objects

11 July 2013 Algoritma & Pemrograman 21


Inheritance-Concrete
Implementation of All Classes

11 July 2013 Algoritma & Pemrograman 22


Masalah pada multiple inheritance

11 July 2013 Algoritma & Pemrograman 23


Inheritance
 Contoh: kita buat sebuah class BuahPeras sebagai
subclass dari class Buah.
class Buah
{
… // field dan method
}
class BuahPeras extends Buah
{
void peras () { ... }
}
 class  subclass : spesialisasi
 BuahPeras “is a” Buah

11 July 2013 Algoritma & Pemrograman 24


Inheritance: Contoh Penggunaan
class Charlie
{
Private int a =5;
Protected int b =7;

Public void info() {


System.out.println(“Dipanggil pada “ +
this.getClass().getName());
System.out.println(“a = “ + a);
System.out.println(“b = “ + b);
}
}

11 July 2013 Algoritma & Pemrograman 25


Inheritance: Contoh Penggunaan
(lanjutan)
class Delta extends Charlie
{
Private int c =9;

Public void info() {


System.out.println(“Dipanggil pada “ +
this.getClass().getName());
System.out.println(“a = “ + a);
System.out.println(“b = “ + b);
System.out.println(“c = “ + c);

}
}
11 July 2013 Algoritma & Pemrograman 26
Inheritance: Contoh Penggunaan
(lanjutan)
class Delta1 extends Charlie
{
Private int c =9;

Public void info() {


System.out.println(“Dipanggil pada “ +
this.getClass().getName());
System.out.println(“b = “ + b);
System.out.println(“c = “ + c);

}
}
11 July 2013 Algoritma & Pemrograman 27
Inheritance: Contoh Penggunaan
(lanjutan)
class PenentuProtec
{
Public static void main(String [] args)
{
Charlie objX = new Charlie ();
objX.info ();

Delta1 objY = new Delta1 ();


objY.info ();
}
}

11 July 2013 Algoritma & Pemrograman 28


Hasil : Class PenentuProtec
Dipanggil pada Charlie
a=5
b=7
Dipanggil pada Delta1
b=7
c=9

11 July 2013 Algoritma & Pemrograman 29


Inheritance: Contoh memanggil
constructor Superkelas
class Echo extends Charlie
{
Private int c =9;

Public void info()


{
Super.info();// Panggil Method pada
Superkelas
System.out.println(“c = “ + c);

}
}
11 July 2013 Algoritma & Pemrograman 30
Inheritance: Contoh memanggil
constructor Superkelas (lanjutan)
class Superkelas
{
Public static void main(String []
args)
{
Echo obj = new Echo ();
obj.info ();
}
}
11 July 2013 Algoritma & Pemrograman 31
Hasil : Class Superkelas
Dipanggil pada Echo
a=5
b=7
c=9

11 July 2013 Algoritma & Pemrograman 32


Casting
 Tipe subclass dapat secara otomatis di-convert
ke tipe superclass-nya. Tetapi dari superclass ke
subclass, perlu adanya cast. Jika ternyata tidak
sesuai, maka akan terjadi exception.

11 July 2013 Algoritma & Pemrograman 33


Memanggil Constructor Lain [1]
 Suatu constructor dapat memanggil contructor
lain dalam class yang sama dengan
menggunakan:
this (...);
 Demikian pula, suatu constructor dapat
memanggil constructor dari superclassnya
dengan menggunakan
super (...);
 Pemanggilan ini harus merupakan statement
pertama dalam constructor.
11 July 2013 Algoritma & Pemrograman 34
Memanggil Constructor Lain [2]
 Jika constructor dalam subclass tidak
memanggil constructor dari superclass secara
eksplisit, maka constructor default dari
superclass yang dipanggil secara otomatis
sebagai statement pertama. Jika superclass itu
tidak mempunyai constructor default, maka
compiler akan melaporkan error.

11 July 2013 Algoritma & Pemrograman 35


Access Modifier & Inheritance

11 July 2013 Algoritma & Pemrograman 36


Latihan :

11 July 2013 Algoritma & Pemrograman 37


Polimorfisme (Polymorfism) [1]
 “banyak bentuk”
 Dalam Java ada 2 macam polimorfisme:
 overloading: polimorfisme trivial
 overriding: polimorfisme sejati

11 July 2013 Algoritma & Pemrograman 38


Overloading
 Overloading: penggunaan satu nama untuk beberapa
method (fungsi) yang berbeda dalam suatu kelas
 Method-method yang sama namanya itu dibedakan satu
dengan yang lain berdasarkan signature-nya
 Signature suatu fungsi (method) ditentukan oleh:
 jumlah argumen
 tipe argumen
 urutan argumen
 Overloading (binding) ditangani pada waktu kompilasi
(compile time)

11 July 2013 Algoritma & Pemrograman 39


Overriding
 Poliformisme jenis ini ditangani (binding) pada runtime
 Terjadi apabila suatu class mempunyai suatu method
yang nama dan signature-nya sama dengan nama
dan signature dari suatu method dari superclass ybs.
 Method dalam class turunan itu menimpa (override)
method dalam superclass-nya.
 Method mana yang dipanggil (binding) pada waktu run
(runtime) tergantung pada tipe object yang
bersangkutan
 Simak contoh berikut ini:
 Kembali ke kelas Buah dan BuahPeras. Andaikan cara kupas
BuahPeras lain daripada Buah lainnya.

11 July 2013 Algoritma & Pemrograman 40


public class Buah
{
private int jumlahGram;
private int kaloriPerGram;
public Buah ()
{
this (50, 1);
}
public Buah (int gram, int kaloriPerGram)
{
jumlahGram = gram;
this.kaloriPerGram = kaloriPerGram;
}
public int kaloriTotal ()
{
return jumlahGram * kaloriPerGram;
}
public void kupas ()
{
System.out.println ("Buah dikupas");
}
}
11 July 2013 Algoritma & Pemrograman 41
public class BuahPeras extends Buah
{
// use default constructor
// public BuahPeras () { super (); }
public void peras ()
{
System.out.println ("Buah diperas");
}
public void kupas ()
{
System.out.println ("BuahPeras dikupas.");
}
}

11 July 2013 Algoritma & Pemrograman 42


public class Contoh
{
public static void main (String args[])
{
Buah buah = new Buah (75, 10);
BuahPeras jeruk = new BuahPeras ();
System.out.println ("Kalori total buah = "
+ buah.kaloriTotal ());
System.out.println ("Kalori total jeruk = "
+ jeruk.kaloriTotal ());
buah.kupas ();
jeruk.kupas ();
buah = jeruk;
buah.kupas ();
}
}
11 July 2013 Algoritma & Pemrograman 43
Output
# java Contoh
Kalori total buah = 750
Kalori total jeruk = 50
Buah dikupas
BuahPeras dikupas.
BuahPeras dikupas.

 Polimorfisme berarti suatu object dapat mempunyai


berbagai bentuk, yaitu: sebagai object dari classnya
sendiri ataupun sebagai object dari superclassnya
11 July 2013 Algoritma & Pemrograman 44
Polimorfisme
 Dalam mendefinisikan method untuk suatu
subclass, ada 3 kemungkinan:
 Meng-override method dari superclass. Yaitu:
apabila method yang dibuat mempunyai signature
yang sama (nama sama dan daftar parameternya
sama) dengan suatu method dari superclass-nya.
 Meng-inherit method dari superclass. Method dari
superclass yang tidak di-override akan diwariskan
secara otomatis kepada subclass.
 Membuat method yang benar-benar baru

11 July 2013 Algoritma & Pemrograman 45


Inheritance
 Semua variabel dari superclass diwariskan
kepada subclass.
 Apa yang terjadi jika kita membuat variabel baru
dengan nama yang sama dengan variabel
superclass?
 Kedua variabel sama-sama ada, tetapi variabel dalam
subclass itu menutupi variabel dalam superclass.
 Dalam method non-static, terdapat reference
super yang dapat dipakai untuk mengakses
method atau variabel dari superclass yang
memang dapat diakses

11 July 2013 Algoritma & Pemrograman 46


Polimorfisme
 Ketika terjadi pemanggilan sebuah method instance,
class/type dari object tersebut yang menentukan
implementasi method mana yang digunakan.
 Ada tidaknya sebuah method ditentukan dari tipe
variabel reference-nya
 Dalam mengakses sebuah field, ditentukan dari tipe
variabel reference-nya
 Keyword “super” berlaku sebagai reference ke object
tetapi dianggap sebagai instance dari superclass-nya.
 Dalam pengaksesan method/field static dengan
menggunakan variabel reference, tipe dari variabel
reference yang menentukan method/field mana yang
diakses (BAD PROGRAMMING PRACTICE)

11 July 2013 Algoritma & Pemrograman 47


Polimorfisme: Contoh
public class Mahasiswa {
public String str = "Mahasiswa";
public void show ()
{
System.out.println("show() in Mahasiswa: “
+ str);
}
public String getStr ()
{
return "Class Mahasiswa";
}
}

11 July 2013 Algoritma & Pemrograman 48


public class MahasiswaUPM extends Mahasiswa
{
public String str = "Mahasiswa UPM";
public void show () {
System.out.println ("show() in MahasiswaUPM: “
+ str);
}
public void cetak () {
Mahasiswa mhsRef = this;
System.out.println ("getstr() = " + getStr());
System.out.println ("this.getstr() = "
+ this.getStr());
System.out.println ("mhsRef.getstr() = "
+ mhsRef.getStr());
System.out.println ("super.getstr() = "
+ super.getStr());
}
11 July 2013 Algoritma & Pemrograman 49
public String getStr () {
return "Class Mahasiswa UPM";
}
public static void main (String[] args)
{
MahasiswaUPM mhsUPM = new MahasiswaUPM ();
Mahasiswa mhs = mhsUPM;
mhs.show ();
mhsUPM.show ();
System.out.println ("mhs.str = " + mhs.str);
System.out.println ("mhsUPM.str = " +
mhsUPM.str);
mhsUPM.cetak ();
}
}
 Output?

11 July 2013 Algoritma & Pemrograman 50


Polimorfisme
 Prinsip bahwa tipe sesungguhnya dari
suatu object menentukan method mana
dalam hirarki yang dipanggil, dikenal
sebagai polimorfisme.
 Polimorfisme juga berarti bahwa suatu
object dapat mempunyai berbagai bentuk,
yaitu: sebagai object dari classnya sendiri
ataupun sebagai object dari
superclassnya.
11 July 2013 Algoritma & Pemrograman 51
Early Binding dan Late Binding
 Berkenaan dengan overloading,
penentuan method mana yang dipakai,
dilakukan pada waktu kompilasi (compile
time). Proses penentuan tersebut disebut
early binding.
 Berkenaan dengan overriding, penentuan
method mana yang dipakai, dilakukan
pada waktu running (run time). Proses
penentuan ini disebut late binding.
11 July 2013 Algoritma & Pemrograman 52
Operator instanceof
 Digunakan untuk menguji apakah suatu object termasuk dalam
suatu class tertentu.
<object> instanceof <nama class>
 me-return true, jika <object> adalah suatu instance dari <nama
class>.
 Contoh:
Rekening rk = new Rekening ();
Rectangle rt = new Rectangle ();
System.out.println (rk instanceof Rekening);
// cetak true
System.out.println (rt instanceof Rekening);
// cetak false
System.out.println (rk instanceof Object);
// cetak true
 Berguna untuk mengetahui apakah suatu object dapat dengan
aman di-cast ke subclass-nya.
11 July 2013 Algoritma & Pemrograman 53
Ringkasan [1]
 Empat prinsip utama OOP:
 Abstraction
 Encapsulation
 Inheritance
 Polymorfisme
 Ketika kita mendefinisikan sebuah subclass, kita
dapat menambahkan variabel instance baru,
method baru dan menimpa (override) method.
 Reference super dapat digunakan untuk
memanggil method/field pada superclass-nya.
11 July 2013 Algoritma & Pemrograman 54
Ringkasan [2]
 Tipe subclass dapat secara otomatis di-convert
ke tipe superclass-nya. Tetapi dari superclass ke
subclass, perlu adanya cast. Jika ternyata tidak
sesuai, maka akan terjadi exception
ClassCastException.
 Untuk memanggil constructor pada superclass,
bisa digunakan keyword super pada statement
pertama dalam constructor subclass.

11 July 2013 Algoritma & Pemrograman 55

Вам также может понравиться