modul 5 pbo abstract, interface, polymorphism

22
LAPORAN V PRAKTIKUM 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

Upload: ezrafel-amadeuz

Post on 11-Jan-2016

111 views

Category:

Documents


2 download

DESCRIPTION

MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

TRANSCRIPT

Page 1: 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

Page 2: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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

}

Page 3: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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.

Page 4: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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();

Page 5: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

}

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:

Page 6: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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){

Page 7: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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;}

}

Page 8: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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 :

Page 9: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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.

Page 10: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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+"]";}

}

Page 11: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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());

Page 12: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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 }

Page 13: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

//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.

Page 14: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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 : ");

Page 15: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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");

}

Page 16: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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

Page 17: MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

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