Class Abstract - T Class Abstract dan Interface

Pemrograman Berbasis Objek

Class Abstract
Class
Abstract
Interface

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Topik
• Abstract Class
• Interface

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Abstract
• Abstract class adalah class yyang

g mempunyai
p y
setidaknya satu abstract method.
• Abstract method adalah method yang tidak
memiliki body (hanya deklarasi method)
method).

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Abstract
• Abstract class tidak bisa dibuat obyeknya.
y
y
• Obyek hanya bisa dibuat dari non-abstract class
(concrete class).
• Konsekuensinya,
Konsekuensinya suatu abstract class haruslah
diturunkan dimana pada subclass tersebut

berisi implementasi dari abstract method yang
ada
d di super class-nya.
l

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Contoh Class Abstract

Tidak bisa membuat
object dari class abstract

Teori Parent is abstract; cannot be instantiated
Teori.Parent
Parent p = new Parent();
1 error

Politeknik Elektronika Negeri Surabaya


Pemrograman Berbasis Objek

Abstract
• Bila subclass yyang
g diturunkan dari abstract
class tidak mengimplementasikan isi semua
method abstrak parent class, maka subclass
tersebut harus tetap
p dideklarasikan abstract.
• Dan deklarasi method abstract pada subclass
tersebut boleh tidak dituliskan kembali.

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Contoh Class Abstract

Politeknik Elektronika Negeri Surabaya


Pemrograman Berbasis Objek

Kegunaan Class Abstract
g








Class Abstract berisi beberapa method dan beberapa method
abstract. Class Abstract berisi sebagian implementasi, dan
subclass yang melengkapi implementasinya. Dengan kata lain
Class Abstract memiliki beberapa kesamaan (Bagian yang
diimplementasikan oleh subclass) dan memiliki perbedaan (method
yang dimiliki
di iliki sendiri

di i oleh
l h class
l
abstract)
b t t)
Deklarasikan method abstract, jika ada satu atau lebih subclass
yang diharapkan mempunyai fungsionalitas yang sama tapi
i l
implementasi
t i berbeda.
b b d
Gunakan class abstract untuk mendefinisikan behavior secara
umum sebagai superclass, sedangkan subclass menyediakan
i l
implementasi
t i detail.
d t il
Jika class abstract semua method merupakan method abstract,
sebaiknya class abstract tersebut diganti menjadi Interface
(dij l k selanjutnya)

(dijelaskan
l j t
)
Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Contoh Class Abstract
Class Abstract


Kita dapat menggambar lingkaran, persegipanjang garis, kurva
Bezier dan object-object
object object graphic lainnya.
lainnya Object tersebut
mempunyai state tertentu (seperti: position, orientation, line color,
fill color) dan behaviour secara umum(contoh: moveTo, rotate,
resize, draw). Beberapa state dan behavior ini sama untuk semua
object graphic contoh: position, fill color, and moveTo.
Implementasi yang berbeda sebagai contoh resize or draw. Semua

Object
j
Graphic
p
harus mengetahui
g
bagaimana
g
cara draw dan resize

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Contoh Class Abstract
class Circle extends GraphicObject
p
j
{
void draw() {

...
}
void resize()
() {
...
}
abstract class GraphicObject {
}
int x, y;
class Rectangle extends GraphicObject {
...
void draw() {
...
void moveTo(int newX, int newY) {
}
...
void resize() {
}
...
abstract void draw();

}
abstract void resize();
}

}

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Abstract : Scenario
Abstract : Scenario

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek
Shipping
Misal sistem memerlukan report yang melaporkan daftar kendaraan
dan kebutuhan bahan bakar untuk melakukan perjalanan .
Misal terdapat class ShippingMain yang mengumpulkan daftar

kendaraan dan mengenerate
g
Fuel Needs Report
p

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Problem 1 : Dimana seharusnya perhitungan jarak dan efisiensi 
bahan bakar terjadi?
a a a a e ja i

• Perhitungan efisiensi bahan bakar dan jarak antara
t k dan
truck

d river
i
b
barge sangatt b
berbeda.
b d
• Tidak mungkin perhitungan ini dideklarasikan pada
class Vehicle.
• Jadi perhitungan ini harus ada di class Truck dan
RiverBarge.
• Di Vehicle cukup ada abstract method dari perhitungan
ini, sehingga class vehicle ini merupakan abstract class.

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Solusi




Italic font digunakan
g
untuk menggambarkan
gg
element yyang
g bersifat
abstract.
Pada abstract class Vehicle terdapat dua buah method abstract yaitu
calcFuelEfficiency() dan calcTripDistance().

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Solusi

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Problem 2





Perhatikan
P
h tik kembali
k b li class
l
F lN d R
FuelNeedsReport.
t
Pada class FuelNeedsReport terdapat perhitungan kebutuhan bahan bakar.
Padahal tidak seharusnya pada class FuelNeedsReport terdapat perhitungan kebutuhan
Fuel.
FuelNeedsReport hanya bertugas membuat report saja.

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Solusi

