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 a a a a e ja i bahan bakar terjadi?
• 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 the th fuel f l 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 Vehicle? Gunakan constructor untuk menginisialisasi g (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