Ringkasan 2 - Share

download Ringkasan 2 - Share

of 24

Transcript of Ringkasan 2 - Share

  • Binus University

    Object Oriented Programming

    RINGKASAN MATERI

    OOP

  • INHERITANCE & COMPOSITION 1

    Inheritance atau dikenal juga subclassing adalah

    Mekanisme untuk membuat class baru dari class yang sudah ada

    Mekanisme untuk mendefinisikan class baru menjadi lebih spesifik

    Mekanisme untuk menggunakan kembali dan memperluas class yang sudah ada

    tanpa memodifikasi class tersebut

    Dalam inheritance, dikenal 2 tipe class, yaitu :

    Base class atau superclass, yaitu : class yang mewarisi sifat

    Derived class atau subclass yaitu : class yang diwarisi sifat

    Ada beberapa member base class yang TIDAK dapat diwarisi oleh derived class :

    Constructor

    Destructor

    Private member

    Operator=() member

    Friends

    Semua member non private (kecuali constructor, dsb) termasuk sub-object pada

    base class akan dimiliki oleh derived class. Selain itu, inheritance memiliki is-a relationship,

    dimana ketika suatu class B menjadi sublass dari class A, maka semua spesifikasi class A

    dimiliki oleh class B. Sehingga objek yang memenuhi spesifikasi B akan memenuhi spesifikasi

    A. Contoh codenya :

    class A {

    public:

    void work() const { }

    };

    class B : public A {

    public:

    void work() const {}

    };

  • void JobA (A const& a) {

    a.work();

    }

    void job(){

    B b;

    jobA(b);

    }

    Berikut ini adalah syntax yang digunakan untuk melakukan inheritance pada class baru

    class : {};

    dimana access-level terdiri dari 3 jenis :

    Contoh :

    Class Hewan { }; //base class dari Burung

    Class Burung : public Hewan { }; //derived class dari Hewan

    Access Level On Base Class On Derived Class

    Private

    Private Tidak diwariskan

    Protected Private

    Public Private

    Protected

    Private Tidak diwariskan

    Protected Protected

    Public Protected

    Public

    Private Tidak diwariskan

    Protected Public

    Public Public

    meskipun tipe data pada parameter actual dan

    formalnya (fungsi jobA) berbeda namun fungsi

    tersebut masih bisa digunakan, karena B

    memenuhi spesifikasi A

  • Dalam derived class, selain dapat mengakses member base class, kita juga dapat

    menambahkan data member baru dan melakukan modifikasi terhadap fungsi-fungsi yang

    ada pada base class. Modifikasi ini disebut juga overriding function. Jadi kita memodifikasi

    atau mendeklarasi fungsi baru pada derived class dimana fungsi tersebut memiliki nama dan

    parameter yang sama pada fungsi di base class namun isinya saja yang berbeda. Contoh :

    class Hewan {

    public :

    void print(){

    cout

  • Contoh :

    class A {

    public:

    int a;

    };

    class B : public A {

    public:

    int b;

    };

    class C : public B {

    };

    A adalah direct base class dari B

    B adalah direct base class dari C

    A adalah indirect base class dari C

    Sehingga C tetap dapat mengakses member pada A, yaitu a.

    Operator overloading dan inheritance

    Operator yang diwarisi oleh base class kepada derived class disebut member operator,

    contohnya : = ( ) [ ] > >*

    Operator yang tidak diwarisi oleh base class kepada derived class disebut non-member

    operator

  • The String Class

    String adalah kumpulan urutan dari karakter. Contoh : Love, Binus, OOP.

    C++ menggunakan library string ( #include ) sehingga mempermudah penggunaan

    string dari pada C

    Meskipun string, ia tetap memiliki index, sehingga kita dapat mengakses karakternya

    menggunakan index layaknya pada saat menggunakan tipe data char

    Cara mendeklarasinya :

    string () ;

    string = ;

    string ; = ;

    Contoh: string s1 = Hewan;

    Pada string, dapat juga dilakukan operasi penggabungan dan juga pembandingan

    Penggabungan, menggunakan operator +, dan +=

    Contoh :

    String s1 = Aku, s2 = Binusian;

    Cout

  • Operasi yang terjadi pada string

    1. Append = untuk menambahkan string kedalam string yang sudah ada.

    Syntax : .append()

    Contoh :

    Input :

    string nama = "Adi";

    cout

  • 6. Clear = untuk mengosongkan string

    Syntax : .clear()

    Contoh :

    Input :

    string nama= "Adi";

    nama.clear();

    cout

  • 10. Find = untuk mencari string / karakter

    Ada 2 kondisi, Jika:

    ketemu => return indeks

    tidak ketemu => return bilangan yang tidak jelas

    Syntax : .find()

    contoh :

    Input :

    string nama= "Adi";

    cout

  • 14. Replace = untuk mengganti string

    Syntax : .capacity(,,)

    Contoh :

    Input :

    string nama= "Adi";

    cout

  • INHERITANCE & COMPOSITION (2) AND GENERIC

    PROGRAMMING

    Embedded Object

    - Embedded Object disebut juga Nested Object.

    - Inheritance seperti menempatkan sebuah objek ke dalam sebuah class lain.

    - Jika kita mendeklarasi objek x dari class A dalam class B. Maka, class B memilki akses

    public ke A, tetapi untuk mengakses A harus menggunakan x.

    Multiple Inheritance

    Sebuah class yang diturunkan dari beberapa kelas induk. Kelas turunan tersebut dapat

    mewarisi karakteristik yang dImiliki kelas-kelas induknya.

    Hirarki Class dari Multiple Inheritance :

    Cara penulisan class :

    class : ,

    , dst {};

    Pada contoh berikut, class A, B, dan C adalah base class unuk class turunan X :

    Penulisan :

    Class A {

    /*..*/

    };

    Class B {

    /*..*/

    };

    Class C{

    /*..*/

    };

  • Class X : public A, private B, public C {

    /*..*/

    };

    Hirarkinya dapat ditunjukan pada gambar berikut, Panah menunjuk langsung ke base

    classnya.

    Contoh Program:

    #include

    class segi {

    protected:

    int alas, tinggi;

    public:

    void set (int a, int t) {

    alas=a; tinggi=t;

    }

    };

    class cetak {

    public:

    void output (int i) {

    cout

  • Multiple Inheritance Issue

    Repeated Inheritance

    Sebuah class turunan yang mewarisi lebih dari satu class induk dan class induk

    tersebut memilki grandparent yang sama.

    Contoh :

    A

    B C

    D

    Repeated Inheritance menimbulkan persoalan :

    - Konflik pada D, jika ternyata beberapa feauture di B dan C sudah di modifikasi.

    Replicated Inheritance

    Sebuah feature yang diwarisi oleh common ancestor dengan nama yang menjadi

    lebih dari satu buah feature dalam current class . Jadi, dalam hal ini feature yang diwarisi

    muncul lebih dari satu kali. Untuk mengatasinya pemogram harus mengubah nama sehingga

    feature menjadi unik.

    Contoh :

    class A { };

    class B : public A { };

    class C : public A { };

    class D : public B, public C { };

    situasi :

    - A* a; B* b; C* c; D* d;

    - a = d; //error ambiguous

    - b = d; // ok

    - c = d; // ok

    - a = b; // ok

    - a = c; // ok

  • Shared Inheritance

    Sebuah feature yang diwarisi dari common ancestor dengan nama yang sama,

    menjadi hanya satu buah feature dalam current class. Jadi dalam hal ini, feature yang

    diwarisi muncul hanya satu kali, dan dipakai bersama.

    Contoh :

    class A { ... };

    class B : public virtual A { };

    class C : public virtual A { };

    class D : public B, public C { };

    Default dari C++ adalah Replicated Inheritance.

    Problems Multiple Inheritance

    1. Konflik antar anggota, Konflik nama dapat terjadi dimana ada nama dari anggota yang

    sama, subclass yang dapat menggangu nama dari anggota superclass yang lainnya.

    2. Konflik multiple Inheritance, subclass dapat mengkombinasi lebih dari satu copy dari

    anggota begitu juga superclassnya.

    Untuk menghindari konflik yang terjadi caranya :

    1. Define ulang fungsi yang ambigu di class baru

    2. Menggunakan nama fungsi yang baik.

    Diamond Problem

    Masalah terjadi ketika dua kelas diwarisi dari kelas yang sama (seperti kelas B dan C

    yang berasal dari kelas A), sedangkan kelas lain (D) mewarisi dari B dan C. Ketika sebuah

    obyek D dibuat, sistem memperlakukan D sebagai jenis base class(kelas "Bola" adalah

    "Sphere," misalnya). Dalam diamond problem, sistem tidak dapat menentukan secara jelas

    kelas D (apakah A-B-D atau A-C-D?) Yang menyebabkan masalah.

  • Solusinya adalah dengan memberi tahu compiler method dari class mana yang digunakan.

    Contoh :

    #include

    using namespace std;

    class A {

    void drawRectangle(){

    cout

  • Composition and Aggregation

    Composition

    Pewarisan memberikan hubungan is-a, yang berarti sifat-sifat yang dimiliki kelas

    parent dimiliki pula oleh kelas child. Untuk mempermudah pemahaman mengenai kompisisi

    ini, kita dapat mengatakan komposisi memiliki hubungan part-of. Komposisi ditampilkan

    dlam bentuk diagram UML adalah sebagai berikut:

    Bila kita memodelkan sebuah mobil, maka dapat dikatakan bahwa mesin adalah

    bagian dari mobil. Secara logis dapat dikatakan bahwa mesin adalah bagian dari mobil.

    Mobil tidak dapat dipisahkan dari mesin. Bila mesin tidak ada di sebuah mobil maka mobil

    itu tidak berfungsi sebgai mobil. Dalam C++ dapat dituliskan sebagai berikut:

    class Engine {

    ...

    }

    class Car {

    Engine* e = new Engine();

    }

    Dapat dilihat pada kode di atas. Mobil mengelola masa hidup dari sebuah mesin. Atau kelas

    yang dipanggil dekelola masa pakainya oleh kelas yang memanggilnya.

    Aggregation

    Jika pewarisan memberikan kata is-a dan komposisi memberikan kata part-of

    maka bisa kita debatkan bahwa agregasi memberikan kata has-a. Dalam Agragasi, kelas

    kelas yang dipanggil tidak dikelola secara menyeluruh. Sebagai contoh, saya terlibat dalam

    pelaksanaan sistem CRM 12 bulan terakhir. Sistem ini memiliki database pelanggan,

    terpisah, dan berisi semua alamat dalam wilayah geografis. Agragasi masuk dalam kasus ini.

  • Bila pekerjaan sedang berjalan maka seorang pelanggan pastilah memiliki alamat. Namun

    bila tidak, pelanggan tidak disisi/memiliki alamat lagi. Hal ini dapat dimodelkan dengan

    diagram sebgai berikut:

    Bagaimana agregasi menterjemahkannya dalam kode C++:

    class Address {

    ...

    }

    class Person {

    Address* address;

    Person(Address* address){

    this->alamat = alamat;

    }

    }

    Bila digunakan/dipanggil

    Address* address = new Address();

    Person* person = new Person(alamat);

    // atau Person person(alamat);

    Atau

    Person* person = new Person(new Address());

    Template

    Template adalah metode abstrak untuk memproduksi kode konkrit yang dapat

    digunakan untuk membuat fungsi dan class pada saat compile

    Instansi adalah fungsi dan class aktual yang dihasilkan oleh template

    Template yang sama dapat digunakan untuk menghasilkan instansi yang berbeda

    dengan template parameter

  • Function Template

    Fungsi template adalah template yang digunakan untuk membuat fungsi yang dalam

    penggunaannya, fungsi tersebut dapat digunakan meskipun saat dipanggil tipe data

    pada actual dan formalnya berbeda.

    Fungsi template dideklarasi seperti fungsi biasa tetapi diikuti oleh :

    template

    Contoh :

    template

    T max(t x, t y){

    return (x>y) ? X:y ;

    };

    Suatu template dapat memiliki beberapa parameter

    Template

    Fungsi template: write once, use multiple times

    Class Template

    Class template adalah template yang digunakan untuk membuat class, dimana

    kumpulan class yang hanya dibedakan oleh tipenya seperti tipe numeris dan char,

    pointer dan kombinasinya

    Class template juga dikenal sebagai generic class atau class generator atau

    parameterized. Biasanya digunakan untuk mendefinisikan class mode. Contoh :

    template

    Contoh :

    template

    class a{public : t x;}; //general syntax

    int main(){

    A obj1;

    obj1.x = 10;

    cout

  • Class template juga dapat memiliki beberapa template parameter dan beberapa

    diantaranya dapat non-type parameter.

    template class x {};

    Digunakan untuk mendeklarasikan anggota data dan anggota fungsi class tersebut

    Class template as a generic container classes:

    Kita dapat memiliki tipe data integer dll dengan operasi dasar yang sama

    seperti insert, delete, infex dan lainnya

    Hanya dengan mendefinisikan struktur ckass menggunakan operasi dasar dan

    sistem akan menghasilkan definisi class

    STL

    STL adalah standard template library. Yang terdiri : containers, iterators, and

    algorithms.

    Containers : templatized data structures

    STL menyediakan template definisi untu banyak task pemrograman

    Pendekatan STL memungkinkan program untuk ditulis sehingga code tersebut tidak

    bergantung pada inti container, yang disebut generic generic programming

    Oop vs generic programming

    Oop:

    Actual parameter harus diturunkan dari formal parameter

    Harus menggunakan virtual member, dengan associated overhead

    Dapat menunda pilihan fungsi sampai runtime

    Generic programming:

    Parameter hanya dibutuhkan untuk mengimplementasi operasi yang

    digunakan.

    No run-time overhead, memungkinkan inlining

    Tipe harus diketahui pada saat compile

  • Container

    Container adalah penyimpan objek yang menyimpan kumpulan objek lain.

    Sequence containers: vector, list, dequeue

    Associative containers: sets, multisets, maps, multimaps, bitset

    Container adapters: stack, queue, priority queue

    Iterator

    Iterators digunakan sebagai argumen untuk algoritma untuk pengaksesasn data

    Iterators terdiri dari 5 kategori:

    Input iterators

    Output iterators

    Forward iterators

    Bidirectional iterators

    Random access iterators

    Algorithms

    Algoritma dan fungsi objects digunakan untuk memanipulasi data

    Generic algorithms umum untuk semua containers. Algoritma yang ada dalam

    header file algorithm: find, sort, merge

    Algorhithm classification:

    Non-modifying algorithms: investigate, do not modify elements of container

    Modifying algorithms: memodifikasi elemen dari container dengan

    rearranging, removing, atau changing nilai elemen.

    Mutating algorithms: mengubah urutan elemen tetapi tidak mengubah

    nilainya

    Numeric algorithms: didesain untuk mengerjakan perhitungan angka dari

    elemen

    Heap algorithms: implementasi heap sort

  • Functors

    Functors (function object) adalah objek yang mendefinisikan operator untuk

    memanggil objek

    Pada c++, function object ditemukan dalam library

    C++ mendefinisikan beberapa functors yang merepresentasikan operasi aritmatika

    dan logika :

    Plus: functors mengimplementasi x+y

    Minus: functors mengimplementasi x-y

    Multiplies: functors mengimplementasi x*y

    Divides: functors mengimplementasi x/y

    Modulus: functors mengimplementasi x%y

    Negate: functors mengimplementasi x

  • POLYMORPHISM

    Terdiri atas dua kata dalam bahasa Yunani yaitu Poly, yang berarti banyak, dan

    Morphos, yang berarti bentuk. Polymorphism dapat didefinisikan sebagai kemampuan

    untuk object berbeda untuk menginterpretasikan fungsi secara berbeda.

    TIPE POLYMORPHISM

    1. Ad Hoc (atau Overloading)

    Mengizinkan fungsi dengan nama yang sama namun aksi yang berbeda untuk

    masing-masing tipe

    Fungsi Overloading

    Identifier fungsi tunggal menunjukkan beberapa abstraksi bersamaan

    Nama fungsi yang sama mempunya beragam implementasi

    Penggunaan kembali terbatas untuk nama, namun tidak ada abstraksi yang

    bisa digunakan kembali

    Dibedakan oleh tiga function signatures : tipe, jumlah, dan urutan parameter

    Scope sama, class sama

    Tidak ada pewarisan

    Static Binding

    Compile time

    Contoh :

    void print(int a){

    cout

  • 2. Sub tipe (atau Runtime)

    Menggunakan kelas turunan dari base class pointer dan reference.

    Butuh pewarisan

    Static Binding

    Compile time

    Fungsi Overriding

    Penggunaan kembali terbatas untuk fungsi prototype

    Prototype sama, berbeda task

    Lain scope, lain class

    Contoh :

    Ketika kelas Felidae mempunyai subkelas berupa kucing dan harimau,

    keduanya dapat mengaum sesuai state yang ada pada base class yang

    dipanggil pada fungsi virtual yang ada pada kelas turunannya.

    3. Parameter (atau Compile-time)

    Polimorfisme Parameter menyajikan arti yang sama saat kode dieksekusi untuk

    beragam tipe.

    Dalam C++ Polimorfisme Parameter diimplementasikan melalui template dan terjadi

    saat compile-time.

    Review Overloading

    Terjadi ketika nama fungsi sama namun berbeda pada function signature.

    Overloading dapat terjadi pada class yang sama maupun class turunannya.

    Review Overriding

    Terjadi ketika fungsi di base class dengan nama fungsi, return type, dan parameter

    yang sama ditulis kembali atau ditimpa dalam class turunannya.

  • Review Virtual Function

    Merupakan static binding, sesuai default. Menggunakan keyword : virtual. Terbagi

    atas dua jenis, yaitu Pure dan Quasi.

    Review Abstract Base C lass

    Di Java, menggunakan keyword abstract untuk mendeklarasikan sebuah kelasnya.

    Sedang di C++ sebuah kelas tidak dapat di deklarasikan sebagai abstract, namun sebuah

    kelas dapat diindikasikan sebagai abstract apabila memiliki fungsi pure virtual. Dan kelas

    yang terindikasi sebagai abstract disebut interface.

    Review Pure Polymorphism

    Tidak ada default untuk pure polymorphism di C + +

    Diimplementasikan dengan menggunakan fungsi virtual

    Semua benda yang "disingkat " hanya base class

    Kedua fungsi dan statement adalah subyek untuk menyingkat

    Review Static And Dynamic Binding

    Static

    Binding di awal

    Compiler mengeksekusi saat di-compile

    Tipe pointer

    Dynamic

    Binding di akhir

    Evaluasi run-time saat kondisi true

    Default di Java