Matakuliah Tahun : T0456 / Algoritma dan Metode Object Oriented Programming : 2007 Nesting object dan friend Pertemuan 19 Learning Outcomes Pada akhir pertemuan ini, diharapkan: Mahasiswa dapat menjelaskan kapan menggunakan konsep friend pada suatu class dan function. Buku Referensi: C++ - How to program, Deitel & Deitel, Prentice Hall, 2001. Websites: http://www.deitel.com 3 Bina Nusantara Outline Materi • • • • Friend of functions Friend of class Nesting of object Contoh program 4 Bina Nusantara Keyword Friend • Tujuan utama dari PBO adalah pengkapsulan data dan fungsi dalam suatu class untuk mehindarkan akses data yang tidak berhak. • Pengkapsulan pada object yang kompleks terkadang sulit dilakukan, sehingga seperti dalam dunia nyata, adakalanya aturan menjadi dilanggar. • Friend memungkinkan pihak di luar class mengakses anggota class (termasuk yang bersifat private). Bina Nusantara Friend lanjutan … • Friend di satu pihak dapat menyederhanakan kompleksitas suatu object, tetapi dipihak lain juga dapat meruntuhkan konsep pengkapsulan (jika terlalu banyak digunakan). • Oleh karena itu pemakaian friend harus digunakan seperlunya pada tempat yang tepat. • Saran dari Robert lafore: “Jika anda menemukan bahwa anda terlalu banyak menggunakan friend, mungkin anda perlu merombak rancangan program”. Greg Pery mengatakan: “ jika kelas friend terlalu banyak digunakan, mungkin diperlukan untuk mengkombinasikan kelaskelas menjadi sebuah kelas. Bina Nusantara Fungsi Friend (friend function) • Fungsi friend adalah fungsi yang bukan anggota class yang dapat mengakses anggota class (termasuk yang private). Class Anggota Dapat mengakses anggota class Fungsi Friend Bina Nusantara Contoh Program // program C++ dengan fungsi friend #include <constream.h> #include <string.h> class MHS { private: long NIM; char Nama[20]; char jurusan[10]; public: MHS(); void Inisialisasi(long nim, char *nm, friend void DisplayData( MHS m1 ); }; Bina Nusantara char *jur); void main() { MHS mahasiswa; mahasiswa.Inisialisasi(0302201, “amir”, “TI”); DisplayData(mahasiswa); } //definisi fungsi anggota: MHS::MHS() { NIM = 0; strcpy(Nama, “”); strcpy(jurusan, “”); } Bina Nusantara void MHS:: Inisialisasi(long nim, char *nm, char *jur) { MHS::NIM = nim; strcpy(MHS::Nama, nm); strcpy(MHS::jurusan, jur); } // Definisi fungsi friend void DisplayData( MHS m1 ) { cout << “NIM : “ << m1.NIM << endl; cout << “Nama : “ << m1.Nama << endl; cout << “Jurusan : “ << m1.jurusan << endl; } Bina Nusantara Class Friend // Program C++ dengan class friend #include <constream.h> class Harga { private: long int hargaNormal; public: Harga() : hargaNormal(180000) { } friend class HargaTeman; }; class HargaTeman { private: Harga biaya; public: void infoHarga(); }; Bina Nusantara void HargaTeman::infoHarga() { cout << “Harga sebelum diskon: “ << biaya.hargaNormal << endl; cout << “Harga sesudah diskon: “ << (0.5*biaya.hargaNormal) << endl; } void main(){ HargaTeman ongkosKereta; ongkosKereta.infoHarga(); } Bina Nusantara Nesting object (Object bersarang) • Sebuah class dapat mempunyai object dari class lain sebagai data member. • Sebagai contoh di bawah sebuah class ComplexFrac didefinisikan dengan menggunakan object dari class Fraction, data member dari class ComplexFrac adalah object dari class Fraction. Bina Nusantara Nesting object (Object bersarang) Fraction. Numerator Denumerator Contructor Print() ComplexFrac re Numerator Denumerator lm Numerator Denumerator Contructor Print() Bina Nusantara Nesting object (Object bersarang) • Relasi antara Fraction dan ComplexFrac disebut relasi aggregation atau whole-part, Dalam hal ini ComplexFrac has a Fraction. (sebenarnya 2 fraction) • Class ComplexFrac harus menyediakan contructor dari object anggota (re, im) dengan argumen yang diperlukan. • Object anggota dikontruksi lebih dulu pada saat dideklarasikan kemudian baru kelas ComplexFrac. • Pada saat object ComplexFrac keluar scope destructor dipanggil sebaliknya. Bina Nusantara Contoh Program class Fraction { int numerator, denumerator; Public: Fraction(int, int); void Print() const; }; Fraction::Fraction(int num, int denum) { numerator = num; if (denum == 0) denumerator = 1; else denumerator = denum; cout << “contructor of fraction” << endl; } void Fraction::Print() const { cout << numerator << “/” << denumerator << endl; } Bina Nusantara class ComplexFrac { Fraction re, im; public: ComplexFrac(int, int); void Print(); }; ComplexFrac::ComplexFrac(int re_in, int im_in) : re(re_in, 1), im(im_in, 1) { } Void ComplexFrac::Print() { Re.Print(); Im.Print(); } void main() { ComplexFrac cf(2, 5); cf.Print(); } Bina Nusantara Diskusi dan Tanya Jawab Latihan soal 18 Bina Nusantara
© Copyright 2024 Paperzz