jump to navigation

Paradigma Pemrograman : Object Oriented Programming & Object Based Programming 28 January 2008

Posted by computeraholic in Uncategorized.
trackback

KATA PENGANTAR

Puji syukur ke hadirat Allah SWT atas rahmat dan hidayah-Nya sehingga penulis dapat menyelesaikan makalah dengan judul “PARADIGMA PEMROGRAMAN : OBJECT ORIENTED PROGRAMMING & OBJECT BASED PROGRAMMING”.

Penulis memandang perlu untuk mengemukakan perbedaan paradigma pemrograman OOP atau Object Oriented Programming dengan OBP atau Object Based Programming dikarenakan banyak programmer pemula sampai programmer mahir sekalipun bahkan, yang sangat saya sayangkan, Dosen dan Tenaga Pengajar IT tidak mengerti sama sekali perbedaan paradigma pemrograman ini. OOP ADALAH FUNDAMENTAL! Kesalahan pengertian tentang konsep OOP merupakan kecerobohan dan kebodohan terbesar bagi seorang TI.

OOP adalah fundamental. OOP itu penting! Entah apalagi yang harus di ungkapkan pentingnya seorang TI mengerti dengan benar apa itu OOP. Tulisan ini mengalir, terus terang, karena sakit hati di bodohi (atau mungkinkah ini disebut penipuan?) oleh Dosen saya sendiri.  Mudah-mudahan beliau sempat membaca blog ini.

Pesan saya kalaupun dia sempat membaca:

“Jangan segan memberikan saya nilai E sekalipun.”

“Anda telah membodohi kami, dan Anda akan dituntut untuk itu di hari Akhir kelak.”

“Kenapa Anda tidak bilang kalau Anda tidak tahu? Kenapa Anda pura-pura tahu dan membodohi kami?”

Akhir kata, semoga makalah sederhana yang tidak bisa penulis selesaikan dengan aturan penulisan karya ilmiah karena keterbatasan waktu ini dapat bermanfaat bagi semua. Lebih dan kurang, penulis memohon maaf yang sebesar-besarnya apabila terdapat kesalahan dalam makalah ini.

 

Wassalam,

 

YUDHI ARMYNDHARIS

 

 

 

Tentang Penulis:

I. PENDAHULUAN

1.1. SEJARAH OOP

Konsep OOP dimulai pertengahan 1960-an dengan sebuah bahasa program SIMULA kemudian dilanjutkan di era 70-an dengan SMALLTALK. Meskipun developer software tidak secara intensif mengembangkan OOP, tetapi metodologi objectoriented tetap digunakan sampai sekarang.

Pada pertengahan 80-an, bahasa OOP seperti C++ dan Eifle menjadi popular diantara programmer komputer. Popularitas OOP berlanjut pada tahun 90-an, banyak pengembang perangkat lunak menggunakan konsep OOP seperti yang dilakukan pada Java dan kemudian PHP yang menjadi popular sekarang. Di tahun 2002, versi terakhir dari Visual Studio, Microsoft-pun ikut memperkenalkan bahasa OOP baru yaitu C# (dibaca C-sharp) serta penyempurnaan Visual Basic 6.0 yang tidak mendukung OOP menjadi VB.NET sebagai bahasa pemrograman berorientasi objek.

II. LATAR BELAKANG

2.1. OBJECT ORIENTED PROGRAMMING

Pemrograman berorientasi Objek yang dalam istilah Inggris disebut sebagai Object Oriented Programming (disingkat OOP) adalah salah satu pendekatan pemrograman atau paradigma[1] untuk pengembangan / development suatu perangkat lunak komputer dimana dalam struktur perangkat lunak tersebut didasarkan kepada interaksi objek dalam penyelesaian suatu proses / tugas. Jika kita mencoba melihat bagaimana tugas disekitar kita diselesaikan, kita akan mengetahui bahwa kita berinteraksi dalam sebuah objectoriented world. Jika akan bepergian kita pasti berinteraksi dengan objek mobil. Sebagai sebuah objek, mobil berisi objek-objek lain yang berinteraksi untuk melakukan tugasnya membawa kita.

