Anda di halaman 1dari 16

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

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

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;

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

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

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

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
}

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