PL-08-ABSTRACT & INTERFACE - hermantolle.com · •Method dalam class abstract yang tidak mempunyai...

33
PEMROGRAMAN LANJUT Fakultas Ilmu Komputer, Universitas Brawijaya ABSTRACT CLASS & INTERFACE Dr. Eng. Herman Tolle Sistem Informasi Filkom UB Semester Genap 2016/2017

Transcript of PL-08-ABSTRACT & INTERFACE - hermantolle.com · •Method dalam class abstract yang tidak mempunyai...

PEMROGRAMAN LANJUT

Fakultas Ilmu Komputer, Universitas Brawijaya

ABSTRACT CLASS & INTERFACE

Dr.Eng.HermanTolle

Sistem Informasi Filkom UBSemester Genap 2016/2017

ABSTRACT

• AbstractClass(Abstraksi)adalahkelasyangmemilikisatuataulebihmethodyangbelumdidefinisikan

• Methoddalamclassabstractyangtidakmempunyaiimplementasidinamakanmethodabstract.

• Untukmembuatmethodabstract,cukupmenulisdeklarasimethodtanpaisitubuhclassdandigunakanmenggunakankatakunciabstract.

• Contoh:public abstract void someMethod();

ABSTRAKSI

PenggunaanclassAbstract

• Classabstractdapatdigunakansebagaisuperclass untuksatuataulebihsubclass(kelasturunan)

• Methodabstractdidefinisikanpadaclassabstractsebagaidefinisiumumsaja,yangharusdidetailkan/diimplementasikanpadakelasturunannya.

INTERFACE

• Interfaceadalahsebuahblok(setingkatclass)yanghanyaberisisignaturemethoddanconstant (konstanta)

• Signaturemethoddapatdianggapsepertisebuahabstractmethod.Methodyangtidakmemilikiimplementasitetapihanyaberupanamamethodsaja

public interface Movable { public void moveUp(); public void moveDown(); public void moveLeft(); public void moveRight(); }

public class MovablePoint implements Movable { // Private member variablesprivate int x, y; // (x, y) coordinates of the point

// Constructorpublic MovablePoint(int x, int y) { this.x = x; this.y = y; } @Overridepublic 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); // upcastSystem.out.println(m1);

m1.moveDown(); System.out.println(m1);

m1.moveRight(); System.out.println(m1); }

}

ImplementasiInterface• MenggunakankatakunciIMPLEMENTS• public class MovablePoint implements Movable

• ClasshanyadapatmengEXTENDSATUsuperclass,tetapidapatmengIMPLEMENTASIkanBANYAKinterface.

• Ketikaclassmengimplementasikansebuahinterface,selalupastikanbahwasemuamethoddalaminterfacetelahdiimplementasikansemuanyapadaclasstsb,jikatidak,akanadapesankesalahan

• Line.java:4: Line is not abstract and does not override abstract

Kapanmenggunakaninterface?

•Kitamenggunakaninterfacejikakitainginclassyangtidakberhubungan mengimplementasikanmethodataufungsi-fungsiyangsama.•Melaluiinterface kitadapatmenangkapkemiripandiantaraclassyangtidakberhubungan•SebuahClassdapatmengimplementasikanlebihdarisatuinterface.

InterfaceNamingConvention

• Useanadjective(typicallyendswith"able")consistingofoneormorewords.

• Eachwordshallbeinitialcapitalized(camel-case).

• Forexample: Serializable,Extenalizable,Movable, Clonable, Runnable,etc.

PewarisanAntarInterface• Interfacebukanbagiandarihirarkiclass.• Interfacedapatmempunyaihubunganpewarisanantaramerekasendiri.• Contohnya,misalkitapunyaduainterfaceStudentInterfacedanPersonInterface.JikaStudentInterfacemeng-extendPersonInterface,makaiaakanmewariskansemuadeklarasimethoddalamPersonInterface.

public interface PersonInterface {. . .}

public interface StudentInterface extends PersonInterface {. . .}

ContohInterface

Catatan

• Interfacedapatditurunkandarisatuataulebihinterfaceinterface Hockey extends Sports, Event

