MINGGU VI : PBO (LANJUTAN) Pertemuan minggi ini membahas topik tambahan dalam konsep PBO di C#. Topik tambahan tersebut meliputi kelas method dan properti statis, kelas Object, Automatic Property, Struct dan Enumeration.
Kompetensi Khusus Setelah mengikuti pertemuan ini, mahasiswa diharapkan memahami tentang topik tambahan PBO meliputi static, automatic property, struct dan enumerations.
Materi Static Method Pada pertemuan-pertemuan yang sebelumnya, operasi dilakukan terhadap objek, bukan kelas. Sebuah kelas hanya digunakan untuk membuat objek. Kelas-kelas yang telah didefinis ika n tidak bisa digunakan langsung, akan tetapi harus melalui objek yang diciptakan dari kelas tersebut. Selain menggunakan objek, method atau properti yang dimiliki oleh sebuah kelas dapat juga diakses melalui kelas itu sendiri tanpa harus membuat objek terlebih dahulu. Contohnya adalah method WriteLine(). Method WriteLine() dimiliki oleh kelas Console. Namun kita sering menggunakan method WriteLine tanpa harus membuat objek dari kelas Console tersebut. Hal ini dikarenakan method WriteLine tersebut merupakan method static. Selain digunakan untuk method, kata kunci static juga dapat digunakan untuk properti sebuah kelas. Static merupakan keyword yang menyebabkan method atau properti tersebut dapat diakses melalui kelasnya secara langsung. Definisi method static harus dilakukan pada saat method tersebut dideklarasikan. Berikut contoh method static pada kelas Segitiga. class Segitiga{ public static double HitungLuas(double alas, double tinggi){ return alas * tinggi / 2; } }
Pada contoh diatas dapat dilihat bahwa kelas Segitiga memiliki sebuah method static bernama HitungLuas(). Dengan demikian method tersebut dapat digunakan tanpa harus menciptaka n
1
objek dari kelas Segitiga terlebih dahulu. Contoh penggunaan method static adalah sebagai berikut. Double luasSegitiga; luasSegitiga = Segitiga.HitungLuas(3, 4);
Pada contoh diatas, luas segitiga dihitung melalui method HitungLuas() yang ada dalam kelas Segitiga. Method HitungLuas() tidak dirujuk melalui objek, tapi dirujuk melalui kelas Segitiga.
Selain untuk method, kata kunci static bisa juga digunakan untuk properti dalam kelas. Sama halnya seperti static method, properti yang memiliki kata kunci static ini juga bisa diakses melalui kelas Segitiga. Contoh penggunaan static pada properti kelas dapat dilihat pada contoh berikut ini class Segitiga{ public static double luas; public static double HitungLuas(double alas, double tinggi){ return alas * tinggi / 2; } }
Pada contoh diatas kelas Segitiga memiliki sebuah properti yang bernama luas. Penggunaa n properti luas ini sama seperti menggunakan static method pada kelas segitiga tersebut.
Segitiga.luas = 10;
Namun
penggunaan
static method atau properti static
dalam sebuah kelas perlu
mempertimbangkan karakteristik dari static properti tersebut. Properti atau method yang memiliki sifat static tidak bisa diakses melalui objek dari kelas tersebut.
Automatic Property Salah satu konsep dalam Pemrograman Berorientasi Objek (PBO) adalah encapsulatio n. Encapsulation adalah mekanisme untuk menyembunyikan proses atau informasi yang tedapat dalam sebuah kelas. Salah satu informasi yang disembunyikan dalam kelas adalah propert i dalam kelas. Informasi properti yang terdapat dalam kelas harus dijaga sedemikian rupa
2
sehingga nilai dari properti dapat terjaga nilainya agar tidak muncul nilai yang diinginka n. Misalnya properti umur dalam kelas manusia dijaga sedemikan rupa sehingga nilai umur tersebut tidak menjadi minus seperti -9 tahun. Jika akses level properti diset publik, maka sebuah properti dalam kelas terbuka untuk umum. Kelas lain bisa mengakses properti tersebut secara bebas (baca & tulis). Sebuah kelas bahkan bisa menulis nilai properti tersebut dengan nilai yang tidak terbatas. Salah satu cara untuk melindungi properti adalah dengan mengatur akses level properti tersebut menjadi private atau protected. Hal ini menyebabkan properti tersebut tidak bisa dibaca atau ditulis properti tersebut. Akses terhadap properti tersebut disediakan melalui method dalam kelas tersebut. Satu method untuk akses baca dan satu method untuk akses tulis. Method ini biasanya disebut dengan method get/set. Contoh penggunaan method get/set dapat dilihat pada contoh dibawah ini. class Poin { protected int x; public int getX() { return x; } public void setX(int xBaru) { if (xBaru > 0) { x = xBaru; } } }
Pada contoh diatas, method getX() digunakan untuk mendapatkan nilai properti x dan method setX() digunakan untuk mengatur nilai properti x. Kontrol terhadap pengaturan nilai x dilakukan oleh method setX(). Pada contoh diatas nilai x hanya bisa diset jika nilai x yang baru lebih besar dari 0 (positif). Kelebihan lain dari metode ini adalah akses terhadap sebuah properti dapat diset baca saja atau baca tulis. Jika sebuah properti hanya diset bisa baca saja, maka method yang disediakan hanyalah method get saja, dalam contoh ini method getX. Namun jika properti tersebut bisa dibaca dan ditulis, maka disediakan method get dan set untuk properti tersebut. Method get/set dapat digunakan untuk mengontrol akses terhadap properti dalam kelas, namun kelas ini memiliki kekurangan yaitu :
3
1. Penggunaan method get/set ini membuat akses terhadap properti tidak seperti akses properti. Oleh karena akses terhadap properti diatur oleh method get/set, maka akses terhadap properti tersebut terasa mengakses method, bukan akses properti. Poin p = new Poin(); p.setX(3); int x = p.getX();
2. Munculnya banyak method baru untuk mengatur akses terhadap properti. Pada contoh diatas, 1 properti membutuhkan 2 buah method. Jika poin tersebut 3 dimensi maka terdapat 3 properti yang akan diatur yaitu x, y dan z sehingga method yang dibutuhka n 6 buah method untuk mengatur akses terhadap properti-properti tersebut. C# menyediakan solusi untuk pengaturan akses properti tersebut yaitu dengan menyediaka n automatic property. Automatic property mengatur akses baca tulis terhadap properti yang ada dalam kelas. Contoh deklarasi automatic property dalam kelas poin diatas adalah sebagai berikut. class Poin { protected int x; public int X { get { return x; } set { x = value; } } }
Pada contoh diatas, dalam kelas Poin terdapat sebuah automatic property bernama X (huruf kapital). Automatic property X tersebut digunakan untuk mengatur akses terhadap properti x melalui method get dan set yang dimiliki oleh automatic property X. Method get dalam automatic property digunakan untuk mengatur akses baca teradap property x. Sedangkan method set digunakan untuk mengatur akses tulis terhadap properti x. Keyword value merupakan keyword yang digunakan untuk merepresentasikan nilai yang diberikan ke automatic property X. Nama automatic property harus berbeda dengan nama properti yang ada dalam kelas.
4
Kelebihan penggunaan automatic property dalam C# adalah : 1. Akses terhadap properti dapat dikontrol dan feeling penggunaan properti tersebut sama seperti mengakses properti. Dengan menggunakan contoh kelas Poin diatas, maka akses terhadap properti X dilakukan dengan cara sebagai berikut. Poin p = new Poin(); p.X = 3; int x = p.X;
2. Kompatibel dengan interface. Pada pembahasan sebelumnya, properti tidak boleh dideklarasikan dalam sebuah interface. Namun automatic property dapat digunaka n dalam interface sebagai ganti deklarasi properti. Contoh deklarasi automatic property dalam interface adalah sebagai berikut. interface IPoin { int X { get; set; } }
Pada contoh diatas, interface Poin memiliki sebuah automatic property yang bernama X. Kelas yang mengimplementasikan interface IPoin harus memiliki automatic property bernama X. Struct Struct dalam C# digunakan untuk mengengkapsulasi sekelompok variabel yang saling terkait. Biasanya struct ini digunakan untuk mendefinisikan sebuah struktur data yang baru. Misalnya, struktur data kordinat titik dalam segitiga yang terdiri dari kordinat x dan kordinat y. Pada dasarnya struct memiliki struktur yang hampir sama dengan kelas. Perbedaannya adalah sebagai berikut. 1. Definisi struct dapat langsung digunakan. 2. Struct tidak membutuhkan instance, namun instance bisa dibuat menggunakan struct tersebut. 3. Objek dari kelas berada di memori pada bagian head, sedangkan struct berada pada leap. Contoh deklarasi sebuah struct dapat dilihat pada kode dibawah ini. struct Poin2D { public int x; public int y; }
5
Pada contoh diatas, didefinisikan sebuah struct dengan nama Poin2D. Struct Poin2D memilik i 2 buah property yaitu x dan y. Struct tersebut digunakan dengan cara sebagai berikut Poin2D poin; poin.x = 1; poin.y = 2;
Pada contoh diatas struct tersebut digunakan langsung tanpa menggunakan instansiasi objek (tanpa menggunakan keyword new). Namun demikian sebuah variabel dari struct dapat dibuat dengan menggunakan keyword new. Jika menggunakan keyword new maka Struct tersebut sebaiknya memiliki constructor. Tujuan keberadaan constructor tersebut adalah untuk menginisialiasi nilai property yang ada dalam struct tersebut. Jika sebuah struct memilik i constructor maka constructor struct tidak boleh parameterless. Contoh struct yang memilik i constructor dapat dilihat pada kode dibawah ini. struct Poin2D { public int x; public int y; public Poin2D(int x, int y) { this.x = x; this.y = y; } }
Ketentuan untuk membuat constructor pada Struct sama persis dengan ketentuan untuk membuat constructor pada kelass. Hanya saja constructor dalam struct tidak boleh tanpa argumen. Penggunaan struct yang memiliki constructor sama seperti struct biasa, hanya inisialiasinya saja yang berbeda. Poin2D poin2 = new Poin2D(2, 3); poin2.x = 1; poin2.y = 2;
Enumerations Enumerations merupakan sekumpulan nama yang dipetakan terhadap sekumpulan nilai. Enumerations merupakan salah satu tipe data turunan. Biasanya enumeration digunakan untuk memberikan nilai- nilai terhadap suatu kode-kode tertentu. Misalnya kode untuk jenis kelamin, 1 untuk pria dan 2 untuk wanita. Sebuah variabel dengan tipe data enumerations hanya bisa memiliki nilai sesuai nilai yang terdapat dalam enumeratornya. Enumerator dibuat melalui proses inisialiasi. Beberapa hal yang perlu diperhatikan dalam enumerator adalah: 1. Enumerator tidak boleh mengandung “white space” dalam namanya.
6
2. Nilai default enumerator adalah 0.
Contoh deklarasi enumerator dapat dilihat pada contoh dibawah ini.
Pada contoh diatas didefinisikan 2 buah enumerator yaitu Days dan Month. Enumerator Days digunakan untuk memetakan nama Hari ke nilai integer. Nilai awal dari enumerator adalah 0, sehingga nilai dari Sat sama dengan 0. Enumerator kedua bernama Month yang digunaka n untuk memetakan nama bulan ke nilai tertentu. Nilai awal enumerator Month adalah 1 sehingga nilai Jan adalah 1, Feb adalah 2 dst. Akses terhadap nilai enumerator membutuhkan casting terlebih dahulu. Casting dilakukan agar nilai yang diambil dapat disimpan ke dalam variabel dengan tipe yang sesuai. Contoh penggunaan enum dapat dilihat pada contoh dibawah ini.
Kode diatas mengambil nilai Friday untuk disimpan dalam variabel bertipe integer oleh karena itu nilai dari enumerator perlu dicasting ke integer dengan menggunakan operator (int) terlebih dahulu.
7