It's the matter of time

Neo's blog
See also: Other Geeks@INDC
Basic OOP - Confusion Keywords
Seminggu sudah saya tidak membuat postingan terbaru, dikarenakan deadline pekerjaan kantor yang begitu banyaknya
Di dalam posting kali ini, saya ingin berbagi masalah pengertian beberapa keyword yang sering dipusingkan oleh programmer dalam OOP
Berikut adalah beberapa keyword yang sering menimbulkan pertanyaan

Class vs Struct
Class dan Struct pada dasarnya memiliki kegunaan yang hampir sama, jadi jika programmer belum mengerti basic ini maka di dalam coding dimungkinkan programmer masih akan meraba-raba keyword mana yang ingin digunakan
Kebanyakan programmer tidak mau ambil pusing dan mengambil keyword Class, walaupun mungkin sebenarnya akan lebih optimal jika Struct yang digunakan
Perbedaan utama antara kedua keyword ini adalah Class merupakan type reference sedangkan Struct merupakan type Value
Jika teman-teman sudah mengetahui perbedaan kedua type ini, maka penjelasan untuk Class dan Struct dapat dilewati
Berikut ini adalah contoh perbedaan keduanya

public class MyClass
{
   public int _value;

   public MyClass(int value)
   {
      this._value = value;
   }

   public override string ToString()
   {
      return this._value.ToString();
   }
}

public struct MyStruct
{
   public int _value;

   public MyStruct(int value)
   {
      this._value = value;
   }

   public override string ToString()
   {
      return this._value.ToString();
   }
}

MyClass c1 = new MyClass(0);
MyClass c2 = c1;
c1._value += 1;
c2._value += 2;
Console.WriteLine("c1 = " + c1.ToString() + " c2 = " + c2.ToString());
//Hasilnya : c1 = 3 c2 = 3

MyStruct s1 = new MyStruct(0);
MyStruct s2 = s1;
s1._value += 1;
s2._value += 2;
Console.WriteLine("s1 = " + s1.ToString() + " s2 = " + s2.ToString());
//Hasilnya : s1 = 1 s2 = 2

Dari contoh di atas dapat dilihat secara nyata perbedaan antara kedua keyword tersebut
Beberapa hal lain yang perlu diketahui adalah keyword Struct tidak diperbolehkan untuk mendeklarasi sebuah instance constructor tanpa suatu value dan Struct juga tidak diperbolehkan untuk mendeklarasi sebuah destructor

Abstract Class vs Interface
Mungkin keyword ini adalah keyword yang sering sekali membingungkan, dan apa yang programmer ketahui adalah jika mereka dapat menggunakan Interface dengan baik, maka tidak perlu adanya sebuah Abstract Class
Sebenarnya penggunaan kedua keyword ini serupa tetapi tidak sama
Interface mengharuskan kita membuat sebuah kontrak terlebih dahulu sebelum menggunakan interface tersebut dan kita dapat mengimplementasi banyak Interface untuk sebuah class, mungkin hal inilah yang membuat programmer memiliki kecenderungan memilih Interface dibandingkan sebuah Abstract Class karena pada C# sebuah class hanya boleh menjadi turunan satu Abstract Class saja (Berbeda dengan C++ yang memungkinkan adanya multiple inheritance)
Sebenarnya Abstract Class memberikan kita sebuah cara untuk membuat class yang bersifat global penggunaannya sehingga class lain yang menjadi turunan dari Abstract Class dapat menggunakan field ataupun method di dalamnya, sebagai analogi bisa kita lihat sebuah class yang menjadi turunan dari class lain karena pada dasarnya keyword abstract ini harus diturunkan menjadi sebuah class real agar dapat digunakan (Dalam kasus VB.NET keyword abstract diberikan keterangan Must Inherit)
Berikut adalah sample dari keduanya serta contohnya

public abstract class MyAbstractClass
{
   public int _field;

   public abstract string AbstractMethod();
   public string NonAbstractMethod()
   {
      return "Non Abstract Method";
   }
}

public class MyImplementClass : MyAbstractClass
{
   public void ImplementationMethod()
   {
      MyImplementClass _implementation = new MyImplementClass();
      _implementation._field = 8;
      Console.WriteLine(_implementation._field);
      Console.WriteLine(_implementation.NonAbstractMethod());
      Console.WriteLine(_implementation.AbstractMethod());
   }

   public override string AbstractMethod()
   {
      return "Abstract Method";
   }
}

public interface MyInterface
{
   public string InterfaceMethod();
}

public class MyImplementInterface : MyInterface
{
   public string InterfaceMethod()
   {
      return "Interface Method";
   }
}

