Kamis, Mei 14, 2009

Belajar C# dg OOP

Bahasa yang benar-benar berorientasi obyek mendukung 4 pilar utama dari OOP, yaitu Abstraction, Inheritance, polimorphism dan encapsulation. OOP merupakan metode pemrograman dimana programmer harus mendefinisikan tipe data dari struktur data dan juga tipe dari operasi yang dapat diaplikasikan ke struktur data. Dengan demikian struktur data menjadi objek yang memiliki data dan fungsi. Beberapa keunggulan OOP antara lain :
• Maintainability : kemampuan untuk dikelola
• Extensibility : kemampuan untuk dapat diperluas
• Reusability : kemampuan untuk dapat digunakan kembali

Beberapa komponen penting yang sering digunakan dalam OOP antara lain :
• Objek : merupakan dasar intetitas runtime dalam suatu sistem berorientasi objek
• Class : merupakan cetak biru (blueprint) atau template dari objek dengan kata lain class merupakan representasi abstrak sedangkan objek merupakan representasi nyata. Suatu class dapat berisi property, field, method dan event dari suatu objek yang disebut members dari suatu class. Dalam .net semua class dasar dikelompokkan kedalam Namespace.
• Method : merupakan suatu tindakan yang dilakukan oleh objek
• Event : pemberitahuan yang diterima oleh objek
• Field : merupakan informasi atau atribut yang terdapat didalam suatu objek. Bentuk field mirip dengan variabel yaitu dapat dibaca dan diset secara langsung.
• Property : merupakan informasi (atribut) yang dapat disimpan dalam objek. Property dapat dideklarasikan dengan Public Property (tdk bisa menulis property) dan Method Property (dapat mengontrol operasi property). Terdapat 2 bagian dalam property yaitu Get dan Set. Get hanya memperbolehkan akses data sedangkan Set memperbolehkan mengubah nilai data.

Class dan Objek
Berikut adalah contoh class dan cara instansiasi class tersebut menjadi objek pada C# :
//ClassExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace STS.Console
{
public class ClassExample
{
}
}
Berikut adalah contoh proses instansiasi class ClassExample :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using STS.Common.Math;

namespace STS.Console
{
class Program
{
static void Main(string[] args)
{
ClassExample classExample = new ClassExample();
}
}
}
Method dan Field
Ada dua jenis method, yaitu :
1. Method yang tidak melemparkan nilai biasanya disebut procedure.
Sintaks :
//ClassExamle.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace STS.Console
{
public class ClassExample
{
public void Tambah(int bilanganA, int bilanganB)
{
int hasil = bilanganA + bilanganB;
System.Console.WriteLine(hasil);
}
}
}
Contoh penggunaan :
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using STS.Common.Math;

namespace STS.Console
{
class Program
{
static void Main(string[] args)
{
ClassExample classExample = new ClassExample();
classExample.Tambah(3, 10);

System.Console.ReadKey();

}
}
}
2. Method yang melemparkan nilai biasanya disebut function.
Sintaks :
ClassExamle.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace STS.Console
{
public class ClassExample
{
public int Kurang(int bilanganA, int bilanganB)
{
return bilanganA - bilanganB;
}
}
}
Contoh penggunaannya :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using STS.Common.Math;

namespace STS.Console
{
class Program
{
static void Main(string[] args)
{
ClassExample classExample = new ClassExample();
System.Console.WriteLine(classExample.Kurang(17,4));

System.Console.ReadKey();

}
}
}
Field adalah property pada class seperti pada contoh kode berikut :
ClassExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace STS.Console
{
public class ClassExample
{
public int bilangan1;
public int bilangan2;
private string hasil;
protected string nama;
}
}
Dari contoh di atas maka field bilangan1 dan bilangan2 dapat diakses secara langsung
sebagai method dari objek di dalam class manapun karena menggunakan public sebagai
access-modifier. Sedangkan field nama, karena menggunakan access-modifier protected maka hanya dapat
digunakan oleh class yang merupakan class turunan dari ClassExample.
Contoh :
ClassTurunan.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using STS.Console;

