Anda di halaman 1dari 15

LAPORAN 5

PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK


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:
Erma Widayanti
Robi Wahyudi

Oleh:

Intan Cahyani Putri


130533608219
S1 PTI 2013 offering C

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. Memahami class abstract
2. Memahami interface
3. Memahami polymorphism

B. Dasar Teori

1. Kelas Abstrak (Abstract Class)


Kelas abstrak adalah kelas yang terletak di posisi tertinggi dalam hierarki class. Kelas ini
tidak dapat diinstansiasi karena masih bersifat abstrak. Kelas ini hanya berisi variabelvariabel umum dan deklarasi method tanpa detail implementasi. Selanjutnya kelas-kelas
yang menjadi turunan dari kelas abstraklah yang akan mengimplementasikan methodmethod tanpa implementasi tersebut.

2.

Interface
Interface memungkinkan pemrogram untuk berbagi konstanta atau menentukan bentuk
metode yang dapat digunakan oleh sejumlah kelas.
Beda interface dengan kelas abstrak :
a. Kelas abstrak dapat mengandung method abstract maupun method tidak abstract,
sedangkan interface hanya boleh mengandung method abstract
b. Kelas abstrak dapat mendeklarasikan variabel instans, sedangkan interface hanya
dapat mendeklarasikan konstanta
c.

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.

3. Polymorphism
Polymorphism merupakan konsep sederhana dalam bahasa pemrograman berorientasi
obyek yang berarti kemampuan sebuah obyek untuk menghasilkan aksi yang berbeda,

bila method yang sama dipanggil, dimana aksi method yang dikerjakan tergantung dari
tipe obyeknya.

C. Latihan
1. Abstract Class
Syntax
//latihan 1
//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 ("Fuel");
}
//method abstrak walk yang bertipe void
public abstract void walk ();
//latihan 1
//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(); //memanggil method fungction pada kelas vehicle
garuda.fuel(); //memanggil method fuel pada kelas vehicle
garuda.walk(); //memanggil method walk yang override dari vehicle
}
}

Output

Penjelasan
Program ini merupakan program Abstract class yang dimana sebuah class setengah jadi (abstrak)
yang memuat/memiliki method dan atrribut yang nantinya akan di implementasikan pada kelas
Aeroplan. Fungsi dari garuda.function(); yaitu untuk memanggil method fungction pada kelas
vehicle, garuda.fuel(); berfungsi untuk memanggil method fuel pada kelas vehicle,
garuda.walk(); berfungsi untuk memanggil method walk yang override dari vehicle
Ubahlah method fuel pada class Vehicle menjadi abstract. Kemudian lakukan kompilasi ulang
pada kedua class.
Syantax
//latihan 1
//kelas abstrak vehicle1
public abstract class Vehicle1{
//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 abstract void fuel(){
System.out.println("Fuels");
}
//method abstrak walk yang bertipe void
public abstract void walk();
}
Output

2. Interface
Syntax
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.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);
}
}
public class Main{
public static void main(String[]args){
Line angka=new Line(8,2,10,7);
System.out.println("Length

: "+angka.getLength());

System.out.println("Lebih Besar : "+angka.isGreater(angka,angka));


System.out.println("Lebih Kecil : "+angka.isLess(angka,angka));
System.out.println("Sama Dengan : "+angka.isEqual(angka,angka));
}
}

Output

Syantax Kosongkan isi method isEqual


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

Output

Syntax Hapus method isEqual


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

Output

Penjelasan
Program ini merupakan program Interface, yang hasilnya akan menampilkan Leght, Lebih besar,
lebih kecil, sama dengan. Dan dalam program Interface ini ada kelas abstract yaitu kelas Relation
dan akan di uji dengan menggunakan kelas Line dan program mencoba di kosongkan isi method
isEqual dan hasilnya eror. Dan dicoba lagi Hapus method isEqual hasilnya juga sama yaitu eror.

Latihan 3. Polymorphism
Syantax
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 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 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{
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 untuk Direktur =
"+pg.hitungGaji(tony));
}

Output

Penjelasan
Program ini merupakan program Polymorphism yang mana mempunyai 1 class utama
yaitu class pegawai dan mempunyai 2 class turunan yaitu klass staf dan direktur.
Program ini mempunyai yang berfungsi untuk menghitung gaji yang dibayarkan untuk
staf dan direktur.

Tugas Praktikum
Syntax
public class Rect
{
//ada 4 variabel utama yang menentukan titik sudut persegi 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;
this.x2=x2;
this.y2=y2;
}
//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;
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)?r.x1:this.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+"]";
}
}
public class Test
{
public static void main(String[]args)
{
Rect data1=new Rect(1,1,4,4);
Rect data2=new Rect(2,3,5,6);
int x=2,y=3;
if(data1.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(data1.toString()+" union "+
data2.toString()+"="+data1.union(data2));
System.out.println(data1.toString()+" intersect "+
data2.toString()+"="+data1.intersection(data2));
Rect data3=data1.intersection(data2);
data3.move(3,3);
System.out.println(data1.intersection(data2)+"
digesersejauh (3,3)="+data3.toString());
}
}

Output

Tugas Rumah

Kesimpulan
1. Abstract adalah sebuah class setengah jadi (abstrak) yang memuat/memiliki method
dan atrribut

2. abstract class sebenarnya adalah sebuah class, sehingga memiliki semua sifat dari
class biasa (punya konstruktor). Hanya saja sifatnya masih abstrak, karena itu
biasanya method kosong/belum di implementasikan. Namun Abstract class dapat
mengimplementasikan method tersebut. Abstract class akan selalu menjadi superclass
/ hirarki tertinggi dari subclass-subclass-nya.
3. Interface adalah jenis khusus dari blok yang hanya berisi method signature(atau
constant). Interface mendefinisikan sebuah (signature) dari sebuah kumpulan method
tanpa tubuh.
4. secara umum, polimorphism dimaksudkan pada kemampuan untuk muncul dalam
berbagai bentuk.
5. Polymorphism di Java:
a. Kemampuan suatu refference variable untuk bertindak (melakukan method)
sesuai dengan object yang dipegangnya.
b. Memungkinkan berbagai object dari berbagai subclass diperlakukan sebagai
sebuah object super class. Super class yang dimaksud akan melakukan tindakan
sesuai dengan object subclass tersebut.

Daftar Pustaka

Modul 5 (ABSTRACT CLASS, INTERFACE, DAN POLYMORPHISM)

http://tentangjava.wordpress.com/

Anda mungkin juga menyukai