• Tidak ada hasil yang ditemukan

MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM

N/A
N/A
Protected

Academic year: 2021

Membagikan "MODUL 5 PBO ABSTRACT, INTERFACE, POLYMORPHISM"

Copied!
16
0
0

Teks penuh

(1)

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

JURUSAN TEKNIK ELEKTRO

S1 PENDIDIKAN TEKNIK INFORMATIKA

(2)

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

}

(3)

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 transportasi public 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 void public abstract void walk();

}

Kelas Aeroplan

//kelas aeroplan yang diturunkan dari kelas Vehicle public class Aeroplan extends Vehicle{

//method walk mengoverride method abstrak pada kelas vehicle public void walk(){

(4)

System.out.println("Aeroplan is Flying"); }

//method main

public static void main(String[]args){ //membuat objek baru dari kelas Aeroplan

Aeroplan garuda = new Aeroplan(); garuda.function();

garuda.fuel();//memanggil method fuel pada kelas vehicle

garuda.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 transportasi public void function(){

System.out.println("Transportation Tools"); }

//method abstrak fuel

public abstract void fuel();

//method abstrak walk yang bertipe void public abstract void walk();

}

Output program

Lakukan override method fuel pada class AeroPlan.

Kelas Vehicle

public abstract class Vehicle{

//method function yang akan menampilkan alat transportasi public 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 void public abstract void walk();

(5)

Kelas Aeroplan

//kelas aeroplan yang diturunkan dari kelas Vehicle public class Aeroplan extends Vehicle{

//method walk mengoverride method abstrak pada kelas vehicle public void walk(){

System.out.println("Aeroplan is Flying"); }

public void fuel(){

System.out.println("Fuels"); }

//method main

public 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 vehicle

garuda.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 Relation class Line implements Relation{

private double x1; private double x2; private double y1; private double y2;

(6)

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

(7)

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

(8)

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 pembayarangaji PembayaranGaji 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.

(9)

D. TUGAS PRAKTIKUM

Kelas Rect

public class Rect {

//ada 4 variabel utama yang menentukan titik sudut persegi panjang public 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 nol public Rect() {

this(0,0,0,0); }

//method untuk menggeser persegi panjang

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

(10)

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

(11)

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 penggunaannya public abstract class Bangun{

//method abstract dengan nama hitung Luas

//yang akan diimplementasikan pada kelas lain dengan aksi yang berbeda public abstract double hitungLuas();

}

Class Segitiga

//kelas segitiga terwarisi sifat dari kelas bangun class 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

(12)

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

(13)

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

(14)

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

(15)

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

(16)

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

Referensi

Dokumen terkait

Hasil penelitian menunjukkan bahwa liabilitas yang di dapat oleh Rizky Mart selama 3 tahun terakhir mengalami Fluktuasi dan Debt to Equity pada Rizky Mart

The analysis result showed that the strategy for the development of local food diversification in West Kalimantan is SO strategy (Strengths - Opportunities) those are: 1) the

Di dalam Sistem Internasional (SI) terdapat 7 besaran pokok yang memiliki dimensi yaitu panjang, suhu, waktu, arus listrik, massa intensitas cahaya dan jumlah zat, dan 2

Peneliti menganalisis semua tindakan kelas pada siklus II sebagaimana langkah yang telah dilakukan pada siklus I, selanjutnya peneliti mengadakan refleksi.

1) Petugas melakukan retensi berdasarkan tanggal terakhir pasien berobat 5 tahun misal retensi 2016 berarti dokumen in aktif yang harus di retensi tahun 2012 ke bawah

Sebuah penguat sinyal kecil selalu dioperasikan dalam area linearitas karena mempertimbangkan gain sinyal; tapi, tujuan utama penguat daya adalah memperoleh daya

Dengan adanya Undang-Undang Nomor 23 tahun 2004 tentang penghapusan kekerasan dalam Rumah tangga ini menjadi payung hukum bagi korban dan membuat efek jera bagi pelaku tindak

Hal ini berarti penggunaan variabel usia, tingkat pendidikan, jumlah tanggungan keluarga, jumlah pinjaman, pengalaman usaha, dan omzet usaha ke dalam model adalah memperbaiki model