Friday 2 September 2016

9. Encapsulation C# (Basic/Dasar)

Ecapsulation adalah proses untuk mengatur hak akses terhadap implementasi pada sebuah class, jadi kita bisa menentukan mana atribute, fungsi atau member dari class yang bisa diakses oleh class yang lain. Dengan menggunakan akses specifier akan memudahkan programmer yang lain untuk menggunakan class buatan kita.

Encapsulation dalam C# diimplementasikan dengan akses specifier sebagai berikut:
  • Public
  • Private
  • Protected
  • Internal
  • Protected Internal
1. Public

Public access specifier pada variabel dan method akan menyebabkan member variabel dan method tersebut dapat diakses dari luar class oleh class yang lain.

Program berikut ini mengilustrasikan public specifier:

using System;
namespace RectangleApplication
{
   class Rectangle
   {
      //member variables
      public double length;
      public double width;
      
      public double GetArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

Hasil output program setelah selesai dieksekusi:

Length: 4.5
Width: 3.5
Area: 15.75

Berdasarkan contoh di atas variabel length dan width dideklarasikan sebagi public member, sehingga bisa diakses dari Main() method class ExecuteRectangle dengan instance object r.

Method GetArea and Display juga dideklarasikan sebagai public sehingga dapat di akses dari object instance r.

2. Private

Private specifier digunakan untuk menyembunyikan member class agar tidak bisa diakses dari class lain. Hanya method dari class yang sama yang dapat mengakses private member, dan private member tidak dapat diakses dari instance classnya sendiri.

Berikut adalah contoh program untuk mensimulasikan private specifier:

using System;
namespace RectangleApplication 
{
   class Rectangle
   {
      //member variables
      private double length;
      private double width;
      
      public void Acceptdetails()
      {
         Console.WriteLine("Enter Length: ");
         length = Convert.ToDouble(Console.ReadLine());
         Console.WriteLine("Enter Width: ");
         width = Convert.ToDouble(Console.ReadLine());
      }
      public double GetArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Rectangle r = new Rectangle();
         r.Acceptdetails();
         r.Display();
         Console.ReadLine();
      }
   }
}

Hasil keluaran program setelah eksekusi adalah sebagai berikut:

Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52

Dari contoh program diatas member length dan width dideklarasikan sebagai private member, sehingga tidak dapat diakses dari class yang lain, jika ada akses ke private member akan mengeluarkan error saat proses kompilasi program.

3. Protected

Protected specifier mengijinkan class turunan untuk mengakses member variabel dan method yang di definisikan sebagai protected. Protected dan Public akses dapat diakses dari class turunan tetapi tidak dengan private class.

Protected specifier tidak bisa diakses oleh class yang lain yang tidak menurunkannya, atau dengan kata lain hanya bisa diakses dari class turunannya.

Untuk pembahasan mengenai class turunan akan dibahas pada bab tersendiri diluar bab ini.

4. Internal

Internal specifier pada dasarnya sama dengan public specifier tetapi pada application assembly. Dengan kata lain, semua member dengan internal specifier dapat diakses dari class atau method dari manapun dalam file yang sama. Jadi misalkan kita punya class atau member yang dideclarasikan sebagai internal dengan nama file Member.cs kemudian kita punya class yang berada di flle lain dengan nama ReadMember.cs kemudian dari ReadMember.cs kita mencoba untuk mengakses member dengan internal specifier di Member.cs tidak akan bisa.

Berikut adalah contoh program untuk internal specifier:

using System;
namespace RectangleApplication
{
   class Rectangle
   {
      //member variables
      internal double length;
      internal double width;
      
      double GetArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

Hasil dari keluaran program setelah dijalankan adalah sebagai berikut:

Length: 4.5
Width: 3.5
Area: 15.75

Pada contoh program di atas method GetArea() dideklarasikan tanpa akses specifer, maka secara default akan sebagai private member.

5. Protected Internal

Pada dasarnya sama dengan internal akses specifier tetapi hanya class turunan-nya saja yang dapat mengakses membernya.

Ok guys semoga bermanfaat sampai ketemu di tutorial berikutnya Methods.

No comments:

Post a Comment