KONSEP
OBJECT-ORIENTED PROGRAMMING
Class dan object
Kelas Merupakan
kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu
tujuan tertentu dimana didalamnya terdapat kumpulan atribut dan method,
contoh kelas :
binatang, kendaraan, benda dsb.
Sedangkan objek
merupakan bentuk representasi dari sebuah kelas, membungkus data dan fungsi
bersama menjadi suatu unit atau entitas dalam sebuah program komputer.
Dalam
bahasa pemrograman java sebuah file berekstensi *.java harus memiliki sebuah
class public dan dapat memiliki beberapa class non public. Contoh deklarasi
sebuah kelas binatang :
public class binatang {}
Contoh objek :
public class binatang {
public static
void main(String[] args)
{
binatang
ayam = new binatang();
binatang
kucing = new binatang();
binatang
anjing = new binatang();
}
}
Instansiasi
Instansiasi
adalah proses pembuatan objek dari kelas yang sudah ada. Contoh instansiasi
dari class di atas :
binatang ayam = new
binatang();
binatang kucing = new
binatang();
binatang anjing = new
binatang();
Deklarasi tersebut
merupakan contoh dari deklarasi untuk melakukan instansiasi. Untuk membuat
objek dari suatu class dalam Java digunakan keyword new.
Konstruktor
Konstruktor
adalah bagian dari definisi suatu kelas yang berfungsi menciptakan instans dari
kelas tersebut. Konstruktor ini bisa kita buat sendiri, atau bila kita tidak
mendefinisikannya, maka kompiler Java akan membuatkan konstruktor default untuk
kelas tersebut pada saat kompilasi. Yang perlu diperhatikan adalah bahwa suatu
konstrukor tidak termasuk anggota suatu kelas seperti metode dan variabel dan
bahwa konstruktor bisa dibuat lebih dari satu.
Bentuk
konstruktor sendiri mirip dengan sebuah metode. Beda yang paling mencolok
adalah warna sebuah konstruktor harus sama dengan warna kelas tersebut dan
konstruktor tidak memiliki definisi return type seperti sebuah metode.
Berikut adalah
contoh-contoh penciptaan suatu kelas dengan berbagai jenis konstruktor.
SuatuKelas kelasContoh = new
SuatuKelas();
SuatuKelasLain kelasContoh2 = new
SuatuKelasLain("judul");
BufferedReader reader =
new BufferedReader(new
InputStreamReader(System.in));
new SuatuKelas().sebuahMetode();
Pada contoh pertama,
kita menciptakan sebuah instans dari kelas SuatuKelas dengan
memanggil konstruktor tanpa parameter. Bila dalam pendefinisian
kelas SuatuKelas sebenarnya tidak ada pendefinisian konstruktor,
perintah seperti ini tetap dapat dipakai, karena kompiler Java akan menyisipkan
secara otomatis kosntruktor default bila tidak ada definisi konstruktor dalam
sebuah kelas. Konstruktor default sendiri sebenarnya tidak melakukan apa-apa
dalam proses instansiasi objek, karena tidak berisi perintah apapun.
Pada contoh kedua,
kita memanggil sebuah konstruktor yang mengandung argumen berupa sebuah
parameter bertipe String. Konstruktor seperti ini menjadi sangat berguna
bila dalam proses instansiasi sebuah objek kita ingin memasukkan suatu nilai
untuk dapat digunakan oleh instans baru tersebut.
Pada contoh ketiga,
kita memanggil konstruktor dengan argumen sebuah parameter bertipe InputStreamReader.
Yang menarik dari contoh ini adalah kita memasukkan argumen berupa kelas baru
yang anonim sehingga terjadi pemanggilan konstruktor lain di dalam argumen
konstruktor semula. Dalam konstruktor yang terakhir kita juga memasukkan argumen
berupa sebuah objek InputStream yaitu System.in.
Contoh keempat adalah
contoh yang lebih jelas mengenai kelas anonim. Pada contoh ini kita menciptakan
sebuah instans dari kelas SuatuKelas namun tidak menyimpan referensi
ke instans tersebut, sehingga kita hanya bisa menggunakannya sekali, yaitu
langsung pada baris tersebut seperti terlihat pada contoh.
Ada hal yang menarik
dan perlu diperhatikan mengenai konstruktor dalam kelas-kelas yang merupakan
subkelas. Pada saat kita menginstans sebuah objek dari sebuah subkelas,
kompiler tidak hanya memanggil konstruktor subkelas tersebut, melainkan
memanggil kosntruktor superkelasnya terlebih dahulu, baru kemudian memanggil
konstruktor subkelas tersebut. Penjelasan mengenai hal ini adalah bahwa sebuah
subkelas adalah superkelas itu sendiri namun dengan tambahan karakterisasi yang
lebih detil. Sehingga untuk menginstans sebuah subkelas, pertama-tama kita
menginstansiasi sebuah superkelas, kemudian menerapkan karakterisasi dari
subkelas kepada instans baru tersebut.
Atribut
Atribut adalah sesuatu yang
dimiliki oleh objek. Setiap objek yang dibuat dari kelas yang sama akan
memiliki atribut yang sama. Pada implementasi program, sebuah atribut ditulis
dalam bentuk data/ variable. Misalkan dari Kelas binatang_dideklarasikan
atribut :
int jmlKaki;
String warna;
public String suara;
Maka untuk setiap
objek ayam, kucing dan anjing, ketiganya akan memiliki atribut yang sama, tapi
setiap atribut bisa di-assigndengan nilai yang berbeda. Contoh deklarasi
atribut dengan menggunakan Java yaitu:
//assign nilai atribut untuk
objek ayam
ayam.jmlKaki = 2;
ayam.warna=”Hitam”;
ayam.suara=”kukuruyuk”;
//assign nilai atribut untuk
objek kucing
deni.jmlKaki = 4;
deni.warna=”Kuning”;
deni.suara=”meong”;
//assign nilai atribut untuk
objek anjing
ayi.jmlKaki = 4;
ayi.warna=”Putih”;
ayi.suara=”guk”;
Dari contoh deklarasi di atas,
dapat kita lihat bahwa setiap objek akan memiliki atribut yang sama, yaitu
jmlKaki, warna, dan suara. Tetapi, masing-masing atribut dari setiap objek bisa
diberi nilai yang berbeda.
Method
Method adalah sesuatu yang dapat
dilakukan oleh objek. Method dalam implementasi program ditulis dalam bentuk
fungsi. Misalkan pada kelas binatang dideklarasikan method bersuara. Maka untuk
setiap objek pada kelas binatang bisa bersuara. Contoh implementasinya adalah:
//deklarasi method bersuara
public class binatang {
int jmlKaki;
String warna;
public String suara;
public
void bersuara()
{
System.out.println(suara);
}
}
//pemanggilan method oleh objek
ayam
ayam.bersuara();
//pemanggilan method oleh objek
kucing
kucing.bersuara();
//pemanggilan method oleh objek
anjing
anjing.bersuara();
Dari contoh di atas dapat kita
lihat bahwa untuk setiap objek pada kelas binatang bisa memanggil method
yang dideklarasikan pada kelas binatang
Abstraction
Abstraction adalah kemampuan
untuk membuat kelas abstrak pada OOP.
Enkapsulasi Java
Enkapsulasi adalah
suatu cara untuk menyembunyikan informasi detail dari suatu class. Dua hal yang
mendasar dalam enkapsulasi yakni :
-
Information
hiding.
-
Interface
to access data.
-
Information
hiding
Sebelumnya kita dapat
mengakses anggota class baik berupa atribut maupun method secara langsung
dengan menggunakan objek yang telah kita buat. Hal ini dikarenakan akses
kontrol yang diberikan kepada atribut maupun method yang ada di dalam class
tersebut adalah 'public'. Kita dapat menyembunyikan informasi dari suatu class
sehingga anggota class tersebut tidak dapat diakses dari luar, caranya adalah
hanya dengan memberikan akses kontrol 'private' ketika mendeklarasikan atribut
atau method. Proses ini disebut dengan information hiding.
Interface
to access data
Jika kita telah
melakukan information hiding terhadap suatu atribut pada suatu class, lalu
bagaimana cara melakukan perubahan terhadap atribut yang kita sembunyikan
tersebut, caranya adalah dengan membuat suatu interface berupa method untuk
menginisialisasi atau merubah nilai dari suatu atribut tersebut.
Contoh program
sederhana Enkapsulasi pada Java :
class
enkapsulasi {
private int secret;
public boolean setSecret (int secret) {
if (secret < 1 || secret > 100) {
return false;
}
this.secret = secret;
return true;
}
public getSecret{} {
return secret;
}
}
private int secret;
public boolean setSecret (int secret) {
if (secret < 1 || secret > 100) {
return false;
}
this.secret = secret;
return true;
}
public getSecret{} {
return secret;
}
}
note : bahwa field ini tidak langsung diakses oleh program lain
menggunakan method getter dan setter.
Inheritance
Inheritance merupakan
konsep pewarisan pada OOP. Pada OOP kelas yang satu bisa dihubungkan dengan
kelas lainnya. Dimana kelas yang satu bisa dibuat menjadi turunan dari kelas
lainnya. Kelas yang satu disebut sebagai parent, dan kelas lainnya
disebut sebagai child. Berarti dalam hal ini kelas parent menurunkan
atribut dan methodnya ke kelas child.
Ada 3 tipe akses yang
bisa diturunkan dari kelas parent ke kelas child, yaitu:
a. Public: data
dan method bisa diakses oleh semua kelas, baik itu kelas parent, child, ataupun
kelas lainnya.
b. Private: data
dan method hanya bisa diakses oleh kelas itu sendiri.
c. Protected:
data dan method bisa diakses oleh kelas parent dan kelas child
Misalkan dari kelas
binatang yang sudah kita buat akan dibuat kelas turunannya, bernama kelas
mamalia. Untuk membuat suatu kelas merupakan turunan dari class parent,
implementasi pada java menggunakan keyword extends. Contoh:
class mamalia extends
binatang{//inheritance
//atribut pada kelas mamalia
string tempat_hidup;
//method
pada kelas mamalia
public void settempat_hidup(string
tempat_hidup)
{}
public void gettempat_hidup()
{} //
}
Dari deklarasi di
atas, kelas mamalia merupakan turunan dari kelas binatang. Perhatikan terdapat
kata kunci extends pada deklarasi di atas. Maka, setiap objek yang
diinstansiasi dari kelas mamalia akan memiliki atribut tempat_hidup (atribut
asli), atribut jmlKaki, warna, dan suara (atribut turunan dari kelas binatang).
Dengan catatan atribut dan method yang dideklarasikan pada kelas parent harus
diberi tipe akses public atau protected agar dapat diturunkan ke kelas child.
Bila digabungkan menjadi:
Class binatang{ //deklarasi
class
//deklarasi property dengan tipe
akses protected
protected int jmlKaki;
protected String warna;
protected String suara;
//deklarasi method bersuara
public void bersuara()
{
System.out.println(suara);
}
class mamalia extends
binatang{//inheritance
//atribut pada kelas mamalia
string tempat_hidup;
//method pada kelas mamalia
public void
settempat_hidup(string tempat_hidup){}
public void
gettempat_hidup(){} //
}
public static void main(String[]
args) {
//instansiasi objek binatang
binatang ayam=new binatang;
//assign nilai atribut
ayam.jmlKaki = 2;
ayam.warna=”Hitam”;
ayam.suara=”kukuruyuk”;
//pemanggilan method
ayam.bersuara();
//instansiasi objek mamalia
mamalia paus = new mamalia;
//assign nilai atribut dari class
mamalia
heni.tempat_hidup=laut;
//atribut dari class binatang
paus.warna = “biru”;
}
Polimorfisme
Polimorfisme
secara bahasa dapat diartikan memiliki banyak bentuk. Konsep ini terdapat dalam
bahasa pemrograman seperti konstruktor yang memiliki beberapa bentuk. Selain
konstruktor, konsep ini juga berlaku bagi metode. Metode atau konstruktor dapat
memiliki banyak bentuk dalam arti memiliki nama yang sama namun dengan argumen
yang berbeda atau dengan return type yang berbeda. Contoh :
public void binatang(int
jmlKaki){};
public void
binatang(string jmlKaki){};
Kegunaan
dari polimorfisme adalah agar kita dapat mendefinisikan beberapa konstruktor
atau metode dengan karakteristik yang berbeda-beda agar nantinya dapat
digunakan untuk kasus-kasus yang berbeda. Polimorfisme sebenarnya dapat dihilangkan dengan
medefinisikan sebuah konstruktor atau metode yang dapat menangani semua kasus
yang mungkin.
Kelas Abstrak
Kelas abstrak adalah
kelas yang mengandung konsep abstrak sehingga tidak mungkin mempunyai instans.
Misalnya suatu kelas abstrak Binatang yang mengandung konsep tentang
salah satu makhluk hidup. Namun kita tidak dapat menciptakan sebuah instans
dari kelas tersebut karena tidak masuk akal menciptakan instans dari suatu
Binatang. Yang mungkin adalah menciptakan instans dari
kelas Ayam, Kucing, atau kelas lain yang sudah mengimplementasikan
konsep abstrak dari Binatang.
Kelas abstrak dapat mengandung
metode abstrak, yaitu metode yang tidak memiliki implementasi. Dengan begitu,
kelas abstrak dapat menentukan bagaimana konsep abstrak tersebut
diimplementasikan oleh subkelas yang akan menggunakannya. Kelas abstrak tidak
harus memiliki metode abstrak, namun setiap kelas yang memiliki metode abstrak
haruslah menjadi kelas abstrak. Kelas abstrak hanya ada untuk
mengekspresikan sifat umum yang dimiliki oleh kelas-kelas turunannya.
Interface
Interface merupakan
suatu mekanisme yang disediakan oleh Java yang memungkinkan berbagai konstanta
atau menentukan bentuk metode yang dapat digunakan oleh sejumlah kelas. Sekilas
interface mirip dengan kelas abstrak, karena kelas abstrak juga menentukan bentuk
metode untuk subkelas. Namun interface dapat dibedakan dengan kelas abstrak
dalam hal seperti berikut :
-
Kelas abstrak dapat mengandung metode abstrak meupun metode tidak absrak,
sedangkan hanya dapat mengandung metode abstrak.
-
Kelas abstrak dapat dapat mendeklarasiakan variable instant, sedangkan
interface hanya dapat mendefinisikan konstanta.
-
Kelas abstrak digunakan oleh kelas lain melalui pewarisan ( via kata kunci extends
), sedangkan interface digunkan oleh kelas tidak melalui mekanisme itu.
Interface menyerupai kelas,
perbedaannya adalah kata kunci interface menggantikan kedudukan kata kunci
class. Bentuk pendeklarasiannya adalah sebagai berikut :
Public class WarnaInterface{
// metode tapa implementasi
// definisi konstanta
}
// metode tapa implementasi
// definisi konstanta
}
Pada pengertian lain
interface adalah jenis khusus dari blok yang hanya berisi method
signature( atau constant ). Interface mendefinisikan sebuah(signature) dari
sebuah kumpulan method tanpa tubuh. Interface mendefinisikan sebuah cara
standar dan umum dalam menetapkan sifat-sifat dari class-class. Mereka
menyediakan class-class, tanpa memperhatikan lokasinya dalam hirarki class,
untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa
interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat
memanggil method interface dan versi yang tepat dari method yang akan
dieksekusi tergantung dari tipe object yang melewati pemanggil method interface