Friday, October 9, 2015

Mengenal method pada bahasa pemrograman c-sharp (c#)

a.     Pengenalan Method
Method adalah bagian dari tubuh program yang mengimplementasikan suatu action sehingga class atau object dapat bekerja. Method diimplementasikan didalam class dan menyediakan informasi tambahan yang mana class tidak dapat menangani sendiri. Sebelum dilanjutkan tentang method, mungkin perlu diingat kembali bahwa class sendiri memiliki anggota-anggota yaitu constants, fields, methods, properties, events, indexers, operators, instance constructors, destructors, static constructors, dan nested type declarations
Method dapat didefinisikan lagi yaitu
     method yang memiliki beberapa parameter(tapi bisa kosong)
     method dapat mengembalikan nilai (kecuali tipe pengembaliannya void)
     method dapat terdiri dari static atau non-static.
o   Static : method static hanya dapat di akses dari class.
o   Non-static : dapat di akses dari instances

Contoh dari method adalah seperti ini :
    public class Stack
    {
        public static Stack Clone(Stack s) {...}
        public static Stack Flip(Stack s) {...}
        public object Pop() {...}
        public void Push(object o) {...}
        public override string ToString() {...}
    }
    class Test
    {
        static void Main()
        {
            Stack s = new Stack();
            for (int i = 1; i < 10; i++)
                s.Push(i); Stack flipped = Stack.Flip(s); Stack cloned = Stack.Clone(s);
            Console.WriteLine("Original stack: " + s.ToString());
            Console.WriteLine("Flipped stack: " + flipped.ToString());
            Console.WriteLine("Cloned stack: " + cloned.ToString());
        }
    }

Contoh diatas memperlihatkan class stack yang memiliki beberapa static methods(Clone dan Flip) dan beberapa non-static methods (Push, Pop dan ToString).

b.     Implementasi methods
     static methods
Method dapat di overload, artinya satu nama method bisa dipakai berkali-kali selama dia memiliki sesuatu yang unik. Sesuatu yang unik pada method tersebut dapat terdiri dari banyaknya parameter, tipe parameter atau modifier parameter yang berbeda. Contohnya seperti dibawah ini :
class Test
    {
        static void F()
        {
            Console.WriteLine("F()");
        }
        static void F(object o)
        {
            Console.WriteLine("F(object)");
        }
        static void F(int value)
        {
            Console.WriteLine("F(int)");
        }
        static void F(ref int value)
        {
            Console.WriteLine("F(ref int)");
        }
        static void F(int a, int b)
        {
            Console.WriteLine("F(int, int)");
        }
        static void F(int[] values)
        {
            Console.WriteLine("F(int[])");
        }
        static void Main()
        {
            F();
            F(1);
            int i = 10;
            F(ref i);
            F((object)1);
            F(1, 2);
            F(new int[] { 1, 2, 3 });
            Console.ReadLine();
        }
    }

Class diatas memiliki nama method F tapi memiliki jumlah, tipe dan modifier yang berbeda. Output dari class diatas jika di eksekusi adalah :
F()
F(int)
F(ref int)
F(object)
F(int, int)
F(int[])

C# dapat mengembalikan banyak nilai dari satu method dengan menggunakan out parameter.
Contohnya seperti ini :
using System;
class OutTest
{
    public static int Output(out int a)
    {
        a = 25;
        return 0;
    }
    public static void Main()
    {
        int a;
        Console.WriteLine(Output(out a));
        Console.WriteLine(a);
        Console.ReadLine();
    }
}
hasilnya adalah : 0
                                25
static  method  juga  dapat  mengembalikan  lebih  dari  satu  variabel  dengan  cara menggunakan keyword params. Contohnya adalah seperti ini :
using System;
public class Params
{
    public static void Parameter(params int[] list)
    {
        for (int x = 0; x < list.Length; x++) Console.WriteLine(list[x]);
        Console.WriteLine();
    }

    public static void Main()
    {
        Parameter(10, 15, 20);
        Console.ReadLine();
    }
}
     non-static method
Telah dijelaskan sebelumnya bahwa static method dapat diakses hanya melalui class sedangkan non-static method dapat diakses melalui instance.
Kita akan mencoba melihat bagaimana implementasi non-static method dibandingkan dengan static method.
Buat satu console application project baru.
ketikan di dalam class1 seperti ini (copy – paste saja semua code dibawah ini kedalam
class1.cs) :
using System;
namespace nonstatic
{

    class First
    {
        public virtual void one()
        {
            Console.WriteLine("first one");
        }
    }
    class Second : First
    {
        public override void one()
        {
            Console.WriteLine("Second one");
        }
    }
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Output
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            //
            // TODO: Add code to start application here //
            Second y = new Second();
            First x = y;
            x.one();
            y.one();
            Console.ReadLine();
        }
    }
}
output code diatas menjadi :
second one
second one

