ALGORITMA DAN PEMROGRAMAN 2
3 SKS
By : Sri Rezeki Candra Nursari
MATERI Teks/string Pointer File Struktur Kelas/Class Konstruktor dan Destruktor • Kelas dan Obyek • • • • • •
Overloading Operator Inheritance (Pewarisan) Polimorfisme Template Fungsi dan Kelas • Sort • Search • • • •
INHERITANCE (PEWARISAN) Pertemuan 11
3 SKS
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 program baru
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 – Konstruktor dan destruktor 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 – Konstruktor dan destruktor tidak diwariskan
Pewarisan Contoh Soal 01: Menampilkan nilai X dan Y
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 – Konstruktor dan destruktor 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 private
protected
Public
Penentu Akses di Kelas Dasar
Penentu Akses Baru di Kelas Turunan
private
tidak diwariskan
protected
private
public
private
private
tidak diwariskan
protected
protected
public
protected
private
tidak diwariskan
protected
protected
public
public
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 turunan
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
3 SKS
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 melalui pointer
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 ke obyek anak1 yang bertipe Anak
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 ke obyek cucu1
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;
• Fungsi virtual tanpa isi disebut dengan fungsi virtual murni
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 OrangTua *ot1;
Kelas Dasar Virtual • Gambar pewarisan bertingkat OrangTua
Anak1
Anak2
Cucu
• Bisa terjadi masalah pada kelas Cucu bila pendeklarasian dilakukan seperti pada contoh didepan
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
3 SKS
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
TipeNilaiBalik NamaFungsi(NamaPengenal parameter, …) { … } • Contoh: template 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 memanggilnya
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 TipeNilaiBalik NamaFungsi(NamaPengenal1 parameter1, NamaPengenal2 parameter2) { … } • Contoh: template 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 void tukar(T &x, T &y) {T tmp; tmp = x; x = y; y = tmp;} template void tukar(T x) {cout << "Nilai x : " << x << endl;} template void tukar(T *x) {cout << "Isi kata : " << x << endl;}
Template Kelas • Template dalam kelas digunakan untuk mendefinisikan anggota data dan fungsi anggota • Sintaks: template class NamaKelas { .. };
Template Kelas • Contoh: template class Aritmatika { public: Templ penjumlahan(Templ x, Templ y); Templ pengurangan(Templ x, Templ y); }; template Templ Aritmatika::penjumlahan(Templ x, Templ y) { return(x + y); }
Template Kelas template Templ Aritmatika::pengurangan(Templ x, Templ y) { return(x - y); } • Contoh pembuatan obyek: Aritmatika jum_int; Aritmatika jum_float; Aritmatika kur_int; Aritmatika kur_float;