( OOP ) Pemrograman Object-Oriented
A.Class dan Objek
Untuk membuat Class dengan C# maka berikut adalah sintaks yang mesti diketahui.
[attribute]
[access-modifier] class nama_class [: [base-class [, interface(s)]]
{
class-body
}
Keterangan :
1. Attribute, adalah penanda untuk menerangkan class dan untuk kebutuhan tertentu.
2. Access-modifier dapat berupa public, private, protected, internal dan protected
internal.
a. public, tidak ada batasan, class dapat digunakan oleh semua class.
b. private, terbatas tidak dapat digunakan pada class lain.
c. protected, terbatas digunakan oleh class turunannya.
d. internal, dapat digunakan secara internal di dalam class.
3. Tanda “:” untuk pengganti kata kunci extends bagi yang sudah mengenal OOP
pada Java atau PHP.
Contoh Listing Program :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using STS.Common.Math;
namespace STS.Console
{
[Obsolete("Class ini sudah tidak digunakan lagi", true)]
public class VariableExample : CommonMath
{
}
}
Pada contoh di atas dapat dilihat class dengan nama VariableExample dengan accessmodifier
public. Class VariableExample merupakan turunan dari class CommonMath.
Class VariableExample mempunyai attribute seperti yang telah ditulis di atas, fungsi
attribute di atas sebagai penanda bahwa class ini sudah tidak bisa digunakan lagi dan akan
menghasilkan error bila digunakan.
Setelah class dibuat maka pada kondisi tertentu class tersebut dapat diinstansiasi menjadi
sebuah 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 :
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)
{
3-36
ClassExample classExample = new ClassExample();
}
}
}
B.Method dan Field
Ada dua jenis method, yaitu :
1. Method yang tidak melemparkan nilai biasanya disebut procedure.
Sintaks :
[access-modifier] void nama_method(tipe_data parameter-1, ... tipe_data parameter-N)
{
}
Contoh :
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 :
[access-modifier] tipe_data nama_method(tipe_data parameter-1, ... tipe_data parameter-N)
{
}
Contoh :
3-37
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 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();
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 = "reza";
}
}
}
Atau dapat dilihat pada gambar berikut :
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;}
}
}
}
Dengan cara di atas maka field hasil dapat diberikan nilai (set) dan diambil nilainya (get)
oleh semua class.
public string Hasil
{
get {return hasil;}
set {hasil = value;}
}
Kode di atas dapat dipersingkat lagi penulisannya dengan cara berikut :
public string Hasil
{
get;
set;
}
C.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
3-40
{
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();
}
}
}
D.Inheritance dan Polymorphism
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 = "reza";
}
}
}
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.
public class ClassTurunan : ClassExample
3-41
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);
}
}
3-42
}
Pada kode di atas dapat dilihat digunakan kata kunci override, kata kunci ini hanya dapat
digunakan kepada method yang menggunakan kata kunci virtual.
E.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);
}
/// <summary>
/// Tidak ada parameter
/// </summary>
public void Tambah()
{
System.Console.WriteLine(3 + 10);
}
/// <summary>
/// Terdapat satu parameter
/// </summary>
public void Tambah(int bilangan)
{
System.Console.WriteLine(3 + bilangan);
}
/// <summary>
/// Terdapat dua parameter dengan tipe data int
/// </summary>
public void Tambah(int bilangan1, int bilangan2)
{
System.Console.WriteLine(bilangan1 + bilangan2);
}
/// <summary>
/// Terdapat dua parameter dengan tipe data double
/// </summary>
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.
3-43
Contoh kode di atas adalah praktik dari Method Overloading. Pada Visual Studio saat ingin
menambahkan method Tambah maka dapat dilihat tampilan seperti pada gambar berikut :
F.Collection
1.Array
Array adalah suatu struktur data yang dapat menyimpan data dengan tipe yang sama dan
diakses dengan menggunakan suatu indeks yang menunjukan suatu elemen didalam array
tersebut.
Variabel yang disimpan di dalam array ini disebut juga dengan elemen array dan tipe
datanya disebut dengan tipe elemen dari array.
Mendeklarasikan Array
Adapun sintaks yang digunakan untuk mendeklarasikan array adalah :
type_data[] namaVariable;
Contoh :
string[] namaBulan;
2.Inisialisasi Array
Untuk memberikan nilai ke dalam suatu variabel array dapat dilakukan dengan beberapa
cara. Pertama dengan menggunakan kata kunci new untuk menentukan jumlah elemen
yang dapat disimpan oleh array dilanjutkan dengan memberi nilai masing-masing elemen.
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using STS.Common.Math;
namespace STS.Console
{
class Program
{
3-44
static void Main(string[] args)
{
string[] namaBulan = new string[12];
namaBulan[0] = "Januari";
namaBulan[1] = "Februari";
}
}
}
Cara kedua dengan cara langsung memberi nilai pada saat deklarasi seperti contoh berikut :
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)
{
string[] namaBulan = { "Januari", "Februari" };
}
}
}
Berikut ini adalah contoh program untuk mengakses array.
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)
{
string[] namaBulan = { "Januari", "Februari", "Maret" };
for (int i = 0; i < namaBulan.Length; i++)
{
System.Console.WriteLine(namaBulan[i]);
}
System.Console.ReadKey();
}
}
}
3.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.
3-45
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 = "Reza";
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[i];
System.Console.WriteLine(j + ". " + pegawai.Nama
+"("+pegawai.Umur+")");
}
System.Console.ReadKey();
}
}
}
4.Hashtable
Berbeda dengan ArrayList, Hashtable mempunyai key. Berikut contoh pemanfaatan
Hashtable.
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)
{
Hashtable ht = new Hashtable();
Pegawai p1 = new Pegawai();
p1.Nama = "Reza";
p1.Umur = 30;
ht.Add("P1", p1);
Pegawai p2 = new Pegawai();
3-46
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();
}
}
}
Referensi
- C# in a Nutshell, O’Reilly.
- Pengenalan Bahasa C#, Project Otak.
- Programming C# 3.0, O’Reilly.