Object Oriented Programming in C# (Part3)

Pada Turtorial ketiga ini akan dibahas beberapa topik yaitu:

  • Specialization dan Generalization
  • Inheritance
  • Memanggil Base Class Constructor
  • Polymorphism

Specialization dan Generalization

Class dan instannya (objek) tidak berdiri sendiri, seperti objek manusia yang merupakan mahluk sosial tidak hanya berdiri sendiri, objek akan saling berelasi dan berinteraksi, demikian pula pada OOP.

Salah satu hubungan antar objek yang paling penting yang terjadi di dunia nyata adalah spesialisasi yang bisa didefinisikan sebagai is-a relationship, misal anjing adalah mamalia, jika anjing termasuk anggota mamalia maka dia memiliki ciri-ciri special khas yaitu menyusui, punya bulu. Selain sifat-sifat pada mamalia anjing juga memiliki ciri yang spesifik khas anjing yang tidak dipunyai anggota mamalia lainnya seperti kucing.

Relasi spesialisasi dan generalisasi terjadi pada contoh diatas, anjing dan kucing secara general merupakan anggota mamalia tetapi juga terspesialisasi secara spesifik sebagai anjing dan kucing yang mempunyai ciri khas yang berbeda. Relasi tersebut dapat digambarkan secara hirarki.

Misal gambar dibawah akan menunjukan hirarki antara class window, button, dan listbox

image

Gambar diatas menunjukan relasi antara window, button, dan listbox. Button dan listbox sama-sama memiliki karakteristik yang dimiliki oleh window, tetapi button dan listbox juga memiliki ciri-ciri spesifik khas mereka sendiri. Contoh lain yang lebih rinci untuk menggambarkan spesialisasi dan generalisasi dapat digambarkan sebagai berikut:

image

Inheritance

Pada C# hubungan spesialisasi diimplementasikan menggunakan prinsip inheritance. Penulisan inheritance di C# sebagai berikut

public class ListBox : Window

Kode diatas berarti class ListBox adalah turunan dari class Window

Penggunaan inheritance dapat dilihat pada program dibawah ini

   1: public class Window
   2:     {
   3:         //objek konstruktor
   4:         public Window(int top, int left)
   5:         {
   6:             this.top = top;
   7:             this.left = left;
   8:         }
   9:
  10:         // simulasi menggambar pada windows
  11:         public void DrawWindow()
  12:         {
  13:             Console.WriteLine("Drawing Window at {0}, {1}",
  14:             top, left);
  15:         }
  16:
  17:         //variabel didefinisikan private sehingga 
  18:         //tidak dapat digunakan pada kelas turunannya
  19:         private int top;
  20:         private int left;
  21:     }
  22:
  23:     // ListBox diturunkan dari class Window
  24:     public class ListBox : Window
  25:     {
  26:         // menambahkan parameter pada konstruktor
  27:         public ListBox(int top, int left, string theContents) :
  28:             base(top, left) // call base constructor
  29:         {
  30:             mListBoxContents = theContents;
  31:         }
  32:
  33:         // new version (new keyword) karena
  34:         // pada method di kelas turunan dirubah isinya
  35:         public new void DrawWindow()
  36:         {
  37:             base.DrawWindow(); // memanggil dari base class
  38:             Console.WriteLine("Writing string to the listbox: {0}",
  39:             mListBoxContents);
  40:         }
  41:         private string mListBoxContents; // member variabel baru
  42:     }
  43:
  44:     public class Tester
  45:     {
  46:         public static void Main()
  47:         {
  48:             // membuat instan class baru
  49:             Window w = new Window(5, 10);
  50:             w.DrawWindow();
  51:
  52:             // membuat instan dari class turunan
  53:             ListBox lb = new ListBox(20, 30, "Hello world");
  54:             lb.DrawWindow();
  55:         }
  56:     }

Memanggil Base Class Constructor

Pada contoh diatas class ListBox adalah turunan dari class Window, class ListBox mempunyai konstruktornya sendiri yang memiliki tiga parameter, konstruktor pada class ListBox dapat menggunakan tanda : (titik dua) untuk memanggil kosntruktor base class-nya (konstruktor pada class Window)

public ListBox(int top, int left, string theContents):base(top, left)

Karena konstruktor tidak dapat diturunkan maka class turunan harus memiliki konstruktor sendiri.

Polymorphism

