Inheritance Konsep Inheritance Protected Member Hubungan antara Superclass dan subclass Hubungan antara obyek-obyek dalam turunan Nested class
Inheritance : Secara bebas Inheritance di terjemahkan sebahagai pewarisan. Yaitu sebuah konsep dimana kita bisa membuat sebuah class baru dengan mengembangkan kelas yang pernah dibuat sebelumnya. Metode OOP memungkinkan kita memperoleh seluruh data dari classinduk (base-class) untuk diberikan kepada class anak (derived-class) tanpa harus melakukan copy-and-paste seluruh kode base-class. Contoh : kita akan membuat class Silinder seperti digambarkan dibawah ini r Catt: Selain tinggi silinder (t), silinder juga memiliki jari-jari (r) lingkaran pada kedua ujungnya. t
Berdasarkan gambar tersebut bisa dibuat bagan untuk class Silinder dengan mencantumkan seluruh data dan metodenya sbb: Silinder double jariJari double tinggi void setJariJari(double) void setTinggi(double) double getJariJari() double getTinggi() double hitungLuas() double hitungVolume()
Kemudian kita coba membandingkan class Lingkaran terdahulu dengan class Silinder yang akan kita buat : Lingkaran Silinder double jariJari double jariJari double tinggi void setJariJari(double) double getJariJari() double hitungLuas() double hitungkeliling() void setJariJari(double) void setTinggi(double) double getJariJari() double getTinggi() double hitungLuas() double hitungVolume() Dari perbandingan tsb, terdapat data dan method yang sama pada kedua class. Kita juga bisa melihat bahwa class Silinder merupakan superset dari class Lingkaran. Metode OOP mengijinkan kita membuang data dan method dari class superset yang ada pada kelas subset-nya. Sehingga menjadi sbb:
Lingkaran Silinder double jariJari double tinggi void setJariJari(double) double getJariJari() double hitungLuas() double hitungkeliling() void setTinggi(double) double getTinggi() double hitungLuas() double hitungVolume() Catt: Tidak semua method class Lingkaran kita hilangkan pada class Silinder. Contoh method hitungLuas() tetap digunakan, hanya saja isinya berbeda, karena menghitung luas Lingkaran tentu berbeda dengan menghitung luas Silinder, pada class silinder kita menambahkan method hitungVolume() karena bangunan Geometris Silinder adalah 3-Dimensi. Sedangkan untuk method hitungkeliling(), meski pada class Silindersudah kita buang, namun user tetap bisa menggunakannya karena method ini secara otomatis diwariskan ke class Silinder. Pada hal kita tahu Silinder tidak mempunyai keliling.
Lingkaran double jariJari void setJariJari(double) double getJariJari() double hitungLuas() double hitungkeliling() Kedua struktur class ini bisa digambarkan secara hirarki, dengan menggunakan model Unified Modelling Language (UML) dari Rumbaugh dkk: Silinder double tinggi void setTinggi(double) double getTinggi() double hitungLuas() double hitungVolume()
Implementasi Java untuk class Silinder sbb: 1 class Silinder extends Lingkaran 2 { private double tinggi; public Silinder() { setJariJari (1); setTinggi (1); } 9 public Silinder(double r, double t) 10 { 11 setJariJari (r); 12 SetTinggi (r); Class Silinder merupakan turunan dari class Lingkaran
16 public void setTinggi (double t) 17 { 18 if (t>0) tinggi = r; 17 { 18 if (t>0) tinggi = r; 19 } 20 public double getTinggi() 21 { 22 return (tinggi); 23 } 24 public double hitungLuas() 25 { 26 return (super.hitungLuas() * 2.0 + super.hitungKeliling() * tinggi); } 28 public double hitungVolume() 29 { 30 return (Math.PI * 2.0 * jariJari * tinggi); 31 } 32 } Kata kunci super merujuk kepada class induk
Secara Lengkap program dapat dilihat sbb: 1 // --------------------------------------------- 2 // Definisi class Lingkaran 3 // --------------------------------------------- 4 class Lingkaran 5 { 6 private double jariJari; 7 public Lingkaran() 8 { 9 setJariJari(1); 10 } 11 public Lingkaran(double r) 12 { 13 if (r > 0) 14 jariJari = r; 15 else 16 jariJari = 1.0; 17 }
18 public void setJariJari (double r) 19 { 20 if (r>0) 21 jariJari=r; 22 } 23 public double getJariJari() 24 { 25 return (jariJari); 26 } 27 public double hitungLuas() 28 { 29 return (Math.PI * jariJari * jariJari); 30 } 31 public double hitungKeliling() 32 { 33 return (Math.PI * 2.0 * jariJari); 34 } 35 }
36 // --------------------------------------------- 37 // Definisi class Silinder // --------------------------------------------- class Silinder extends Lingkaran { private double tinggi; public Silinder() setJariJari (1); setTinggi (1); } public Silinder(double r, double t) setJariJari (r); SetTinggi (r);
public void setTinggi (double t) { if (t>0) tinggi = r; } public double getTinggi() return (tinggi); public double hitungLuas() return (super.hitungLuas() * 2.0 + super.hitungKeliling() * tinggi); public double hitungVolume() return (Math.PI * 2.0 * jariJari * tinggi);
// --------------------------------------------- // Definisi class utama public class CobaSilinder { public static void main (String[] args) Silinder abc = new Silinder(); Silinder xyz = new Silinder(23.5, 73.1); System.out.println (“Data Silinder ABC :”); System.out.println (“-----------------------”); System.out.println (“Jari-Jari ABC : ” + abc.getJariJari()); System.out.println (“Tinggi ABC : ” + abc.getTinggi()); System.out.println (“Luas ABC : ” + abc.hitungLuas()); System.out.println (“Luas ABC : ” + abc.hitungVolume()); System.out.println ();
System.out.println (“Data Silinder XYZ :”); System.out.println (“Jari-Jari ABC : ” + xyz.getJariJari()); System.out.println (“Tinggi ABC : ” + xyz.getTinggi()); System.out.println (“Luas ABC : ” + xyz.hitungLuas()); System.out.println (“Luas ABC : ” + xyz.hitungVolume()); System.out.println (); }
Penurunan Sederhana
TurunanOrang.java Program penurunan Orang Turunan
SapiMamat.java Program Inheritance dan protected variabel Turunan
TurunanAyam.java Hubungan antara Objek dalam turunan Turunan
Turunan
Konsep polymorpisme Implementasi polymorpisme Interface Polimorphism Konsep polymorpisme Implementasi polymorpisme Interface
Polymorphism : Secara mudah polymorphism bisa disamakan dengan method overloading, dimana didalam class bisa terdapat beberapa method dengan nama sama. Contoh: Sebuah method bernama tulisData() yang berfungsi untuk menampilkan data string, tentu tidak bisa menangani masukan berupa data yang lain. Solusi yang dapat diberikan yaitu dengan menyediakan beberapa method dengan nama yang sama dan masing-masing method memiliki parameter dengan tipe data yang berbeda. Method tersebut akan bereaksi dengan satu dari beberapa macam cara tergantung dari data yung di-passing ke dalamnya, keragaman model aksi inilah yang disebut Polymorphism, atau banyak bentuk
// --------------------------------------------- // Definisi class TampilData class TampilData { public void tulisData(String data) System.out.println (data); } public void tulisData(int data) public void tulisData(double data)
// --------------------------------------------- // Definisi class utama public class Polymorphism { public static void main(String[] args) TampilData abc = new TampilData(); System.out.print (“Cetak data string : “); abc.tulisData (“Universitas Budi Luhur”); System.out.print (“Cetak data integer : “); abc.tulisData (1979); System.out.print (“Cetak data double : “); abc.tulisData (25.0); }
3. Package : Sejauh ini semua class yang dibuat harus menyatu dengan program utama (class dengan fungsi main()). Sedangkan sebuah program yang baik haruslah mampu menggunakan modul atau class dari file yang lain tanpa harus menyalin file tersebut kedalam file yang sedang diedit. Hal ini dapat dilakukan oleh Java, sama halnya dilakukan oleh bahasa pemrograman yang lainnya. Contoh : Basic chain Pascal unit C/C++ include Java package Package adalah sebuah direktory yang berisi sekumpulan file .class dengan kegunaan spesifik.
Proses pembentukan directory package tidak sama seperti kita membuat directory pada Windows Explorer atau menggunakan MD pada DOS. Class yang akan kita masukkan kedalam package harus mencantumkan nama package di baris pertama. Secara otomatis file hasil compilenya akan dimasukkan ke dalam directory yang tidak lain nama package tersebut. Instruksi untuk mengkompile class java menjadi package adalah : javac –d <directory_target> <nama_file_java> Directory package tidak sama dengan nama package. Opsi ini digunakan untuk mengarahkan didirectory mana kita akan membuat directory baru sebagai nama package. Nama directory tidak boleh mengandung spasi atau karakter lain yang tidak valid. Kedua class : lingkaran dan silinder terdahulu kita jadikan package sehingga program lain yang menggunakannya tidak perlu menyertakan kode class tersebut didalam filenya.
Package modul // --------------------------------------------- // Definisi class Lingkaran public class Lingkaran { private double jariJari; public Lingkaran() setJariJari(1); } public Lingkaran(double r) if (r > 0) jariJari = r; else jariJari = 1.0;
18 public void setJariJari (double r) 19 { 20 if (r>0) 21 jariJari=r; 22 } 23 public double getJariJari() 24 { 25 return (jariJari); 26 } 27 public double hitungLuas() 28 { 29 return (Math.PI * jariJari * jariJari); 30 } 31 public double hitungKeliling() 32 { 33 return (Math.PI * 2.0 * jariJari); 34 } 35 }
Kata kunci package digunakan untuk menyatakan nama package yang akan dibuat. Nama package sengaja dipilih modul agar mudah mengingat bahwa didalam package ini kita menyimpan modul-modul program. Karakteristik dari package : 1. Bersifat public 2. Diawali dengan huruf kecil Direktori modul secara otomati dibuat oleh java pada saat kompilasi dilakukan. Kemudian lakukan hal yang sama pada class Silinder, seperti program dibawah ini, * dimana class Silinder merupakan turunan dari class Lingkaran. * Class Lingkaran harusnya sudah dikompilasi terlebih dahulu. * Didalam class Silinder harus ada instruksi yang mengarahkan agar java mengambil modul Lingkaran dari directory modul. * Class Silinder sendiri harus menyertakan package modul agar hasil kompilasi disimpan didirektory modul.
package modul import modul.Lingkaran class Silinder extends Lingkaran { private double tinggi; public Silinder() setJariJari (1); setTinggi (1); } public Silinder(double r, double t) setJariJari (r); SetTinggi (r);
16 public void setTinggi (double t) 17 { 18 if (t>0) tinggi = r; 19 } 20 public double getTinggi() 21 { 22 return (tinggi); 23 } 24 public double hitungLuas() 25 { 26 return (super.hitungLuas() * 2.0 + super.hitungKeliling() * tinggi); } 28 public double hitungVolume() 29 { 30 return (Math.PI * 2.0 * jariJari * tinggi); 31 } 32 }
Implementasi package tidak sulit, cukup dengan mengimport package yang dikehendaki. Contoh : import modul.Lingkaran public class UjiLingkaran { public static void main (String[] args) { Lingkaran abc = new Lingkaran(5); Lingkaran pqr = new Lingkaran(3.2); System.out.println (“Data Default :”); System.out.println (“-----------------”); System.out.println (“Jari – Jari ABC : ” + abc.getJariJari()); System.out.println (“Jari – Jari PQR : ” + pqr.getJariJari()); System.out.println (); }
4. Contoh Kasus (Latihan mandiri) : Contoh Kasus dapat dilihat pada halaman 40 s/d 58 : pemrograman java jilid 2 Rangsang purnama: Setelah mempelajari dasar-dasar OOP, pada bagian ini kita berharap bisa menerapkan metode tersebut dengan mengambil peristiwa sehari-hari dengan langkah-lahkah sbb : 1. Mendefinisikan class penduduk 2. Mendefinisikan class karyawan 3. Mendefinisikan class mahasiswa 4. Mendefinisikan class menwa Lakukan pendefinisian sama seperti materi yang sudah kita pelajari.
PolyLagu.java Polymorphisme dalam Lagu
PolyMorpheus.java Polymorphisme dalam Film
Terima Kasih