proglan - 19 - polimorfisme - baru
TRANSCRIPT
Pemrograman Lanjut 1
Inheritance + Polimorphism
Fitra A. Bachtiar
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
Pemrograman Lanjut
3
Introduction Superclass and Subclass Using the super Keyword Overriding Methods protected Members Excercise
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
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
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.
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.
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
9Inheritance examples.
Pemrograman Lanjut
Superclass Subclasses
Student GraduateStudent, UndergraduateStudent Shape Circle, Triangle, Rectangle Loan CarLoan, HomeImprovementLoan,
MortgageLoan Employee Faculty, Staff BankAccount CheckingAccount, SavingsAccount
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
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.
Pemrograman Lanjut
12Inheritance hierarchy for University Community Members
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.
Pemrograman Lanjut
14Inheritance hierarchy 2D-Shapes Class
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 }
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 }
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 }
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 }
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.
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();
}
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
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 }
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
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; }
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.
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.
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)
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).
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
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.
Pemrograman Lanjut 31
Polimorphism
Objectives
Konsep polimorfisme. Bagaimana menggunakan metode override untuk
mengakibatkan polimorfisme. Membedakan antara class abstract dan class concrete. Mendeklarasikan method abstract untuk membuat abstract
class.
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.
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
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() ?
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
Pemrograman Lanjut
37Abstract Method
Sebuah abstract child dari sebuah abstract parent tidak harus mendefiniskan concrete method dari method abstract yang diwarisi
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
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
Pemrograman Lanjut
40Advantages
Class abstract adalah salah satu cara mengorganisasi sebuah program
Dapat mengkelompokkan beberapa class yang berhubungan Organized dan undertandable program
Pemrograman Lanjut
41Studi Kasus: Birthday Card
Pemrograman Lanjut
42Studi Kasus: Valentine Card
43Studi Kasus: Lengkap
Pemrograman Lanjut
Pemrograman Lanjut
44Studi Kasus: Lengkap
Pemrograman Lanjut
45Studi Kasus: Lengkap
46Object dari setiap class
Pemrograman Lanjut
Pemrograman Lanjut
47
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
Pemrograman Lanjut 49
Polimorfisme
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
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;
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 ;
Pemrograman Lanjut
53Latihan Soal
Abstract class: Hewan
Atribut warna Method suara
Concrete class Kucing Anjing Ikan
Pemrograman Lanjut 54
Terimakasih
Pemrograman Lanjut
55
Signature dari sebuah method Overriding abstract method Array dari object yang berrelasi Class Object instanceOf operator
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 }
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); }
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 ) { . . . }
}