Sebuah program yang berorientasi objek terdiri dari objek-objek yang berinteraksi satu sama lainnya untuk menyelesaikan sebuah tugas. Seperti dunia nyata, pengguna dari suatu perangkat lunak dilibatkan dari logika proses untuk menyelesaikan tugas. Contoh, ketika kita mencetak sebuah halaman di word processor, kita berarti melakukan inisialisasi tindakan dengan meng-klik tombol printer. Kemudian kita hanya menunggu respon dari komputer apakah perintah yang kita berikan tersebut sukses dieksekusi atau gagal, sedangkan proses yang terjadi sesungguhnya didalam internal komputer tidak kita ketahui. Tentunya setelah kita menekan tombol printer, maka secara simultan objek tombol tersebut berinteraksi dengan objek printer untuk menyelesaikan job tersebut.

2.2 MENGAPA MENGGUNAKAN OOP?

Mengapa OOP dibangun dalam sebuah paradigma yang luas untuk menyelesaikan masalah pekerjaan? 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 pekerjaan yang kompleks dan berinteraksi dengan sistem lain, maka kelemahan dari struktur metodologi programming muncul kepermukaan meliputi:

· Program menjadi lebih susah untuk di maintain.

· Fungsi yang tersedia, susah untuk diubah tanpa harus mempengaruhi fungsi sistem secara keseluruhan.

· Programming tidak baik untuk team development. Programmer 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 Models dalam programming models.

· Mungkin dapat bekerja dengan baik pada saat terisolasi tapi tidak pada saat terintegrasi dengan sistem lain.

Sebagai hasilnya, banyak developer software beralih ke objek-oriented methodologies dan programming languages untuk memecahkan masalah ini. Keuntungan dari objek-oriented methodologies adalah sebagai berikut:

· Langkah ini merupakan sebuah transisi intuitive dari business analysis models menuju software implementation models.

· Kemampuan untuk memaintain dan menerapkan perubahan dalam program ini lebih efisien dan dengan cepat.

· Kemampuan untuk lebih efektif menciptakan sistem software dengan menggunakan sebuah team proses, yang mengijinkan seorang spesialis untuk bekerja hanya pada bagiannya saja.

· Kemampuan untuk menggunakan kembali komponen kode dalam suatu program dan membeli komponen dari developer lain untuk meningkatkan fungsi program mereka dengan usaha minimal.

· Integration lebih baik dengan pasangan bebas dalam distributed computing systems.

· Meningkatkan integration dengan modern operating systems.

· Kemampuan untuk menciptakan GUI yang lebih intuitive bagi users.

2.3. KARAKTERISTIK OOP

Disini, kita akan melihat beberapa konsep dasar dan term-term yang umum untuk seluruh bahasa OOP[2]. Pemrograman orientasi-objek menekankan konsep berikut:

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 objek. 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 – membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.

Abstraksi – 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 – 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 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– Mengatur polimorfisme dan enskapsulasi 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 job descriptionnya sendiri.

 

2.4. OBP : OBJECT BASED PROGRAMMING

Di dalam pengertian teknisnya, istilah “Bahasa Berbasis Objek” (istilah Inggris “Object Based Programming” dan disingkat “OBP”) digunakan untuk menjelaskan bahasa-bahasa program yang didasarkan pada ide enkapsulasi baik status ataupun operasinya. Sebuah bahasa yang Object-based tidak perlu mendukung warisan atau subtyping, sehingga belum tentu sebuah bahasa yang berbasis objek dikatakan sebagai bahasa berorientasi objek.

Membingungkan memang, tetapi memang harus demikian. Kalau begini, kita kembali harus berpijak kepada kenapa konsep OOP itu diciptakan? Jawaban akhirnya ialah OOP diciptakan untuk mempermudah kita sebagai programmer menciptakan karya kita. Apalah artinya OOP jika kemampuan utamanya; Inheritance, Encapsulation dan Polymorphism tidak ada?

Jadi, pahamilah bahwa Object Based[3] bukan Object Oriented!

Suatu contoh suatu bahasa yang adalah objek-based tetapi tidak berorientasi objek adalah Visual Basic (VB). VB mendukung objek kedua-duanya dan kelas, tetapi bukan warisan, maka [itu] tidak mengkwalifikasikan berorientasi menolak.

Kadang-Kadang istilah object-based diberlakukan bagi bahasa prototype-based sebuah bahasa berorientasi objek yang tidak mempunyai kelas, tetapi di mana objek sebagai gantinya menerima warisan data dan kode mereka secara langsung dari template objek lainnya . Suatu contoh suatu bahasa prototype-based yang sering digunakan adalah Javascript.

