proglan - 19 - polimorfisme - baru

58
Inheritance + Polimorphism Fitra A. Bachtiar Pemrograman Lanjut 1

Upload: fuat-muzaki

Post on 18-Dec-2014

45 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut 1

Inheritance + Polimorphism

Fitra A. Bachtiar

Page 2: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

2OBJECTIVES Memahami bagaimana inheritance menerapkan software

reusability. Memahami bagaimana penggunaan notions dari superclasses dan

subclasses. Untuk membangun sebuah subclass dari superclass dengan

inheritance. Menggunakan access modifier protected untuk memberikan

subclass methods akses ke member superclass. Mengakses member superclass dengan super. Memanggil constructor superclass dan methods dengan

menggunakan keyword super Methods dari class object, secara langsung atau tidak langsung dari

semua class di Java. Metode override dalam subclass. Membedakan antara overriding dan overloading

Page 3: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

3

Introduction Superclass and Subclass Using the super Keyword Overriding Methods protected Members Excercise

Page 4: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

4Introduction

Inheritance Software reusability (penggunaana kembali) Menciptakan class baru dari class yang sudah ada

*Menyerap data dan behavior dari kelas yang ada Meningkatkan dengan menambahkan (fitur)

Subclass extends superclass Subclass

Group dari object yang lebih khusus Behaviors diwariskan dari superclass

Dapat dimodifikasi Penambahan behavior

Page 5: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

5Introduction

Class hierarchy Direct superclass

Inherited explicitly (one level up hierarchy) Indirect superclass

Inherited two or more levels up hierarchy Single inheritance

Inherits from one superclass Multiple inheritance

Inherits from multiple superclasses Java does not support multiple inheritance

Page 6: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

6Introduction

The characteristics of inheritance: Class baru mewarisi anggota dari class yang ada Class yang ada disebut superclass dan class yang baru disebut sebagai

subclass. Subclass pada umumnya menambahkan fields dan methods yang lebih

spesifik. Subclass lebih spesifk dari superclassnya dan menggambarkan group dari

object yang lebih spesifik. Java tidak mendukung multiple inheritance (yang terjadi ketika sebuah class

di turunkan dari superclass secara langsung). Berbeda dengan properties dan methods, constructors dari sebuah

superclass tidak diwariskan kepada subclassnya.

Page 7: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

7Introduction

Dua bentuk dari superclass berdasarkan hirarki kelas direct superclass : superclass dimana subclass diwariskan secara

langsung. indirect superclass : kelas apapun dari direct superclass dalam hirarki

kelas, mendefinisikan hubungan pewarisan antar kelas.

Page 8: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

8Superclasses and subclasses Superclasses and subclasses

Object dari sebuah kelas “adalah” object dari kelas lain Contoh: Kotak adalah Segi Empat.

Class Kotak mewarisi dari kelas SegiEmpat SegiEmpat: superclass Kotak: subclass

Superclass secara khusus mewakili set object yang lebih besar daripada object dari subclasses

Example: superclass: Kendaraan

Mobil, truk, kapal, sepeda, … subclass: Mobil

Lebih kecil, subset yang lebih kecil dari kendaraan

Page 9: ProgLan - 19 - Polimorfisme - baru

9Inheritance examples.

Pemrograman Lanjut

Superclass Subclasses

Student GraduateStudent, UndergraduateStudent Shape Circle, Triangle, Rectangle Loan CarLoan, HomeImprovementLoan,

MortgageLoan Employee Faculty, Staff BankAccount CheckingAccount, SavingsAccount

Page 10: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

10Superclasses and subclasses (Cont.)

Hirarki inheritance Hubungan inheritance: seperti struktur hubungan diagram pohon Setiap class menjadi

superclass Mensuplai members untuk class yang lainto other classes

Atau subclass

Mewarisi member (didapat) dari class lain

Page 11: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

11Superclasses and subclasses (Cont.)

Terdapat dua jenis dari hirarki basis superclass, yaitu direct superclass and indirect superclass. Direct superclass adalah superclass dimana subclass secara jelas