calcFuelNeeds() disebut Template Method karena
calcFuelNeeds() merupakan non-abstract method yang
m n ks s method
mengakses
m th d abstract
bst ct yang
n diimplementasikan
diimpl m nt sik n di
subclassnya.
Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

public class FuelNeedsReport{
p
p {
public void generateText(PrintStream output){
// calculate
l l t th
the ffuell needed
d d ffor thi
this trip
ti
fuel = v.calcFuelNeeds();
}
}

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Abstract: Ingat!!
g
• Jangan melakukan:
new Vehicle();
V hi l ()
• Bagaimana dengan inisialisai instance atribut class
g
Vehicle? Gunakan constructor untuk menginisialisasi
(bisa dengan menggunakan this dan super).

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

INTERFACE

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Interface
• Interface berbeda dengan class.
• Interface berisi method kosong dan
konstanta.
• Method dalam interface tidak mempunyai
statement.
• Sehingga deklarasi method dalam interface
sama dengan
d
d
deklarasi
kl
i abstract
b t t method
th d
pada abstract class.

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Interface
• Method yang dideklarasikan didalam interface
secara otomatis adalah public dan abstract.
• Variable dalam interface secara otomatis
adalah public, static, dan final.

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Contoh Interface
public interface Relation {
public boolean isGreater( Object a, Object b);
public boolean isLess(( Object
p
j
a, Object
j
b);
)
public boolean isEqual( Object a, Object b);
}

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Mengimplementasikan
g p
Interface
• Bila sebuah class mengimplementasikan suatu
i t f
interface,
maka
k semua konstanta
k
t t dan
d method
th d iinterface
t f
akan dimiliki oleh class ini.
• Method pada interface harus diimplementasikan pada
class
l
yang mengimplementasikan
i l
t ik interface
i t f
i i
ini.
• Bila class yang mengimplementasikan interface tidak
mengimplemetasikan semua method dalam interface,
maka class tersebut harus dideklarasikan abstract.
abstract

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Mengimplementasikan
g p
Interface
public interface Relation {
public boolean isGreater( Object a, Object b);
public boolean isLess(( Object
p
j
a, Object
j
b);
)
public boolean isEqual( Object a, Object b);
}

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Implementasi Interface
p
public 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.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;
}

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Implementasi Interface
p
public boolean isGreater( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
((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);
}
}

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Implementasi Interface
p


Class Line mengimplementasikan interface Relation, pastikan
semua method yang ada di interface diimplementasikan di class
Line. Jika tidak maka muncul error.

j
Line is not abstract and does not override
Line.java:4:
abstract method
isGreater(java.lang.Object,java.lang.Object) in Relation
public class Line implements Relation
^
1 error

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Inheritance pada
p
Interface
• Kita bisa membuat subinterface dengan menggunakan
k t extends.
kata
t d
• Satu class boleh mengimplementasikan lebih dari satu
interface.
• Suatu interface boleh mengextends lebih dari satu
interface.

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Inheritance pada Interface
Inheritance pada
• Interface bukan bagian
g
dari hirarki class
• Namun interface dapat mempunyai relasi inheritance
public interface PersonInterface {
void doSomething();
}
public interface StudentInterface extends PersonInterface {
void doExtraSomething();
}

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Mengimplementasikan Multiple Interface
• Satu class boleh mengimplementasikan lebih dari satu
i t f
interface.
• Bila suatu class akan dijadikan subclass dan akan
mengimplementasikan interface, maka kata extends
h
harus
l bih dulu
lebih
d l dari
d i implements.
i l
t

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Mengimplementasikan Multiple Interface
• A concrete class extends one super
p class but multiple
p
Interfaces:
public class ComputerScienceStudent extends Student
implements PersonInterface,
PersonInterface AnotherInterface,
AnotherInterface Thirdinterface{
// All abstract methods of all interfaces
// need to be implemented.
}

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Kegunaan Interface
Kegunaan Interface
• Semua class yang mengimplementasikan
sebuah interface tertentu berarti class-class
tersebut mengimplementasikan methods yang
sama dengan kata lain class-class tersebut
mempunyai fungsionalitas yang sama.

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Interface Flyer dan Airplane 
I l
Implementation
t ti

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Multiple Implementation of the Flyer Interface

Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Gabungan Inheritance dan Implementation

Airplane is a Vehicle
Bird is an Animal
Superman is an Animal and is a HomoSapien
Kelemahan multiple inheritance adalah suatu class bisa
mewarisi method dari lebih dari satu class dimana
method ini tidak diharapkan. Dengan Interface maka
hal ini bisa dihindari.
dihindari
Politeknik Elektronika Negeri Surabaya

Pemrograman Berbasis Objek

Example: Multiple Interface
p
p

Politeknik Elektronika Negeri Surabaya