Anda di halaman 1dari 18

LAPORAN V

ABSTRACT CLASS, INTERFACE DAN POLYMORPHISM


Disusun untuk Memenuhi Matakuliah Praktikum Pemrograman Berorientasi Objek
Yang Dibimbing oleh Bapak Heru Wahyu Herwanto, S.T., M.Kom
Asisten Praktikum :
M. Angga Gumilang
Jevri T. Ardiansah

Oleh :
TRESIA FEBRIYANTI
130533608272
S1 PTI 2013 offering A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
S1 PENDIDIKAN TEKNIK INFORMATIKA
November, 2014
Laporan V
Abstract Class, Interface dan Polymorphism

A Tujuan
1 Memahami class abstract
2 Memahami interface
3 Memahami polymorphism
B Dasar Teori
1

Abstract class
abstract class berfungsi untuk mencegah suatu class diinisiasikan. Selain pada
class, abstract dapat dilakukan pada method. Jika kata kunci abstract kita berikan pada
method, body dari method tersebut tidak dapat diisikan code apapun. Karena tidak dapat
diisikan code apapun, maka pada childnya nanti method tersebut harus kita override.
Abstract method juga mengakibatkan method tersebut tidak dapat kita panggil kecuali
telah dioverride.
Kelas ini hanya berisi variabel-variabel umum dan deklarasi method tanpa detail
implementasi. Selanjutnya kelas-kelas yang menjadi turunan dari kelas abstraklah yang
akan mengimplementasikan method-method tanpa implementasi tersebut.
Jadi kalau kita tinjau ulang, kata abstract berfungsi untuk mencegah sesuatu
diinisiasikan bagi class, dan mencegah suatu method digunakan sebelum di-override oleh
method baru.

2.Interface
Interface adalah jenis khusus dari blok yang hanya berisi method signature(atau
constant ). Interface mendefinisikan sebuah(signature) dari sebuah kumpulan method
tanpa tubuh.
Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat
dari class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam
hirarki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa
interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat

memanggil method interface dan versi yang tepat dari method yang akan dieksekusi
tergantung dari tipe object yang melewati pemanggil method interface

Aturan- Aturan Dalam Interface


Berikut ini adalah aturan yang harus dingat tentang pendeklarasian interface:
1.

Modifier yang digunakan hanya public atau tidak sama sekali. Jika tidak
menggunakan modifier maka interface tersebut hanya dapat diakses dalam package
yang sama.

2.

Semua variabel yang dideklarasikan dalam interface secara otomatis adalah static
final. Karena itu waktu pendeklarasian harus diberikan nilai.

3.

Semua method adalah abstrak. Bedanya dengan class abstrak adalah kita tidak perlu
menuliskan keyword abstract pada saat mendeklarasikan method dalam interface.

4.

Kita dapat mengimplementasikan lebih dari satu interface (multiple inheritance)


dengan memisahkan nama dari setiap interface dengan tanda koma.

5.

Dapat terjadi saat kita mengimplementasikan lebih dari satu interface ternyata
interface interface tersebut memiliki method yang sama. Dalam hal ini method
yang akan diimplementasi adalah method yang berada pada posisi pertama.

6.

Semua method yang diimplemetasikan harus public.

7.

Jika kita tidak mengimplementasikan semua method yang ada pada interface, maka
class tersebut harus dideklarasikan sebagai abstract class.

2. Polymorphism berarti mempunyai banyak bentuk juga merupakan salah satu sifat
class yang memungkinkan sebuah method mempunyai nama yang sama, namun memiliki
aksi yang berbeda.

