Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

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

Presentasi serupa


Presentasi berjudul: "1 Pertemuan 12 Polymorphism Matakuliah: >/ > Tahun: > Versi: >"— Transcript presentasi:

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

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

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

4 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 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 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 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 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 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 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 11 Proses Kompilasi Program C++ Polymorphism pada C++ diproses pada saat eksekusi (runtime)  late binding /dinamic binding.cpp.Obj.h.exe + BINDING / LINKING

12 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 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 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 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 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 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 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 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 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 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 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)


Download ppt "1 Pertemuan 12 Polymorphism Matakuliah: >/ > Tahun: > Versi: >"

Presentasi serupa


Iklan oleh Google