Parvian’s Weblog

Only laity which will be non-stoped to learn

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

17 Responses to “Object Oriented Programming in JAVA”

  1. dhanie Says:

    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!

  2. robi Says:

    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 :D

    salut ndre blognya

  3. parvian Says:

    @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… :)

  4. setya5785 Says:

    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 ;)

  5. parvian Says:

    @setya5785: thx a lot pal…

  6. Kiki Ahmadi Says:

    java behavournya juga bisa nggak OOP kok ndre..

    bisa jadi AOP klo pake spring framework..

    : )

    nice opinion btw..

  7. Kiki Ahmadi Says:

    baca ini ndre
    http://faq.wordpress.com/2007/09/03/how-do-i-post-source-code/

    biar source code mu enak dibaca

    : )

  8. parvian Says:

    @Kiki Ahmadi: wah, thx… sangat membantu sekali linknya :)

  9. parvian Says:

    @Kiki Ahmadi: AOP itu Application Oriented Programming to? lah… yang jelas kan dia gak terstruktur kayak MQL 4 :(

  10. Kiki Ahmadi Says:

    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?

  11. Kiki Ahmadi Says:

    @ AOP
    Aspect Oriented Programming..

    iya, klo terstruktur ya jelas enggak ndre

    : )

  12. parvian Says:

    @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? :)

  13. Kiki Ahmadi Says:

    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

    : )

  14. parvian Says:

    @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? :)

  15. Beny Says:

    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

  16. parvian Says:

    @Beny: yah… aku juga punya pendapat gitu mas… :) thx mas beny dah mau mampir :)

  17. setya5785 Says:

    @_#… perdebatan panjang di komen

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>