#OOP_D_ITS - 9th - Template

1,199 views
1,116 views

Published on

Published in: Health & Medicine, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,199
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
59
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Dalam pemrograman , terutama yang sangat tergantung pada tipe variable , sering kali kita direpotkan dengan harus membuat fungsi yang berfungsi sama tapi dengan tipe variable berbeda.Untuk itu pada C++ dikeluarkan lah sebuah keyword baru , yaitu template. Dengan penggunaan template kita bisa membuat sebuah fungsi yang bisa mendukung segala macam tipe variable , tidak terbatas pada variable yang di definisikan oleh keyword C/C++ tapi juga mendukung penggunaan untuk tipe variable masa depan. Penggunaan template tidak terbatas hanya pada fungsi tapi juga mencakup class ( termasuk juga struct , union)
  • Secara garis besar penggunaan template dapat dibagi 2 yaitu template pada fungsi (function template)dan template pada Class (class template). Oke saya rasa kita langsung saja membahas penggunaan template.
  • Dapat dilihat , dengan menggunakan template kita telah menghemat waktu untuk menulis fungsi Pada fungsi swap diatas , juga tidak menutup kemungkinan untuk menukar 2 buah kelas. Pada contoh diatas fungsi tidak akan bekerja jika variable yang ditukar berbeda tipe . Walaupun kekerabatannya cukup dekat . Anda tidak bisa menukar tipe int (16bit) dengan tipe short (16 bit). Ini terkait dengan pendeklarasian template pada fungsi swap. template <class tipe> void swap(tipe &a,tipe &b) Pada pendeklarasian fungsi swap dapat dilihat bahwa formal parameter a sama dengan formal parameter b . Oleh sebab itu sudah seharusnya tipe pada aktual parameter pun harus sama. Untuk contoh fungsi swap diatas sebaiknya anda tidak menggunakan type-casting untuk mengatasi masalah diatas. Mengingat fungsi swap diatas dikirim by reference . (Yang mana dalam pengiriman fungsi menggunakan reference berkaitan dengan pointer). Tentu saja ukuran dari variable menjadi sangat penting karena kita telah merubah ukuran dari variable (type casting) bisa saja terjadi hasil yang tak terduga . Walupun kadang – kadang memberikan hasil yang benar. Kecuali jika ukuran kedua tipe variable tersebut benar - benar sama , anda dapat menggunakan type–casting dalam hal ini. Untuk mendefiniskan lebih dari satu type pada template anda dapat menggnakan koma sebagai pemisah contoh : Template dengan 2 buah tipe template <class tipe1,class tipe2>
  • Jikalau suatu saat ada sebuah variable yang harus diperlakukan khusus untuk menukarkannya anda dapat mengoverload sebuah template function. Sebagai contoh : misalkan jika anda ingin menukar 2 buah variable float tanpa perlu memperhatikan negatif atau positif . Anda tinggal membuat sebuah fungsi tambahan dengan variable float. Jadi ketika dijalankan compiler akan memprioritaskan dulu pada fungsi yang memiliki formal parameter dan aktual parameter dengan tipe yang sama. Baru kemudian jika tidak ditemukan maka compiler akan membuat sebuah instance dari template function yang telah anda buat. Untuk lebih jelasnya mari kita lihat contoh source code berikut ini .
  • Jenis template yang berikutnya ialah Class template. Class Template , tidak hanya berlaku untuk pendefinisian template pada class tapi juga berlaku pada pendefinisian struct dan union.Cara pendefinisan sama seperti Funtion template yang beda hanya pada caramembuat instance dari class template tersebut. Untuk lebih jelasnya mari kita perhatikan contoh pendefinisian Class Template.
  • Untuk menggunakan sebuah class template sebelumnya kita harus mendefiniskan instance dari template yang akan dibuat. Untuk mendefinisikan instance dari class template dapt dilakukan dengan cara menuliskan tipe data dari instance yang diapit oleh tanda “<” ,”>” . void main(void) { CMyTemplate<short> a; // membuat instance CMyTemplate dengan tipe short tMystruct<short> b; // membuat instance tMyStruct dengan tipe short _MyUnion<float> c; // membuat instance _MyUnion dengan tipe float }
  • #OOP_D_ITS - 9th - Template

    1. 1. C++ &lt;Template&gt;<br />03/11/2009<br />1<br />Hadziq Fabroyir - Informatics ITS<br />
    2. 2. How to implement ↓ in OOP ?¿<br />several methods withsame function statementsbut take different type of parameters<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />2<br />
    3. 3. What are you going to code ?¿<br />- to express swap function for various data type -<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />3<br />
    4. 4. Declare it one by one ?¿<br />void swapInt (int *a, int *b);<br />void swapFloat (float *c, float *d);<br />void swapChar (char *p, char *q);<br />…<br />// every methods has a specific name<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />4<br />
    5. 5. Make it more general , guys !<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />5<br />
    6. 6. Function Overloading<br />void swap (int *a, int *b)<br />{ int temp; temp = *a; *a = *b; *b = temp; }<br />void swap (float *c, float *d)<br />{float temp; temp = *c; *c = *d; *d = temp;}<br />void swap (char *p, char *q)<br />{char temp; temp = *p; *p = *q; *q = temp;}<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />6<br />
    7. 7. Here it is , C++ introduce &lt;template&gt; !<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />7<br />
    8. 8. Why &lt;templates&gt;<br />C++ promotes code reusability<br />Inheritance and composition provide a way to re-use object code<br />Templates provide a way to re-use source code<br />Example: Queue&lt;T&gt;<br /> generic Queue having a type parameter T<br /> T can be replaced with actual types<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />8<br />
    9. 9. Why use &lt;templates&gt;<br />Templates are easier to write. You create only one generic version of your class or function instead of manually creating specializations. <br />Templates can be easier to understand, since they can provide a straightforward way of abstracting type information. <br />Templates are type-safe. Because the types that templates act upon are known at compile time, the compiler can perform type checking before errors occur. <br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />9<br />
    10. 10. &lt;template&gt;<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />10<br />
    11. 11. Function Template<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />11<br />
    12. 12. What’s it all about<br />Easily create a large range of related functions or classes<br />Function template - the blueprintof the related functions<br />Template function - a specific function made from a function template<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />12<br />
    13. 13. Look at this declaration of Function Template <br />template &lt;class tipe&gt; <br />void swap(tipe &a,tipe &b) <br />{ <br />tipe c; <br />c = a; <br />a = b; <br />b = c; <br />} <br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />13<br />
    14. 14. Function Usage Example<br />Instance of int<br />void main(void) { <br />int a,b; <br />a = 10; <br />b = 20; <br /> swap(a,b); cout &lt;&lt; a &lt;&lt; “ “ &lt;&lt; b &lt;&lt; endl; <br />} <br />Instance of float<br />void main(void) { <br />float a,b; <br />a = 10.0; <br />b = 20.0; <br /> swap(a,b); cout &lt;&lt; a &lt;&lt; “ “ &lt;&lt; b &lt;&lt; endl; <br />} <br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />14<br />
    15. 15. &lt;template&gt; effects<br />It’s reusable ► we can gain the time for coding<br />It’s possible to swap 2 objects instantiated from a class<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />15<br />
    16. 16. Overloading Template Function <br />#include &lt;iostream.h&gt; <br />template &lt;class Tipe&gt; <br />void swap(Tipe &a,Tipe &b) <br />{ <br />Tipe tmp; <br />tmp = a; <br />a = b; <br />b = tmp; <br />}<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />16<br />void swap(float &a,float &b) <br />{ <br />float c; <br />a = (a &lt; 0.00)?–a:a; <br />b = (b &lt; 0.00)?–b:b; <br />c = a; <br />a = b; <br />b = c; <br />}<br />
    17. 17. Class Template<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />17<br />
    18. 18. Class Template<br />template &lt;class MyTipe&gt; <br />class CMyTemplate <br />{ <br />protected : <br />MyTipe m_a,m_b; <br />public : <br />void Done(void) { <br /> memset(&m_a,0,sizeof(MyTipe)); <br /> }<br />}; <br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />18<br />/* method is declared outside the class*/<br />template &lt;class MyTipe&gt; <br />void CMyTemplate&lt;MyTipe&gt;::Init(MyTipe a,MyTipe b) <br />{ <br />m_a = a; <br />m_b = b; <br />} <br />
    19. 19. Class Template on …<br />struct <br />template &lt;class MyTipe&gt; <br />struct tMyStruct <br />{ <br />MyTipe a,b; <br />}; <br />union<br />template &lt;class MyTipe&gt; <br />union _MyUnion <br />{ <br />MyTipe a; <br />int b; <br />}; <br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />19<br />
    20. 20. Class Template Usage<br />void main(void) <br />{ <br />CMyTemplate&lt;short&gt; a; <br />tMystruct&lt;short&gt; b; <br />_MyUnion&lt;float&gt; c; <br />} <br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />20<br />
    21. 21. Using 2 Type (Example)<br />template &lt;class MyTipe1,class MyTipe2&gt; <br />class CMyTemplate <br />{ <br />protected : <br />MyTipe1 m_a MyTipe2 m_b; <br />public : <br />void Init(MyTipe1 a,MyTipe2 b) <br />{<br />m_a = a; <br />m_b = b; <br />} <br />}; <br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />21<br />void main(void) <br />{ <br />CMyTemplate&lt;short,float&gt; a; <br />} <br />
    22. 22. For your practice …<br />Exercise<br />Declare and Define template for your latest Classes of ...<br />Shape (ex: public getColor(), protected color)<br />2D Shape, 3D Shape (ex: public getArea(), protected edgeLength)<br />Triangle, Circle, Square; Cube, Cylinder, Sphere<br />Lab Session (Senin, 19.00 – 21.00)<br />Please provide:<br /> the softcopy(send it by email – deadline Sunday 23:59)<br /> the hardcopy(bring it when attending the lab session)<br />03/11/2009<br />Hadziq Fabroyir - Informatics ITS<br />22<br />
    23. 23. ☺~ Next: Exception HIndling ~☺<br />[ 23 ]<br />Hadziq Fabroyir - Informatics ITS<br />03/11/2009<br />

    ×