Abstract class bisa menyimpan abstrat method lainnya, yang terpenting adalah kita hanya perlu membuat turunan dari class tersebut untuk menggunakannya
Dalam kasus Interface, kita perlu mengimplementasikan Interface yang akan kita gunakan

Event vs Delegate
Kedua keyword yang satu ini sering sekali diambil pusing oleh programmer yang baru mengenal kegunaan Event dan Delegate
Sebenarnya keduanya memiliki cara kerja yang berbeda, namun berkaitan satu sama lain
Event merupakan sebuah pesan yang dikirim dari sebuah object sebagai akibat karena adanya action pada application
Misalnya action ketika tombol click mouse ditekan, action ketika tombol keyboard ditekan
Object yang membuat sebuah Event terjadi disebut Event sender dan Object yang merespond disebut Event receiver
Namun dalam kasus Event ini, sender dan receiver sama sekali tidak berkaitan dan mengenali satu sama lain
Untuk itulah diperlukan sebuah perantara pointer yang kita sebut sebagai Delegate
Berikut adalah contohnya

public class EventClass
{
   public delegate void MyEvent(string message);

   public event MyEvent Log;

   public void EventProcess()
   {
      OnLog("EventProcess() activate");
      OnLog("EventProcess() deactivate");
   }

   protected void OnLog(string message)
   {
      if (Log != null)
      {
         Log(message);
      }
   }
}

public class EventImplementation
{
   public static void Main(string[] args)
   {
      EventClass ec = new EventClass();
      ec.Log += new EventClass.MyEvent(ec_Log);
      ec.EventProcess();
      //Hasilnya : EventProcess() activate EventProcess() deactivate
      //Proses event sender dimulai ketika ec.Log diberikan nilai event baru dan dari hasil dapat dilihat
      //bahwa proses delegate telah berjalan dan memberikan event pointer ke method ec_Log sebagai event receiver
   }

   static void ec_Log(string message)
   {
      Console.WriteLine(message);
   }
}

Contoh di atas menunjukkan sebuah event yang dihubungkan melalui sebuah delegate ke method OnLog, dengan demikian Event yang menggunakan pola sesuai dengan pola delegate yang diberikan akan mendapatkan fungsi delegate juga

Antonio Fernandez
Share this post: | | | |
Basic OOP - Programming Concept
Dalam OOP banyak hal yang berbeda dengan model pemrograman sequence dan procedural
Penekanan secara umum di dalam OOP adalah bagaimana kita menggunakan sebuah class dan membuat instansiasi dari Class tersebut
Class merupakan sebuah template dasar sedangkan Object adalah instansiasi dari Class
Sebagai contoh sederhana, Class bisa dimisalkan sebuah Hewan sedangkan Object adalah wujud nyatanya misalnya Sapi, Kelinci, Kuda, dan sebagainya
Begitu pula dalam code untuk OOP, kita bisa diharuskan mendefinisikan sebuah Class sebelum dibuat Objectnya
Sebagai contoh penggunaan Class dan instansiasi Object adalah sebagai berikut

public class Animal
{
      private string name;
      public string Name { get { return this.name; } set { this.name = value; } }
}

public class UsingAnimal
{
      Animal Rabbit = new Animal();
      Rabbit.Name = "Bunny";
}

Kedua hal tersebut akan sering kita gunakan dalam OOP, namun untuk melengkapinya terdapat 3 konsep penting dalam OOP
Encapsulation, Inheritance, Polymorphism

Encapsulation
Proses ini berkaitan dengan Information Hiding, di mana method dalam sebuah Class dapat diakses oleh Class lain tanpa harus diketahui apa saja yang dilakukan oleh method tersebut. Dengan bahasa sederhananya Class yang menggunakan hanya mengetahui cara pakai method tersebut dan menerima jadi hasilnya saja. Dengan catatan Class penyedia method memberikan hak akses kepada Class lain, hal ini berkaitan dengan access modifier yang sudah pernah saya bahas sebelumnya

Inheritance
Sesuai dengan namanya, kita dapat membuat turunan dari sebuah Class. Untuk membuat sebuah class turunan, kita cukup mendefinisikan dengan colon (:). Misalnya Class Rabbit : Animal. Menunjukkan bahwa Rabbit mengambil semua field, property, dan method yang dimiliki oleh parentnya Animal, dengan satu syarat yaitu tidak diproteksi dengan keyword private. Class turunan ini sangat berguna dalam OOP, karena kita tidak perlu mendeklarasikan ulang semua field, property, atau method yang sama. Cukup dengan menggunakan keyword base dalam C#, maka Class parent sudah dapat digunakan oleh child. Keyword ini sama dengan fungsi keyword super

