download

Matakuliah
Tahun
Versi
: T0044/Pemrograman Berorientasi Obyek
: 2005
: 1.0
Pertemuan 12
Template
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Menghasilkan Program C++ dengan
menggunakan Template
2
Outline Materi
• Definisi Template & STL
• Function template
• Class template
3
Definisi Template & STL
• Template atau "generic" / “tipe data berparamete"
• 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.
4
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.
5
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.
6
Function Template
• Dengan menggunakan template, dapat di
definisikan sebuah bentuk fungsi yg
berhubungan dg overloaded functions dg
membiarkan tipe data parameter:
template <class T>
T max(T x, T y)
{ return (x > y) ? x : y; };
• Tipe data diwakili oleh template argument
<class T>.
7
Function Template
• Pada saat template dijalankan, compiler men-generate
function yg sesuai dg tipe data fungsi pemanggil-nya
(calling fuction):
int i;
Myclass a, b;
int j = max(i,0);
Myclass m = max(a,b);
// tipe argument: integers
// tipe arguments: Myclass
• Semua tipe data (tidak hanya class) dapat dipakai
<class T>.
• Compiler akan menangani calling operator >( ) yang
sesuai, sehingga kita dapat menggunakan fungsi max
dengan tipe argument apapun.
8
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.
9
Program – Class Templates #1
template <class T>
class List
{ T *v;
int size;
public:
List(int);
T& operator[](int i) {return v[i];}
};
// definisi dengan syntax khusus:
template <class T> List<T>::List(int n)
{
v = new T[n];
size = n;
}
Void main()
{ List<int> x(10);
List<Myclass> y(20);
x[3] = 7;
y[3] = m;
}
Int value
Object Of
Myclass
10
Program – Class Templates #2
#include <iostream.h>
template <class T1, class T2>
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 = 456.789;
MyTemp<int, double> mt(a, b);
mt.display();
}
11
Kasus Array dengan Template
void main()
{
int array[10];
for (int i = 0; i <= 10; i++)
array[i] = 123;
}
• Bug pada
program ini
adalah akses ke
elemen array out
of range
(walaupun posisi
memory yg terisi
kemungkinan
tepat di
sebelahnya)
12
Kasus Array dengan Template
assert () adl sebuah function
dg return True/False utk
meng-evaluate sebuah
ekspresi
#include <assert.h>
Template <class T, int b>
class Array
{
T elemen[b];
public:
T& operator[] (int sub)
{ assert(sub >=0 && sub < b);
return elemen[sub];
}
};
 Template dapat
digunakan untuk
menambah
batas array.
13
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 mengcreate array dgn new
seperti pada main
function disamping
Output:
Array a
1 2 3 4
Array b
1.1 2.2
Array c
H E L L
contains:
5
contains:
3.3 4.4 5.5 6.6 7.7
contains:
O
14
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
15