namespace STS.Console
{
public class ClassTurunan : ClassExample
{
public void TestMethod()
{
this.nama = "Naruto";
}
}
}
Pada class ClassExample terdapat field yang menggunakan access-modifier private. Artinya
field ini hanya bisa digunakan di dalam class tersebut.
Field pada suatu class secara default mempunyai access-modifier private dan memang
seharusnya tetap seperti itu. Agar class lain dapat melakukan pengambilan (get) atau pengisian (set) nilai field tersebut maka perlu dibuat public method yang berfungsi untuk
itu.
Public method ini dideklarasikan bukan seperti method yang telah dibuat sebelumnya,
istilah yang tepat sebagai pengganti nama ‘method’ untuk fungsi seperti di atas adalah
Property.
Cara mendeklarasikan Property adalah sebagai berikut :
ClassExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace STS.Console
{
public class ClassExample
{
public int bilangan1;
public int bilangan2;
private string hasil;
protected string nama;

public string Hasil
{
get {return hasil;}
set {hasil = value;}
}
}
}

Static Member
Pada bagian sebelumnya telah dijelaskan cara membuat class, method dan field. Pada
contoh di atas terlebih dahulu harus dibuat instance dari class agar dapat mengakses
method atau field.
Pada bagian ini akan dijelaskan cara membuat method agar dapat digunakan tanpa harus
melakukan instansiasi class terlebih dahulu.
Caranya sangat mudah yaitu dengan menambahkan kata kunci static pada method yang
diinginkan seperti pada contoh berikut :

ClassExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace STS.Console
{
public class ClassExample
{

public static void Kali(int bilanganA, int bilanganB)
{
int hasil = bilanganA * bilanganB;
System.Console.WriteLine(hasil);
}
}
}

Untuk menggunakan method ini cukup dengan menulis kode seperti berikut ini :
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using STS.Common.Math;

namespace STS.Console
{
class Program
{
ClassExample.Kali(3, 10);

System.Console.ReadKey();

}
}
}

Inheritance dan Polymorphism

Inheritance
Inheritance atau penurunan adalah kemampuan membuat suatu class anak dari suatu class
induk, dimana seluruh field dan method diturunkan kepada class anak, kecuali method atau
field dengan access-modifier private.
Contoh kasus inheritance ini adalah seperti kode berikut :
ClassTurunan.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using STS.Console;

namespace STS.Console
{
public class ClassTurunan : ClassExample
{
public void TestMethod()
{
this.nama = "Naruto";
}
}
}

Pada kode di atas, yang menjadi class induk adalah ClassExample dan ClassTurunan
merupakan class anaknya. Baris berikut menyatakan cara membuat class ClassTurunan
sebagai turunan dari class ClassExample.
Polymorphism
Polymorphism bila diartikan dengan melihat arti dari kata penyusunnya yaitu poly yang
berarti “banyak dan morph yang berarti “bentuk” maka secara keseluruhan artinya adalah“banyak bentuk”.
Masih berhubungan dengan inheritance atau penurunan, misalkan dibuat class yang akan
menjadi class induk seperti berikut :

CurveMath.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace STS.Common.Math
{
public class CurveMath
{
private int panjang;
private int lebar;
private int jejari;

public int Panjang
{
set{panjang = value;}
get { return panjang; }
}

public int Lebar
{
set { lebar = value; }
get { return lebar; }
}

public int Jejari
{
set { jejari = value; }
get { return jejari; }
}

public virtual void HitungLuas()
{
System.Console.WriteLine(Panjang * Lebar);
}
}
}

Pada kode di atas dapat dilihat terdapat kata kunci virtual pada method berikut :


public virtual void HitungLuas()
{
System.Console.WriteLine(Panjang * Lebar);
}
Artinya method ini dapat diubah menjadi bentuk lagi dengan cara di-override. Seperti yang
dilakukan oleh class Lingkaran.

