1 Pertemuan 12 Template Matakuliah: T0044/Pemrograman Berorientasi Obyek Tahun: 2005 Versi: 1.0
2 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : Menghasilkan Program C++ dengan menggunakan Template
3 Outline Materi Definisi Template & STL Function template Class template
4 Definisi Template & STL Template atau "generic" / “tipe data ber- paramete" membuat function / class yang berhubungan. Untuk operasi fungsi yang sama namun beda tipe argumen Berbeda dengan overloading yg menulis kembali code Template digunakan jika kita menulis banyak code yang identik.
5 Definisi Template & STL Pengembangan baru dlm C++ adalah adopsi Standard Template Library (STL). Kebanyakan compiler vendors menawarkan STL sbg bagian dari compiler mereka. STL adalah library berbasis template berisi class-calss seperti vectors, lists, queues, dan stacks. STL juga berisi algoritma umum seperti sorting dan searching. Tujuan STL adalah memberikan alternatif utk “reinventing the wheel” utk kebutuhan umum. STL di-test dan di-debug, dengan kinerja tinggi. Hal penting adalah STL mempunyai kemampuan reusable; jika kita sudah mengerti cara pakai sebuah STL container, kita dpt menggunakannnya di berbagai aplikasi program kitatanpa hrs membuat baru.
6 Function Template Misal: function max(x,y) me-return bilangan terbesar dari 2 arguments x dan y. X dan y dapat ber- type apa saja tergantung bilangannya. Karena C++ merupakan jenis bahasa pemrograman yang ketat dalam hal tipe data, maka diperlukan deklarasi tipe parameter x dan y saat compile time. Jika tanpa menggunakan template, harus dibuat banyak versi overloaded fungsi max() (sebanyak data type yg di support), begitu juga code untuk tiap versi-nya.
7 Function Template Dengan menggunakan template, dapat di definisikan sebuah bentuk fungsi yg berhubungan dg overloaded functions dg membiarkan tipe data parameter: Tipe data diwakili oleh template argument. template T max(T x, T y) { return (x > y) ? x : y; };
8 Function Template Pada saat template dijalankan, compiler men-generate function yg sesuai dg tipe data fungsi pemanggil-nya (calling fuction): Semua tipe data (tidak hanya class) dapat dipakai. Compiler akan menangani calling operator >( ) yang sesuai, sehingga kita dapat menggunakan fungsi max dengan tipe argument apapun. int i; Myclass a, b; int j = max(i,0); // tipe argument: integers Myclass m = max(a,b); // tipe arguments: Myclass
9 Class Templates Disebut juga generic class atau class generator Untuk men-definisikan model class. Generic container classes –Kita dpt memiliki tipe data integer atau lainnya, dg basic operations yg sama (insert, delete, index, etc.) –Hanya dengan men-definisikan struktur class dengan generic operation, dan system akan men-generate definisi class on the fly.
10 Program – Class Templates #1 template class List { T *v; int size; public: List(int); T& operator[](int i) {return v[i];} }; // definisi dengan syntax khusus: template List ::List(int n) { v = new T[n]; size = n; } Void main() { List x(10); List y(20); x[3] = 7; y[3] = m; } Int value Object Of Myclass
11 Program – Class Templates #2 #include template class MyTemp { T1 t1; T2 t2; public: MyTemp(T1 tt1, T2 tt2) { t1 = tt1; t2 = tt2; } void display() { cout << t1 << ' ' << t2 << '\n'; } }; Void main() { int a = 123; double b = ; MyTemp mt(a, b); mt.display(); }
12 Kasus Array dengan Template Bug pada program ini adalah akses ke elemen array out of range (walaupun posisi memory yg terisi kemungkinan tepat di sebelahnya) void main() { int array[10]; for (int i = 0; i <= 10; i++) array[i] = 123; }
13 Kasus Array dengan Template Template dapat digunakan untuk menambah batas array. #include Template class Array { T elemen[b]; public: T& operator[] (int sub) { assert(sub >=0 && sub < b); return elemen[sub]; } }; assert () adl sebuah function dg return True/False utk meng-evaluate sebuah ekspresi
14 Latihan – Program dg Template void main() { const int aCount = 5; const int bCount = 7; const int cCount = 6; int a [aCount] = { 1, 2, 3, 4, 5 }; double b[bCount] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 }; char c[cCount] = "HELLO"; cout << "Array a contains:" << endl; printArray( a, aCount ); cout << "Array b contains:" << endl; printArray( b, bCount ); cout << "Array c contains:" << endl; printArray( c, cCount ); } Buatlah deklarasi class template “Array”. Constructor meng- create array dgn new seperti pada main function disamping Output: Array a contains: Array b contains: Array c contains: H E L L O
15 Tugas 12 Tugas 12A: Mahasiswa membuat ringkasan dari artikel tentang Template dalam C++ Tugas 12B: Mahasiswa mencari Output Program dengan Template Tugas 12C: Mahasiswa membuat program dengan function template & class templete