Object Oriented Programming

May 25, 2012

Assalammu’alaikum 😀

Kali ini saya akan coba sharing soal Object Oriented Programming (OOP) dari sudut padang saya dan saya juga akan mencoba step by step implementasi OOP ini dengan java jadi mungkin akan terdiri dari beberapa postingan.

OOP merupakan salah satu paradigma dari banyak paradigma dalam dunia pemrograman. Biasanya kita mengenal prosedural programming ketika kita mulai belajar di teknik informatika atau ilmu komputer. Setelah itu kita akan bertemu dengan yang namanya pemrograman berbasis objek (PBO) atau OOP dan paradigma lainnya ada functional programming, Aspect Oriented Programming dan lain-lain. Namun kali ini saya coba share mengenai OOP menurut otak dan hati nurani saya hahahaha.

Dalam berbagai referensi biasanya ketika kita masuk kedalam OOP kita harus melihat suatu sistem yang merupakan solusi yang ingin kita bangun dari suatu case sebagai Objek buka sebagai suatu proses. Mungkin dapat dikatakan ketika kita masuk kedalam prosedural programming kita melihat proses terlebih dahulu baru kita melihat ada apa saja dalam proses yang dibutuhkan proses itu sendiri, sedangkan dalam OOP, kita harus melihat berbagai objek terlebih dahulu baru melihat ada artibut apa saja yang ada di dalam objek tersebut (yang memungkinkan atribut tersebut merupakan objek dari kelas lain) dan juga proses apa saja yang dimiliki oleh objek tersebut atau biasa disebut dengan methode.

Komponen yang biasanya kita harus kenal dalam OOP adalah class, abstract class, interface, object, methode,package atau mungkin namespace kalau di C++ atau C# dan hak akses. Karena saya labih suka java sehingga saya akan membahas OOP ini menggunakan kultur java hahaha…

1. Class : class merupakan prototype dari program, atau kita menulis semua logic program itu dalam sebuah kelas. Mirip seperti struct seperti pada procedureal programming, namun didalam class dapat memiliki properti seperti object atau variable dan juga method (procedure dan function).

2. Object : Merupakan instansiasi dari class (damnnn .. ini kata-kata yang sering keluar tapi kadang beberapa orang sulit untuk memahaminya). Ketika kita ingin membuat mie kuah pada dasarnya itu merupakan algoritma yang rumit, dari mulai membuat mie dari tepung dan telor, persiapan bumbu-bumbu dan lain-lainnya untuk membuat class mie kuah. Namun dengan rule model yang sudah ada dibuat suatu object yang merupakan instans dari mie kuah, yaitu mie instan kuah rasa soto ayam misalkan. Hanya tinggal rebus mie yang sudah jadi dan siapkan dua bumbu utama yang sudah disatukan tinggal masukan ke mangkok. Sehingga lebih sederhana, tidak melihat kerumitan didalamnya. keyword : Instans

3. Methode :secara singkat adalah Procedure atau Function yang ada dalam class 😀

4. abstract class : merupakan class abstrac yang artinya class ini mempunyai methode (prosedure atau function) tetapi tidak di implementasikan. (tetapi masih dimungkinkan untuk memiliki methode yang memiliki implementasi)

5. Interface : mirip dengan abstract class tapi kelas yang berbentuk interface benar-benar tidak memiliki implementasi sama sekali.

6. package : merupakan cara pengorganisasian kelas-kelas baik itu abstract atau pun tidak dan juga semua resource yang dibutuhkan untuk program/sistem berjalan itu di organisasi dalam package. Namun ada perbedaan dengan pemanfaatannya dengan “direktori” pada biasanya. Pagckage dapat menjadi penjelasan awal kelas-kelas apa yang ada didalam  package tersebut dan untuk project apa. Misalkan com.gesture.signal.model artinya package ini berada di folder ../com/gesture/signal/model dan memiliki arti berisi class-class model untuk pengolahan sinyal di project untuk gesture recognition (contoh).

7. Access Identifire

Dalam OOP sebenarnya memiliki 3 konsep utama yang biasanya harus dipahami dan dipegang yaitu : Encapsulation, Inheritance, dan Polymorphism. Selama kita paham dan memegang teguh 3 konsep utama yang mendasari OOP ini makan apapun teknologinya yang mengadopsi paradigma OOP maka insya Allah kita selamat hahaha..