III. OBJECT ORIENTED PROGRAMMING & OBJECT BASED PROGRAMMING

Polymorphism adalah salah satu dari tiga kemampuan yang mendasar yang dimiliki oleh OOP, setelah data abstraction dan inheritance.”

Polymorphism menyediakan cara yang berbeda pada pemisahan interface dari implementasinya, untuk memasangkan ulang apa dari bagaimana. Polymorphism memberikan organisasi kode yang lebih baik dan kode menjadi lebih mudah dibaca, juga memberikan suatu kemampuan pada program untuk berkembang secara terus menerus baik pada tahap pengembangan awal ataupun pada saat ingin menambahkan kemampuan-kemampuan yang baru.

Encapsulation membuat tipe data yang baru dengan mengkombinasikan karakteristik-karakteristik dan perilaku-perilaku. Dengan menggunakan kata kunci private kita dapat menyembunyikan interface dari implementasi. Cara yang seperti ini dapat memudahkan para programmer yang mempunyai background prosedural. Tetapi polymorphism menangani decoupling dalam bentuk types. Kita mengetahui kalau inheritance memperbolehkan perlakuan yang sama pada object turunan maupun object asal. Kemampuan ini sangat penting karena memperbolehkan beberapa tipe yang ada (turunan dari tipe asal yang sama) mendapat perlakuan seperti kalau mereka itu satu tipe, dan hanya dibutuhkan satu kode saja untuk mengakses keseluruhan tipe yang ada. Metode polymorphism ini memperbolehkan untuk memanggil satu tipe untuk mengekspresikan perbedaannya dari tipe yang lainnya, yang sejenis, selama mereka diturunkan dari tipe asal yang sama. Perbedaan ini diekspresikan melalui perbedaan-perbedaan dalam perilaku dari metoda-metoda yang dapat kita panggil dari class asal.

Dalam pembahasan ini kita akan menjelaskan tentang polymorphism (juga disebut sebagai dynamic binding atau late binding atau run-time binding) mulai dari yang paling dasar, dengan contoh yang membeberkan tentang pengaruh polymophism dalam program yang akan dibuat.

Sebelumnya kita mengetahui kalau sebuah object dapat digunakan sebagai tipenya sendiri atau sebagai object dari tipe asalnya. Mengambil handle sebuah object dan memperlakukannya sebagai handle dari tipe asal disebut sebagai upcasting karena urutan dari cabang-cabang inheritance digambarkan class asal terletak yang paling atas.

Kita juga akan menemui sebuah masalah seperti yang tertera dari kode berikut ini:

//: Music.java

// Inheritance & upcasting

package c07;

class Note {

private int value;

private Note(int val) { value = val; }

public static final Note

middleC = new Note(0),

cSharp = new Note(1),

cFlat = new Note(2);

} // Etc.

class Instrument {

public void play(Note n) {

System.out.println(\”Instrument.play()\”);

}

}

// Wind objects are instruments

// because they have the same interface:

class Wind extends Instrument {

// Redefine interface method:

public void play(Note n) {

System.out.println(\”Wind.play()\”);

}

}

public class Music {

public static void tune(Instrument i) {

// …

i.play(Note.middleC);

}

public static void main(String[] args) {

Wind flute = new Wind();

tune(flute); // Upcasting

}

} ///:~

Metode diatas Music.tune() menerima sebuah handle Instrument, tetapi juga segala sesuatunya yang diturunkan dari Instrument. Didalam main(), kita dapat melihat semua ini terjadi sebagai sebuah handle Wind dilewatkan ke tune(), dengan tanpa cast sama sekali. Ini semua masih dapat diterima, interface dari Instrument harus muncul didalam Wind, karena Wind diturunkkan dari Instrument. Upcasting dari Wind ke Instrument bisa membuat “narrow” pada interface tersebut, tapi semua ini tidak dapat mengurangi interface keseluruhan dari Instrument.

Program berikut ini mungkin akan tampak aneh. Mengapa kita secara sengaja melupakan tipe dari sebuah object ? Ini semua dapat terjadi bila kita melakukan upcast, dan menjadikannya kelihatan seperti kalau tune() secara langsung mengambil handle dari Wind sebagai sebuah argumen. Ini semua membuat sesuatu yang mendasar : Kalau kita melakukannya, kita harus menuliskan tune() yang baru untuk setiap Instrument didalam system kita. Anggap saja kita mengikuti alasan ini dan menambahkan instrument Stringed dan Brass :

