download

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