Lingkaran.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using STS.Common.Math;

namespace STS.Console
{
public class Lingkaran : CurveMath
{
public override void HitungLuas()
{
System.Console.WriteLine(3.14 * Jejari * Jejari);
}
}
}

Pada kode di atas dapat dilihat digunakan kata kunci override, kata kunci ini hanya dapat
digunakan kepada method yang menggunakan kata kunci virtual.
Method Overloading
Method overloading, untuk mengetahui arti dari istilah ini maka bisa melihat terlebih
dahulu baris kode di bawah ini :

Lingkaran.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using STS.Common.Math;

namespace STS.Console
{
public class Lingkaran : CurveMath
{
public override void HitungLuas()
{
System.Console.WriteLine(3.14 * Jejari * Jejari);
}

///
/// Tidak ada parameter
///

public void Tambah()
{
System.Console.WriteLine(3 + 10);
}

///
/// Terdapat satu parameter
///

public void Tambah(int bilangan)
{
System.Console.WriteLine(3 + bilangan);
}

///
/// Terdapat dua parameter dengan tipe data int
///

public void Tambah(int bilangan1, int bilangan2)
{
System.Console.WriteLine(bilangan1 + bilangan2);
}

///
/// Terdapat dua parameter dengan tipe data double
///

public void Tambah(double bilangan1, double bilangan2)
{
System.Console.WriteLine(bilangan1 + bilangan2);
}
}
}

Pada kode di atas dapat dilihat terdapat tiga method dengan nama yang sama yaitu Tambah
perbedaan tiap method adalah dilihat dari jumlah parameter dan tipe data yang digunakan.
Collection
Collection berfungsi sebagai kontainer untuk menyimpan sekumpulan objek. Collection
mirip dengan konsep array. Untuk mengakses data dalam collection biasanya dilakukan
dengan melakukan iterasi terhadap data yang ada dalam collection atau dapat juga diakses
dengan menggunakan indeks atau indexers.
ArrayList
Berikut adalah contoh penggunaan ArrayList.

Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using STS.Common.Math;
using System.Collections;

namespace STS.Console
{
class Program
{
static void Main(string[] args)
{
ArrayList al = new ArrayList();

Pegawai p1 = new Pegawai();
p1.Nama = "Naruto";
p1.Umur = 30;
al.Add(p1);

Pegawai p2 = new Pegawai();
p2.Nama = "Faisal";
p2.Umur = 25;
al.Add(p2);

System.Console.WriteLine("Jumlah objek : " + al.Count);

for (int i = 0; i < al.Count; i++)
{
int j = i + 1;
Pegawai pegawai = (Pegawai)al ;
System.Console.WriteLine(j + ". " + pegawai.Nama +"("+pegawai.Umur+")");
}

System.Console.ReadKey();
}
}
}

Hashtable
Berbeda dengan ArrayList, Hashtable mempunyai key. Berikut contoh pemanfaatan
Hashtable.
rogram.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using STS.Common.Math;
using System.Collections;

namespace STS.Console
{
class Program
{
static void Main(string[] args)
{
Hashtable ht = new Hashtable();

Pegawai p1 = new Pegawai();
p1.Nama = "Naruto";
p1.Umur = 30;
ht.Add("P1", p1);

Pegawai p2 = new Pegawai();
p2.Nama = "Faisal";
p2.Umur = 25;
ht.Add("P2", p2);

System.Console.WriteLine("Jumlah objek : " + ht.Count);

IDictionaryEnumerator enumerator = ht.GetEnumerator();
while (enumerator.MoveNext())
{
Pegawai pegawai = (Pegawai)enumerator.Value;

System.Console.WriteLine(enumerator.Key.ToString() + " " +
pegawai.Nama
+ "(" + pegawai.Umur + ")");
}

System.Console.ReadKey();

}
}
}
sumber http://ajidotnet.wordpress.com