Praktikum 8 Polymorphism

dokumen-dokumen yang mirip
Polymorphism. Oleh : Agus Priyanto, M.Kom

Overriding. Subclass yang berusaha memodifikasi tingkah laku yang diwarisi dari superclass. Tujuan: subclass memiliki tingkah laku yang lebih

BAB 7 OVERLOADING DAN OVERRIDING

Employee employee=new Manager();

Overriding, Overloading, Polymorphism. Pertemuan 10 Pemrograman Berbasis Obyek Dr. Rodiah

Overriding Overloading Polymorphism

5/23/12. Inheritance. Pengertian inheritance Deklarasi inheritance Single inheritance Multilevel inheritance Access Control super keyword

PEWARISAN. Disusun Oleh: Reza Budiawan. Untuk: Tim Dosen Algoritma & Pemrograman Lanjut

Overriding Overloading Polymorphism

Inheritance dan Kata Kunci static

Inheritance (Pewarisan) Pengertian dasar inheritance

A. TUJUAN PEMBELAJARAN 1. Memahami tentang overloading 2. Memahami tentang overriding 3. Memahami aturan tentang overridden

CSG2H3 Object Oriented Programming. Polymorphism -RSM-

Jobsheet 09. Overloading and Overriding Method

Pemrograman Berorientasi. Inheritance

Pengenalan Polimorfisme Implementasi Polimorfisme

E-Book PEMROGRAMAN BERORIENTASI OBJEK. Disusun Oleh: Arfian Hidayat, S.Kom

subclass class manapun private default protected public package yang sama

LAPORAN V PRAKTIKUM PEMROGRAMAN BERBASIS OBJEK

Membuat dan Menggunakan Class

Dasar-Dasar OOP di Java

INHERITANCE AND POLIMORPHISM PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM

KARAKTERISTIK PEMROGRAMAN BERORIENTASI OBJEK (OOP) Pemrograman berorientasi Objek mempunyai karakterisitik sebagai berikut:

Chapter 10 Polimorphism

BAB 1 PEMROGRAMAN BERORIENTASI OBJEK

ABSTRACTION, ENCAPSULATION, INHERITANCE & POLYMORPHISM

PRAKTIKUM 3 KONSTRUKTOR DAN OVERLOADING

Bahasa Pemrograman :: Polimorfism and Abstraction

Inheritance. Pertemuan 8 Pemrograman Berbasis Obyek

1. Manakah jawaban yang benar,pada saat Anda mengcompile dan menjalankan class berikut ini:

Konsep Inheritance. Praktikum 8 Pemrograman Berbasis Obyek

Pemrograman Berorientasi. Polimorfisme dan Binding

Inheritance (Pewarisan Sifat) Imam Fahrur Rozi

KONSEP OOP: POLYMORPHISM

Modul Bahasa Pemrograman 1

Bahasa Pemrograman 2.

Apa yang menjadi output potongan kode diatas? Error karena tidak ada String yang di-passing kedalam konstruktor Bapak

1. Keyword mana yang memiliki fungsi sama dengan keyword this dan menyediakan reference ke atribut turunan dari objek? super

Pemrograman Berbasis Objek Inheritance

MODUL 3 PEWARISAN TUJUAN DASAR TEORI

JOBSHEET POLIMORFISME

PRAKTIKUM 3 KONSTRUKTOR DAN OVERLOADING

Modul 06. Pengantar Objek

Pemrograman Berorientasi. Class dan Obyek 2

Dasar-Dasar OOP di Java

Inheritance. Topik 5/17/2013

PRAKTIKUM III & IV PEMROGRAMAN BERORIENTASI OBJEK

OVERLOADING, CONSTRUCTOR DAN DESTRUCTOR. Dewi Sartika, M.Kom

Pertemuan 4 Halaman 1/1. Class Inheritance

Polymorphism (Polimorfisme)

Polymorphism. Materi ke-8 Pemrograman Berbasis Objek

2015 BAHASA PEMROGRAMAN I. Pertemuan VI Inheritance (Pewarisan)

KONSEP OOP: POLYMORPHISM

Gambar 1: Hirarki class

Bab 8. Dasar-Dasar OOP

IKG2I4 / Software Project I

Overriding Method Overloading Method Class(iii) [Superclass and subclass] [constructor overloading] Keyword Super

INTERAKSI ANTAR OBJECT