//: Music2.java

// Overloading instead of upcasting

class Note2 {

private int value;

private Note2(int val) { value = val; }

public static final Note2

middleC = new Note2(0),

cSharp = new Note2(1),

cFlat = new Note2(2);

} // Etc.

class Instrument2 {

public void play(Note2 n) {

System.out.println(\”Instrument2.play()\”);

}

}

class Wind2 extends Instrument2 {

public void play(Note2 n) {

System.out.println(\”Wind2.play()\”);

}

}

class Stringed2 extends Instrument2 {

public void play(Note2 n) {

System.out.println(\”Stringed2.play()\”);

}

}

class Brass2 extends Instrument2 {

public void play(Note2 n) {

System.out.println(\”Brass2.play()\”);

}

}

public class Music2 {

public static void tune(Wind2 i) {

i.play(Note2.middleC);

}

public static void tune(Stringed2 i) {

i.play(Note2.middleC);

}

public static void tune(Brass2 i) {

i.play(Note2.middleC);

}

public static void main(String[] args) {

Wind2 flute = new Wind2();

Stringed2 violin = new Stringed2();

Brass2 frenchHorn = new Brass2();

tune(flute); // No upcasting

tune(violin);

tune(frenchHorn);

}

} ///:~

Kode diatas dapat dijalankan, tetapi disana ada kekurangan terbesar. Kita harus menuliskan metoda tipe yang spesifik untuk setiap class Instrument2 yang baru kita tambahkan. Ini semua berarti makin banyak kode yang akan kita tulis, tetapi juga berarti kalau kita ingin menambahkan sebuah metoda baru seperti tune() atau sebuah tipe baru dari Instrument, kita mendapatkan kalau perkerjaan kita makin banyak. Dengan menambahkan fakta bahwa kompiler tidak akan memberikan pesan-pesan kesalahan kalau kita lupa meng overload salah satu dari metoda-metoda kita dan seluruh proses pekerjaan dengan tipe menjadi tidak dapat ditangani.

Bukankah dapat menjadi lebih menyenangkan kalau kita hanya menuliskan satu metoda saja yang dapat mengambil class asal sebagai argumennya, dan bukan dari semua class-class turunannya. Itulah memang lebih memudahkan bila kita melupakan adanya class-class turunan, dan menuliskan kode yang hanya berkomunikasi dengan class asal?

Itulah apa yang disediakan oleh polymorphism. Walau bagaimanapun kebanyakan programmer (yang berasal dari latar belakang prosedural) mempunyai sedikit kesulitan untuk beradaptasi dengan polymorphism.

Kesimpulan

“Dengan polymorphism pekerjaan seorang programmer dapat dimudahkan dengan menuliskan kode yang lebih sedikit. Untuk mengakses class-class turunan tidak dibutuhkan penulisan kode yang berlainan.”

Visual Basic merupakan bahasa yang Object Based  namun tidak Object Oriented. Beberapa karakteristik obyek tidak dapat dilakukan pada Visual Basic, seperti Inheritance tidak dapat dilakukan pada class module. Polymorphism secara terbatas bisa dilakukan dengan mendeklarasikan class module yang memiliki Interface tertentu.


[1] Lebih lanjut mengenai paradigma pemrograman di http://en.wikipedia.org/w/index.php?title=Programming_paradigms

[2] Lebih lanjut mengenai konsep OOP lihat di http://en.wikipedia.org/wiki/Objek-oriented_programming

[3] Lebih lanjut mengenai Bahasa Basis Objek di http://en.wikipedia.org/wiki/Objek-based

Comments»

1. andri - 25 May 2008

Terima kasih Infonya, Seperti yang diutarakan diatas, berarti vb 6.0 tidak sempurna dalam konsep OOP, bagaimana dengan class module yang ada di vb, dan system colection yang ada di vb, apakah itu tidak termasuk OOP,

Thanks

2. barbara - 25 July 2009

THANKS yuwh!!!
makalah anda sangat membantu tugas kuliah saya……….

3. septy - 27 July 2010

sip sip.. materinya ok..
lumayan wat dasaar teori TA ku..
bahasanya gampang dipahami

good job

^^b

4. Saragih - 25 March 2011

trimakasih buat infonya ..
moga amal kebaikan ini ndapat berbuah berlipat ganda ..
amin


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

%d bloggers like this: