nesting object dan friend pertemuan 19
Post on 13-Jan-2016
30 Views
Preview:
DESCRIPTION
TRANSCRIPT
Nesting object dan friend Pertemuan 19
Matakuliah : T0456 / Algoritma dan Metode Object Oriented Programming
Tahun : 2007
Bina Nusantara
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 kelas-kelas 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
Fungsi Friend
Dapat mengakses anggota class
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, char
*jur);friend void DisplayData( MHS m1 );
};
Bina Nusantara
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
• 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.
Nesting object (Object bersarang)
Bina Nusantara
ContructorPrint()
NumeratorDenumerator
Fraction. ComplexFrac
ContructorPrint()
NumeratorDenumerator
NumeratorDenumerator
re
lm
Nesting object (Object bersarang)
Bina Nusantara
• 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.
Nesting object (Object bersarang)
Bina Nusantara
Contoh Programclass 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 18
Diskusi dan Tanya JawabLatihan soal
top related