ABSTRACT & INTERFACE Pemrograman Lanjut Herman Tolle
ABSTRACT • Abstract Class (Abstraksi) adalah kelas yang memiliki satu atau lebih method yang belum didefinisikan • Method dalam class abstract yang tidak mempunyai implementasi dinamakan method abstract. • Untuk membuat method abstract, cukup menulis deklarasi method tanpa isi tubuh class dan digunakan menggunakan kata kunci abstract. • Contoh: public abstract void someMethod();
ABSTRAKSI
Penggunaan class Abstract • Class abstract dapat digunakan sebagai superclass untuk satu atau lebih sub class (kelas turunan) • Method abstract didefinisikan pada class abstract sebagai definisi umum saja, yang harus didetailkan / diimplementasikan pada kelas turunannya.
INTERFACE • Interface adalah sebuah blok (setingkat class) yang hanya berisi signature method dan constant (konstanta) • Signature method dapat dianggap seperti sebuah abstract method. Method yang tidak memiliki implementasi tetapi hanya berupa nama method saja
public interface Movable { public void moveUp(); public void moveDown(); public void moveLeft(); public void moveRight(); }
public class MovablePoint implements Movable { // Private member variables private int x, y; // (x, y) coordinates of the point // Constructor public MovablePoint(int x, int y) { this.x = x; this.y = y; } @Override public String toString() { return "Point at (" + x + "," + y + ")"; } // Implement abstract methods defined in the interface Movable @Override public void moveUp() { y--; } @Override public void moveDown() { y++; } @Override public void moveLeft() { x--; } @Override public void moveRight() { x++; } Movablepoint.class }
public class TestMovable { public static void main(String[] args) { Movable m1 = new MovablePoint(5, 5); // upcast System.out.println(m1); m1.moveDown(); System.out.println(m1); m1.moveRight(); System.out.println(m1); } }
Implementasi Interface • Menggunakan kata kunci IMPLEMENTS • public class MovablePoint implements Movable • Class hanya dapat mengEXTEND SATU superclass, tetapi dapat mengIMPLEMENTASIkan BANYAK interface. • Ketika class mengimplementasikan sebuah interface, selalu pastikan bahwa semua method dalam interface telah diimplementasikan semuanya pada class tsb, jika tidak, akan ada pesan kesalahan • Line.java:4: Line is not abstract and does not override abstract
Kapan menggunakan interface? • Kita menggunakan interface jika kita ingin class yang tidak berhubungan mengimplementasikan method atau fungsi-fungsi yang sama. • Melalui interface kita dapat menangkap kemiripan diantara class yang tidak berhubungan • Sebuah Class dapat mengimplementasikan lebih dari satu interface.
Interface Naming Convention • Use an adjective (typically ends with "able") consisting of one or more words. • Each word shall be initial capitalized (camelcase). • Forexample: Serializable, Extenalizable, Movable, Clonable, Runnable, etc. •
Pewarisan Antar Interface • Interface bukan bagian dari hirarki class. • Interface dapat mempunyai hubungan pewarisan antara mereka sendiri. • Contohnya, misal kita punya dua interface StudentInterface dan PersonInterface. Jika StudentInterface meng-extend PersonInterface, maka ia akan mewariskan semua deklarasi method dalam PersonInterface. public interface PersonInterface { . . . } public interface StudentInterface extends PersonInterface { . . . }
Contoh Interface
Contoh Kasus • Ada 2 class: class Line dan class MyInteger • class Line berisi method yang menghitung panjang dari garis dan membandingkan object Line ke object dari class yang sama. • Class MyInteger berisi method yang membandingkan object MyInteger ke object dari class yang sama. • Kedua class mempunyai method yang hampir sama, yaitu memperbandingkan dua object lain dalam tipe yang sama. • Supaya dapat menjalankan cara untuk memastikan bahwa dua class-class ini mengimplementasikan beberapa method dengan fungsi yang sama, kita dapat menggunakan sebuah interface • untuk hal ini. Kita dapat membuat sebuah class interface, katakanlah interface Relation dimana mempunyai deklarasi method untuk fungsi-fungsi pembandingan.
public { public public public }
interface Relation boolean isGreater( Object a, Object b); boolean isLess( Object a, Object b); boolean isEqual( Object a, Object b);
public class Line implements Relation { private double x1; private double x2; private double y1; private double y2; private String nama;
}
public Line(double x1, double x2, double y1, double y2, String name){ this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; this.nama = name;
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); } }
Latihan • Buat Class MyInteger yang mengimplementasikan penggunaan interface Relation • Buat class MovableCircle yang mengimplementasi interface movable
Latihan 1. Buat Kode Program untuk menentukan mana garis terpanjang dan mana garis terpendek dari input 3 buah objek garis (Line) 2. Buat Class dan Program seperti kasus di atas untuk objek Persegi Panjang (atribut: X1, X2, Y1, Y2) Catatan: soal no 2 dikerjakan dan dikumpulkan
File 1: Relation.java File 2: Line.java File 3: TestLine.java // file 3: TestLine.java public static void main() { Line LineA = new Line(3,7,8,4,”GarisA”); Line LineB = new Line(-2,2,2,-2,”GarisB”); Line LineC = new Line(10,13,3,-2,”GarisC”); Line Max = new Line(0,0,0,0,”max”); Max = LineA; If Max.isGreater(LineB, Max) Max = LineB; If Max.isGreater(LineC, Max) Max = LineC; System.out.println(“Garis terpanjang adalah = “ + Max.getName()); }
• Interface dapat diturunkan dari satu atau lebih interface interface Hockey extends Sports, Event
• Class dapat mengimplement lebih dari satu Class PersegiPanjang implements Relation, Movable, Resizable
Latihan F 1. Buat Kode Program untuk menentukan mana garis terpanjang dan mana garis terpendek dari input 3 buah objek garis (Line) 2. Buat Class dan Program seperti kasus di atas untuk objek Persegi Panjang (atribut: X1, X2, Y1, Y2), mencari objek TERLUAS dari input 3 buah objek Persegi Catatan: soal no 2 dikerjakan dan dikumpulkan