Saya akan coba untuk memaparkan satu persatu:

1. Encapsulation : merupakan konsep pengkapsulan baik data maupun methode (nanti akan dijelaskan dalam gambar bagaimana proses encapsulation)

2. Inheritance : merupakan konsep penurunan class dari class lainnya yang ketika suatu class B merupakan turunan atau anak dari class lain misalkan class A, maka class B turunannya tersebut mewarisi segala yang di perbolehkan untuk diwariskan oleh class A kepada class B.

3 polymorphism : nah untuk yang ini agak sulit menjelaskannya harus memperlihatkan contoh, kalau dalam bahasa indonesianya ini merupakan konsep penganekaragaman artinya suatu objek dari kelas tertentu misalkan kelas A dapat berwujud kelas lain seperti kelas B selama kelas B itu merupakan turunan dari kelas A.

Karena mau jum’atan saya teruskan artikel ini lain kali dan akan memposting lanjutannya di lain waktu.. mudah2an Allah memberikan kesempatan dan tidak memberikan saya sifat malas untuk melanjutkan tulisan ini hehehe.. 😀

***

June 8, 2012

Assalammu’alaikum

Kali ini sebelum jum’atan saya meneruskan tulisan saya beberapa minggu lalu hahaha… terlalu lama memang .. :))

Sekarang kita mulai dengan konsep pertama dalam OOP yaitu encapsulation.  Sebenarnya saya sendiri masih agak bingung dengan definisi dari enkapsulasi ini karena ada yang berpendapat bahwa enkapsulasi ini mereferensi ke penggunaan access modifier dalam suatu atribut sehingga atribut atau properti tersebut tidak dapat di akses begitu saja oleh sistem. Walaupun saya lebih sependapat dengan yang di jelaskan oleh sun.oracle dan mas ifnu bima dalam bukunya, bahwa konsep enkapsulasi adalah pembungkusan karakter dan prilaku dalam sebuah class dimana dalam setiap entitas dunia nyata biasanya mempunyai karakteristik dan prilaku tersendiri yang dalam OOP entitas ini dibuat dalam sebuah class dan didalamnya terdapat karakteristik yang biasa disebut dengan properti/atribut/variable dan prilaku yang biasa disebut dengan methode. Enkapsulasi menyebabkan kode menjadi self explained, artinya hanya dengan melihat kode kita dapat mengetahui apa logic di balik kode ini, atau kita bisa mengetahui apa maksud dari kode yang sedang kita baca.

Sedangkan yang mereferensikan enkapsulasi ini pada access modifier, enkapsulasi dapat di gunakan untuk melindungi access variable tertentu apakah variable/atribut tersebut dapat di akses secara langsung (publik) atau tidak (private) atau hanya turunan entitas tersebut yang dapat menggunakan atribut atau properti milik induknya (protected).

Misalkan saya punya entitas atau kelas Mahasiswa dengan atribut (nim, nama, alamat, tangga lahir) dan saya gunakan access modifier untuk setiap atributnya,

import java.util.Date;

/**
 *
 * @author hendri
 */
public class Mahasiswa {

    private String nim;
    private String nama;
    private String alamat;
    private Date tanggalLahir;
}

atau bila kita gambarkan :

Nah yang menjadi masalah pun adalah dengan access modifier private ini bagaimana kita dapat mengakses propoerti atau atribut yang ada dalam kelas mahasiswa tersebut sementara access modifier yang diberikan adalah private, maka dari itu kita tambahkan prilaku untuk mengakses variable tersebut dengan menggunakan accessor method atau biasa di sebut getter dan setter.


import java.util.Date;

/**
*
* @author hendri
*/
public class Mahasiswa {

private String nim;
private String nama;
private String alamat;
private Date tanggalLahir;

public String getAlamat() {
return alamat;
}

public void setAlamat(String alamat) {
this.alamat = alamat;
}

public String getNama() {
return nama;
}

public void setNama(String nama) {
this.nama = nama;
}

public String getNim() {
return nim;
}

public void setNim(String nim) {
this.nim = nim;
}

public Date getTanggalLahir() {
return tanggalLahir;
}

public void setTanggalLahir(Date tanggalLahir) {
this.tanggalLahir = tanggalLahir;
}

}