Polymorphism
Polymorphism adalah istilah yang menjelaskan bahwa sebuah method bisa kita buat dengan nama yang sama, namun memiliki fungsi yang berbeda. Polymorphism membuat kita lebih mudah mengenali method yang kita buat, karena tidak perlu menggunakan nama yang berbeda untuk method yang sama fungsinya namun dengan penerapan atau parameter masukan yang berbeda. Dalam polymorphism kita akan mengenal yang namanya Override dan Overload, Override ini mengijinkan kita menggunakan nama method yang sama namun untuk penerapan yang berbeda, Override berpasanngan dengan keyword Virtual karena hanya method yang diberi keyword Virtual yang dapat di Override. Sedangkan Overload berkaitan dengan parameter yang digunakan, sebuah method dimungkinkan menghasilkan fungsi yang sama namun membutuhkan parameter masukan yang berbeda, disinilah Overload digunakan. Dalam C# keyword ini tidak perlu dituliskan, namun untuk VB.NET keyword Overload harus dituliskan

Antonio Fernandez
Share this post: | | | |
Basic OOP - Access Modifier
Saya mengambil judul ini dikarenakan saya sering menjumpai kebanyakan orang mampu melakukan coding dalam .NET dengan baik, namun ada hal yang mereka lupakan yaitu bagaimana dan apa saja kegunaan dari keyword code yang mereka gunakan
Dalam postingan kali ini saya akan sekilas membahas mengenai beberapa keyword yang sering digunakan dalam OOP dan memberikan perbedaan mendasar antara keyword yang akan digunakan
Dalam post bagian pertama ini saya akan menekankan pembahasan pada access modifier

Di dalam OOP khususnya dalam .NET, kita mengenal 5 macam access modifier utama yaitu public, private, protected, internal ,protected internal berikut penjelasannya
public

Keyword ini membuat sebuah field, property, method menjadi tidak terbatas untuk diakses dari mana saja, dengan access public kita bisa menggunakan field, property, method dari class lain walaupun tidak dalam satu project. Kita hanya perlu mengambil class library yang akan kita gunakan

protected

Access protected mengurangi sedikit dari kemampuan akses public, hanya class yang menjadi class turunan dari class yang memiliki keyword protected ini saja yang bisa menggunakan field, property, method yang bersangkutan

private

Private membuat hak akses menjadi sangat terbatas, yaitu hanya di dalam class itu saja. Di luar class tersebut maka field, property, method yang sudah diberikan keyword private tidak akan dapat diakses dari class lain

internal

Penggunaan keyword ini membatasi penggunaan field, property, method hanya dalam satu assembly atau dengan bahasa yang lebih mudah di dalam satu project saja yang bisa saling mengakses field, property, method dengan keyword ini

protected internal

Sama halnya dengan keyword internal, keyword ini memastikan hanya class dalam satu project yang bisa saling bertukar informasi namun dengan tambahan pembatasan yaitu hanya diijinkan untuk class turunannya saja, di luar hal tersebut maka access tetap tidak dapat dilakukan

Beberapa keyword bawaan .net sudah memiliki access modifier tertentu dan tidak dapat diubah, sebagai contoh enum dan interface yang memiliki access modifier public. Perubahan pada access ini akan mengakibatkan error pada saat compile. Untuk class dan struct default keywordnya adalah private, namun dapat diubah menjadi access lain. Class dapat diubah menjadi public, protected, internal, private, protected internal sedangkan struct hanya dapat diubah menjadi public, internal, private

Antonio Fernandez
Share this post: | | | |
Awal Dari Sebuah Coretan
Akhirnya selama lama menunggu, blog geeks ini turun juga ke tangan saya
3 kali request di 3 thread berbeda. Sat, Dec 12 2009 9:30, Mon, Dec 28 2009 8:52, Tue, Jan 5 2010 14:09
Tetapi setelah menunggu, akhirnya pada Thu, Jan 7 2010 13:51 blog sudah siap dipakai
Terima kasih banyak administrator, atas kesempatan yang diberikan agar saya bisa sharing pengalaman .NET
Seperti judul dari post ini, saya hanya akan berbasa-basi sekedar mengisi kekosongan blog
Untuk posting mengenai teknologi bisa kita share bersama-sama di post berikutnya
Semoga blog ini menjadi awal bagi kita semua untuk mempelajari lebih dalam mengenai .NET

Antonio Fernandez
Share this post: | | | |