1 Pertemuan 12 Polymorphism Matakuliah: >/ > Tahun: > Versi: >

Slides:



Advertisements
Presentasi serupa
Pemrograman JAVA (TIB09)
Advertisements

PERTEMUAN 4 PEMROGRAMAN API OOP Concept mudafiqriyan.com.
Rully Yulian MF MCAD,MCPD,MCT,MVP VB.NET Independent IT Trainer - Application Developer
Polymorphism Suatu fungsi anggota dari suatu class dapat dijadikan sebagai fungsi virtual Jika fungsi ini dideklarasikan kembali pada class turunan dan.
Inheritance (pewarisan)
Object Oriented Programming
Pemrograman JAVA (TIB09)
Polymorphism Viska Mutiawani, M.Sc.
Modul 1- Review Java.
Overriding, Overloading, Polymorphism
Overriding, Overloading, Polymorphism
OPERATOR OVERLOADING The ability to provide the operators with a special meaning for a data type but its original meaning is not lost. Example: Operator.
Variabel, Method & Constructor Oleh : Nur Hayatin, S.ST Teknik Informatika – UMM 2011.
Pewarisan, Polimorfisme, dan Interface
OBJECT ORIENTED PROGRAMMING YANES HARDIANTO SUI Politeknik Manufaktur Astra 2011.
Pointer Memory Dinamic.
Pemrograman Berorientasi Obyek dengan JAVA Interface
Activity Diagram Memperlihatkan perilaku dinamis (berorientasi pada aktivitas) Tujuan –Model business workflows –Model operations.
#include //bagian modul int hitung(x,y) { return(x+y); } //bagian utama main() { int jumlah,a,b; a=8; b=2; jumlah=hitung(a,b); cout
Polymorphism (bag. 2).
Inheritance Konsep Inheritance Protected Member
Bag.3 Object Oriented Programming Pertemuan 25 Dasar Pemrograman
1 Pertemuan 6 Encapsulation Lanjutan Matakuliah: T0044/Pemrograman Berorientasi Obyek Tahun: 2005 Versi: 1.0.
Teknik Pemrograman Terstruktur Linked lis & Inheritance 1/12 Pointer (Lanjutan…) Pemrograman Berorientasi Objek.
OOP Java 06 Polymorphism.
FUNCTIONS Pertemuan 9 Matakuliah: T0456 / Algoritma dan Metode Object Oriented Programming Tahun: 2007.
Inheritance Matakuliah : T0984 / Algoritma dan Metode Object Oriented Programming II Pertemuan : 4 Tahun : 2008 Versi : 1/0.
Inheritance, polymorphism, dan interface
1 Pertemuan 17 Polymorphism Matakuliah: T0456 ~ Algoritma dan Metode Object Oriented Programming Tahun: 2005 Versi: 5.
1 Pertemuan 9 Inheritance Matakuliah: T0044/Pemrograman Berorientasi Obyek Tahun: 2005 Versi: 1.0.
Class and Object Matakuliah : XXXX / Algoritma dan Metode Object Oriented Programming II Pertemuan : 2 Tahun : 2008 Versi : 1/0.
1 Pertemuan 2 Function & Pointer Matakuliah: T0044/Pemrograman Berorientasi Obyek Tahun: 2005 Versi: 1.0.
Teknik Pemrog. Terstuktur 2
INHERITANCE (Oleh : Nur Hayatin, S.ST)
Polymorphism Matakuliah : T0984 / Algoritma dan Metode Object Oriented Programming II Pertemuan : 5 Tahun : 2008 Versi : 1/0.
Fungsi, Array dan String
Pertemuan 6 PEWARISAN AND POLYMORPHISM
1 Pertemuan 18 Template Matakuliah: T0456 ~ Algoritma dan Metode Object Oriented Programming Tahun: 2005 Versi: 5.
Polymorphism Pertemuan 9 Matakuliah: M0864/Programming I Tahun: 2009.
Matakuliah : T0044/Pemrograman Berorientasi Obyek
1 Pertemuan 5 Encapsulation Matakuliah: T0044/Pemrograman Berorientasi Obyek Tahun: 2005 Versi: 1.0.
Pertemuan 10 Constructor dan Destructor
1 Pertemuan 16 Multiple Inheritance Matakuliah: T0456 ~ Algoritma dan Metode Object Oriented Programming Tahun: 2005 Versi: 5.
1 Pertemuan 12 Template Matakuliah: T0044/Pemrograman Berorientasi Obyek Tahun: 2005 Versi: 1.0.
1 Pertemuan 10 Pemrograman Berorientasi Objek Matakuliah: >/ > Tahun: > Versi: >
FONDASI PEMROGRAMAN & STRUKTUR DATA #8
Inheritance dan Kata Kunci static
Pertemuan 10 Inheritance Lanjutan
Pertemuan 2 SINTAKS BAHASA, TIPE DATA, DAN OPERATOR
Outline: Pewarisan/Inheritance Polymorphism
POLYMORPHISM, ABSTRACT CLASS DAN INTERFACE
Inheritance Pertemuan 8
Polymorphism Pertemuan 23-24
Constructor dan Destructor Pertemuan 17
Inheritance Pertemuan 21
Pertemuan 4 Modularitas
Sumber : repository.binus.ac.id/content/T0454/T ppt
Matakuliah : M0864/Programming I
Inheritance lanjutan Pertemuan 22
POLYMORPHISM.
Pemrograman Berorientasi Object
Generic Data Type Pertemuan 25
Matakuliah : M0074/PROGRAMMING II Tahun : 2005 Versi : 1/0
Object Oriented Programming
Polimorphism Dosen Pengampu : Nur Iksan.
Oleh : Rahmat Robi Waliyansyah, M.Kom.
Pemrograman Berbasis Objek
Teknik Pemrog. Terstuktur 2
Teknik Pemrog. Terstruktur 2
FONDASI PEMROGRAMAN & STRUKTUR DATA #8
Transcript presentasi:

1 Pertemuan 12 Polymorphism Matakuliah: >/ > Tahun: > Versi: >

2 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : Mengerti konsep polymorphism pada pemrograman C++

3 Outline Materi Definisi polymorphism Abstract Class Proses Kompilasi Early vs Late Binding Overriding vs Overloading method Trivial vs True Polymorphism

4 Definisi polymorphism Polymorphism  kemampuan dari object–object yang berbeda dalam sebuah class hirarki untuk melakukan fungsi (behavior) unik terhadap suatu respon message Poly (Many) + morph (Shape) = POLYMORPHISM: banyak bentuk (many shapes). –Polymorphism  “Single Interface, Multiple Method” Polymorphism adalah kemampuan class menyembunyikan implementasi yg berbeda dalam interface yg sama Polymorphism memungkinkan sebuah method yang mempunyai nama yang sama, namun aksi (tugas) yang berbeda. Dengan polymorphism dimungkinkan suatu fungsi yang implementasi detilnya belum ada (isi fungsi belum ditulis). Fungsi tersebut akan dibuat virtual dan class yg berisi fungsi virtual akan menjadi abstract class / Abstract Data type.

5 Definisi polymorphism Polymorphism sangat berhubungan dg konsep Inheritance Implementasi polymorphism dg 2 cara: –Overloading function: penggunaan kembali nama fungsi yang sama tapi dengan argumen yang berbeda –Overriding function: sebuah fungsi dalam class turunan yang memiliki nama, return type dan argumen function yang sama dengan fungsi dalam class induk

6 Kasus pada Inheritance Implementasi Fly pada Birth tidak sama dg Fly pada Pegasus Implementasi Gallop (Kuda belari) pada Horse tidak sama dg Gallop pada Pegasus Alternatif Solusinya dg me- rename method Gallop() menjadi Move() pada class Horse, dan meng-override Move() pada object Pegasus untuk melakukan method Berjalan gaya burung. begitu juga override Move() pada class horses agar bisa berjalan gaya kuda. Class BirdClass Mamal Chrip ( ) Fly( ) Class Horse Whinny ( ) Gallop ( ) Class Pegasus Fly( ) Gallop ( ) Class Animal