Output ini terjadi karena objek x sudah di-instance oleh objek y dimana objek y adalah class second yang turunan dari class First. (Penjelasan override dan virtual dapat dibaca pada materi Object Oriented – Tunggu posting berikutnya mengenai Obejct Oriented).
jika class First dan class Second kita ubah seperti ini :
class First
    {
        public void one()
        {
            Console.WriteLine("first one");
        }
    }
    class Second : First
    {
        public void one2()
        {
            Console.WriteLine("Second one");
        }
 }
Maka output code yang dihasilkan adalah :
First one
First one

Output ini dihasilkan karena perubahan yang dilakukan menyebabkan class Second menjadi memiliki 2 non-static method yaitu method one dan method one2

Lalu, jika class First dan class Second kita ubah lagi seperti ini :
class First
    {
        public static void one()
        {
            Console.WriteLine("first one");
        }
    }
    class Second : First
    {
        public void onen()
        {
            Console.WriteLine("Second one");
        }
 }
                Maka akan muncul eror seperti ini :
Static member 'nonstatic.First.one()' cannot be accessed with an instance reference; qualify it with a type name instead
Static member 'nonstatic.First.one()' cannot be accessed with an instance reference;qualify it with a type name instead
Eror ini  memperlihatkan bahwa static method tidak dapat diakses menggunakan instance.

c.      Modifier
Berapa contoh implementasi method diatas memakai modifier. Apa itu Modifier? Modifier adalah keyword yang digunakan untuk menspesifikasi deklarasi pengaksesan suatu member atau tipe.
Ada 4 modifier pengaksesan yang akan diperlihatkan :
     public
     protected
     internal
     private
Keempat level diatas akan dijelaskan pada tabel dibawah ini :
Level akses
Arti
Public
Akses tidak dibatasi
protected
Akses dibatasi pada classnya saja atau tipe yang diturunkan dari class.
internal
Akses hanya dibatasi pada satu project yang sama.
private
Akses dibatasi pada tipe.

Dengan ke empat level akses ini, method dapat diberikan pembatasan-pembatasanpengaksesan. Jika methods yang kita buat hanya ingin diakses pada project tertentu, kita bisa memberikan modifier internal.
Kita  akan  coba  mengetahui  bagaimana  cara  kerja  dari  4  modifier  diatas.  Cara pemakaian   yang   akan   kita   lakukan   dengan   membuat   sebuah   projek   windows application.
Langkah-langkahnya adalah sebagai berikut :
1.    Buat sebuah projek baru.
2.    Pilih windows application.
3.    Berikan nama projeknya modifier.
4.    Sebuah projek dan satu buah windows form telah dibuat. Kita klik dan drop sebuah kontrol textbox dan sebuah kontrol button.
5.    Hasilnya adalah seperti ini


6.    Klik dua kali kontrol button dan kita akan mendapati cursor telah berada di :
private void button1_Click(object sender, EventArgs e){
}
8.    Selanjutnya, kita coba membuat satu projek lagi. Kita akan tambahkan sebuah Projek class library. Beri nama ClassLibrary