atau kita gambarkan seperti ini :

Untuk mengisi nilai nim, nama, alamat,dan tanggal lahir kita menggunakan method setter sedangkan untuk mengambil nilai variable atau atribut kita dapat menggunakan nilai getter. Dalam getter dan setter sendiri dapatkan kita tambahkan statement2 tertentu untuk melindungi atribut2 atau variable2 yang ada dalam class. Misalkan dalam getter kita memberikan nilai return dari nim, nama, alamat ataupun tanggal lahir dari hasil copy atribut2 tersebut, untuk keamanan dari atribut2 tersebut dari serangan attacker yang mungkin mencari kelemahan sistem kita. Sehingga yang nilai yang dikembalikan dari method getter adalah nilai copy atau clone() dari atribut tersebut dengan referensi memori yang pastinya berbeda. Enkapsulasi elain untuk mempermudah dalam melakukan reusable yang dimiliki OOP dalam menggunakan kembali objek2 tertentu juga untuk mempermudah dalam menjelaskan code program dan juga yang paling terpenting untuk mengamankan code kita dari kemungkinan serangan-serangan kegagalan sistem atau bug yg mungkin di manfaatkan oleh para penyerang atau mungkin hacker atau cracker.

Selanjutnya yang kita bahasa adalah mengenai Inheritance  atau Pewarisan.

Apa yang di wariskan?? biasanya yang di wariskan adalah karakteristik dan juga perilaku suatu induk kepada anak yang merupakan keturunannya. Namun biasanya karakteristik-karakteristik dan prilaku yang diturunkan induknya di atur oleh pemberian access modifier. Untuk dapat menurunkan karakteristik atau properti atau atribut maka variable tersebut harus diberikan access modifier protected. Sedangkan untuk menurunkan prilaku atau method pun sama, method harus di deklarasikan sebagai method protected. Lalu bagaimana bila dideklarasikan dengan public ? atribut ataupun method yang diberikan access modifier sebagai public tetap dapat di turunkan pada turunannya atau dengan kata lain turunannya dapat membaca atribut atau method yang ada pada induknya, namun selain turunannya yang dapat menggunakan atribut dan method induknya, semua class yang ada dalam project tersebut dapat menggunakan atribut ataupun method milik induk class tersebut. Sehingga jika memang suatu atribut atau method hanya ingin dapat digunakan oleh turunan class nya saja, maka access modifier yang diberikan seharusnya adalah protected.

contoh inheritance antar class, dan inheritance antara class dan interface:

Next adalah Polymorphism..

Polymorphism dalam bahasa Indonesia adalah penganekaragaman. Singkatnya kita dapat membuat suatu object atau variable misalkan tadi adalah Bangun2D kita buat 1 variable  dengan kelas tersebut tetapi kita dapat construct menjadi objek dari kelas kotak ataupun segitiga. Akan tetapi yang dapat di akses adalah sebatas atribut atau method yang ada pada kelas induknya dalam hal ini adalah kelas Bangun2D.

misalkan kita ilustrasikan sebagai berikut (kelas yg digunakan lanjutan dari kelas diagram dengan extends, kelas Bangun2D yang diturunkan oleh kelas Kotak dan Segitiga ) :

Nah mungkin sekian penjelasan saya yang kurang jelas ini, mudah-mudahan sedikit-banyak dapat memberikan informasi bagi yang membutuhkan … heehehehe….

Advertisements

3 thoughts on “Object Oriented Programming

  1. Harry Ajja May 14, 2015 / 1:17 pm

    mengapa java masuk didalamnya oop

  2. Harry Ajja May 14, 2015 / 1:19 pm

    boleh kak saya tanya: yang pertama mengapa java masuk dalam oop dan mengapa istilah destructor tidak dikenal java..sebelumnya makasih

    • situkangsayur May 14, 2015 / 3:27 pm

      wah ini artikel dah lama banget ya hahaha

      Ya sederhananya karena java mengadopsi paradigma object oriented programming.

      Destructor/dtor itu kebalikan dari constructor, nah kalau di Java, penghancuran object tersebut sudah di handle oleh garbage collection, jd kita gak perlu implementasi restructornya. sudah otomatis sama java bersih2 objectnya ketika object tersebut sudah tidak digunakan lagi.

      CMIIW

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s