7 Abstract Class Absract class biasanya adalah base class, dan tidak bisa dibuat instance. Manfaat dari virtual functions adalah agar virtual method table (VMT) yg menentukan type runtime object bukan programmer dg statements switch-nya, karena pada program yg besar, statements switch akan sulit dimaintain. Virtual function di-support oleh VMT, yg menyebabkan runtime overhead, baik dalam ukuran maupun performance program. VMT bekerja pada saat runtime dg demikian polymorphism berhubungan dg proses kompilasi

8 Program – Abstract Class Perhatikan urutan base class & derived class pada kasus berikut ini: –OrgEntity merupakan abstact class yg berarti tujuan utamanya hanya sebagai base class –OrgEntity memiliki function number_employees yg me-return jumlah employee pada tiap unit organisasi –ada class pada hirarki memiliki virtual function office_party yg me-return jumlah employee yang dianggarkan untuk acara tahunan OrgEntityCompanyDivisionDepartement

9 Program – Abstract Class #include class OrgEntity { char name[25]; int employee_count; public: OrgEntity(char *s, int ec); int number_employees() { return employee_count; } char *org_name() { return name; } virtual int office_party() = 0; }; class Company : public OrgEntity { public: Company(char *s, int ec); virtual int office_party(); }; class Division : public Company { public: Division(char *s, int ec); virtual int office_party(); }; class Department : public Division { public: Department(char *s, int ec); int office_party(); }; Pure Virtual Method  Abstract Class OrgEntity

10 Program – Abstract Class void main() { Company company("Bilbo Software, Inc.", 35); Division div("Vertical Applications", 12); Department dept("Medical Practice", 4); budget(company); budget(div); budget(dept); } Company :: Company(char *s, int ec) { } Virtual int Company :: office_party() { } Division :: Division (char *s, int ec) { } Virtual int Division :: office_party() { } Department :: Department (char *s, int ec) { } int Department :: office_party() { } void budget(OrgEntity& oe) { cout << "\n---- Budget Report ----\n"; cout << oe.org_name(); cout << " $" << oe.number_employees() * oe.office_party(); cout << '\n'; }

11 Proses Kompilasi Program C++ Polymorphism pada C++ diproses pada saat eksekusi (runtime)  late binding /dinamic binding.cpp.Obj.h.exe + BINDING / LINKING

12 Early vs Late Binding Early Binding C Style Function didefinisikan sebelum compiling Link body function + function header / prototype Early Binding C Style Function didefinisikan sebelum compiling Link body function + function header / prototype Late Binding/Dinamic Binding  C++ Style  Definisi function dpt dilakukan saat runtime  Compiler membuat VMT utk class yg mengandung polymorphism  Jika derived class memiliki fungsi yg sama (Overriding) dg base class, VmT akan menunjuk ke base-class function Late Binding/Dinamic Binding  C++ Style  Definisi function dpt dilakukan saat runtime  Compiler membuat VMT utk class yg mengandung polymorphism  Jika derived class memiliki fungsi yg sama (Overriding) dg base class, VmT akan menunjuk ke base-class function True Polymorphism Trivial Polymorphism

13 Early vs Late Binding Trivial Polymorphism – Function Overloading  nama fungsi sama tapi tugasnya berbeda – Dibedakan oleh 3 function signature True Polymorphism – Functon Overriding  fungsi yg namanya sama tapi tidak berada dalam kelas yg sama – Diimplementasikan dg Virtual Method Pure Virtual Method Squasi Virtual Method

14 Overriding vs Overloading method #include class cA {public: double A(double x) { return x*x;} double B(double x) { return A(x)/5;} double B(double x, double y) { return x/y;} }; class cB: public cA {public: double A(double x) {return x*x*x;} }; void main() { cB oB; cout << oB.B(10); } Method A is Overrided Method B is Overloaded Output: 20