Polymorphism adalah pemikiran bahwa objek dinamis suatu class dasar dapat berperilaku
seperti class turunan. Jika objek menunjuk class dasar maka ia perilaku seperti class dasar,
dan jika ia menunjuk class turunan ia akan berperilaku seperti class turunan.
Dalam hal ini obkjek memiliki beberapa bentuk, tergantung ia menunjuk kemana. Dalam hal
ini suatu objek atau class dan perubahan perilakunya adalah dari kelas dasar ke kelas turunan,
tidak bisa objek kelas turunan menunjuk ke kelas dasar. Polimorfisme dimungkinkan karena
adanya mekanisme ikatan dinamis, ikatan ini adalah ikatan yang terjadi ketika program
dijalankan (run-time), ikatan yang terjadi pada saat compiling disebut ikatan dinamis. Ikatan
dinamis hanya akan terjadi antara suatu objek dinamis dengan metode yang dinamis juga,
dalam hal ini metode virtual (maya)
Pada dasarnya ada 2 tipe polymorphism, yaitu:
a.

Static atau trivial

merupakan, function overloading (penggunaan kembali nama fungi yang sama tapi
dgn argumen yang berbeda) yang terbagi dalam 3 signature yaitu:
-

Jenis Array

Letak Array

Type Array

Contoh function overloading :


-

void tambah (int a, int b);

void tambah(float d, float c);

b.

Dynamic atau true

Merupakan function overriding (sebuah fungsi dalam class turunan yang memiliki nama,
return type argumen function yang sama dengan fungsi dalam class induk). Menggunakan
virtual method.

C Latihan

Latihan 1 :
Nama Program : Abstract Class
Script program :
vehicle.java

//latihan1
//kelas abstrak vehicle
public abstract class vehicle{
//method function yang akan menampilkan keterangan 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();
}

Aeroplan.java
//latihan1
//kelas Aeroplan yang diturunkan dari kelas vehivle
public class Aeroplan extends Vehicle{
//methode walk mengoverride method abstrak pada kelas vehicle
public void walk(){
System.out.println("Aeroplan is Flying");
}
//method maain
public static void main(String[]args){
//membuat objek baru dari kelas aeroplan
Aeroplan garuda = new Aeroplan();
garuda.function(); //memanggil method function pada kelas
vehicle
garuda.fuel(); //memanggil method fuel pada kelas vehicle
garuda.walk();//memanggul method walk yang overidde dari kelas
vehicle
}
}

a. Output program adalah

b. Ubahlah method fuel pada class Vehicle menjadi abstract. Kemudian lakukan
kompilasi ulang pada kedua class. Output setelah kompilasi adalah

c. Lakukan override method fuel pada class Aeroplan.


public class aeroPlan1 extends vehicle{
public void walk(){
System.out.println("Aeroplan is Flying");
}
public void fuel(){
System.out.println("Aeroplan Fuels");
}
public static void main(String[]args){
aeroPlan1 garuda=new aeroPlan1();
garuda.function();
garuda.fuel();
garuda.walk();
}
}

d. Jelaskan mengapa langkah b dan c berbeda!


Pada program b menggunakkan classmengguakan method abstract fuel sehingga
tidak dapat di eksesusi sehingga error bebrbeda dengan program c yang akan bisa di
eksekusi setelah dilakukkan override.
Latihan 2 :
Nama Program : interface
Script Program :
Relation,java
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 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.y1=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);
}
}

