Minggu, 09 Oktober 2011

Dasar-Dasar OOP di Java

 1.Dasar-Dasar OOP di Java
Information hiding
Pada bab sebelumnya telah dibahas bagaimana mengakses anggota class, baik yang berupa atribut
ataupun method. Misalnya saja kita mempunyai sebuah class seperti dibawah ini :
Jika kita ingin mengakses anggota-anggota class Siswa diatas dari luar class, maka kita dapat
langsung mengaksesnya dengan menyebutkan nama anggota class yang ingin kita akses. Hal ini dapat kita
lihat pada program dibawah ini :
Pada baris ke-3, kita membuat sebuah obyek dari class Siswa yang bernama IT2. Dari obyek IT2 tersebut
pada baris ke-4, 5 dan 6 kita langsung dapat mengakses anggota-anggota dari obyek IT2.
Kita juga dapat menyembunyikan information dari suatu class sehingga anggota-anggota class
tersebut tidak dapat diakses dari luar. Adapun caranya adalah cukup dengan memberikan akses control
private ketika mendeklarasikan suatu atribut atau method. Sebagai contoh adalah class Siswa diatas. Jika kita
ingin membuat nrp dari class Siswa tidak dapat diakses dari luar class Siswa, maka kita dapat merubahnya
menjadi :
private int nrp;
Pada saat kita mendeklarasikan seperti diatas, ketika kita mencoba mengakses nrp dari class IsiData pada
baris ke-4, maka yang terjadi akan muncul pesan kesalahan kompilasi seperti di bawah ini :
Contoh lain: Misalnya saja kita mempunyai sebuah class seperti dibawah ini :
public class Siswa {
public int nrp;
public String nama;
public void Info() {
System.out.println(“Saya siswa PENS”);
}
}
public class IsiData {
public static void main(String args[]) {
Siswa IT2=new Siswa();
IT2.nrp=5;
IT2.nama=”Andi”;
IT2.Info();

Hallo.java:4: nrp has private access in Siswa
IT2.nrp=5;
public class MyDate {
public int day;
public int month;
public int year;
}

2.Jika kita ingin mengakses anggota-anggota class MyDate diatas dari luar class, maka kita dapat
langsung mengaksesnya dengan menyebutkan nama anggota class yang ingin kita akses. Misalkan kita punya
object d yang merefer ke class MyDate
MyDate d = new MyDate();
Maka kita bisa mengakses semua atribut secara langsung dan membuat kesalahan, misalnya
• d.day = 32; //invalid day
• d.month = 2; d.day = 30; //plausible but wrong
• d.day = d.day + 1; //no check for wrap around
Untuk menghindari kasus seperti di atas, kita bisa menyembunyikan infomasi dari sebuah class
sehingga anggota-anggota class tersebut (dalam hal ini atribut-atributnya) tidak dapat diakses dari luar.
Caranya dengan memberikan akses control private ketika mendeklarasikan atribut atau method. Selain
itu juga menyediakan akses pembacaan melalui method getXXX() yang sering disebut sebagai getters dan
akses penyimpanan melalui method setXXX() yang sering disebut sebagai setter. Method-method ini akan
memungkinkan class untuk memodifikasi data internal, namun yang lebih penting lagi, untuk memverifikasi
perubahan yang diinginkan adalah dengan nilai yang valid.
Encapsulation (Enkapsulasi)
Encapsulation (Enkapsulasi) adalah suatu cara untuk menyembunyikan implementasi detail dari suatu
class. Enkapsulasi mempunyai dua hal mendasar, yaitu :
- information hiding
- interface to access data
Misalnya saja kita ambil contoh kasus program yang sebelumnya. NRP dari siswa-siswa IT2 adalah
berada dalam range 1-10. Jika kita tidak melakukan enkapsulasi pada class Siswa, maka data nrp yang kita
masukkan tentunya akan diperbolehkan nilai bilangan bulat dalam range tipe data int. Oleh karena itu,
information hiding terhadap atribut nrp sangat diperlukan, sehingga nrp tidak bisa diakses secara langsung.
Lalu, kalau atribut nrp tersebut disembunyikan, bagaimana cara mengakses atribut nrp itu untuk
memberikan atau mengubah nilai?. Nah, di saat ini kita memerlukan suatu interface to access data, yang
berupa method dimana di dalamnya terdapat implementasi untuk mengakses data nrp. Berkaitan dengan
kasus diatas, class Siswa dapat kita modifikasi agar memakai konsep enkapsulasi seperti terlihat dibawah ini:
Dengan memenuhi konsep enkapsulasi, seorang user yang mengakses data nrp tidak perlu
dipusingkan dengan implementasi pengisian data nrp. User tersebut cukup dengan memanggil method
isiNrp() dengan memasukkan nilai nrp-nya sebagai nilai parameter, maka class Siswa akan mengakses data
nrp selama diperkenankan.
public class Siswa {
private int nrp;
public String nama;
public void setNrp(int n) {
if(n>=1 && n<=10)
nrp=n;
else
System.out.println("Error...!!");
}
public void Info() {
System.out.println(“Saya siswa PENS”);
}
}

3.Deklarasi contructor (konstruktor)
Contructor (konstruktor) adalah suatu “method” yang pertama kali dijalankan pada saat pembuatan
suatu obyek. Konstruktor mempunyai ciri yaitu :
- mempunyai nama yang sama dengan nama class
- tidak mempunyai return type (seperti void, int, double dll)
Setiap class pasti mempunyai konstruktor. Jika kita membuat suatu class tanpa menuliskan
konstruktornya, maka kompiler dari Java akan menambahkan sebuah konstruktor kosong. Misalnya saja kita
mempunyai suatu class Siswa seperti dibawah ini:
Disana kita tidak mendeklarasikan konstruktornya secara eksplisit. Ketika proses kompilasi, Kompiler Java
akan menambahkan konstruktor kosong sehingga class Siswa tersebut akan tampak sebagai berikut :
Karena konstruktor adalah method yang pertama kali dijalankan pada saat suatu obyek dibuat, maka
konstruktor sangat berguna untuk menginisialisasi data member. Misalnya saja class Siswa diatas
mempunyai data member. Kita dapat menginisialisasi nrp di dalam kontruktor yang kita deklarasikan secara
ekslipit, seperti yang tampak dibawah ini:
Kita juga dapat menginisialisasi suatu data member dengan nilai yang diinginkan oleh user dengan cara
memasukkannya pada parameter konstruktor. Misalnya class Siswa diatas dapat kita modifikasi sebagai
berikut :
Dengan mendeklarasikan konstruktor seperti itu, user dapat membuat obyek dengan menginisialisasi
nrp sesuai yang ia kehendaki, misalnya saja seperti berikut :
Siswa TA1 = new Siswa();
Siswa TA2 = new Siswa(5);
Siswa TA3 = new Siswa(7, “Andi”);
public class Siswa {
}
public class Siswa {
public Siswa() {
}
}
public class Siswa {
private int nrp;
public Siswa() {
nrp=0;
}
}
public class Siswa {
private int nrp;
public Siswa(int n) {
nrp=n;
}
}

4.Overloading constructor
Suatu class dapat mempunyai lebih dari 1 konstruktor dengan syarat daftar parameternya tidak boleh
ada yang sama. Misalnya saja kita ingin menginisialisasi data member nrp dengan 2 cara. Pertama, jika user
tidak memberikan nilai inisialisasi nrp dan nama maka nrp akan diset dengan nilai 0 dan nama diset dengan
“”. Kedua, jika user ingin menginisialisasi nrp sesuai dengan nilai yang diinginkan, maka nrp akan diisi
sesuai nilai yang diinginkan oleh user dan nama diset dengan “”.Kedua, jika user ingin menginisialisasi nrp
dan nama sesuai dengan nilai yang diinginkan, maka nrp dan nama akan diisi sesuai nilai yang diinginkan
oleh user. Sehingga class Siswa diatas dapat kita deklarasikan 3 buah konstruktor seperti yang tampak
sebagai berikut :
Package
Package adalah suatu cara untuk memenej class-class yang kita buat. Package akan sangat bermanfaat
jika class-class yang kita buat sangat banyak sehingga perlu dikelompokkan berdasarkan kategori tertentu.
Misalnya saja kita mempunyai 2 buah class Siswa, dimana yang pertama adalah class Siswa untuk
mahasiswa jurusan IT dan yang kedua adalah class Siswa untuk mahasiswa Telkom. Kita tetap dapat
mendeklarasikan 2 class tersebut dengan nama Siswa, dengan cara mendeklarasikannya package masingmasing
class seperti yang tampak di bawah ini:
Yang perlu kita perhatikan pada saat deklarasikan package, bahwa class tersebut harus disimpan pada
suatu direktori yang sama dengan nama package-nya. Berkenaan dengan class Siswa diatas, class Siswa pada
package it harus disimpan pada direktori it, dan class Siswa pada package telkom harus disimpan pada
direktori telkom.
public class Siswa {
private int nrp;
private String nama;
public Siswa() {
nrp=0;
nama=””;
}
public Siswa(int n) {
nrp=n;
nama=””;
}
public Siswa(int n, String s) {
nrp=n;
nama = s;
}
}
package it;
public class Siswa {

}
package telkom;
public class Siswa {

}

5.Import class
Suatu class dapat meng-import class lainnya sesuai dengan nama package yang dipunyainya.
Misalnya saja kita dapat meng-import class Siswa.java dalam package it dengan mendeklarasikan kata kunci
import.
Jika kita ingin meng-import semua class yang ada pada package it, maka kita dapat mendeklarasikannya
dengan menuliskan tanda *.
import it.*;
Satu hal yang perlu kita ketahui, pada saat kita ingin meng-import suatu class dalam suatu package,
pastikan letak package tersebut satu direktori dengan class yang ingin meng-import. Dalam contoh diatas,
representasi direktori akan tampak seperti berikut :
Jika letak package tersebut tidak satu direktori dengan class yang ingin meng-import, maka letak
direktori package itu haruslah terdaftar dalam CLASSPATH.
Kata kunci this
Kata kunci this sangat berguna untuk menunjukkan suatu member dalam class-nya sendiri. This dapat
digunakan baik untuk data member maupun untuk function member, serta dapat juga digunakan untuk
konstruktor. Adapun format penulisannya adalah :
this.data_member �� merujuk pada data member
this.function_member() �� merujuk pada function member
this() �� merujuk pada konstruktor

it
Siswa.java
telkom
Siswa.java
import it.Siswa;
public class IsiData {

}

it
Siswa.java
telkom
Siswa.java
IsiData.java

6.Sebagai contohnya adalah sebagai berikut. Misalnya kita mempunyai suatu class diagram dibawah ini :
public class Siswa{
public int nrp;
public int umur;
public Siswa(int n){
//nrp = n;
}
}
Pada saat kita membaca class diagram diatas, maka kita merasa kesulitan untuk memahami sesungguhnya
nilai variabel n pada parameter konstruktor itu akan dipakai untuk menginisialisasi nrp atau umur. Untuk
lebih memudahkan, kita dapat menuliskan class diagram yang lebih mudah dimengerti seperti yang tampak
dibawah ini :
Dengan class diagram diatas, kita lebih mudah memahami bahwa nilai variabel nrp pada parameter
konstruktor tersebut akan dipakai untuk menginisialisasi data member nrp pada class Siswa. Sehingga
programnya akan tampak sebagai berikut :
Pada saat kita menulis baris ke-6, maka yang kita inginkan adalah :
nrp = nrp;
Namun dengan cara menulisan seperti itu, maka semua nrp yang ada disana akan merujuk pada nrp
yang terdekat, yaitu nrp pada parameter konstuktor, sehingga data member nrp tidak akan diinisialisasi. Nah,
untuk memberitahu kompiler Java bahwa yang kita maksud adalah nrp pada member class Siswa, kita dapat
memakai kata kunci this, sehingga penulisannya baris-6 tersebut yang benar adalah seperti ini :
this.nrp = nrp
Siswa
nrp : int
umur : int
+ Siswa(n : int)
Siswa
nrp : int
umur : int
+ Siswa(nrp : int)
public class Siswa {
private int nrp;
private int umur;
public Siswa(int nrp) {
this.nrp = nrp;

merujuk pada parameter konstruktor
merujuk pada data member nrp pada class Siswa
akan merujuk pada suatu member yang bernama
nrp pada class yang bersangkutan (class Siswa)

7.This dapat juga dipakai untuk memanggil konstruktor yang lain pada class yang bersangkutan. Misalnya saja
contoh class Siswa pada overloading constructor dapat kita modifikasi sebagai berikut :
Pada saat kita menuliskan
this(0);
kompiler Java akan merujuk pada suatu konstruktor di class tersebut yang mempunyai daftar parameter yang
sesuai, yaitu :
public Siswa(int n)
Adapun nilai parameter yang dikirim adalah nilai 0.
public class Siswa {
private int nrp;
public Siswa() {
this(0);
}
public Siswa(int nrp) {
this.nrp=nrp;
}
}

Tidak ada komentar:

Posting Komentar