Object Oriented Programming in JAVA
Posted by parvian on February 8, 2008
Dulu waktu masih baru mengenal mahluk yang bernama “JAVA” ini sempet bingung sendiri… masalahnya bahasa pemrogramman yang paling akhir aku kenal dan aku pelajari adalah MATLAB… dimana bahasa itu nggak seperti JAVA yang pola pikirnya dah murni Object Oriented (ketika itu) bahkan konsep OOP (Object Oriented Programming) itu apa seh??? kuatroklah pokoknya… dan sekarang dengan pengalaman yang sudah cukup lumayan… akhirnya aku bisa (sedikit) memahami bagaimana seh sebenarnya cara kerja OOP itu? aku mau share neh ma temen2… mungkin kalau ada yang bisa menambahkan penjelasan saya, saya tunggu komentarnya
aku pengen sharing pengetahuan disini… sambil berbagi dengan orang lain yang juga peduli ma JAVA
Yang menarik dari bahasan tentang JAVA adalah kemampuan Object Oriented Programmingnya yang benar-benar murni, nggak seperti bahasa pemrogramman yang lain misalnya C++ yang masih meninggalkan warisan procedure programmingnya dari bahasa C, java bisa dibilang murni Object Oriented. Bahasa pemrogramman yang berorientasi-objek sejati menyediakan mekanisme yang biasanya dikenal dengan istilah enkapsulasi, inheritansi, dan polimorfisme, sebenarnya C++ juga menyediakan mekanisme ini dengan cara yang hampir sama dengan JAVA, tetapi dengan beberapa keunggulan tentunya J, JAVA lebih unggul dari C++ bukan karena JAVA bisa mengungguli C++ tapi Karena JAVA memiliki kelebihan yang tidak dimiliki oleh C++ apa saja keunggulannya? Nggak saya bahas kali ini… mungkin nanti pada bahasan selanjutnya… yang ingin saya bahas kali ini adalah masalah mekanisme Object Oriented dalam JAVA untuk itu saya akan mencoba membahas definisi dari Enkapsulasi, Inheritansi, dan Polimorfisme menurut pandangan saya…
Enkapsulasi
Sebenarnya kalau mau dirunut, setiap program itu pasti terdiri dari dua hal yang mendasar yaitu program dan data. Pada model pemrogramman jaman jadul data dialokasikan di memori kemudian dapat diakses dan diolah oleh program dalam fungsi-fungsi atau subrutin-subrutin. Bagaiaman suatu bahasa pemrogramman dapat melakukan enkapsulasi yang mengolah data dengan deklarasi dan penyimpanan data adalah kunci dari rancangan pemrograman berorientasi-objek.
Enkapsulasi bisa di analogikan sebagai pembungkus untuk menjaga agar data dan program tetap sesuai dengan deskripsi dan tidak bisa diakses sembarangan oleh program yang lain, kenapa hal ini sangat penting? karena ini akan mempermudah programmer dari sisi penggunaan program di kemudian hari, dan enkapsulasi juga akan memberikan keamanan pada programmer karena sifat dari program akan tetap terjaga tanpa perlu khawatir akan muncul “keanehan” prilaku yang mungkin muncul ketika program dijalankan. Saya punya analogi yang saya baca dari bukunya Patrick Naughton “JAVA HANDBOOK” analoginya seperti system transmisi pada mobil, pada system transmisi tersebut kita tidak perlu tahu system kecepatan, kemiringan, dan posisi perseneling, dan system transmisi tidak akan bisa dipengaruhi oleh system yang lainnya… misalnya kita menggunakan system sein, system sein tersebut tidak akan mempengaruhi kinerja dari system transmisi… begitulah kerja enkapsulasi pada bahasa pemrograman… dia akan melindungi kerja dari program yang kita buat agar program dan data tersebut sesuai dengan deskripsi awal ketika kita buat, dan agar program dan data yang kita buat tidak semuanya bisa ditampilkan kepada pengguna..
Penerapannya di JAVA :
class variable {
int x;
public int y = 5;
private double z = 10;
protected double k = 15;
}
Tipe public, private, protected memiliki kekhususan tersendiri.. dimana fungsi yang diberikan berbeda untuk masing-masing tipe… misalnya public dimungkinkan variable y tersebut dapat diakses oleh semua class yang merujuk pada class variable… tipe private menjadikan variable z tidak dapat diakses oleh class yang lain sehingga sifatnya menjadi eksklusif hanya pada class ini… tipe protected menyebabkan variable k hanya bisa diakses oleh sub class dari class variable… enkapsulasi melindungi program dan data agar hanya informasi2 tertentu saja yang dapat diakses dan membuat program dan data yang dibuat menjadi konsisten karena tidak ada ambiguitas mengenai masalah perilaku untuk variable ataupun method.
Inheritance
Inheritance tuh kayak system hirarki yang kita pelajari di pelajaran biologi dulu (yang jurusan IPA) George Mendel ya kalo gak salah namanya? Seorang pastor yang berusaha menggambarkan system keturunan manusia yang ada hubungannya dengan dna (deoxirybonucleat acid) pada konsep OOP (Object Oriented Programming) kita mengenal super class ma sub class dimana setiap sub class yang ada pasti memiliki sifat dari super class ditambah dengan kekhususan dari sifatnya sendiri…
Ambil contoh hirarki dari hewan (lagi2 ambil mengambil contoh dari bukunya Patrick Naughton “JAVA HANDBOOK”) binatang adalah superclass dari sub class mamalia… dimana kita bisa membedakan setiap sifat sifat yang ada pada mamalia dan karena mamalia adalah turunan (inherit) dari binatang… maka semua sifat yang ada pada binatang pastilah dimiliki oleh mamalia, ditambah kekhususan dari sifat mamalia sendiri agar bisa dibedakan dengan jenis lain… (dibedakan dengan jenis reptile misalnya)
Penerapan di JAVA :
class point extends variable {
public int h = 8;
}
Kalimat extends yang ada tersebut memberikan penegasan bahwa class point adalah sub class dari class variable… menjadikan semua sifat dari class variable dan semua variable atau method yang ada pada class variable dapat diakses oleh class point (kecuali untuk tipe private yang memang dibuat eksklusif).
Polimorfisme
Arti harfiah dari polimorfisme adalah objek yang memiliki banyak bentuk.. bahasa pemrogramman yang berorientasi objek sejati harus bisa konsisten terhadap sifat yang ada dan telah dideskripsikan diawal ketika program dan data tersebut dibuat di JAVA sifat polimorfisme ini bisa dilihat pada perilaku method, dimana method di JAVA bisa di override… istilah kerennya overridding method analoginya seperti class anjing misalnya dia punya method smell… maka parameter yang diberikan oleh kepada method smell ini bisa berbeda… misalnya saya memberikan parameter kucing pada method smell di class anjing… maka method smell akan memberikan pengembalian menggonggong…. Sedangkan ketika saya memberikan parameter makanan pada method smell di class anjing… maka method smell akan memberikan pengembalian makan…
Penerapan di JAVA :
class variable1 {
int x;
int y;
varible1 (int x, int y) { //method dengan parameter list
this.x = x;
this.y = y;
}
variable1 () { //method tanpa parameter list
x = 1;
y = 1;
}
class variableview {
public static void main (String args []){
varable1 a = new variable1 ();
System.out.println(“x=” + a.x + “y=” + a.y);
}
}
Hasil yang akan ditampilkan ketika program diatas dijalankan adalah x = 1 dan y = 1 karena program ini membuktikan sifat polimorfisme yang ada di JAVA… class variableview memanggil method variable1 tanpa parameter… sehingga nilai yang dikembalikan adalah nilai yang ada dimana nilai tersebut berada di method yang tidak memiliki parameter list…
ayo monggo didiskusikan….
wassalam























February 8, 2008 at 1:29 pm
PertamaX!
Wow.. What a great article.. Nice Move!
Walopun msh KP, Msh bsa ngeluangin waktu bwt bagi2 ilmu.. Keren!
Wah aq jadi tambh smangat bwt nge-blog nich.. Keep it up Mas!
February 8, 2008 at 2:23 pm
mungkin koreksi dikit ndre, yang bener 2 object oriented murni itu .NET dkk
java masih mengenal beberapa variable primitif didalamnya. misal : int, double, float walaupun ada beberapa representasi objectnya, Integer, Double, Float
salut ndre blognya
February 8, 2008 at 2:36 pm
@dhanie: yups… bagi2 ilmu bisa berguna juga buat kita di dunia dan di akherat… bukan begitu pak dhanika?

@robi: betul sekali pak robi, maksud saya murni OOP itu dari sisi behaviour programnya… tapi emang di JAVA masih ada primitif tipe yang merupakan ciri dari bahasa pemrogramman prosedural… terima kasih sudah mampir…
February 8, 2008 at 2:45 pm
kuliah banget ndre

anyway, nice improvement on your blog ^_^
your writing also had some ‘weight’ on it, that’s a good starting point ^_^
ill looking forward for your next post
February 8, 2008 at 6:34 pm
@setya5785: thx a lot pal…
February 9, 2008 at 11:33 am
java behavournya juga bisa nggak OOP kok ndre..
bisa jadi AOP klo pake spring framework..
: )
nice opinion btw..
February 9, 2008 at 11:34 am
baca ini ndre
http://faq.wordpress.com/2007/09/03/how-do-i-post-source-code/
biar source code mu enak dibaca
: )
February 9, 2008 at 11:37 am
@Kiki Ahmadi: wah, thx… sangat membantu sekali linknya
February 9, 2008 at 11:40 am
@Kiki Ahmadi: AOP itu Application Oriented Programming to? lah… yang jelas kan dia gak terstruktur kayak MQL 4
February 9, 2008 at 12:06 pm
ndre, yang kamu contohkan itu bukan polymorph
itu bukannya method overloading ya.
polymorph kan satu objek bisa mempunyai banyak bentuk
misal
Ayam extend Unggas
Unggas extends Binatang
ayam itu polymorph
karena dia bisa Unggas juga bisa Binatang..
poly : banyak
morphus : Bentuk
bener gak?
February 9, 2008 at 12:09 pm
@ AOP
Aspect Oriented Programming..
iya, klo terstruktur ya jelas enggak ndre
: )
February 9, 2008 at 1:20 pm
@Kiki Ahmadi: overloading method itu salah satu contoh dalam penerapan polimorfisme… soalnya polimorfisme (seperti penjelasanku itu) dalam arti harfiah adalah satu objek yang memiliki berbagai bentuk… dengan kata lain bisa dicontohkan method yang di override… (nama sama dengan isi yang berbeda di dalamnya) gitu ki.. coba baca bukunya mbah dietel, yang kamu contohkan malah inheritance pak kiki…. woooo Aspect Oriented Programming itu bukannya mirip objek ya? melihat satu kesatuan program tanpa memandang detail dari program itu?
February 10, 2008 at 6:29 am
weits..
oke overloading method itu juga penerapan dari polymorfisme..
tapi contoh yang aq tunjukkan juga polymorfis ndre,,
karena java cuman mengijinkan polymorfis dalam bentuk extend satu class atau implement satu ato banyak interface..
gak kayak C yang mengijinkan multiple inheritance
jadi dimungkinkan adanya class Unicorn yang melakukan inherit terhadap class Kuda dan Burung
monggo dibaca bukunya lagi ndre..
tambahan referensi lagi..
http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming
http://en.wikipedia.org/wiki/Method_overloading
http://en.wikipedia.org/wiki/Ad-hoc_polymorphism
aq juga kurang setuju klo contoh Polymorfis pake overloading methods.
soalnya Polymorph berfungsi untuk melakukan dynamic binding , kata kunci utamanya adalah class…
wah swangane tambah seru ae perdebatan kita ndre
hwaakakakakakak
: )
February 10, 2008 at 9:11 am
@Kiki Ahmadi: yah… emang pandangan polymorfisme bisa diperluas… tapi contoh dasar yang bisa dipakai emang behaviour dari method yang dioverride.. kayak contoh yang aku pake itu… class anjing punya dua method misalnya… method smell yang satu parameter yang dipasingkan makanan yang satu parameter yang dipasingkan kucing… return value yang dikembalikan bakal beda… dengan method yang sama… setuju nggak kalo kayak gitu? thx buat linknya ya?
February 10, 2008 at 2:51 pm
bravo……….
sipp!!!
@parvian
sepakat masalah poly-nya. emang, poly yang di-morph-kan itu ya method dari class yang satu turunan atau satu interface. contohe koyo kucing. asumsi kucing itu class utama dan punya method mengeong yang isinya meong. trus klo kucing di-inherit ke kucingAnggora dan kucingGarong, bisa jadi isi method mengeongnya beda, jadi meong-meong untuk kucingAnggora dan suit-suit untuk kucingGarong. CMIIW
February 11, 2008 at 2:09 am
@Beny: yah… aku juga punya pendapat gitu mas…
thx mas beny dah mau mampir 
February 12, 2008 at 4:16 am
@_#… perdebatan panjang di komen