LAPORAN MODUL V
ABSTRACT CLASS, INTERFACE DAN POLYMORPHISM Disusun untuk Memenuhi Matakuliah Praktikum Pemrograman Berorientasi Objek Dibimbing oleh Ibu Kartika Candra Kirana, S.Pd.,M.Kom
Oleh: Eva Yulia Safitri
(160533611462)
Fachryzal Candra Trisnawan
(160533611466)
Karina Aulia Faradila
(160533611413)
S1 PTI’16 OFF B
UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA Oktober 2017
A. LATIHAN Latihan 1 Nama Program
: Abstract Class
Script Program
:
Class Vehicle public abstract class Vehicle { public void function(){ System.out.println("Transportation Tools"); } public void fuel(){ System.out.println("Fuels"); } public abstract void walk (); }
Class AeroPlan public class AeroPlan extends Vehicle{ public void walk(){ System.out.println("Aeroplan is Flying"); } public static void main(String[]args){ AeroPlan garuda = new AeroPlan(); garuda.function(); garuda.fuel(); garuda.walk(); } }
a. Output
:
Penjelasan : Program di atas merupakan jenis program Abstrak Kelas. Terdapat dua kelas yaitu class Vehicle dan class Aeroplan.
-
Class Vehicle public abstract class Vehicle {
pada script ini ditunjukkan bahwa kelas Vehicle merupakan kelas abstrak dengan modifier public. public void function(){
program ini memiliki method function dengan modifier public, yaitu method dapat diakses di kelas lain. System.out.println("Transportation Tools");
Merupakan merintah untuk menampilkan kalimat “Transportation Tools”. public void fuel(){
membuat method fuel dengan modifier public System.out.println("Fuels");
Merupakan perintah menampilkan kalimat “Fuels”. public abstract void walk ();
script di atas mendeklarasikan bahwa kelas ini adalah kelas abstrak melalui method walk. Di dalam kelas ini setiap methodnya tidak menjelaskna implementasi dari setiap keluaran yang diperintahkan. Jadi implementasinya akan dituliskan pada kelas Aeroplan -
Class Aeroplan public class AeroPlan extends Vehicle{ public void walk(){
membuat method walk dengan modifier public System.out.println("Aeroplan is Flying");
Merupakan perintah menampilkan kalimat “Aeroplan is Flying” public static void main(String[]args){
merupakan main method untuk menjalankan program pada kelas Aeroplan yang diextends dari kelas Vehicle. AeroPlan garuda = new AeroPlan();
Script ini digunakan untuk membuat objek baru dari kelas Aeroplan. Objek tersebut bernama garuda dengan kata kunci new. garuda.function(); garuda.fuel(); garuda.walk();
pada method ini akan memanggil method – method yang terdapat pada kelas Vehicle yaitu method function, fuel, dan walk.
b. Ubahlah method fuel pada class Vehicle menjadi abstract. Kemudian lakukan kompilasi ulang pada kedua kelas class. Output setelah kompilasi adalah public abstract class Vehicle { public void function(){ System.out.println("Transportation Tools"); } public abstract void fuel(){ System.out.println("Fuels"); } public abstract void walk (); }
Output
Penjelasan : Ketika method fuel diubah menjadi abstract kemudian dikompilasi maka akan menghasilkan output error dengan keterangan “Abstract methods cannot have a body” ini berarti pada method anak nya (override) tidak ada method yang digunakan untuk menjalankan method abstract tersebut sehingga hasilnya error. c. Lakukan override method fuel pada class AeroPlan public class AeroPlan extends Vehicle{ public void walk(){ System.out.println("Aeroplan is Flying"); } public void fuel(){ System.out.println("Fuels"); } public static void main(String[]args){ AeroPlan garuda = new AeroPlan(); garuda.function(); garuda.fuel(); garuda.walk(); } }
Output
Penjelasan : Program akan berjalan ketika pada kelas Aeroplan terdapat override dari abstract fuel. Karena method fuel merupakan abstract. d. Jelaskan mengapa langkah b dan c berbeda ! Jawab : Karena di dalam program poin b tidak terdapat override pada method fuel(). Sehingga output program menjadi error. Sedangkan program pada poin c melakukan override pada method fuel() sehingga ketika di jalankan tidak terjadi error. Latihan 2 Nama Program
: Interface
Script Program
:
Class 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); }
Class Line
class 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
a. Tambahkan sebuah class untuk menguji program di atas! public class UjiRelationLine { public static void main(String[]args){ Line garis1 = new Line (1,2,3,4); Line garis2 = new Line (1,2,3,4); garis1.getLength(); garis2.getLength(); System.out.println("garis1>garis2 = "+garis1.isGreater(garis1,garis2)); System.out.println("garis1 < garis2 ="+garis1.isLess(garis1,garis2)); System.out.println("garis1==garis2 ="+garis1.isEqual(garis1,garis2)); } }
b. Output program adalah
Penjelasan :
Pada program di atas terdapat tiga kelas yaitu class Relation, Class Line, dan class UjiRelationLine. -
Class Relation public interface Relation { public boolean isGreater(Object a,Object b);
digunakan untuk mendeklarasikan method idGreater dengan menggunakan parameter (Object a,Object b) public boolean isLess(Object a, Object b);
digunakan untuk mendeklarasikan method isLess dengan menggunakan parameter (Object a,Object b) public boolean isEqual(Object a, Object b);
digunakan untuk mendeklarasikan method isEqual dengan menggunakan parameter (Object a, Object b) pada interface semua modifier harus menggunakan public kemudia jumlah parameter
method
yang
ada
di
interface
dengan
class
yang
mengimplementasikannya harus sama. -
Class Line Pada Class Line terdapat pendefinisian dari method – method yang berada pada class Relation. Jadi setiap method yang terdapat dalam class Relation akan mempunyai implementasi masing-masing sesuai dengan output yang diinginkan, implementasi itu terdapat dalam class Line.
-
UjiRelationLine public class UjiRelationLine { public static void main(String[]args){ Line garis1 = new Line (1,2,3,4); Line garis2 = new Line (1,2,3,4); garis1.getLength(); garis2.getLength();
pada script di atas terdapat main method yang berisi 2 buah objek baru yaitu garis 1 dan garis 2,serts digunakan untuk menguji dua kelas di atas. System.out.println("garis1>garis2 "+garis1.isGreater(garis1,garis2)); System.out.println("garis1 < garis2 ="+garis1.isLess(garis1,garis2)); System.out.println("garis1==garis2 ="+garis1.isEqual(garis1,garis2));
Berfungsi untuk melakukan perintah menampilkan kalimat dan hasil dari program.
c. Kosongkan isi method isEqual. Kemudian jalankan program. class 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
Output :
d. Hapus method isEqual. Kemudian jalankan program! class 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
Output
Penjelasan c dan d : Ketika program pada poin c dan d yaitu menghapus dan mengosongkn method isEqual maka program ketika dijalankan akan terjadi error. Karena program di atas menggunakan operasi aritmatika sehingga isEqual harus ditulis dalam kedua class tersebut.isEqual adalah operand penting dalam operasi matematika, karena disini
isEqual didefinisikan “=”. Jika ‘=” tidak dicantumkan maka bagaimana kita mengkompilasikan sebuah operand jika yang diketahui hanya operand dan hasil. Latihan 3 Nama Program
:Polymorphism
Script Program
:
Class Pegawai public class Pegawai { String nama; int gaji; Pegawai(){ } Pegawai (String nm){ this.nama=nm; System.out.println("Pegawai"); } public int gaji (){ return 0; } }
Class 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; } }
Class 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; } }
Class PembayaranGaji class PembayaranGaji { public int hitunganGaji(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){ PembayaranGaji pg = new PembayaranGaji(); Staf all = new Staf(); Direktur tony = new Direktur(); System.out.println("Gaji yang dibayarkan untuk Staf ="+pg.hitunganGaji(all)); System.out.println("Gaji uang dibayarkan kepada Direktur ="+pg.hitunganGaji(tony)); } }
a. Output
:
Penjelasan : Pada program di atas terdapat 4 class yaitu class Pegawai,Direktur, Staff, dan PembayaranGaji. Pada class Pegawai dideklarasikan variabel nama dengan type data String dan variabel gaji dengan type data int. pada class ini juga terdapat dua buah method yaitu method Pegawai dan gaji. Pada method Pegawai menggunakan parameter nm, nm merupakan nama dari pegawaiyang dideklarasikan melalui this. Sedangkan method gaji msih berupa abstrak. Kemudian class Direktur dan Class Staf merupakan kelas anak dari class Pegawai. Pada class Direktur dideklarasikan bahwa gaji awal adalah Rp 100.000 dan tunjangannya
yaitu Rp 50.000. Pada class Direktur ini terdapat dua method yaitu gaji yang mengoveride dari kelas induk dan method tunjangan. Dimana masing – masing method akan mengembalikan nilai dari variabel gajiDir dan tunjangan. Kemudian pada class Staf juga dideklarasikan gaji awalnya adalah Rp 50.000 dan bonus sebesar Rp 10.000. pada class Staf ini terdapat 2 method yaitu method gaji yang mengoverride dari kelas induk dan Bonus. Dimana masing – masing method akan mengembalikan nilai dari variabel gajiStaf dan bonus. Pada Class PembayaranGaji memiliki method hitungGaji dan method utama yaitu method main. Method hitungGaji memiliki parameter Pegawai peg yang berfungsi untuk menghitung gaji pegawai. Kemudian dalah method ini juga dideklarasikan variabel uang, variabel uang ini akan memanggil method gaji pada pegawai. Untuk menampilkan hasilnya, pada method main dibuat objek baru yang bernamaali dan tony. Kemudian hasilnya akan ditampilkan dengan memanggil method hitungGaji.
DAFTAR PUSTAKA Kartika,Candra Kirana.2017.Abstract, Interface, Polymorphism.Malang:Universitas Negeri Malang. Putuguna.
2016.
Pengertian
Interface
dan
Cara
Penggunaan
di
Java.
https://putuguna.com/2016/08/pengertian-interface-dan-cara-pengunaannya-dijava.html. Diakses pada tanggal 28 Oktober 2017 ___.2016.
Memahami
Konsep
Polimorfisme
(Polymorphism)
di
http://www.termasmedia.com/pemrograman/java/250-memahami-konseppolimorfisme-polymorphism-di-java.html. Diakses pada 31 Oktober 2017
Java.