• ClassdapatmengimplementlebihdarisatuClass PersegiPanjang implements Relation, Movable, Resizable

16

10.8CaseStudy:CreatingandUsingInterfaces

• Useinterface Shape– Replaceabstract classShape

• Interface– Declarationbeginswithinterface keyword– Classesimplement aninterface(anditsmethods)

– Containspublic abstractmethods• Classes(thatimplement theinterface)mustimplementthesemethods

Ó 2003 Prentice Hall, Inc.All rights reserved.

Outline17

Shape.java

Lines 5-7Classes that implement Shapemust implement these methods

1 // Fig. 10.18: Shape.java2 // Shape interface declaration.3 4 public interface Shape {

5 public double getArea(); // calculate area

6 public double getVolume(); // calculate volume

7 public String getName(); // return shape name

8 9 } // end interface Shape

Classes that implement Shapemust implement these methods

Ó 2003 Prentice Hall, Inc.All rights reserved.

Outline18

Point.java

Line 4Point implements interface Shape

1 // Fig. 10.19: Point.java2 // Point class declaration implements interface Shape.3 4 public class Point extends Object implements Shape {

5 private int x; // x part of coordinate pair

6 private int y; // y part of coordinate pair

7 8 // no-argument constructor; x and y default to 0

9 public Point()

10 {

11 // implicit call to Object constructor occurs here

12 }

13 14 // constructor

15 public Point( int xValue, int yValue )

16 {

17 // implicit call to Object constructor occurs here

18 x = xValue; // no need for validation

19 y = yValue; // no need for validation

20 }

21 22 // set x in coordinate pair

23 public void setX( int xValue )

24 {

25 x = xValue; // no need for validation

26 }

27

Point implements interface Shape

Ó 2003 Prentice Hall, Inc.All rights reserved.

Outline19

Point.java

28 // return x from coordinate pair

29 public int getX()

30 {

31 return x;

32 }

33 34 // set y in coordinate pair

35 public void setY( int yValue )

36 {

37 y = yValue; // no need for validation

38 }

39 40 // return y from coordinate pair

41 public int getY()

42 {

43 return y;

44 }

45

Ó 2003 Prentice Hall, Inc.All rights reserved.

Outline20

Point.java

Lines 47-59Implement methods specified by interface Shape

46 // declare abstract method getArea

47 public double getArea()

48 {

49 return 0.0;

50 }

51 52 // declare abstract method getVolume

53 public double getVolume()

54 {

55 return 0.0;

56 }

57 58 // override abstract method getName to return "Point"

59 public String getName()

60 {

61 return "Point";

62 }

63 64 // override toString to return String representation of Point

65 public String toString()

66 {

67 return "[" + getX() + ", " + getY() + "]";

68 }

69 70 } // end class Point

Implement methods specified by interface Shape

Ó 2003 Prentice Hall, Inc.All rights reserved.

Outline21

InterfaceTest.java

Line 23 Create Shape array

1 // Fig. 10.20: InterfaceTest.java2 // Test Point, Circle, Cylinder hierarchy with interface Shape.3 import java.text.DecimalFormat;

4 import javax.swing.JOptionPane;

