180 likes | 329 Views
Nesting object dan friend Pertemuan 7. Matakuliah : 0454T / Algoritma dan Metode Object Oriented Programming Tahun : 2009. Learning Outcomes. Pada akhir pertemuan ini, diharapkan: Mahasiswa dapat menjelaskan kapan menggunakan konsep friend pada suatu class dan function.
E N D
Nesting object dan friendPertemuan 7 Matakuliah : 0454T / Algoritma dan Metode Object Oriented Programming Tahun : 2009
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
Outline Materi • Friend of functions • Friend of class • Nesting of object • Contoh program 4
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).
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 kelas-kelas menjadi sebuah kelas.
Anggota Fungsi Friend Fungsi Friend (friend function) • Fungsi friend adalah fungsi yang bukan anggota class yang dapat mengakses anggota class (termasuk yang private). Class Dapat mengakses anggota class
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, char *jur); friend void DisplayData( MHS m1 ); };
Contoh Program void main() { MHS mahasiswa; mahasiswa.Inisialisasi(0302201, “amir”, “TI”); DisplayData(mahasiswa); } //definisi fungsi anggota: MHS::MHS() { NIM = 0; strcpy(Nama, “”); strcpy(jurusan, “”); }
Contoh Program 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; }
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(); };
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(); }
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.
Numerator Denumerator Nesting object (Object bersarang) Fraction. ComplexFrac re Numerator Denumerator lm Contructor Print() Numerator Denumerator Contructor Print()
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.
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; }
Contoh Program 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(); }