Ringkasan 2 - Share
-
Upload
rani-putri-merliasari -
Category
Documents
-
view
31 -
download
0
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