Konsep Dasar Pemrograman Berorientasi Objek

KONSEP OOP: PEWARISAN / INHERITANCE

Praktikum 6 Class Design (Encapsulation)

Pemrograman Berorientasi. Abstract & Interface

Class & Object 2 ~Praktikum~ Imam Fahrur Rozi

public class B extends A {... }

Pertemuan 2 (2) : Membuat Class dan mengakses Anggota Class

MEMBUAT KELAS SENDIRI. Dewi Sartika, M.Kom

UNIVERSITAS GUNADARMA

Abstract Class dan Interface. Viska Mutiawani, M.Sc

KONSEP OOP: PEWARISAN / INHERITANCE

adalah cara pandang yang memandang SEGALA SESUATU sebagai OBJEK. Semua aspek dalam Java programming dapat dianggap sebagai objek, -kecuali

(INHERITANCE) Nurochman

BAB 6 INHERITANCE Tujuan:

1.Tujuan. 2. Latar Belakang. Mendefinisikan superclasses dan subclasses Override method dari superclasses Membuat method final dan class final

Dengan menggunakan encapsulation kita dapat membatasi akses langsung suatu class atau program kecuali melalui suatu method yang sudah diberikan.

OBJECT ORIENTED PROGRAMMING (OOP)

Pemrograman Berorientasi Objek

INFORMATION HIDING, ENCAPSULATION, POLYMORHISM

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA PENGENALAN OBJECT ORIENTED PROGRAMMING

BAB 12 ENKAPSULASI, INHERITANCE DAN POLIMORPISME

POLIMORPHISM PEMROGRAMAN LANJUT. Dr. Eng. Herman Tolle. Sistem Informasi FILKOM UB Semester Genap 2016/2017

PRAKTIKUM 6 EXCEPTION

Pemrograman Berorientasi Objek / Object Oriented Programming / (OOP) Nur Hasanah, M.Cs

Pewarisan, Polimorfisme, dan Interface

Praktikum 4 Konsep Inheritance, Polymorphism, dan Encapsulation

E-Book PEMROGRAMAN BERORIENTASI OBJEK. Disusun Oleh: Arfian Hidayat, S.Kom

BAHASA PEMROGRAMAN JAVA

A. TUJUAN PEMBELAJARAN 1. Memahami konsep package dan import 2. Menggunakan kata kunci this

Bahasa Pemrograman :: Inheritance

MODUL PRAKTIKUM BERORIENTASI OBJEK NINF615 SEMESTER GASAL 2016/2017 PROGRAM STUDI S1 TEKNIK INFORMATIKA

2 TIPE DATA DAN VARIABEL

Encapsulation (Encapsulasi) Minggu 5 Pemrograman Berorientasi Objek Alfa Faridh Suni

MODUL 1. CLASS, OBJECT, CONSTRUCTOR DAN METHOD

BAB II VARIABEL DAN TIPE DATA

PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM

KONSEP OOP: PEWARISAN / INHERITANCE

INHERITANCE. Pelatihan Java 2 Mei 2015 Fakultas Teknologi Informasi Program Studi Teknik Informatika

LAPORAN RESMI PRAKTIKUM BAHASA PEMROGRAMAN

Pemrograman Berorientasi Objek Danu Wira Pangestu

Pewarisan Sifat Objek. Nur Hasanah, M.Cs

Praktikum 6 Abstract, Interface, Overloading, Overriding, dan Package

Transkripsi:

Praktikum 8 Polymorphism Tujuan Memahami dan menerapkan konsep polimorfisme, overloading, overriding method, penggunaan instance of dan casting object dalam pemrograman berorientasi objek. Dasar Teori Polymorphism (polimorfisme) adalah kemampuan untuk mempunyai beberapa bentuk class yang berbeda. Polimorfisme ini terjadi pada saat suatu obyek bertipe parent class, akan tetapi pemanggilan constructornya melalui subclass. Misalnya deklarasi pernyataan berikut ini: Employee employee=new Manager(); dimana Manager() adalah kontruktor pada class Manager yang merupakan subclass dari class Employee. Overloading adalah suatu keadaan dimana beberapa method sekaligus dapat mempunyai nama yang sama, akan tetapi mempunyai fungsionalitas yang berbeda. Contoh penggunaan overloading dilihat dibawah ini: Gambar(int t1) o Terdapat 1 parameter titik, untuk menggambar titik Gambar(int t1,int t2) o Terdapat 2 parameter titik, untuk menggambar garis Gambar(int t1,int t2,int t3) o Terdapat 3 parameter titik, untuk menggambar segitiga Gambar(int t1,int t2,int t3,int t4 o Terdapat 4 parameter titik, untuk menggambar persegi empat Overloading ini dapat terjadi pada class yang sama atau pada suatu parent class dan subclass-nya. Overloading mempunyai ciri-ciri sebagai berikut: 1. Nama method harus sama, 2. Daftar parameter harus berbeda, 3. Return type boleh sama atau berbeda. Overriding adalah suatu keadaan dimana method pada subclass menolak method pada parent class-nya. Overriding mempunyai ciri-ciri sebagai berikut : 1. Nama method harus sama. 1

2. Daftar parameter harus sama. 3. Return type harus sama. Berikut ini contoh terjadinya overriding dimana method Info() pada class Child mengoverride method Info() pada class parent: class Parent { public void Info() { System.out.println( Ini class Parent ); class Child extends Parent { public void Info() { System.out.println( Ini class Child ); Method yang terkena override (overridden method) diharuskan tidak boleh mempunyai modifier yang lebih luas aksesnya dari method yang meng-override (overriding method). Virtual Method Invocation (VMI) bisa terjadi jika terjadi polimorfisme dan overriding. Pada saat obyek yang sudah dibuat tersebut memanggil overridden method pada parent class, kompiler Java akan melakukan invocation (pemanggilan) terhadap overriding method pada subclass, dimana yang seharusnya dipanggil adalah overridden method. Berikut contoh terjadinya VMI: class Parent { int x = 5; public void Info() { System.out.println( Ini class Parent ); class Child extends Parent { int x = 10; public void Info() { System.out.println( Ini class Child ); public class Tes { public static void main(string args[]) { Parent tes=new Child(); System.out.println( Nilai x = + tes.x); tes.info(); Hasil dari running program diatas adalah sebagai berikut: Nilai x = 5 Ini class Child 2

Polymorphic arguments adalah tipe suatu parameter yang menerima suatu nilai yang bertipe subclass-nya. Berikut contoh dari polymorphics arguments: class Pegawai { // class Manajer extends Pegawai { // public class Tes { public static void Proses(Pegawai peg) { // public static void main(string args[]) { Manajer man = new Manajer(); Proses(man); Pernyataan instance of sangat berguna untuk mengetahui tipe asal dari suatu polymorphic arguments. Untuk lebih jelasnya, misalnya dari contoh program sebelumnya, kita sedikit membuat modifikasi pada class Tes dan ditambah sebuah class baru Kurir, seperti yang tampak dibawah ini: class Kurir extends Pegawai { public class Tes { public static void Proses(Pegawai peg) { if (peg instanceof Manajer) { lakukan tugas-tugas manajer else if (peg instanceof Kurir) { lakukan tugas-tugas kurir else { lakukan tugas-tugas lainnya public static void main(string args[]) { Manajer man = new Manajer(); Kurir kur = new Kurir(); Proses(man); Proses(kur); Seringkali pemakaian instanceof diikuti dengan casting object dari tipe parameter ke tipe asal. Misalkan saja program kita sebelumnya. Pada saat kita sudah melakukan instanceof dari tipe Manajer, kita dapat melakukan casting object ke tipe asalnya, yaitu Manajer. Caranya adalah seperti berikut: if (peg instanceof Manajer) { Manajer man = (Manajer) peg; // lakukan tugas-tugas manajer 3

Percobaan 1 Program berikut ini menerapkan konsep Overriding Method. Pertama kali buatlah dalam satu package class Karyawan seperti pada program dibawah ini. class Karyawan { private String nama; private double gaji; private static double persennaikgaji=0.10; public void Karyawan(String nm,double gj ){ this.setnama(nm); this.setgaji(gj); void setnama(string nm){ nama=nm; void setgaji(double gj){ gaji=gj; static void setpresentase(double persen){ persennaikgaji=persen; String getnama(){ return nama; double getgaji(){ return gaji; static double getpersentase(){ return persennaikgaji; void naikkangaji(){ gaji+=(gaji*persennaikgaji); Kemudian buatlah class Manager yang extends dari class Karyawan. Fungsi getgaji pada kelas Manager akan meng-override method getgaji yang dimiliki oleh class parent yaitu class Karyawan. public class Manager extends Karyawan { private static double bonus=500; Manager(String nm, double gj){ super.karyawan(nm, gj); double getbonus(){ return bonus; 4

void setbonus(double bns){ bonus=bns; double getgaji(){ double gajidasar=super.getgaji(); return(gajidasar+bonus); Kemudian jalankan program TestManajer.java berikut ini. Amati dan jelaskan penggunaan overriding method pada program tersebut. public class TestManager { public static void main(string args[]) { Manager mng=new Manager("Andi",300.0); System.out.println(mng.getNama()); System.out.println(mng.getBonus()); System.out.println(mng.getGaji()); Percobaan 2 Program berikut ini menerapkan konsep constructor overriding, dengan melakukan pemanggilan parent constructor. Pertama kali buatlah dalam satu package class Employee seperti pada program dibawah ini. class Employee { String nama; Employee(){ System.out.println("Konstruktor Employee() dijalankan"); void Employee(String n){ this.nama=n; System.out.println("Konstruktor Employee(String n) dijalankan"); void getdetails(){ System.out.println(nama); Buatlah dan jalankan class Manager2 yang extends dari class Employee. Amati dan jelaskan pemanggilan parent constructor pada program tersebut. class Manager2 extends Employee{ 5

String departement; Manager2(){ this.employee("sales"); System.out.println("Konstruktor manager() dijalankan"); Manager2(String dept){ departement=dept; System.out.println("Konstruktor Manager(String dept) dijalankan"); void getdetails(){ System.out.println(departement); public static void main(string args[]){ Manager2 e=new Manager2(); e.getdetails(); Percobaan 3 Program berikut ini menerapkan konsep Virtual Method Invocation (VMI) dan Polymorphic Arguments. Pertama kali buatlah dalam satu package class Employee seperti pada program dibawah ini. public class Employee { String nama; int Salary; void Employee(){ void Employee(String nm){ this.nama=nm; System.out.println("Employee"); public int salary(){ return 0; Buatlah class Programmer yang extends dari class Employee. public class Programmer extends Employee { private static final int prgsal=50000; private static final int prgbonus=10000; public int Salary(){ return prgsal; 6

public int bonus(){ return prgbonus; Buatlah class Manager yang extends dari class Employee. class Manager extends Employee{ private static final int mgrsal=40000; private static final int tunjungan=40000; public int salary(){ return mgrsal; public int tunjungan(){ return tunjungan; Buatlah dan jalankan class Payroll yang digunakan untuk menghitung gaji dari Programer dan Manager. class Payroll { public int calcpayroll(employee2 emp) { int money=emp.salary(); if(emp instanceof Manager) money+=((manager) emp).tunjungan(); return money; if(emp instanceof Programmer) money+=((programmer)emp).bonus(); return money; public static void main(string[] args) { Payroll pr=new Payroll(); Programmer prg=new Programmer(); Manager mgr=new Manager(); System.out.println("Payroll untuk Programmer: "+pr.) System.out.println("Payroll untuk Manager:" +pr.calcpayroll(mgr)) Jelaskan penggunaan Virtual Method Invocation (VMI) dan Polymorphic Arguments pada program di atas. 7

Percobaan 4 Program berikut ini menerapkan konsep penggunaannya pada program tersebut. Overloading Method. Amati dan jelaskan import java.awt.point; class MyRect { int x1=0; int y1=0; int x2=0; int y2=0; MyRect buildrect(int x1,int y1,int x2, int y2) { this.x1=x1; this.x2=y1; this.x2=x2; this.y2=y2; return this; MyRect buildrect(point topleft,point bottomright) { x1=topleft.x; x2=topleft.y; x2=bottomright.x; y2=bottomright.y; return this; MyRect buildrect(point topleft, int w, int h) { x1=topleft.x; y1=topleft.y; x2=(x1+w); y2=(y1+h); return this; void printrect() { System.out.println("MyRect :<" +x1+","+y1); System.out.println(", "+x2+","+y2+">"); public static void main(string[] args) { MyRect rect=new MyRect(); System.out.println("Calling buildrect with coordinates 25,25, 50,50:"); rect.buildrect(25,25,50,50); rect.printrect(); System.out.println("****"); System.out.println("Calling buildrect with points(10,10), (20,20):"); System.out.println("width(50) and height(50): "); rect.printrect(); System.out.println("***"); 8

Percobaan 5 a) Program berikut ini menerapkan konsep upcasting pada konversi suatu kelas turunan pada kelas parent pada class Music. class Note { private int value; private Note(int val){ value=val; public static final Note{ middlec=new Note(0); csharp= new Note(1); cflat=new Note(2); class Instrument { public void play(note n){ System.out.println("Instrument.play()"); class Wind extends Instrument { public void play(note n){ System.out.println("Wind.play()"); public class Music { public static void tune(instrument i){ i.play(note.middle_c); public static void main(string[]args){ Wind flute=new Wind(); tune(flute); // UPCASTING Jalankan program tersebut, amati dan jelaskan penggunaan Upcasting pada program tersebut. b) Kemudian tambahkan class Stringed yang extends class Instrument. class Stringed extends Instrument { public void play(note n) { System.out.println("Stringed.play()"); 9

Kemudian modifikasi class Music seperti pada baris berikut ini: public class Music { public static void tune(instrument i){ i.play(note.middle_c); public static void main(string[]args){ Wind flute=new Wind(); Stringed violin=new Stringed(); tune(flute); // UPCASTING tune(violin); // UPCASTING Jalankan program tersebut, amati dan jelaskan penggunaan Upcasting pada program tersebut. c) Tambahkan class Brass yang extends class Instrument. class Brass extends Instrument { public void play(note n){ System.out.println("Brass.play()"); Kemudian modifikasi class Music seperti pada baris berikut ini: public class Music { public static void tune(wind i){ i.play(note.middle_c); public static void tune(stringed i){ i.play(note.middle_c); public static void tune(brass i){ i.play(note.middle_c); public static void main(string[]args){ Wind flute=new Wind(); // NO UPCASTING Stringed violin=new Stringed(); Brass frenchhorn=new Brass(); tune(flute); tune(violin); tune(frenchhorn); Program diatas menggunakan metode overloading sebagai pembanding upcasting Jalankan program tersebut, amati dan jelaskan penggunaannya pada program tersebut. 10

Percobaan 6 Program berikut ini menerapkan metode Upcasting, simpan ke dalam Shapes.java. Amati dan jelaskan penggunaan Upcasting pada program tersebut. class Shapes { void draw(){ void erase(){ class Circle extends Shapes { void draw(){ System.out.println("Circle.draw()"); void erase(){ System.out.println("Circle.erase()"); class Square extends Shapes { void draw(){ System.out.println("Shape.draw()"); void erase(){ System.out.println("Square.erase()"); class Triangle extends Shapes { void draw(){ System.out.println("Triangle.draw()"); void erase(){ System.out.println("Triangle.erase"); public class Shape { public static Shape randshape() { switch((int)(math.random()*3)) { default: case 0:return new Shape(); case 1:return new Square(); case 2:return new Triangle(); 11

Percobaan 7 Program berikut ini menerapkan penggunaan urutan constructor pada polymorphism. Amati dan jelaskan penggunaannya pada program tersebut. class Meal{ Meal(){ System.out.println("Meal()"); class Bread{ Bread(){ System.out.println("Bread();"); class Cheese{ Cheese(){ System.out.println("Cheese"); class Lettuce{ Lettuce(){ System.out.println("Lettuce()"); class Lunch extends Meal{ Lunch(){ System.out.println("Lunch()"); class PortableLunch extends Lunch{ PortableLunch(){ System.out.println("PortableLunch()"); public class Sandwich extends PortableLunch{ Bread b=new Bread(); Cheese c=new Cheese(); Lettuce l=new Lettuce(); Sandwich() { System.out.println("Sandwich()"); public static void main(string[]args) { new Sandwich(); 12

Percobaan 8 Program berikut ini menerapkan konsep downcasting and Runtime Type Identification (RTI). Amati dan jelaskan penggunaannya pada program tersebut. import java.util.* class Useful{ public void f(){ public void g(){ class Moreuseful extends Useful{ public void f(){ public void g(){ public void u(){ public void v(){ public void w(){ public class RTI { public static void main(string[] args) { Useful[]x={ new Useful(), new Moreuseful() ; x[0].g(); x[1].f(); ((Moreuseful)x[1]).u(); ((Moreuseful)x[0]).u(); 13