ALGORITMA DAN
PEMROGRAMAN 2
MATERI
• Teks/string • Pointer • File • Struktur • Kelas/Class • Konstruktor dan Destruktor• Kelas dan Obyek
• Overloading Operator
• Inheritance (Pewarisan)
• Polimorfisme
• Template Fungsi dan Kelas
• Sort
INHERITANCE (PEWARISAN)
Pertemuan 11
Inheritance
•
Inheritance (Pewarisan) adalah
sifat dari suatu kelas yang
dapat mewariskan anggota
data maupun fungsi anggota ke
kelas lain
Inheritance
•
Kelas yang mewarisi sifat dari kelas
lain disebut dengan
kelas turunan
(derived class)
•
Kelas yang mewariskan sifat ke kelas
lain disebut dengan
kelas dasar (base
class)
Inheritance
•
Keuntungan dari inheritance adalah
memungkinkan penggunaan kembali
kode yang sudah teruji benar,
sehingga tidak perlu membuat kode
yang sama setiap kali membuat
Penentu
Inheritance/Pewarisan
•
Terdiri dari 3 macam penentu
pewarisan, yaitu :
1. Private
2. Protected
3. Public
1. Penentu Pewarisan Private
•
Sintaks:
class NamaKelasTurunan : Private NamaKelasDasar
atau
class NamaKelasTurunan : NamaKelasDasar
•
Contoh:
class OrangTua class Anak : Private OrangTua
{ {
… …
1. Penentu Pewarisan Private
•
Sifat:
–
Semua anggota data dan fungsi anggota yang
bersifat public dan protected pada kelas dasar
akan diwariskan
ke kelas turunan dengan sifat
private
–
Anggota data dan fungsi anggota pada kelas
dasar yang bersifat private
tidak diwariskan
2. Penentu Pewarisan Protected
•
Sintaks:
class NamaKlsTurunan : Protected NamaKelasDasar
atau
class NamaKelasTurunan : NamaKelasDasar
•
Contoh:
class OrangTua class Anak : Protected OrangTua
{ {
… …
2. Penentu Pewarisan Protected
•
Sifat:
–
Semua anggota data dan fungsi anggota yang
bersifat public dan protected pada kelas dasar
akan diwariskan
ke kelas turunan dengan sifat
protected
–
Anggota data dan fungsi anggota pada kelas
dasar yang bersifat private
tidak diwariskan
Pewarisan
Contoh Soal 01:
Program contoh 01
Algoritma...?????
Pseudocode...??????
3. Penentu Pewarisan Public
•
Sintaks:
class NamaKlsTurunan : Public NamaKelasDasar
atau
class NamaKelasTurunan : NamaKelasDasar
•
Contoh:
class OrangTua class Anak : Public OrangTua
{ {
… …
3. Penentu Pewarisan Public
•
Sifat:
–
Semua anggota data dan fungsi anggota yang
bersifat public dan protected pada kelas dasar
akan diwariskan
ke kelas turunan tanpa
perubahan (protected diwariskan menjadi
protected, public diwariskan menjadi public)
–
Anggota data dan fungsi anggota pada kelas
dasar yang bersifat private
tidak diwariskan
Pewarisan
Contoh Soal 02:
Menampilkan info basis/dasar dan info
turunan “dijalankan”
Program contoh 02
Tugas
Algoritma...?????
Pseudocode...??????
Dikumpulkan hari rabu, 27 Mei 2015
Apabila dikumpulkan hari rabu maka mendapat
bonus +10
Program contoh 03
Rangkuman Pewarisan
Penentu Pewarisan
Penentu Akses di Kelas Dasar
Penentu Akses Baru di Kelas Turunan
private private tidak diwariskan protected private
public private
protected private tidak diwariskan protected protected
public protected
Public private tidak diwariskan protected protected
Akses ke Anggota Data yang bersifat
Private
•
Agar dapat mengakses anggota
data pada kelas dasar yang
bersifat private, ada dua cara
yang bisa dilakukan:
1. Mengubah penentu akses menjadi
protected
2. Memanggil konstruktor kelas dasar
pada definisi konstruktor kelas
Akses ke Anggota Data yang bersifat
Private
1. Mengubah penentu akses menjadi
protected
– Dengan mengubah penentu akses menjadi
protected, maka anggota data bisa diakses dari kelas turunan
– Digunakan jika anggota data dipakai dalam proses selanjutnya di kelas turunan
2. Memanggil konstruktor kelas dasar pada
definisi konstruktor kelas turunan
– Penentu akses di kelas dasar tetap private
– Dipakai jika anggota data tidak dipakai pada
proses selanjutnya di kelas turunan. Misal hanya dicetak melalui kelas dasar
Pewarisan Bertingkat
•
Pada pewarisan bertingkat, terdapat dua
atau lebih kelas turunan
Pewarisan Bertingkat
•
Dalam kasus nama fungsi anggota ketiga
kelas sama, maka harus menggunakan
operator resolusi lingkup (::) untuk
menyatakan kepemilikan
•
Contoh:
OrangTua::lihat()
fungsi lihat() milik
kelas OrangTua
Pewarisan Berganda
•
Dalam pewarisan berganda, sebuah kelas dapat
mewarisi sifat lebih dari satu kelas
•
Contoh:
Kelas Anak mewarisi sifat dari kelas Ayah dan
kelas Ibu
Pewarisan Berganda
• Dalam kasus nama fungsi anggota pada kedua kelas
dasar sama, maka untuk mengakses harus menggunakan operator resolusi lingkup (::) yang menandakan
kepemilikan
• Contoh:
Fungsi anggota di kelas Ayah dan Ibu sama yaitu lihat(). Cara memanggil fungsi:
Anak anak1;
anak1.Ayah::lihat(); anak1.Ibu::lihat()
POLIFORFISME
Pertemuan 12
Fungsi Virtual
•
Fungsi virtual adalah fungsi anggota yang
dideklarasikan dengan menggunakan
keyword “Virtual”
•
Guna fungsi virtual:
– Misal pada kelas dasar terdapat fungsi virtual.
• Kemudian fungsi tersebut dideklarasikan lagi pada kelas turunan.
– Misalnya lagi sebuah pointer diciptakan untuk menunjuk ke kelas dasar.
• Selanjutnya pointer dapat memilih obyek yang tepat kalau fungsi anggota virtual tersebut dipanggil
Keterangan Fungsi Virtual
•
Fungsi virtual halo() didefinisikan di kelas
OrangTua (kelas dasar)
•
Fungsi halo() juga didefinisikan di kelas
Anak dan kelas Cucu
•
Sebuah pointer ot1 diciptakan yang
bertipe OrangTua
•
Pointer kemudian diatur untuk menunjuk
Keterangan Fungsi Virtual
•
Ketika fungsi anggota lihat() dipanggil dari
pointer, ternyata yang muncul adalah fungsi
lihat() dari kelas OrangTua
•
Ketika fungsi anggota halo() dipanggil dari
pointer, ternyata yang muncul adalah fungsi
halo() dari kelas Anak
•
Hal ini terjadi karena halo() adalah fungsi virtual
•
Hal serupa juga terjadi ketika pointer menunjuk
Polimorfisme
• Polimorfisme berarti mempunyai banyak bentuk
• Salah satu bentuk polimorfisme adalah overloading terhadap fungsi dan operator
Polimorfisme semacam ini disebut polimorfisme saat kompilasi (compile time polimorphism)
• Bentuk polimorfisme lainnya adalah polimorfisme saat
eksekusi (execution time polimorphism), disebut juga late binding atau dynamic binding
• Polimorfisme macam ini mampu menangani dua atau lebih obyek pada saat eksekusi dengan menyesuaikan terhadap lingkungan obyek yang bersangkutan
Fungsi Virtual Murni
• Fungsi virtual pada kelas dasar tidak pernah diakses sehingga tidak berguna
• Hal ini karena tidak pernah ada penciptaan obyek dari kelas dasar
• Contoh:
Fungsi halo() pada kelas OrangTua tidak pernah diakses karena obyek berkelas OrangTua tidak pernah diciptakan
• Karena tidak berguna, isi fungsi virtual bisa dihapus dengan cara menambahkan = 0 setelah tanda ()
• Contoh:
virtual void halo() = 0;
Kelas Abstrak
• Kelas Abstrak adalah kelas yang dideklarasikan namun tidak untuk menciptakan obyek
• Ciri kelas abstrak:
Mengandung paling tidak satu fungsi virtual murni
• Contoh:
Kelas OrangTua pada contoh program merupakan kelas abstrak
• Kelas abstrak tidak dapat dipakai untuk menciptakan obyek, sehingga pernyataan berikut tidak diperkenankan:
OrangTua ot1;
Namun penciptaan pointer bertipe kls abstrak dpt dilakukan
Kelas Dasar Virtual
•
Gambar pewarisan bertingkat
•
Bisa terjadi masalah pada kelas Cucu bila
pendeklarasian dilakukan seperti pada contoh
didepan
OrangTua
Cucu
Anak2 Anak1
Kelas Dasar Virtual
•
Contoh:
Misal pada kelas OrangTua terdapat anggota data “nama” bertipe protected. Anggota data ini akan diwariskan ke Anak1 dan Anak2. Karena kelas Cucu merupakan gabungan dari kelas Anak1 dan
Anak2, maka akan terdapat dua anggota data “nama” pada kelas Cucu.
•
Cara mengatasi : dengan menggunakan keyword
virtual pada saat pendeklarasian kelas turunan
– Contoh:
class Anak1 : virtual public OrangTua{}; class Anak2 : virtual public OrangTua{};
Dengan menggunakan keyword virtual, hanya akan terdapat satu anggota data untuk kedua kelas turunan
TEMPLATE FUNGSI DAN KELAS
Pertemuan 13
Pendahuluan
•
Template mirip dengan overloading, yaitu
digunakan pada fungsi-fungsi yang
menangani tugas yang sama tapi berbeda
tipe data dan jumlah parameternya
•
Bedanya:
–
pada overloading, kode harus ditulis disetiap
fungsi
–
pada template, kode hanya ditulis sekali yaitu
di template
Template Fungsi
• Sintaks membuat template:
template <class NamaPengenal>
TipeNilaiBalik NamaFungsi(NamaPengenal parameter, …) {
… }
• Contoh:
template <class T> void tukar(T &x, T &y) {
T tmp; tmp = x; x = y; y = tmp; }
Template Fungsi
• Setelah membuat template, prototipe fungsi harus dibuat
• Prototipe fungsi harus sama persis dengan definisi fungsi pada template termasuk tipe nilai balik, jumlah dan tipe parameter
• Contoh:
void tukar(int &x, int &y);
void tukar(double &x, double &y);
• Seperti pada overloading, template akan bekerja sesuai dengan jumlah dan tipe parameter dari fungsi yang
Tugas
•
Apa yang Anda diketahui tentang NILAI
BALIK
•
Dikumpulkan hari rabu, 27 Mei 2015
•
Apabila jawaban Anda sama maka yang
sama nilainya kan dibagi sejumlah
jawaban yang sama
•
Apabila dikumpulkan hari rabu maka
mendapat bonus +10
Template dengan Bermacam Tipe
• Sintaks:
template <class NamaPengenal1, class NamaPengenal2> TipeNilaiBalik NamaFungsi(NamaPengenal1 parameter1, NamaPengenal2 parameter2)
{ … }
• Contoh:
template <class A, class B>
int lebih_dari(A data[], B x, int jumdata) {
… }
Overloading terhadap Template
Fungsi
• Cara overloading terhadap template fungsi sama dengan overloading terhadap fungsi
• Caranya: membuat bermacam template dengan nama sama tapi berbeda kegunaannya, berbeda jumlah dan tipe parameternya
• Contoh:
template <class T> void tukar(T &x, T &y)
{T tmp; tmp = x; x = y; y = tmp;}
template <class T> void tukar(T x)
{cout << "Nilai x : " << x << endl;}
template <class T> void tukar(T *x)
Template Kelas
•
Template dalam kelas digunakan untuk
mendefinisikan anggota data dan fungsi
anggota
•
Sintaks:
template <class NamaPengenal>
class NamaKelas
{
..
};
Template Kelas
• Contoh:
template <class Templ> class Aritmatika
{
public:
Templ penjumlahan(Templ x, Templ y); Templ pengurangan(Templ x, Templ y); };
template <class Templ>
Templ Aritmatika<Templ>::penjumlahan(Templ x, Templ y) {
return(x + y); }
Template Kelas
template <class Templ>
Templ Aritmatika<Templ>::pengurangan(Templ x, Templ y)
{
return(x - y); }
• Contoh pembuatan obyek: Aritmatika<int> jum_int;
Aritmatika<float> jum_float; Aritmatika<int> kur_int;