1 / 22

Pertemuan 12 Polymorphism

Pertemuan 12 Polymorphism. Matakuliah : <<Kode>>/<<Nama mtkul>> Tahun : <<Tahun Pembuatan>> Versi : <<versi/revisi>>. Learning Outcomes. Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : Mengerti konsep polymorphism pada pemrograman C++. Outline Materi. Definisi polymorphism

Download Presentation

Pertemuan 12 Polymorphism

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pertemuan 12Polymorphism Matakuliah : <<Kode>>/<<Nama mtkul>> Tahun : <<Tahun Pembuatan>> Versi : <<versi/revisi>>

  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. Class Animal Class Bird Class Mamal Chrip ( ) Fly( ) Class Horse Whinny ( ) Gallop ( ) Class Pegasus Fly( ) Gallop ( ) 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.

  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 OrgEntity Company Division Departement

  9. #include <iostream.h> #include <string.h> 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; }; Program – Abstract Class 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. void main() { Company company("Bilbo Software, Inc.", 35); Division div("Vertical Applications", 12); Department dept("Medical Practice", 4); budget(company); budget(div); budget(dept); } Program – Abstract Class 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 .exe + BINDING / LINKING .h

  12. Early vs Late Binding • 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 • Early Binding • C Style • Function didefinisikan sebelum compiling • Link body function + function header / prototype TrivialPolymorphism TruePolymorphism

  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 Method B is Overloaded • #include<iostream.h> • 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 Output: 20

  15. 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; }; Pure VS Squasi Virtual Method • 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. #include <iostream.h> #include <string.h> 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; } Program – Virtual Destructor 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. #include <iostream.h> #include <string.h> 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; } }; Latihan Program#1 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 <iostream.h> 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)

More Related