diwarisi. Indirect superclass adalah class manapun diatas superclass dalam

hirarki, yang menggambarkan hubungan antar class.

Page 12: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

12Inheritance hierarchy for University Community Members

Page 13: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

13Inheritance hierarchy 2D-Shapes Class

Misalkan hirarki ini untuk memodelkan bentuk (shape) dari object seperti lingkaran (circles), segitiga (triangles) dan kotak (rectangles). Object bentuk (shape) dapat digambarkan dalam warna (color) tertentu.

Dengan demikian, class shape mengandung properti warna (color) dan method set dan get di dalamnya.

Karena lingkaran, segitiga, dan kotak adalah bentuk khusus dari bentuk geometris (shape), maka mereka berbagi properties dan method dari bentuk (shape). Oleh karena itu Lingkaran, Segitiga, dan Kotak adalah extends class dari shape class.

Page 14: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

14Inheritance hierarchy 2D-Shapes Class

Page 15: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

15Example of 2D-Shapes Class

1 public class Shape {

2 private String color = "white";

3

4 /** Construct a default shape object */

5 public Shape() {

6 color = "white";

7 }

8

9 /** Return color */

10 public String getColor() {

11 return color;

12 }

13

14 /** Set a new color */

16 public void setColor(String color) {

17 this.color = color;

18 }

19

20 /** Return a string representation of this object */

21 public String toString() {

22 return "The color of the shape is " + color ;

23 }

24 }

Page 16: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

16Example of 2D-Shapes Class

1 public class Circle extends Shape {

2 private int radius;3

4 public Circle() {5 }6

7 public Circle(int r) {8 radius = r;9 }10

11 /** Return radius */12 public int getRadius() {13 return radius;14 }16

17 /** Set a new radius */18 public void setRadius(int r) {19 radius = r;20 }

22 /** Return area */

23 public double Area() {

24 return radius * radius * Math.PI;

25 }

26

27 public double Perimeter() {

28 return 2 * radius * Math.PI;

29 }

30

31 /* Print the circle info */

32 public void printCircle() {

33 System.out.println("The radius of the circle is “+ radius);

34 }

35 }

Page 17: ProgLan - 19 - Polimorfisme - baru

17Example of 2D-Shapes Class

Pemrograman Lanjut

1 public class Triangle extends Shape {

2 private int side;3 private int height;4

5 public Triangle() {6 }7

8 public Triangle(int s, int h) {9 side = s;10 height = h;11 }12

13 /** Return side */14 public double getSide() {16 return side;17 }18

19 /** Set a new side */20 public void setSide(int s) {21 Side = s;22 }

24 /** Return height */25 Public double getHeight() {26 return height;27 }28

29 /** Set a new height */30 public void setHeight(int h) {31 height = h;32 }33

34 /** Return area */35 public double Area() {36 return 0.5 * side * height;37 }38

39 /** Return perimeter */40 public double Perimeter() {41 return Math.pow((side*side +

height*height),0.5) + side + height);42 }43 }

Page 18: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

18Example of 2D-Shapes Class

1 public class Rectangle extends Shape {

2 private int width;3 private int height;4

5 public Rectangle() {6 }7

8 public Rectangle(int w, int h) {9 width = w;10 height = h;11 }12

13 /** Return width */14 public double getWidth() {16 return width;17 }18

19 /** Set a new width */20 public void setWidth(int w) {21 width = w;22 }

24 /** Return height */25 public double getHeight() {26 return height;27 }28

29 /** Set a new height */30 public void setHeight(int h) {31 height = h;32 }33

34 /** Return area */35 public double Area() {36 return width * height;37 }38

39 /** Return perimeter */40 public double Perimeter() {41 return 2 * (width + height);42 }43 }

Page 19: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

19Using the super Keyword

• Penggunaan keyword super mengacu pada superclass dimana superclass tersebut muncul (pada kode program).

• Dapat digunakan untuk memanggil superclass constructor dan superclass method.

• Sintaks untuk memanggil sebauh superclass constructor:super() or super(parameters);