5 6 public class InterfaceTest {

7 8 public static void main( String args[] )

9 {

10 // set floating-point number format

11 DecimalFormat twoDigits = new DecimalFormat( "0.00" );

12 13 // create Point, Circle and Cylinder objects

14 Point point = new Point( 7, 11 );

15 Circle circle = new Circle( 22, 8, 3.5 );

16 Cylinder cylinder = new Cylinder( 20, 30, 3.3, 10.75 );

17 18 // obtain name and string representation of each object

19 String output = point.getName() + ": " + point + "\n" +

20 circle.getName() + ": " + circle + "\n" +

21 cylinder.getName() + ": " + cylinder + "\n";

22 23 Shape arrayOfShapes[] = new Shape[ 3 ]; // create Shape array

24

Create Shape array

Ó 2003 Prentice Hall, Inc.All rights reserved.

Outline22

InterfaceTest.java

Lines 36-42Loop through arrayOfShapes to get name, string representation, area and volume of every shape in array.

25 // aim arrayOfShapes[ 0 ] at subclass Point object

26 arrayOfShapes[ 0 ] = point;

27

28 // aim arrayOfShapes[ 1 ] at subclass Circle object

29 arrayOfShapes[ 1 ] = circle;

30

31 // aim arrayOfShapes[ 2 ] at subclass Cylinder object

32 arrayOfShapes[ 2 ] = cylinder;

33

34 // loop through arrayOfShapes to get name, string

35 // representation, area and volume of every Shape in array

36 for ( int i = 0; i < arrayOfShapes.length; i++ ) {

37 output += "\n\n" + arrayOfShapes[ i ].getName() + ": " +

38 arrayOfShapes[ i ].toString() + "\nArea = " +

39 twoDigits.format( arrayOfShapes[ i ].getArea() ) +

40 "\nVolume = " +

41 twoDigits.format( arrayOfShapes[ i ].getVolume() );

42 }

43

44 JOptionPane.showMessageDialog( null, output ); // display output

45

46 System.exit( 0 );

47

48 } // end main

49

50 } // end class InterfaceTest

Loop through arrayOfShapes to get name, string representation, area and volume of every shape in array

Ó 2003 Prentice Hall, Inc.All rights reserved.

Outline23

InterfaceTest.java

ContohKasus• Ada2class:classLine danclassMyInteger

• classLineberisimethodyangmenghitungpanjangdarigarisdanmembandingkanobjectLinekeobjectdariclassyangsama.• ClassMyIntegerberisimethodyangmembandingkanobjectMyIntegerkeobjectdariclassyangsama.• Keduaclassmempunyaimethodyanghampirsama,yaitumemperbandingkanduaobjectlaindalamtipeyangsama.• Supayadapatmenjalankancarauntukmemastikanbahwaduaclass-classinimengimplementasikanbeberapamethoddenganfungsiyangsama,kitadapatmenggunakansebuahinterface• untukhalini.Kitadapatmembuatsebuahclassinterface,katakanlahinterfaceRelationdimanamempunyaideklarasimethoduntukfungsi-fungsipembandingan.

public interface Relation{public boolean isGreater( Object a, Object b);public boolean isLess( Object a, Object b);public 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

• BuatClassMyIntegeryangmengimplementasikanpenggunaaninterfaceRelation

• BuatclassMovableCircleyangmengimplementasiinterfacemovable

Latihan

1. BuatKodeProgramuntukmenentukanmanagaristerpanjangdanmanagaristerpendekdariinput3buahobjekgaris(Line)

2. BuatClassdanProgramsepertikasusdiatasuntukobjekPersegiPanjang(atribut:X1,X2,Y1,Y2)

Catatan:soalno2dikerjakandandikumpulkan

File 1: Relation.javaFile 2: Line.javaFile 3: TestLine.java

// file 3: TestLine.javapublic 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());}

LatihanF

1. BuatKodeProgramuntukmenentukanmanagaristerpanjangdanmanagaristerpendekdariinput3buahobjekgaris(Line)

2. BuatClassdanProgramsepertikasusdiatasuntukobjekPersegiPanjang(atribut:X1,X2,Y1,Y2),mencariobjekTERLUASdariinput3buahobjekPersegi

Catatan:soalno2dikerjakandandikumpulkan

32

10.8CaseStudy:CreatingandUsingInterfaces(Cont.)

• ImplementingMultipleInterface– Providecommon-separatedlistofinterfacenamesafterkeywordimplements

• DeclaringConstantswithInterfaces– public interface Constants {

public static final int ONE = 1;public static final int TWO = 2;public static final int THREE =

3;}

33

10.10Type-WrapperClassesforPrimitiveTypes

• Type-wrapperclass– Eachprimitivetypehasone• Character,Byte,Integer,Boolean,etc.

– EnabletorepresentprimitiveasObject• Primitivetypescanbeprocessedpolymorphically

– Declaredasfinal–Manymethodsaredeclaredstatic