TestLine.java
public class TestLine{
public static void main(String[]args){
Line garis=new Line(1,2,3,4);
System.out.println("Length : "+garis.getLength());
System.out.println(">
: "+garis.isGreater(garis,garis));
System.out.println("<
: "+garis.isLess(garis,garis));
System.out.println("=
: "+garis.isEqual(garis,garis));
}
}

a. Tambahkan sebuah class untuk menguji program di atas!


public class UjiLine{
public static void main(String[]args){
Line garis=new Line(1,2,3,4);
System.out.println("Length
: "+garis.getLength());
System.out.println("Lebih Besar :
"+garis.isGreater(garis,garis));
System.out.println("Lebih Kecil : "+garis.isLess(garis,garis));
System.out.println("Sama Dengan : "+garis.isEqual(garis,garis));
}
}

b. Output program

c. Kosongkan isi method isEqual. Kemudian jalankan program. Output program adalah

d. Hapus method isEqual. Kemudian jalankan program! Output program adalah

Latihan 3
Nama Program : Polymorphism
Script Program :
Pegawai.java

public class Pegawai{


String nama;
int gaji;
Pegawai(){}
Pegawai(String nm){
this.nama=nm;
System.out.println("Pegawai");
}
public int gaji(){
return 0;
}}

Direktur.java
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;
}
}

Staf.java
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;
}
}

PembayaranGaji.java
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){
PembayaranGaji pg=new PembayaranGaji();
Staf ali=new Staf();
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 adalah

1. Troubleshooting Praktikum
Persegi panjang dibentuk oleh empat titik sudut. Membutuhkan constructor dan method
seperti program di bawah ini. Buat subclass dengan menggunakan class Rect dan
menghasilkan tanpilan minimal seperti berikut:

Rect.java

public class Rect{


//ada 4 variabel utama yang menentukan titik sudut
//panjang
public int x1, y1, x2, y2;
//ini adalah construktor utama
public Rect (int x1, int y1, int x2, int y2){
this.x1=x1;
this.y1=y1;
}
//construktor dengan panjang dan lebar dimulai dari 0,0

public Rect(int width, int height){


this(0,0,width,height);
}
//construktor persegi nol
public Rect(){
this(0,0,0,0);
}
//method untuk menggeser persegi panjang
public void move(int deltax, int deltay){
x1+=deltax;
y1+=deltax;
}
//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);
}
//method untuk mengetahui perpotongan dua persegi panjang
public Rect intersection(Rect r) {
Rect result=new Rect ((this.x1<r.x1)?r.x1:this.x1,
(this.y1>r.y1)?this.y1:r.y1);
if(result.x1>result.x2){
result.x1=result.x2=0;
}
return result;
}
//method untuk mengetahui perpotongan dua persegi panjang
public String toString(){
return "["+x1+","+y1+"; "+x2+","+y2+"]";
}
}

TestRect.java