15 Pure VS Squasi Virtual Method Pure Virtual Method hanya mendeklarasikan function prototipes saja (no body function)  task of function’s not defined yet. Suatu class yang memiliki pure virtual method  abstract class. Instance (object) tidak dapat dibuat dari suatu abstract class, karena masih ada fungsi yang tidak memiliki function body. Ciri dari pure virtual method adalah pada deklarasi ditulis fungsi() = 0. class MyClass { virtual void foo() = 0; }; Squasi Virtual Method memiliki fungsi minimal yang harus dikerjakan oleh suatu method /ada body function. class MyClass { virtual void foo() { ; } }; Nol Statement

16 Virtual Destructor Base class pointer ke object turunan –Jika di-destroy dengan delete, behavior tdk terspesifikasi Perbaikan sederhana –Declare base-class destructor virtual dengan demikian ketika delete digunakan, destructor tertentu yang dijalankan Ketika object class turunan di-destroy –Destructor class turnan di-execute pertama kali, destructor class induk di-execute kemudian Constructors tidak dapat dibuat virtual

17 Program – Virtual Destructor #include class OrgEntity { char *name; public: OrgEntity(char *s); virtual ~OrgEntity(); void org_name(); }; OrgEntity::OrgEntity(char *s) { name = new char[strlen(s)+1]; strcpy(name, s); } OrgEntity::~OrgEntity() { cout << "\nOrgEntity destructor"; delete[] name; } void OrgEntity::org_name() { cout << name; } class Division : public OrgEntity { char *manager; public: Division(char *s, char *mgr); ~Division(); }; Division::Division(char *s, char *mgr) : OrgEntity (s) { manager=new char[strlen(mgr)+1] ; strcpy(manager, mgr); } Division::~Division() { cout << "\nDivision destructor"; delete[] manager; }

18 Program – Virtual Destructor void main() { OrgEntity *orgs[3]; orgs[0] = new OrgEntity("Bilbo Software, Inc."); orgs[1] = new Division("Vert Apps", "Ron Herold"); orgs[2] = new Division("Horiz Apps", "Bob Young"); for (int i = 0; i < 3; i++) { delete orgs[i]; } }

19 Latihan Program#1 #include class BillingItem {protected: char name[25]; int cost; public: virtual void display() = 0; }; class Product:public virtual BillingItem { int qty_sold; public: Product(char *nm, int qty, int cst); void display() { cout << qty_sold; } }; Product::Product(char *nm, int qty, int cst) { qty_sold = qty; strcpy(name, nm); cost = cst; } class Service : public virtual BillingItem { int manhours; public: Service(char *nm, int mh, int cst); void display() { cout << manhours; } };

20 Latihan Program #1 (Lanj) Service::Service(char *nm, int mh, int cst) { manhours = mh; strcpy(name, nm); cost = cst; } class Installation : public Product, public Service {public: Installation(char *nm, int qty, int hrs, int cst) : Product(nm, qty, cst), Service(nm, hrs, cst) { } void display(); }; void Installation::display() { cout << "\nInstalled "; Product::display(); cout << ' ' << name << 's'; cout << "\nLabor: "; Service::display(); cout << " hours"; cout << "\nCost: $" << cost; } void main() { Installation inst("refrigerator", 2, 3, 75); inst.display(); }

21 Latihan Program #2 Buatlah function definition untuk overloading function pada modul main( ) berikut ini #include void main() { cetak(10); // mencetak angka 10 cetak (‘A’); // mencetak huruf A cetak (‘X’,10); // mencetak huruf X sebayak 10 kali cetak (7,’Z’); // mencetak angka 7 dan huruf Z }

22 Topik Minggu Depan Review Ujian Akhir Semester Tugas: Mahasiswa membuat program sederhana yang menggambarkan konsep Polymorphism: Sistem Elevator Sederhana Tugas (Optional): Studi Kasus-An LCD Numeric Line Editor (ref: buku-C is for control)