MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM
-
Upload
ezrafel-amadeuz -
Category
Documents
-
view
111 -
download
2
description
Transcript of MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM
LAPORAN VPRAKTIKUM PEMROGRAMAN BERBASIS OBJEK
Disusun untuk Memenuhi Matakuliah Praktikum Pemrograman Berbasis Objek Yang Dibimbing oleh Heru Wahyu Herwanto, S.T., M.KOM
Oleh:
Amadeuz Ezrafel
120533430965
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
S1 PENDIDIKAN TEKNIK INFORMATIKA
November 2014
Modul Praktikum V
“Abstract Class, Interface dan Polymorphism”
A. TUJUAN
1. Mahasiswa mampu memahami class Abstract
2. Mahasiswa mampu memahami interface
3. Mahasiswa mampu memahami polymorphism.
B. DASAR TEORI
Abstract Class
Abstraksi adalah proses pengabstrakan atau penyembunyian detail program yang sangat rumit
sehingga kita tidak perlu untuk mempermasalahkan pembuatannya. Kita hanya perlu obyek
tersebut dapat kita gunakan sesuai fungsinya. Dalam java suatu metode ditentukan dari dalam
kelas tetapi tidak disertai definisinya, metode ini dikenal dengan metode abstrak, sedangkan
kelasnya disebut kelas abstrak. Definisi kelas diletakkan pada masing-masing kelas turunannya.
Kelas abstrak biasanya dibuat apabila pada subkelas-subkelas memerlukan operasi yang sama
dengan metode tersebut, akan tetapi antara subkelas dengan subkelas lain memiliki tindakan yang
berbeda. Untuk mendeklarasikan kelas abstrak dan metodenya, dipergunakan kata kunci abstract.
Interface
Interface adalah mekanisme yang memungkinkan berbagi konstanta atau menentukan bentuk
metode yang dapat digunakan oleh sejumlah kelas. Variable dalam interface hanya diperkenankan
untuk menggunakan public static final. Sedangkan methods yang ada dalam interface hanya
berupa deklarasi tanpa implementasi. Interface dapat diimplementasikan oleh class dan dapat
diturunkan menjadi interface lain.
Untuk dapat menggunakan interface, suatu class harus dideklarasikan untuk
mengimplementasikan interface tersebut dan semua methods pada interface juga harus
diimplementasikan pada class tersebut.
Mendeklarasikan interface:
Public interface namainterface
{
//method tanpa impementasi
//definisi konstanta
}
Menggunakan interface
Sebuah class dapat menggunakan interface melalui kata kunci implements.
Class namakelas1 [extends namakelas2]
Implements namainterface1 [,namainterface2]
//tubuh kelas
}
Polymorphism
Pada java, subclass dapat mendefinisikan ulang instance methods yang ada pada
superclassnya. Akibatnya, jika instance methods tersebut dipanggil pada object yang berasal dari
subclass, maka instance methods dari subclasslah yang akan dieksekusi. Konsep ini disebut
sebagai overriding ini, memberikan sifat polymorphism pada objek yang ada pada java.
Polymorphism berasal dari bahasa yunani yang berarti banyak bentuk. Polymorphism adalah
suatu sifat dimana instance methods dari suatu superclass akan berkelakuan sesuai dengan definisi
yang ada pada subclass yang menjadi referensi dari suatu objek. Konsep ini memungkinkan objek
melakukan aksi atau tindakan yang mungkin secara prinsip sama namun prosesnya berbeda.
C. LATIHAN
Latihan 1 : Abstract Class
Kelas Vehicle
public abstract class Vehicle{//method function yang akan menampilkan alat transportasipublic void function(){
System.out.println("Transportation Tools");}//method fuel yang menampilkan keterangan fuel(bahan bakar)public void fuel(){
System.out.println("Fuels");}//method abstrak walk yang bertipe voidpublic abstract void walk();}
Kelas Aeroplan
//kelas aeroplan yang diturunkan dari kelas Vehiclepublic class Aeroplan extends Vehicle{
//method walk mengoverride method abstrak pada kelas vehiclepublic void walk(){
System.out.println("Aeroplan is Flying");}
//method mainpublic static void main(String[]args){//membuat objek baru dari kelas Aeroplan
Aeroplan garuda = new Aeroplan();garuda.function();garuda.fuel();//memanggil method fuel pada kelas vehiclegaruda.walk();//memanggil walk yang override dari kelas vehicle
}}
Output Program
Ubahlah method fuel pada class Vehicle menjadi abstract. Kemudian lakukan
kompilasi ulang pada kedua class. Output setelah kompilasi adalah …
public abstract class Vehicle{//method function yang akan menampilkan alat transportasipublic void function(){
System.out.println("Transportation Tools");}//method abstrak fuelpublic abstract void fuel();//method abstrak walk yang bertipe voidpublic abstract void walk();
}
Output program
Lakukan override method fuel pada class AeroPlan.
Kelas Vehicle
public abstract class Vehicle{//method function yang akan menampilkan alat transportasipublic void function(){
System.out.println("Transportation Tools");}//method abstrak fuel yang menampilkan keterangan fuel(bahan bakar)public abstract void fuel();//method abstrak walk yang bertipe voidpublic abstract void walk();}
Kelas Aeroplan
//kelas aeroplan yang diturunkan dari kelas Vehiclepublic class Aeroplan extends Vehicle{
//method walk mengoverride method abstrak pada kelas vehiclepublic void walk(){
System.out.println("Aeroplan is Flying");}
public void fuel(){System.out.println("Fuels");
}
//method mainpublic static void main(String[]args){//membuat objek baru dari kelas Aeroplan
Aeroplan garuda = new Aeroplan();//memanggil method function pada kelas vehicle garuda.function();garuda.fuel();//memanggil method fuel pada kelas vehiclegaruda.walk();//memanggil walk yang override dari kelas vehicle
}}
Output program:
Jelaskan mengapa langkah b dan c berbeda!
Karena di dalam program b tidak ada override pada method fuel(). Sehingga output
program menjadi error. Sedangkan pada program c melakukan override pada method
fuel () sehingga ketika di run tidak akan error.
Latihan 2 : Interface
Interface Relation
public interface Relation{public boolean isGreater(Object a, Object b);public boolean isLess(Object a, Object b);public boolean isEqual(Object a, Object b);}
Kelas Line
//kelas Line yang mengimplementasikan dari interface Relationclass Line implements Relation{
private double x1;private double x2;private double y1;private double y2;
public Line(double x1, double x2, double y1, double y2){this.x1=x1;this.x2=x2;this.y1=y1;this.y2=y2;
}
public double getLength(){double length=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));return length;
}
public boolean isGreater(Object a, Object b){double aLen=((Line)a).getLength();double bLen=((Line)b).getLength();return(aLen>bLen);
}
public boolean isLess(Object a, Object b){double aLen=((Line)a).getLength();double bLen=((Line)b).getLength();return(aLen<bLen);
}
public boolean isEqual(Object a, Object b){double aLen=((Line)a).getLength();double bLen=((Line)b).getLength();return(aLen==bLen);
}}
Kelas UjiLine
public class UjiLine{
public static void main (String []args){
Line a = new Line (2,3,4,5);Line b = new Line (1,7,8,9);System.out.println ("Nilai a>b : "+a.isGreater(a,b));System.out.println ("Nilai a<b : "+a.isLess(a,b));System.out.println ("Nilai a==b : "+a.isEqual(a,b));
}}
Output Program
Isi method isEqual dikosongkan, output program
Method isEqual dihapuskan, output program
Latihan 3 Polymorphism
Kelas Pegawai
public class Pegawai{
String nama;int gaji;Pegawai(){}Pegawai(String nm){
this.nama=nm;System.out.println("Pegawai");
}public int gaji(){
return 0;}
}
Kelas Direktur
class Direktur extends Pegawai {
private static final int gajiDir=100000;private static final int tunjangan=50000;public int gaji(){
return gajiDir;}public int tunjangan(){
return tunjangan;}
}
Kelas Staf
class Staf extends Pegawai{
private static final int gajiStaf=50000;private static final int bonusStaf=10000;public int gaji(){
return gajiStaf;}public int Bonus(){
return bonusStaf;}
}
Kelas Pembayarangaji
class PembayaranGaji{
public int hitungGaji(Pegawai peg){int uang=peg.gaji();if(peg instanceof Direktur)
uang+=((Direktur)peg).tunjangan();if(peg instanceof Staf)
uang+=((Staf)peg).Bonus();return uang;
}public static void main (String []args {
//membuat objek baru dari class pembayarangajiPembayaranGaji pg=new PembayaranGaji();Staf ali=new Staf(); //membuat objek baru dari class staf//membuat objek baru dari class direktur Direktur tony = new Direktur();
System.out.println("Gaji yang dibayarkan untuk Staf : "+pg.hitungGaji(ali));System.out.println("Gaji yang dibayarkan kepada Direktur : "+pg.hitungGaji(tony));
}}
Output Program :
Program diatas menerapkan polimorfism yang melakukan aksi berbeda tergantung dari tipe
objek nya. Dalam hal ini dibedakan tipe objek antara staf dan direktur yang dimana memiliki aksi
berbeda terhadap gaji yang dibayarkan sesuai dengan method yang telah dideklarasikan.
D. TUGAS PRAKTIKUM
Kelas Rect
public class Rect{//ada 4 variabel utama yang menentukan titik sudut persegi panjangpublic int x1, y1, x2, y2;//ini adalah konstructor utama
public Rect(int x1, int y1, int x2, int y2){
this.x1=x1;this.y1=y1;this.x2=x2;this.y2=y2;
}//constructor dengan panjang dan lebar dimulai dari 0,0
public Rect(int width, int height) {
this(0,0,width,height);}
//constructor persegi nolpublic Rect() {
this(0,0,0,0);}
//method untuk menggeser persegi panjangpublic void move(int deltax, int deltay) {
x1 += deltax; x2 += deltax; y1 += deltay; y2 += deltay;
}//method untuk memeriksa apa satu titik di dalam persegi panjang
public boolean isInside(int x, int y) {return((x>=x1) && (x<=x2) && (y>=y1) && (y<=y2));
}//method untuk menggabung (union) persegi panjang
public Rect union(Rect r) {
return new Rect((this.x1<r.x1) ? this.x1:r.x1, (this.y1<r.y1) ? this.y1:r.y1,(this.x2>r.x2) ? this.x2:r.x2,(this.y2>r.y2) ? this.y2:r.y2
);}
//method untuk mengetahui perpotongan dua persegi panjangpublic Rect intersection(Rect r) {
Rect result = new Rect((this.x1 > r.x1) ? this.x1 : r.x1,(this.y1 > r.y1) ? this.y1 : r.y1,(this.x2 < r.x2) ? this.x2 : r.x2,(this.y2 < r.y2) ? this.y2 : r.y2
);if(result.x1>result.x2) {
result.x1=result.x2=0;}return result;
}//method untuk konversi data persegi panjang ke string
public String toString() {
return "["+x1+","+y1+","+x2+","+y2+"]";}
}
Kelas TestRect
public class TestRect{ public static void main(String[] args) //method utama
{Rect nilai1=new Rect(1,1,4,4); //membuat objek baru dengan nama nilai1 Rect nilai2=new Rect(2,3,4,4); //membuat objek baru dengan nama nilai2Rect nilai3=new Rect(2,3,5,6);int x=2;int y=3; if(nilai1.isInside(x,y)){System.out.println( x+","+y+" Is Inside The Union"); //output program}else{System.out.println( x+","+y+" Is Outside The Union"); //output program}System.out.println("\n");System.out.println( nilai1.toString()+" Union " + nilai3.toString()+ " = " +nilai1.union(nilai2));System.out.println("\n");System.out.println( nilai1.toString()+" Intersect " + nilai3.toString()+ " = " +nilai1.intersection(nilai2));Rect nilai4 = nilai1.intersection(nilai2);nilai4.move(3,3);System.out.println("\n");System.out.println( nilai1.intersection(nilai2)+ " Digeser Sejauh (3,3) = " +nilai4.toString());}
}
Output Program
Deskripsi Program
Pada program di atas merupakan program yang dapat menggesr titik sudut persegi
panjang. Selain itu juga dapat union dan intersect antara dua objek persegi. Pada union akan
menggabungkan dua titik sudut dari dua buah objek persegi panjang menggunakan method
public Rect union. Pada intersect digunakan untuk menampilkan perpotongan antara dua
objek persegi panjang menggunakan public Rect intersect. Untuk menggeser menggunakan
hasil intersect kemudian akan ditambahkan dengan pergeseran yang ditulis pada syntax. System.out.println( nilai1.intersection(nilai2)+ " Digeser Sejauh (3,3) = "
+nilai4.toString());
E. TUGAS RUMAH
1. Tugas Rumah 1
Buat sebuah program penerapan abstract class dan polymorphism pada bidang ilmu
matematika.
Abstract Class Bangun
//class bangun, class utama yang akan di ubah penggunaannyapublic abstract class Bangun{
//method abstract dengan nama hitung Luas//yang akan diimplementasikan pada kelas lain dengan aksi yang berbedapublic abstract double hitungLuas();
}
Class Segitiga
//kelas segitiga terwarisi sifat dari kelas bangunclass Segitiga extends Bangun{ private double alas;//deklarasi variabel alas dan tinggi bertipe double private double tinggi;
Segitiga (int a, int t){//konstruktor segitiga bertipe default//dengan inputan a dan t bertipe integer
alas = a; //inisialisasi tinggi = t; }
// overriding method hitungLuas() public double hitungLuas(){
//method luas hitung dari kelas bangun dengan aksi yang berbeda double luas = 0.5 * alas * tinggi; //rumus luas segitiga return luas;//mengembalikan nilai luas }}
Class Lingkaran
class Lingkaran extends Bangun{//kelas lingkaran terwarisi sifat dari kelas bangun private double jarijari;//deklarasi atribut jari-jari bertipe double private final double PI = 3.1416;// deklarasi nilai PI tanpa diturunkan
Lingkaran(int r){ //konstruktor lingkaran dengan inputan r jarijari = r;//inisialisasi }
//overriding method hitungLuas() public double hitungLuas(){//method dari kelas bangun//yang diimplementasikan untuk menghitung luas lingkaran double luas = PI * jarijari * jarijari; //rumus luas lingkaran return luas;//mengembalikan nilai luas }}
Class BujurSangkar
class BujurSangkar extends Bangun{//kelas bujur sangkar terwarisi sifat oleh kelas bangun private double sisi;// deklarasi atribut sisi bertipe double BujurSangkar(int s){//konstruktor BujurSangkar dengan inputan s sisi = s; //inisialisasi }
//overriding method hitungLuas() public double hitungLuas(){ double luas = sisi * sisi; //rumus luas persegi return luas;//mengembalikan nilai luas }}
Class Demo
class Demo{ public static void main(String[] args){ //method main Bangun obyek; //dekarasi objek obyek dari kelas bangun BujurSangkar b = new BujurSangkar(12); //new objek b Segitiga s = new Segitiga(5, 6);//new objek s Lingkaran l = new Lingkaran(4);//new objek l
// obyek mengacu pada objek BujurSangkar obyek = b; // akan memanggil method yang terdapat pada BujurSangkar System.out.println("Luas bujursangkar : " + obyek.hitungLuas()); System.out.println();
// obyek mengacu pada objek Segitiga obyek = s; // akan memanggil method yang terdapat pada Segitiga System.out.println("Luas segitiga : " + obyek.hitungLuas()); System.out.println();
// obyek mengacu pada objek Lingkaran obyek = l; // akan memanggil method yang terdapat pada Lingkaran System.out.println("Luas lingkaran: " + obyek.hitungLuas()); System.out.println(); }}
Output Program
Deskripsi:
Pada program di atas merupakan program bangun segitiga, bujur sangkar dan
lingkaran. Dengan menggunakan abstract class dan teknik polymorphysm sehingga kita
mengoverride suatu method yang dibuat pada abstract class dan teknik polymorphism untuk
menggunakan method yang dideklarasikan abstract sehingga bisa mengimplementasi method
dengan jalan yang berbeda antara class segitiga, bujur sangkar dan lingkaran.
2. Tugas Rumah 2
Buat sebuah program penerapan abstract class dan polymorphism pada bidang ilmu
perpustakaan.
Abstract Class Perpustakaan
import java.io.*;public abstract class Perpustakaan //kelas abstract dengan nama Perpustakaan {
Int nomor=0,jenis=0,jumlah=0,tarif=0,bayar=0,lama=0,denda=0,total=0;String nama,tanggal;
public static String bacaInputan(){String baca="";InputStreamReader input=new InputStreamReader (System.in);BufferedReader buf=new BufferedReader(input);try{baca=buf.readLine();}catch(IOException e){System.out.println("Error!");}return baca;
}
public abstract void utama(); //method utama dengan tipe abstract
public void data() {System.out.println("\nDATA BUKU ");System.out.println("|---------------------------------------------|");System.out.println("|No. | Judul | Jenis |");System.out.println("|---------------------------------------------|");System.out.println("| 1. | Belajar dan Pembelajaran | Ilmiah |");System.out.println("| 2. | Pengantar Pendidikan | Ilmiah |");System.out.println("| 3. | 100 Cara Mengolah Limbah Tahu | Ilmiah |");System.out.println("| 4. | Mahir C++ | Teknik |");System.out.println("| 5. | Belajar Java | Teknik |");System.out.println("| 6. | Pemrograman Visual Basic | Teknik |");System.out.println("| 7. | Indahnya Pelangi | Novel |");System.out.println("| 8. | Harry Potter | Novel |");System.out.println("| 9. | Curcol Kantor | Novel |");System.out.println("| 10.| Oxford Dictionary | Kamus |");System.out.println("----------------------------------------------|");}
public void peminjaman(){
System.out.println("\nMENU PEMINJAMAN");System.out.println("\nTarif (per minggu) :");System.out.println("1. Buku Ilmiah : Rp. 2000,00");System.out.println("2. Buku Teknik : Rp. 1500,00");System.out.println("3. Buku Novel : Rp. 3000,00");System.out.println("4. Buku Kamus : Rp. 1000,00");System.out.println("----------------------------");System.out.println("DATA PEMINJAM");System.out.print("Nomor Anggota : ");nomor=Integer.parseInt(bacaInputan());System.out.print("Nama Anggota : ");nama=bacaInputan();System.out.print("Tanggal : ");tanggal=bacaInputan();System.out.print("Jenis Buku : ");jenis=Integer.parseInt(bacaInputan());System.out.print("Jumlah Buku : ");
jumlah=Integer.parseInt(bacaInputan());if(jenis==1){
tarif=2000;}else if(jenis==2){
tarif=1500;}else if(jenis==3){
tarif=3000;}else if(jenis==4){
tarif=1000;}else{
System.out.println("Error!");tarif=0;
}
System.out.println("----------------------------");System.out.println("Biaya : "+(jumlah*tarif));System.out.println("----------------------------");
}
public void pengembalian() {System.out.println("\nMENU PENGEMBALIAN");System.out.println("Denda : Rp. 500,00/hari");System.out.println("----------------------------");
System.out.print("Tanggal Kembali : ");tanggal=bacaInputan(); System.out.print("Nomor Anggota : ");nomor=Integer.parseInt(bacaInputan()); System.out.print("Nama Anggota : ");nama=bacaInputan();System.out.print("Jumlah Buku : ");jumlah=Integer.parseInt(bacaInputan()); System.out.print("Lama Hari : ");lama=Integer.parseInt(bacaInputan());if(lama>7){
denda=lama-7;}System.out.println("----------------------------");total=denda*500*jumlah;System.out.println("Total Denda : Rp. "+total);
}}
Class UjiPerpustakaan
import java.io.*;//library input output
public class UjiPerpustakaan extends Perpustakaan{public static String bacaInputan(){ //method untuk membaca masukan
String baca="";InputStreamReader input=new InputStreamReader (System.in);BufferedReader buf=new BufferedReader(input);try{
baca=buf.readLine();}catch(IOException e){
System.out.println("Error!");}return baca;
}public void utama(){
System.out.println("\n\nPROGRAM PERPUSTAKAAN");System.out.println("\nMENU UTAMA\n");System.out.println("1. Data Buku");System.out.println("2. Peminjaman");System.out.println("3. Pengembalian");System.out.println("4. Exit");
}
public static void main(String[] args) //method main {
UjiPerpustakaan perpus=new UjiPerpustakaan();int pilihan = 0;
do{ perpus.utama();System.out.print("\nPilihan anda : ");pilihan=Integer.parseInt(bacaInputan());
switch(pilihan){case 1:
perpus.data();break;
case 2:perpus.peminjaman();break;
case 3:perpus.pengembalian();break;
case 4:System.out.println("Terima kasih")System.exit(0);break;
default:System.out.print("Maaf, pilihansalah!");
}}while(pilihan!=4);
}}
Output Program
Deskripsi
Pada program di atas merupakan program perpustakaan, dimana menampilkan 4
pilihan dengan menu data buku, peminjaman, pengembalian dan exit.. Dengan menggunakan
abstract class dan teknik polymorphysm kita mengoverride suatu method yang dibuat pada
dapat mengimplementasikan method yang di abstract sehingga dengan jalan yang berbeda
antara class yang diturunkan dengan mengacu pada super kelas nya.
F. KESIMPULAN
Abstraksi adalah proses pengabstrakan atau penyembunyian detail program yang sangat
rumit sehingga kita tidak perlu untuk mempermasalahkan pembuatannya.
Interface memungkinkan pemrogram untuk berbagi konstanta atau menentukan
bentuk metode yang dapat digunakan oleh sejumlah kelas.
Polymorphism adalah suatu sifat dimana instance methods dari suatu superclass akan
berkelakuan sesuai dengan definisi yang ada pada subclass yang menjadi referensi dari
suatu objek.
Variable dalam interface hanya diperkenankan untuk menggunakan public static final.
Sedangkan methods yang ada dalam interface hanya berupadeklarasi tanpa implementasi.
Untuk mendeklarasikan kelas abstrak dan metodenya, dipergunakan kata kunci abstract.
DAFTAR RUJUKAN
_____.2014. Modul Praktikum 4 Encapsulation. Pendidikan Teknik Informatika.UM.
Fikri, Rijalul, dkk.2005. Pemrograman Java. Yogyakarta: Andi Offset
Raharjo, Budi, dkk. 2010. Mudah Belajar Java edisi Revisi. Bandung: Informatika