public class TestRect{


public static void main(String[]args){
Rect check1 = new Rect(1,1,4,4);
Rect check2 = new Rect(2,3,5,6);
int x=2,y=3;
if(check2.isInside(x,y))
System.out.println(x+","+y+"is Inside the union");
else
System.out.println(x+","+y+"is Outside the union");
System.out.println(check1.toString()+" union
"+check2.toString()+"="+check1.union(check2));
System.out.println(check1.toString()+" intersection
"+check2.toString()+"="+check1.intersection(check2));

Rect check3 = check1.intersection(check2);


check3.move(3,3);
System.out.println(check1.intersection(check2)+"digeser
sejauh (3,3)"+check3.toString());
}
}

Output program

D Tugas Rumah
Kelompok
Tresia Febriyanti (130533608272)
Rony Aldhea DC (130533608077 )
Tugas 1
Nama Program : Peminjaman di Perpustakaan
Script Program :
Penjelasan Program :
Tugas 2
Nama Program : Peminjaman di Perpustakaan
Script Program :
Buku.java

public class Buku extends Perpustakaan { //membuat kelas turunan dari


Perpus dengan nama Buku
private static final int jumlah=3; //mendefinisikan variabel
jumlah dengan hak akses private

};

public void buku() { // mengoverride fungsi buku


System.out.println("Buku yang tersedia adalah: ");
String[][] buku = { //membuat array 2 dimensi
{"01","Majalah","Majalah BOBO"},
{"02","Majalah","Komunikasi"},
{"03","Majalah","Sistem Informasi"},
{"04","Komik","Doraemon"},
{"05","Komik","Shinchan"},
{"06","Majalah","Informasi Sistem Operasi"},
{"07","Novel","Freaky teppy"},
{"08","Novel","5 cm"},
{"09","Textbook","sistem Oprasi"},
{"10","Textbook","Matematika Diskrit"}
System.out.println ("\r");
System.out.println("No Kategori

Nama");

System.out.println("-----------------------------------------------------");
// untuk menampilkan array buku
for (int i=0;i<buku.length;i++)
System.out.println(buku[i][0]+"."+buku[i][1]+"
"+buku[i][2]);
System.out.println("-----------------------------------------------------");

}
public void pinjam() { //mengoverride fungsi pinjam
System.out.println("Jumlah buku yang boleh dipinjam maks:

"+jumlah);}
}

Pinjam.java

public class Pinjam extends Perpustakaan { //membuat kelas turunan


private static final int jumlah=2; //mendefinisikan variabel
jumlah dengan hak akses private
public void buku() { //mengoverride fungsi buku
System.out.println("Buku yang dipnjam adalah:");
String[][] buku = { //membuat array 2 dimensi
{"01","Majalah","Majalah BOBO"},
{"02","Majalah","Komunikasi"}};
System.out.println ("\r");
System.out.println("No Kategori
Nama");

System.out.println("-----------------------------------------------------");
for (int i=0;i<buku.length;i++)//untuk i=0, dimana i kurang dari
buku.lenght, dan i diincrement
System.out.println(buku[i][0]+"."+buku[i][1]+"
"+buku[i][2]);

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

public void pinjam() {//mengoverride fungsi pinjam


System.out.println("Jumlah buku yang dipinjam adalah: "+jumlah);
System.out.println("Oleh : Tresia Febriyanti");
}

Perpustakaan.java
public abstract class Perpustakaan {
public abstract void buku();
public abstract void pinjam();
}

//membuat kelas abstract

Jadi.java
public class jadi { //membuat class
public static void main(String[] args) {

//deklarasi fungsi main

System.out.println("-----------------------------------------------------");
System.out.println("|========================================|");
System.out.println("|
PERPUSTAKAAN UMUM
|");
System.out.println("|========================================|");
Buku bk = new Buku();
Pinjam pj = new Pinjam();
bk.buku();
pj.pinjam();
pj.buku();
bk.pinjam();
}
}

Output Program :

Penjelasan Program :
Pada program ini menjelaskan bahwa cara meminjam buku dan buku yang tersedia di
perpustakaan umum dan setiap orang yang meminjam buku harus terdapat identitas
beserta buku yang akan dipinjam oleh yang meminjam dan setiap orang berhak
meminjam buku maks tiga buku.

Kesimpulan
abstract class berfungsi untuk mencegah suatu class diinisiasikan. Selain pada
class, abstract dapat dilakukan pada method. Jika kata kunci abstract kita berikan

pada method, body dari method tersebut tidak dapat diisikan code apapun. Karena
tidak dapat diisikan code apapun, maka pada childnya nanti method tersebut harus
kita override. Abstract method juga mengakibatkan method tersebut tidak dapat
kita panggil kecuali telah dioverride

Beda interface dengan kelas abstrak:


Kelas abstrak dapat mengandung method abstract maupun method tidak abstract,
sedangkan interface hanya boleh mengandung method abstract
Kelas abstrak dapat mendeklarasikan variable instans, sedangkan interface hanya
dapat mendeklarasikan konstanta
Kelas abstrak digunakan oleh kelas lain melalui metode pewarisan dengan kata kunci
extends,
sedangkan sebuah interface diimplementasikan ke dalam suatu class dengan
menggunakan kata kunci implements, dan sebuah kelas dapat mengimplementasikan
lebih dari satu interface

Polymorphism merupakan kemampuan dari child untuk mengubah method


parentnya sehingga method tersebut berbeda-beda. Jadi overriding dan overloading
merupakan bagian dari polymorphism.

Daftar Pustaka
- Tim Asisten Praktikum Pemrograman Berbasis Objek. 2014. Abstract class, interface, &
polymorphism. Malang: Universitas Negeri Malang
- http://mawaista.blogspot.com/2013/12/contoh-program-polymorphism-dijava.html
- http://maceatho.blogspot.com/2013/01/interface-dalam-java.html

Anda mungkin juga menyukai