Ada dua aspek yang paling penting pada inheritance yang pertama adalah code reuse, sebagai contoh ketika anda membuat class ListBox maka anda dapat menggunakan logic yang sudah dibuat pada class Window

Aspek kedua yang tidak kalah penting dari inheritance adalah polymorhism, poly berarti banyak dan morph berarti bentuk, jadi polymorphism dapat berarti dapat menggunakan banyak bentuk tanpa harus mengacu details yang sama.

Anda dapat mengimplementasikan polymorphism dengan dua cara yaitu:

  • Membuat virtual method pada base class (class induk)
  • Membuat class turunan yang mempunyai method dengan keyword override yang mengganti isi dari method dengan keyword virtual yang ada pada base class-nya.

Penggunaan prinsip polymorphism dapat dilihat pada contoh program dibawah ini

   1: public class Window
   2:     {
   3:         //deklarasi konstruktor dengan dua parameter
   4:         public Window(int top, int left)
   5:         {
   6:             this.top = top;
   7:             this.left = left;
   8:         }
   9:
  10:         //method untuk draw window
  11:         public virtual void DrawWindow()
  12:         {
  13:             Console.WriteLine("Window: drawing Window at {0}, {1}",
  14:             top, left);
  15:         }
  16:
  17:         //member variabel dideklarasikan protected
  18:         //berarti dapat diakses dari class turunannya
  19:         protected int top;
  20:         protected int left;
  21:
  22:     }  // end Window
  23:
  24:     // class ListBox diturunkan dari class Window
  25:     public class ListBox : Window
  26:     {
  27:         //konstruktor yang menmanggil konstruktor dari base class nya
  28:         public ListBox(int top,int left,string contents): base(top, left)
  29:         {
  30:             listBoxContents = contents;
  31:         }
  32:
  33:         //method yang di override dari base class-nya
  34:         //karena mempunyai implementasi yang berbeda
  35:         public override void DrawWindow()
  36:         {
  37:             base.DrawWindow(); // invoke the base method
  38:             Console.WriteLine("Writing string to the listbox: {0}",
  39:             listBoxContents);
  40:         }
  41:
  42:         private string listBoxContents; // member variabel baru
  43:     }  // end ListBox
  44:
  45:     public class Button : Window
  46:     {
  47:         public Button(
  48:         int top,
  49:         int left)
  50:             : base(top, left)
  51:         { }
  52:
  53:         // an overridden version (note keyword) because in the
  54:         // derived method we change the behavior
  55:         public override void DrawWindow()
  56:         {
  57:             Console.WriteLine("Drawing a button at {0}, {1}\n",
  58:             top, left);
  59:         }
  60:     }  // end Button
  61:
  62:     public class Tester
  63:     {
  64:         static void Main()
  65:         {
  66:             Window win = new Window(1, 2);
  67:             ListBox lb = new ListBox(3, 4, "Stand alone list box");
  68:             Button b = new Button(5, 6);
  69:             win.DrawWindow();
  70:             lb.DrawWindow();
  71:             b.DrawWindow();
  72:
  73:             Window[] winArray = new Window[3];
  74:             winArray[0] = new Window(1, 2);
  75:             winArray[1] = new ListBox(3, 4, "List box in array");
  76:             winArray[2] = new Button(5, 6);
  77:
  78:             for (int i = 0; i < 3; i++)
  79:             {
  80:                 winArray[i].DrawWindow();
  81:             }   // end for
  82:         }   // end Main
  83:     }      // end Tester

Jika dijalankan akan diperoleh output sebagai berikut:

   1: Window: drawing Window at 1, 2
   2: Window: drawing Window at 3, 4
   3: Writing string to the listbox: Stand alone list box
   4: Drawing a button at 5, 6
   5:
   6: Window: drawing Window at 1, 2
   7: Window: drawing Window at 3, 4
   8: Writing string to the listbox: List box in array
   9: Drawing a button at 5, 6

Dapat dilihat dari contoh diatas bahwa base class yaitu Window mempunyai method yang bernama DrawWindow() yang mempunyai keyword virtual, ini berarti method tersebut dapat di override atau diganti implementasinya dengan method yang nama dan parameternya sama persis di kelas turunannya yaitu class ListBox.

bersambung ke Object Oriented Programming in C# (Part 4)

pustaka: “Learning C# 2005”, Jesse Liberty, Brian MacDonald, O’Reilly 2006

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s