Enkapsulasi
merupakan pernyataan untuk pembungkusan sesuatu (capsulate). Kalo dalam dunia
nyata seperti ini : Kalo kita mau bikin rekening di salah satu bank, maka kita
akan memberikan data diri dan “uang pangkal”. Lalu tanpa kita tahu apa yang
terjadi, kita dikasih buku tabungan yang merupakan bukti kalo rekening kita
udah dibikin. Nah gitu kira-kira enkapsulasi. Kita hanya memberi data, apa yang
kita mau, dan akhirnya tanpa tahu urusan apa yang terjadi dalam pihak internal,
kita menerima apa yang kita mau.
Dalam
implementasinya di java, enkpasulasi ditandai dengan memberikan private ke
semua variabel yang ada di dalam suatu kelas (bukan kelas Main/Driver
pastinya), dan pengaksesan terhadap variabel tersebut digunakan ‘setter’ dan
‘getter’ bagi variabel yang memerlukan (kan gak semua variabel perlu nilai
balikan/masukan).
Satu hal
yang perlu diingat dalam konsep OOP, setiap satu program yang merepresentasikan
suatu sistem/model minimal memiliki 2 kelas, yaitu kelas pemrosesan dan kelas
Main/Driver untuk memanggil kelas pemrosesan. Dan berikut aturan lainnya (Cuma
sebagai bentuk standar dan bukan keharusan):
- Nama Kelas ditulis dalam huruf kapital untuk huruf pertama dari nama tersebut, contoh jika ingin menuliskan kelas ‘mobil mewah’ maka nama kelas nantinya ditulis ‘MobilMewah’
- Variabel dalam konsep OOP disebut atribut yang diakses dengan setter dan getter-nya. (lebih jelas lihat contoh implementasi)
- Satu kelas terdiri dari banyak prosedur pemrosesan, setter dan getter termasuk dalam prosedurnya. Prosedur dalam konsep OOP disebut metode atau method.
- Penulisan method diawali huruf kecil, contoh untuk ‘setter atribut nomor plat mobil’ diberikan nama ‘setNoPlatMobil’.
Sekarang
contoh implementasi :
Kita akan
membuat sebuah prosedur penentuan nilai genap/ganjil atau bilangan prima(tidak
terlalu merepresentasikan konsep OO, tapi untuk belajar kayaknya cocok2 aja menurut
gw). Berarti kita harus membuat satu kelas penghitung dan satu kelas driver
(Main). Implementasi berikut menggunakan Netbeans, ok silahkan diikuti
langkah2nya.
- Pertama, bikin project dengan nama AngkaPrima di Netbean File –> New Project –> Pilih Kategori Java, dan Java Application
- Kedua, buat sebuah kelas OlahAngka seperti gambar :
(Klik
Kanan pada Paket angkaprima, lalu pilih New –> Java Class, Isi nama Kelas
dengan nama ‘OlahAngka’ dan tekan Finish dan terbentuklah kelas OlahAngka)
- Ketiga, sebagai langkah selanjutnya, kita harus membuat method untuk menentukan apakah angka yang diolah adalah bilangan genap/ganjil. Tapi sebelumnya buatlah atribut angka yang akan diolah lengkap dengan setter-getter nya. Cara membuat seperti ini :
- Ketik ‘private int angka’ yang berarti kita akan membentuk suatu atribut angka bertipe data integer dengan karakter private (hanya bisa diakses oleh kelas itu saja)
- Buatlah setter getter dari atribut ini (kali ini netbeans sangat membantu karena tidak usah ditulis manual cukup lakukan seperti ini : klik kanan di nama atribut tersebut lalu klik )
- Ketika muncul pilihannya, pilih set dan get untuk membuat keduanya. Seperti gambar kedua dibawah :
- Setelah terbentuk method set dan get, berarti kita akan membuat satu method untuk menentukan apakah bilangan itu genap atau ganjil. Logikanya gini, Kalo dibagi 2 gak ada sisanya berarti bilangan tersebut adalah bilangan ganjil, dan sebaliknya untuk genap.
- Karena ada 2 kondisi, maka kita bikin dengan menggunakan sebuah fungsi (method yang mengembalikan nilai). Fungsi yang kita gunakan bertipe boolean. Artinya jika mengembalikan nilai benar/true, maka berarti nilai genap, sedangkan jika mengembalikan nilai salah berarti bilangan tersebut merupakan bilangan ganjil.
- Fungsi tersebut kita namakan isGenap yang akan mengembalikan nilai true jika bilangan dapat dibagi 2, dan mengembalikan false jika tidak bisa dibagi 2. Pembagian 2 ini dilakukan dengan menggunakan operator mod. Operator mod akan mengembalikan nilai sisa dari hasil operasi. Jadi contohnya gini :
- 5 mod 2
= 1 (Sisa 5 dibagi 2 itu 1)
- 10 mod 4 = 2
- 10 mod 2 = 0
- 10 mod 4 = 2
- 10 mod 2 = 0
- Dengan keterangan diatas, berarti kita dapat membuat fungsi isGenap dengan kode berikut : (mod dalam java dituliskan dengan %)
public
boolean isGenap() {
if (this.angka % 2 == 0) {
return true;
} else {
return false;}
}
- Setelah itu, untuk menentukan bilangan prima atau tidak kita tambahkan kode seperti berikut :
- Kode diatas dimaksud untuk menentukan bilangan prima dengan langkah seperti ini :
- Bilangan prima merupakan bilangan yang tidak habis dibagi
bilangan lain kecuali oleh dirinya sendiri dan 1.
- Karna itu, untuk setiap bilangan yang dimasukkan, di cek satu persatu dari satu hingga bilangan tersebut. Jika ditemukan hasil pembagian bersisa 0, berarti bilangan itu habis dibagi.
- Bilangan prima dengan definisi diatas, berarti mempunyai jumlah habis dibagi (status_nol) bernilai 2, yaitu untuk pembagian terhadp dirinya sendiri dan angka 1.
- Karena itu setiap status_nol bernilai 2, maka akan dikembalikan nilai true yang berarti bilangan input adalah bilangan prima, dan sebaliknya.
- Karna itu, untuk setiap bilangan yang dimasukkan, di cek satu persatu dari satu hingga bilangan tersebut. Jika ditemukan hasil pembagian bersisa 0, berarti bilangan itu habis dibagi.
- Bilangan prima dengan definisi diatas, berarti mempunyai jumlah habis dibagi (status_nol) bernilai 2, yaitu untuk pembagian terhadp dirinya sendiri dan angka 1.
- Karena itu setiap status_nol bernilai 2, maka akan dikembalikan nilai true yang berarti bilangan input adalah bilangan prima, dan sebaliknya.
- Setelah itu, kita tinggal memanggil fungsi2 tersebut di kelas Main dengan kode :
- Baris pertama berarti membetntuk objek dari kelas OlahAngka, yang nantinya method dari kelas tersebut dipanggil pada pengkondisian.
- Baris Kedua merupakan kelas Scanner yang meminta input user, silahkan lihat posting-an sebelumnya.
- Baris kelima merupakan pemanggilan setter untuk memasukkan angka ke dalam atribut bilangan yang ada di kelas OlahAngka. Dan seterusnya
- Nah, mengapa gw pake getAngka untuk mengambil nilai dari angka yang udah kita input sebelumnya? Hal ini karena sifat dari object oriented programming yang memang hanya memberikan akses terhadap setter dan getter (enkapsulasi). Lalu mengapa tidak menuliskan angka yang ada seperti dibaris kelima? Hal ini dikarenakan bisa jadi ada pengolahan dari angka tersebut yang mengubah nilainya. Jadi kita harus mengambilnya dari kelas tempat diolahnya angka tersebut, dan bukan angka aslinya sebelum dilakukan pengolahan.
Oh, dan
hasil running seperti yang tercantum :
Kode
Selengkapnya Seperti ini :
//OlahAngka.java
public
class OlahAngka {
private int angka;
public int getAngka() {
return angka;
}
public void setAngka(int angka) {
this.angka = angka;
}
public boolean isGenap() {
if (this.angka % 2 == 0) {
return true;
} else {
return false;
}
}
public boolean isPrima() {
int status_nol = 0;
for (int i = 1; i <= this.angka; i++)
{ if (this.angka % i == 0)
{ status_nol++; } } if (status_nol == 2) { return true; } else return false; } }
//Main.java
import
java.util.Scanner;
/**
*
* @author Arby
*/
public
class Main {
public static void main(String[] args) {
// TODO code application logic here
OlahAngka oa = new OlahAngka();
Scanner s = new Scanner(System.in);
System.out.println("Masukkan angka
yang ingin di-cek : ");
int angka = s.nextInt();
oa.setAngka(angka);
if
(oa.isGenap()&&oa.isPrima()){
System.out.println("Angka
"+oa.getAngka()+" adalah bilangan genap prima");
}
else if
(!oa.isGenap()&&oa.isPrima()){
System.out.println("Angka
"+oa.getAngka()+" adalah bilangan ganjil prima");
}
else if
(oa.isGenap()&&!oa.isPrima()){
System.out.println("Angka
"+oa.getAngka()+" adalah bilangan genap");
}
else if
(!oa.isGenap()&&!oa.isPrima()){
System.out.println("Angka
"+oa.getAngka()+" adalah bilangan ganjil");
Bahasa
prosedural mengatur program dalam mode barisan linier yang bekerja dari atas ke
bawah. Dengan kata lain, program adalah kumpulan dari tahapan yang dijalankan
setelah yang lain berjalan. Programming tipe ini bekerja
dengan baik untuk program kecil yang berisi code relative sedikit, tetapi pada
saat program menjadi besar, mereka cenderung susah untuk di-manage dan
di-debug. Dalam usaha untuk me-manage program, struktur
programming diperkenalkan cara untuk mem-break down code-code
tersebut melalui functions dan procedures.
Ini adalah
sebuah langkah perbaikan, namun pada saat program dijalankan dalam sebuah
fungsi bisnis yang kompleks dan berinteraksi dengan sistem lain, maka kelemahan
dari struktur metodologi programming muncul kepermukaan meliputi:
Program
menjadi lebih susah untuk dimaintain. Fungsi yang tersedia, susah untuk diubah
tanpa harus mempengaruhi fungsi sistem secara keseluruhan.
Programming
tidak baik untuk team development. Programmers harus mengetahui setiap aspek
bagaimana program itu bekerja dan tidak menyebabkan terisolasi usaha mereka
atas aspek yang lain dari sistem.
Butuh
usaha yang keras untuk menterjemahkan Business Modelsdalam programming
models.
Mungkin
dapat bekerja dengan baik pada saat terisolasi tapi tidak pada saat
terintegrasi dengan sistem lain.
Istilah-istilah
pada OOP antara lain :
- Kelas (Class)
Kumpulan
atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan
tertentu. Sebagai contoh ‘class of dog‘ adalah suatu unit yang terdiri
atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam
perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas
dan struktur dalam pemrograman berorientasi object. Sebuah class
secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer
sekalipun terkait dengan domain permasalahan yang ada, dan kode
yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan
independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP).
Dengan modularitas, struktur dari sebuah program akan terkait dengan
aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara
seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program
ataupun sebaliknya.
- Objek (Object)
Membungkus
data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer,
objekmerupakan dasar dari modularitas dalam sebuah program komputer
berorientasi objek.
- Abtraksi (Abstraction)
Kemampuan
sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu
kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai
model dari “pelaku” abstrak yang dapat melakukan kerja, laporan dan perubahan
keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa
mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode
dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan
sebuah pengabstrakan.
- Enkapsulasi (Encapsulation)
Memastikan
pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek
dengan cara yang tidak layak, hanya metode dalam objek tersebut yang diberi
ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang
menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya
tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
- Polimorfisme (Polymorphism)
Melalui
pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa
orientasi objek dapat mengirim pesan, metode tertentu yang berhubungan dengan
sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut
dikirim. Contohnya, bila sebuah burung menerima pesan “gerak cepat”, dia akan
menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama,
dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang
sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut
polimorfisme karena sebuah variabel tungal dalam program dapat memegang
berbagai jenis objek yang berbeda selagi program berjalan, dan teks program
yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda
dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional
yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.
- Inheritas (inheritance)
Mengatur
polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan
diciptakan dengan jenis khusus dari objek yang sudah ada objek-objek ini dapat
membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang
perilaku tersebut (bahasa berbasis objek tidak selalu memiliki inheritas.)
Dengan
menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat
bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi
objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh
anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris,
petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh
data dari bag administrasi maka manager tersebut tidak harus mengambilnya
langsung tetapi dapat menyuruh petugas bag administrasi untuk mengambilnya.
Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara
mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui
objek petugas administrasi. Jadi untuk menyelesaikan suatu masalah dengan
kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi
tugasnya sendiri.
Pemrograman
Berorientasi Objek (Object Oriented Programming) merupakan teknik membuat suatu
program berdasarkan objek. Pengembangan program OOP dapat dilakukan dengan
mudah karena dapat mengurangi duplikasi kode dan mengurangi kesalahan program.
Program
Java dapat dibedakan menjadi dua jenis :
- Applet,
adalah program yang dibuat dengan Java, dapat diletakkan pada web server dan di
akses melalui web browser.
-
Aplikasi, adalah program yang dibuat dengan Java yang bersifat umum dan dapat
dijalankan secara langsung.
Versi Java
yang telah dirilis oleh Sun Microsystems atau yang lebih dikenal dengan J2SDK
(Java 2 System Development Kit) antara lain:
1. J2ME
(Java Micro Edition)
2. J2SE ( Java Standard Edition)
3. J2EE (Java 2 Entrprise Edition)
dimana urutan dari yang tertinggi adalah J2EE, J2SE, J2ME
2. J2SE ( Java Standard Edition)
3. J2EE (Java 2 Entrprise Edition)
dimana urutan dari yang tertinggi adalah J2EE, J2SE, J2ME
Selain
J2SDK ada pengembangan yang lain tergolong sebagai IDE (Integrated Development
Environment), contohnya adalah Semantic Cafe, Borland Jbuilder.
Untuk
mendownload software Java Development Kit (JDK)
- masuk ke dalam situshttp://java.sun.com/javase/downloads/index.jsp
- pilih paket JDK versi terbaru, klik tombol Download
Pada OOP
ada dua istilah yang sering digunakan yaitu class dan objek.
Class
berisi kumpulan dari objek-objek, sedangkan objek merupakan sebuah bentuk model
yang tergantung dari cara pandang terhadap objek yang dimaksud.
Untuk
lebih memudahkan pemahaman tentang class dan objek, sebagai contoh: sebuah
class Kereta api mempunyai objek antara lain gerbong, rel, rem, tempat duduk dan
yang lainnya. Setiap objek memiliki atribut dan metode. Atribut adalah segala
sesuatu yang berhubungan dengan karakteristik dari objek misalnya warna, bentuk
atau fasilitas dari Kereta Api tersebut. Sedangkan Metode dari Kereta Api
tersebut adalah kecepatan sehingga dapat berjalan dengan cepat di tengah
kemacetan. Jadi metode merupakan fungsi atau segala sesuatu yang dapat
dilakukan Kereta Api sebagai objek.
contoh
:
public
class KrtApi {
int gerbong;
String fasilitas;
}
int gerbong;
String fasilitas;
}
public
class KeretaApi {
public static void main(String[] args)
{
// membuat object
KrtApi kereta=new KrtApi();
// memanggil atribut dan memberi nilai
kereta.gerbong= 4;
kereta.fasilitas= “AC” ;
System.out.println(“Jumlah Gerbong:”+ kereta.gerbong);
System.out.println(“Fasilitas :”+ kereta.fasilitas);
}
}
public static void main(String[] args)
{
// membuat object
KrtApi kereta=new KrtApi();
// memanggil atribut dan memberi nilai
kereta.gerbong= 4;
kereta.fasilitas= “AC” ;
System.out.println(“Jumlah Gerbong:”+ kereta.gerbong);
System.out.println(“Fasilitas :”+ kereta.fasilitas);
}
}
Karakteristik
Pemrograman Berorientasi Objek
1. Abstraction
Yaitu kumpulan objek yang saling berinteraksi.
2. Enkapsulasi
Yaitu menyembunyikan suatu proses dalam sistem untuk menghindari interferensi dan
menyederhanakan penggunaan sistem itu sendiri
3. Inheritance (Pewarisan)
Suatu class dapat mewariskan atribut dan metode kepada class lain.
4. Polymorphism
Suatu objek dapat memiliki berbagai bentuk sebagai objek dari classnya sendiri.
1. Abstraction
Yaitu kumpulan objek yang saling berinteraksi.
2. Enkapsulasi
Yaitu menyembunyikan suatu proses dalam sistem untuk menghindari interferensi dan
menyederhanakan penggunaan sistem itu sendiri
3. Inheritance (Pewarisan)
Suatu class dapat mewariskan atribut dan metode kepada class lain.
4. Polymorphism
Suatu objek dapat memiliki berbagai bentuk sebagai objek dari classnya sendiri.
Contoh
Program Inheritance (Pewarisan)
public
class KeretaEkonomi extends KeretaApi {
public
void setTarif(int tarif) {
System.out.println(“Tarif :”+ tarif);
}
}
System.out.println(“Tarif :”+ tarif);
}
}
public
class KeretaEkonomiBeraksi {
public static void main(String[] args) {
public static void main(String[] args) {
KeretaEkonomi
kereta = new KeretaEkonomi();
//
Memanggil method di object
System.out.println(“Tarif
Kereta Ekonomi jakarta – Bogor”);
kereta.setTarif(2500);
}
}
kereta.setTarif(2500);
}
}
Sumber :
1. Abdul Kadir, Dasar Pemrograman Java 2, Penerbit Andi, 2005
2. Didik Dwi Prasetyo, 150 Rahasia Pemrograman Java, Elex Media Komputindo, 2007
3. http://university.romisatriawahono.net/file.php?file=/2/romi-oop-01-oopconcepts-18nov2008.pdf
1. Abdul Kadir, Dasar Pemrograman Java 2, Penerbit Andi, 2005
2. Didik Dwi Prasetyo, 150 Rahasia Pemrograman Java, Elex Media Komputindo, 2007
3. http://university.romisatriawahono.net/file.php?file=/2/romi-oop-01-oopconcepts-18nov2008.pdf
kita juga punya nih artikel mengenai 'object oriented programming', silahkan dikunjungi dan dibaca , berikut linknya http://repository.gunadarma.ac.id/bitstream/123456789/629/1/B93-99_Melani_S.pdf
BalasHapusterimakasih