• Penggunaan super() memanggil no-argument constructor dari superclass dan statement super(arguments) memanggil superclass constructor yang sesuai dengan argumennya.

• Penggunaan super() atau super(arguments) harus muncul pada baris pertama dari subclass constructor.

Page 20: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

20Using the super Keyword

• Sintaks untuk memanggil sebuah method superclass:super.method(parameters);

• Untuk memanggil warna (color) dari bentuk (shape), method printCircle() didalam class Circle dapat ditulis sebagai berikut:

• Penggunaan keywors super sebelum toString() bisa tidak disertakan, karena toString() secara otomatis di turunkan dari kepda class Circle. Meskipun seperti itu, pada kasus yang lainkeyword super tetap diperlukan.

public void printCircle() {

System.out.println("The radius of the circle is “+ radius);

Super.toString();

}

Page 21: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

21Constructor Chaining

• Sebuah constructor dapat memanggil sebuah overloaded constructor dari superclass constructor

• Jika keduanya di panggil secara jelas, compiler memberikan super() sebagai statement pertama pada constructor.

• Dalam kasus lain, superclass constructor dipanggil sebelum subclass contructor bersama degan rantai inheritance (inheritance chain) disebut constructor chaining.

• Rantai dari constructor memanggil– subclass constructor memanggil superclass constructor

• Secara Implicitly atau explicitly– Base dari inheritance hirarki

• Cconstructor terakhir yang dipanggil disebut sebagai Object’s constructor

• Original subclass constructor’s body finishes executing last

Page 22: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

22Constructor Chaining

1 public class C extends B {2 public static void main(String[] args) {3 new C();4 }5

6 public C() {7 System.out.println("No-arg constructor in class C is invoked ");8 }9 }10

11 class B extends A {12 public B() {13 System.out.println("No-arg constructor in class B is invoked");14 }16 }17

18 class A {19 public A() {20 System.out.println("No-arg constructor in class A is invoked");21 }22 }

Page 23: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

23Constructor Chaining

• Pada baris 3, new () memanggil no-arg constructor dari class C. • Karena C adalah subclass dari class B, maka no-arg constructor dari

B akan dipanggil sebelum statement pada C dieksekusi. • Karena B adalah subclass dari A, no-arg constructor dari class A

dipanggil invoked sebelum statement pada constructor C dieksekusi.

• Maka, pada output untuk menciptakan sebuah instance C adalah:No-arg constructor in class A dipanggilNo-arg constructor in class B dipanggilNo-arg constructor in class C dipanggil

Page 24: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

24Overriding Methods

• A subclass inherits methods from a superclass. But, the subclass sometimes necessary to modify the implementation of a method defined in the superclass. This is referred to as method overriding.

• The toString method in the Shape class returns the string representation for a shape object. This method can be overridden to return the string representation for a circle. To override it, can be added the following new method in class Circle:

public String toString()

{ return super.toString() + "\nradius is " +

radius; }

Page 25: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

25Overriding Methods

• The toString() method is defined in the GeometricObject class and modified in the Circle class.

• Both methods can be used in the Circle class. • To invoke the toString method defined in the Shape class, use

super.toString(). • The subclass of Circle can not access the toString method defined in

the Shape class since toString() in Shape has been overridden in Circle.

• A static method can be inherited, but cannot be overridden. If a static method defined in the superclass is redefined in a subclass, the method defined in the superclass is hidden.

Page 26: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

26Overriding Methods

• Overriding method differs from overloading method.• Overloading method provides more than one method with the same

name but have different signatures to distinguish them. • Overriding, the method must be defined in the subclass using the

same signature and same return type as in its superclass. • The example below shows the differences between overriding and

overloading. – (a) the method p(int i) in class A overrides the same method defined in class

B. However– (b) the method p(double i) in class A and the method p(int i) in class B are

two overloaded methods. – The method p(int i) in class B is inherited in A.

Page 27: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

27Overriding Methodspublic class Test{ public class Test{

public static void main(String[] args){ public static void main(String[] args){

A a=new A(); A a=new A();

a.p(15); a.p(15);

} }

} }

class B{ class B{

Public void p(int i){ Public void p(int i){

System.out.println(i + “ in class B”); System.out.println(i + “ with type int”);

} }

} }

class A extend B{ class A extend B{

Public void p(int i){ Public void p(double i){

System.out.println(i); System.out.println(i);

System.out.println(“This method override from class B”);

System.out.println(i+“ with type Double”);

} }

} }

(a) (b)

Page 28: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

28protected Members

• Protected access offers an intermediate level of access between public and private.

• A superclass's protected members can be accessed by members of that superclass, by members of its subclasses and by members of other classes in the same package.

• All public and protected superclass members retain their original access modifier when they become members of the subclass (i.e., public members of the superclass become public members of the subclass, and protected members of the superclass become protected members of the subclass).

Page 29: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

29protected Instance Variables Using protected instance variables

Advantages subclasses can modify values directly Slight increase in performance

Avoid set/get method call overhead Disadvantages

No validity checking subclass can assign illegal value

Implementation dependent subclass methods more likely dependent on superclass implementation superclass implementation changes may result in subclass modifications

Fragile (brittle) software

Page 30: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

30

Figure below illustrates how a public, protected, default, and private data or methods can be accessed from a class in the same package, from a subclass in the same package, from a subclass in a different package, and from a class in a different package.

Page 31: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut 31

Polimorphism

Page 32: ProgLan - 19 - Polimorfisme - baru

Objectives

Konsep polimorfisme. Bagaimana menggunakan metode override untuk

mengakibatkan polimorfisme. Membedakan antara class abstract dan class concrete. Mendeklarasikan method abstract untuk membuat abstract

class.

Page 33: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

33Abstract class concept

Class dalam hirarki terhubung dalam is-a relationship (inheritance). Ex: Nissan is-a Automobile dan Serena is-a Nissan

Penggunaan variabel reference untuk object dari class yang berbeda dalam sebuah hirarki.

Pembahasan lain adalah abstract class — sebuah class yang tidak bisa di instance tetapi bisa digunakan sebagai parent dari class yang lain.

Page 34: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

34Contoh Kasus

Hirarki dalam sebuah tipe Card. Parent class: Card Child class: Valentine; Holiday;

Birthday Pada parent class Card:

Mempunyai method greeting(); yang menuliskan tentang pesan pada kartu

Ex: birthday – selamat ulang tahun; valentine - selamat hari valentine

Pada hirarki ini sebuah object pasti merupakan object dari salah satu Kartu (Valentine; Holiday; Birthday)

Class Card adalah class konsep abstract

Page 35: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

35Class Abstract

Class yang digunakan sebagai “kategorisasi” Class abstract tidak pernah di instance

Merupakan parent dari beberapa class yang berhubungan Child class mewarisi dari abstract parent class nya Pendefinisian class abstarct:

Access modifier dapat di tuliskan sebelum abstract

Manakah type dari card yang mempunyai method greeting() ?

Page 36: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

36Abstract Method

Pada setiap class Card mempunyai versi method greeting() tersendiri yang diimplementasikan secara berbeda.

Penggunaan method abstract greeting() setiap child mewarisi “ide” dari greeting() Implementasi berbeda

Abstract method dapat (tidak mempunyai) abstract method Abstract class bisa mempunyai concrete class (non-abstract) Abstract class tidak mempunyai body Sebuah child dari class abstract mewarisi abstract method – dan

harus mendefinisikan sebuah non-abstract method yang sama dengan abstract method

Page 37: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

37Abstract Method

Sebuah abstract child dari sebuah abstract parent tidak harus mendefiniskan concrete method dari method abstract yang diwarisi

Page 38: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

38Abstract : Study case

Abstract class digunakan untuk mengorganisasi “konsep” dari sesuatu yang mempunyai versi yang berbeda pada child

Sebuah abstract class dapat mempunyai abstract method dan concrete method

Bukan merupakan abstract class

Mewarisi method greeting()

Harus mendefiniskan method greeting() dengan memasukkan

method body

Definisi greeting(), harus sama dengan parent

Jika Holiday tidak mendefinisikan greeting(), maka holiday harus

didefinisikab sebagai abstrak class

Page 39: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

39Tidak semua yang ada pada class abstract adalah abstract

Jika sebuah class memiliki satu abstrac method, maka class tersebut

harus di deklarasikan abstract

Page 40: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

40Advantages

Class abstract adalah salah satu cara mengorganisasi sebuah program

Dapat mengkelompokkan beberapa class yang berhubungan Organized dan undertandable program

Page 41: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

41Studi Kasus: Birthday Card

Page 42: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

42Studi Kasus: Valentine Card

Page 43: ProgLan - 19 - Polimorfisme - baru

43Studi Kasus: Lengkap

Pemrograman Lanjut

Page 44: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

44Studi Kasus: Lengkap

Page 45: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

45Studi Kasus: Lengkap

Page 46: ProgLan - 19 - Polimorfisme - baru

46Object dari setiap class

Pemrograman Lanjut

Page 47: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

47

Page 48: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

48Menggunakan Parent Class Reference Variable

Sebuah reference variabel dari class “C” dapat digunakan dengan object yang masih berelasi inheritance dengan class “C”

Ketika sebuah method dipanggil, class dari object (bukan variabel) yang menentukan method mana yang akan berjalan

Page 49: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut 49

Polimorfisme

Page 50: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

50Polimorfisme

“mempunyai banyak bentuk” Satu variabel dapat digunakan dengan beberapa object dari class

yang berrelasi pada waktu yang berbeda pada sebuah program Penggunaan “notasi dot” – ex: variable.method() untuk memanggil

method Akan bergantung pada object yang direferensi

Page 51: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

51Holding References but not Using them

Tipe object sebuah referensi variabel apda yang dapat direferensi:

“ Sebuah variabel dapat membawa sebuah reference dari sebuah object dimana class tersebut adalah turunan dari class variabel”

Class dari object tersebut harus turunan dari class dari variabel yang membawa reference ke object tersebut

Ex:Card c; - Manakah deklarasi yang benar?Birthday b;Valentine v;Holiday h;

Page 52: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

52Polimorfisme: contoh

Tidak terdapat abstract classparentReferenceVariable = referenceToChild ;

Reference variabel dari tipe parent dapat membawa reference dari sebuat object child

Tidak berlaku:// don't do this childReferenceVariable = referenceToParent ;

Page 53: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

53Latihan Soal

Abstract class: Hewan

Atribut warna Method suara

Concrete class Kucing Anjing Ikan

Page 54: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut 54

Terimakasih

Page 55: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

55

Signature dari sebuah method Overriding abstract method Array dari object yang berrelasi Class Object instanceOf operator

Page 56: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

56Method Signature

Adalah nama dari method dan tipe pada list parametersomeMethod( int, double, String )

Return type bukan bagian dari signature Nama dari parameter tidak berpengaruh – tipe

Nama dari sebuah method tidak cukup untuk mengidentifikasi Parent class:int someMethod( int x, double y, String z ) { //method body }

Child class:short someMethod( int a, double b, String c ) { // completely different method body }

Page 57: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

57Overriding Abstract Method

Class abstract pada umumnya memuat abstract method Sebuah method abstract terdiri atas:

Optional access modifier Keyword abstract Return value dari class Method signature Semicolon

Contoh:abstract class Parent {

public abstract int compute( int x, String j); }

Page 58: ProgLan - 19 - Polimorfisme - baru

Pemrograman Lanjut

58Overriding Abstract Method

Jika sebuah class mempunyai satu atau lebih method abstract maka class harus di deklarasikan abstract Sebuah concrete child harus meng-override setiap method abstract

yang di turunkan dari parent Sebuah child dapat mendefinisikan method tambahan dengan

signature yang berbeda dari parent method Error: jika child mendefinisikan sebuah method yang sama dengan

method parent, tetapi dengan return tipe yang berbeda Contoh:class Child extends Parent {

public int compute( int x, String j ) { . . . }

}