9.    Setelah terbentuk, kita akan menambahkan projek ClassLibrary kedalam projek modifier dengan cara Project > add reference > pilih tab Project > pilih ClassLIbrary pada Project Name dengan mengklik tombol Select >OK.
10.  Didalam ClassLibrary, kita mendapatkan sebuah Class bernama Class1. Namespace ClassLibrary kita ganti menjadi modifier.ClassLibrary sehingga isinya adalah sebagai berikut :

using System;
namespace modifier.ClassLibrary
{
    public class Class1
    {
    public Class1
    {

    }
    }
}
11.  Tambahkan sebuah method pada Class public class Class1() dibawah method public Class1 seperti ini:
public string A()
{
      return "Ronaldo";
}
Kembali ke method private void button1_Click, kita isikan dengan code :
       private void button1_Click(object sender, EventArgs e)
        {
            ClassLibrary.Class1 x = new ClassLibrary.Class1();
            this.textBox1.Text = x.A();
  }
12.  Klik run. Kita akan mendapatkan textbox berisi “Ronaldo
Bagaimana jika modifier string A() pada Class Class1 diganti dengan private, internal dan   protected   ?   ternyata   masing-masing   mengucapkan   eror   yang   sama   : 'modifier.ClassLibrary.Class1.A()' is inaccessible due to its protection level. Sekarang kita akan mencoba penggunaan modifier internal. Kita akan menambahkan sebuah method dibawah method public string A () dengan code seperti ini :
internal string B()
   {
       return "Morientes";
       }
Kembali ke method private void button1_Click, kita isikan dengan code :
       private void button1_Click(object sender, EventArgs e)
        {
            ClassLibrary.Class1 x = new ClassLibrary.Class1();
            this.textBox1.Text = x.B();
        }
Ternyata eror yang keluar adalah seperti berikut : 'modifier.ClassLibrary.Class1.A()' is inaccessible due to its protection level
Hal ini terjadi karena internal hanya dapat diakses hanya didalam project ClassLibrary tersebut seperti yang telah disebutkan diatas.
Jika public string A() kita ubah menjadi seperti ini :
                public string A()
        {
            return B();
     }
Lalu method private void button1_Click, kita isikan dengan code :
                private void button1_Click(object sender, EventArgs e)
        {
            ClassLibrary.Class1 x = new ClassLibrary.Class1();
            this.textBox1.Text = x.A();
  }
Kemudian jika kita klik run lalu klik button yang memunculkan “morientes” pada textbox, maka kita dapat melihat penggunaan internal hanya dapat dipakai didalam projek tersebut. Kita  akan  mencoba  penggunaan  protected.  Dikatakan  sebelumnya  bahwa  Akses modifier protected dibatasi pada classnya saja atau tipe yang diturunkan dari class. Kita ubah isi dari class1.cs menjadi seperti ini :
                using System;
namespace modifier.ClassLibrary
{
    public class Class1
    {
        public Class1()
        {
        }
        protected string A()
        {
            return "Zidane";
        }
    }
    public class Class2 : Class1
    {
        public string B()
        {
            string x;
            Class1 a = new Class1();
            x = a.A(); return x;
        }
    }
}
Lalu method private void button1_Click, kita isikan dengan code :
                private void button1_Click(object sender, EventArgs e)
       {
            ClassLibrary.Class2 x = new ClassLibrary.Class2();
            this.textBox1.Text = x.B();
}
Eror yang akan kita dapatkan adalah :
Cannot access protected member 'modifier.ClassLibrary.Class1.A()' via a qualifier of type 'Class1'; the qualifier must be of type 'Class2' (or derived from it).
Statement x = a.A() memunculkan eror karena Class1 tidak diturunkan dari Class2. (seharusnya Class2 diturunkan dari Class1).
Tapi jika isi method public string B() kita ubah menjadi :
                           public string B()
        {
            string x;
            //Class1 a = new Class1();
            Class2 b = new Class2();
            //x = a.A();
            x = b.A();
            return x;
        }

Maka kita akan mendapatkan isi dari textbox adalah “Zidane”

1 komentar: