UAS T0044 PAGI 20xx
- Pilihan (40 poin)
01. Ide dari generic programming adalah mengganti
a. static function b. inline function
c. virtual function d. friend function
dengan fungsi yang ada di template parameter.
02. Overloading function juga dikenal dengan nama
a.ad hoc polymorphism b. subtype polymorphism
c. true polymorphism d. parametric polymorphism
03. Opsi berikut yang bukan merupakan fitur utama dari OOP adalah
a. encapsulation b. inheritance c. polymrophism d. template
04. Inheritance kerap kali dihubungkan dengan polymorphism. Istilah yang paling
tepat untuk menyatakan inheritance sebagai polymorphism adalah
a.trivial polymorphism b. universal polymorphism
c. pure polymorphism d. subtype polymorphism
05. Meskipun mendukung penggunaan multiple inheritance tetapi penggunaan fitur
ini tidak dianjurkan di C++. Opsi berikut yang dianjurkan sebagai penggantinya
adalah
a. composition b. template
c. polymorphism d. overloading function
06. Selain sebagai tool untuk membentuk generic programming, template juga
merupakan tool untuk membentuk
a. universal polymorphism b. static polymorphism
c. ad hoc polymorphism d. subtype polymorphism.
07. Run-time polymorphism dapat diimplementasikan menggunakan
a. virtual function . b. overloading function
c. friend function d. inline function
08. Paradigma-paradigma berikut yang digunakan mendukung pemrograman C++
adalah
a. procedural dan object oriented programming
b. object oriented programming dan generic programming
c. generic programming dan object oriented programming
d. procedural, object oriented programming dan generic programming.
09. Contoh dari deklarasi pure virtual function adalah
a. int fungsi (virtual int ) = 0; b. virtual int fungsi (int) = 0;
c. int virtual fungsi (int ) = 0; d. virtual int fungsi (int = 0);
10. Fungsi-fungsi berikut yang binding time-nya terjadi saat compile time adalah
a. overloading function dan template function
b. template function dan overriding virtual function
c, overriding virtual function dan overloading function
d. overloading function, template function dan overriding virtual function
11. Secara sederhana polymorphism dapat didefinisikan sebagai multiple routine
with the same name. Opsi berikut yang tidak dapat digunakan untuk
mendefinisikan polymorphism adalah
a. satic binding b. dynamic binding
c. generic programming d. function overriding
12. Opsi berikut yang bukan merupakan karakteristik dari fungsi virtual adalah
a. dapat di override di derived class
b. digunakan untuk mendukung polimorfisme
c. deklarasi virtual di derived class
d. deklarasi virtual di base class
13. Salah satu kerugian penggunaan inheritance di OOP adalah
a. independensi di antara class dalam hirarki
b. independensi di antara object dalam hirarki
c. dependensi di antara class dalam hirarki
d. dependensi di antara object dalam hirarki
14. Dua prototipe berikut : add (const Base &) dan add (const Derived &) berbeda
dalam hal:
a. scope b. protocol c. signatures d. precedence
15 Tipe inheritance yang dianjurkan untuk melakukan derivation adalah
a. private b. protected
c. public d. private, protected dan public
16. Nilai yang dikirim ke non type parameter pada class template harus berbentuk
a. variable b. ekspresi c. constanta d pointer
17. Fitur OOP yang bertentangan dengan konsep pemrograman modular adalah
a. encapsulation b. inheritance
c. overloading function d. generic programming
18. Iterator tidak lain adalah
a. generalized reference b. generalized pointer
c. specialized reference d. specialized pointer.
19. Mekanisme di OOP yang memungkinkan suatu fungsi bukan anggota untuk
mengakses anggota klas adalah
a. fungsi overloading b. fungsi overriding
c. fungsi virtual d. fungsi friend
20. Polymorphism yang dapat diimplementasikan tanpa harus menggunakan
konsep encapsulation dan inheritance
a. virtual polymorphism b. trivial polymorphism
b. true polymorphism d. ad hoc polymorphism
- Uraian (40 poin)
1.(10 poin) Selalu ada pengecualian. Fenomena ini juga berlalu di C++, karena itu
tidak semua data atau fungsi anggota diturunkan dari base class ke derived class. Uraikan mengapa constructor dan destructor tidak diwariskan di C++ meskipun mereka kita deklarasikan dengan level akses public atau protected. Uraikan juga mengapa fungsi friend tidak diwariskan di klas turunan. Selanjutnya, sebutkan pula sejumlah fitur lain di klas induk yang tidak diwariskan di klas turunan.
- Karena constructor bukanlah suatu interface dari class, sedangkan yang diwariskan oleh fitur inheritance hanyalah interface dari class
- Destructor tidak diwariskan karena destructor hanya ada satu
- Friend function tidak dapat diwariskan karena friend function hanya digunakan untuk memberi akses kepada member class yang mempunyai access modifier private yang kemudian menjadi dapat diakses oleh fungsi tertentu. Jika diwariskan, datanya akan mengalami perubahan dan friend function tersebut harus berubah juga
- Yang tidak dapat diwariskan pada kelas anak yaitu, data private dan assignment operator
2. (10 poin) Ilmu pengetahuan itu sifatnya kumulatif sehingga meskipun kita sudah mempunyai utilitas ADT yang tidak lain adalah enkapsulasi kita masih memerlukan inheritance. WHY? Untuk bisa menjawab kasus ini kamu harus membandingkan inheritance dengan ADT. Pertanyaan buat kamu adalah coba bandingkan inheritance dengan ADT dari berbagai sisi diantaranya dari sisi komponen, struktur komponen, advantage dan disadvantage.
Abstract data type | Inheritance | |||||||||
Komponen | Representasi atribut dan method | Kelas induk dan turunan | ||||||||
Struktur |
|
|
||||||||
Keuntungan |
|
|||||||||
Kekurangan |
|
3. (10 poin) Ada banyak tipe polymorphism yang kita kenal sehingga sukar bagi kita untuk membuat klasifikasi yang baku atau klasifikasi tunggal. Coba uraikan apa yang kamu ketahui tentang berbagai istilah berikut: parametric polymorphism, ad hoc polymorphism, subtype polymorphism, dan override polymorphism .
Parametic polymorphism : polymorphism yang tidak memilik virtual function, dan menggunakan static binding, classnya juga merupakan class yang nyata atau konkret dan bukan abstract, juga tidak dapat menerapkan inheritance atau memakai template
Ad hoc polymorphism : sama dengan Parametic polymorphism. Tetapi menggunakan overloading function, sifat reusability hanya berlaku untuk nama. Memiliki tree function syndrome, yaitu different type, number, dan order.
Subtype polymorphism : sama dengan Parametic polymorphism. Tetapi menggunakan overriding function.
Override polymorphism : keadaan dimana method pada subclass menolak method pada superclassnya. Ciri dari Overriding adalah nama method, daftar parameter, dan return type yang harus sama
4. (10 poin) Generic programming, khususnya template function, yang di C++
diimplementasikan menggunakan template kerapkali dikontraskan dengan
overloading function. Melalui penggalan kode sebagai contoh, coba tunjukkan
keunggulan template function dibandingkan dengan overloading function.
Kelebihan template function adalah :
- Satu fungsi dapat digunakan untuk beberapa tipe parameter, karena fungsi tersebut akan dengan sendirinya menyesuaikan tipe data parameter dengan actual parameternya
- Satu fungsi untuk satu task
Contoh template function :
template<classT>
void output(Ta, Tb)
{
cout << “A = ” << x << endl;
cout << “B = ” << y << endl;
}
Contoh Overload function :
void output(inta, intb)
{
cout << “A = ” << a << endl;
cout << “B = ” << b << endl;
}
void output(chara, charb)
{
cout << “A = ” << a << endl;
cout << “B = ” << b << endl;
}
II. Pemrograman (20 poin)
Perguruan X adalah suatu institusi pendidikan dengan sejumlah pegawai atau karyawan. Dalam beberapa bulan terakhir ini, ada keinginan dari manajemen untuk mendesain ulang sistem informasi yang sedang berlaku. Sebagai pilot project, subsistem kepegawaian diambil untuk lebih dulu didesain ulang. Untuk mengembangkan sistem sederhana yang diinginkan, seorang program developer lulusan TI Binus di-hire. Pendekatan yang digunakan adalah OOD.
Berkat bantuan Prof. Djun sebagai konsultan dalam waktu yang relatif singkat, sesuai dengan kebutuhan sistem awal, developer menghasilkan tiga klas yaitu person, employee dan teacher dimana klas teacher dirancang sebagai turunan dari klas person dan employee. Karena masih dalam taraf uji coba, data dan fungsi anggota untuk setiap klas dibuat sangat sederhana. Fungsi anggota untuk semua klas adalah entryData() dan displayData(). Untuk data anggota hanya data dasar yang disimpan. Data anggota untuk klas person adalah name, age dan sex, klas employee dengan data anggota department dan wage, sedangkan klas teacher, sebagai turunan dari klas person dan employee data tambahanya adalah teacherGrade. Dengan demikian data angota dan fungsi anggota untuk setiap klas selengkapnya adalah sebagaui berikut:
Klas Data anggota Fungsi anggota
Person Name entryData()
Age displayData()
Sex
Employee Department entryData()
Wage displayData()
Teacher Name entryData()
Age displayData()
Sex
Deparement
Wage
TeacherGrade
Tugas kamu:
- (10 poin) Gambar class diagram dari kasus di atas.
- (5 poin) Tulislah kode untuk masing-masing klas. Di dalam klas, fungsi anggota hanya berbentuk prototype sedangkan definisinya ditulis di luar klas. Jangan lupa menggunakan scope oprator :: saat kamu menulis fungsi anggota.
classPerson
{
protected:
string name;
int age;
string sex;
public:
void entryData(string name, int age, string sex);
void displayData(string name, int age, string sex);
};
classEmployee
{
protected:
string department;
int wage;
public:
void entryData(string department, int wage);
void displayData(string department, int wage);
};
classTeacher: publicPerson, publicEmployee
{
private:
int teacherGrade;
public:
void entryData(string name, int age, string sex, string department, int wage, int teacherGrade);
void displayData(string name, int age, string sex, string department, int wage, int teacherGrade);
};
voidPerson::entryData(stringname, intage, stringsex)
{
this->name = name;
this->age = age;
this->sex = sex;
}
voidPerson :: displayData(stringname, intage, stringsex)
{
cout << name << endl << age << endl << sex << endl;
}
voidEmployee :: entryData(stringdepartment, intwage)
{
this->department = department;
this->wage = wage;
}
voidEmployee :: displayData(stringdepartment, intwage)
{
cout << department << endl << wage << endl;
}
voidTeacher :: entryData(stringname, intage, stringsex, stringdepartment, intwage, intteacherGrade)
{
this->name = name;
this->age = age;
this->sex = sex;
this->department = department;
this->wage = wage;
this->teacherGrade = teacherGrade;
}
voidTeacher :: displayData(stringname, intage, stringsex, stringdepartment, intwage, intteacherGrade)
{
cout << name << endl << age << endl << sex << endl << department << endl << wage << endl << teacherGrade << endl;
}
- (5 poin) Fungsi main() untuk menguji kode di bagian b.
void main()
{
Person per;
Employee emp;
Teacher teach;
per.entryData( “Daniel” , 23 , “Male” );
per.displayData( “Daniel” , 23 , “Male” );
emp.entryData( “Teknik Informatika” , 3000000);
emp.displayData( “Teknik Informatika” , 3000000);
teach.entryData( “Ria” , 22 , “Female” , “Teknik Informatika” , 3000000 , 95);
teach.displayData( “Ria” , 22 , “Female” , “Teknik Informatika” , 3000000 , 95);
cin.get();
}
Daniel David 1701291610 02PPT
-d1030-
Recent Comments