Pemrograman Berorientasi Obyek

Dalam dunia teknologi informasi saat ini, pengembangan sebuah solusi untuk memenuhi kebutuhan yang ada di dunia nyata harus dikembangkan dengan mudah, cepat dan memenuhi berbagai macam keperluan. Hal ini akan membawa kita kedalam proses pengembangan sebuah perangkat lunak yang sangat kompleks. Meskipun hal itu tidak bisa dihindari, namun harus ada jalan agar kompleksitas tersebut tidak menjadi sebuah batasan terhadap fungsionalitas dari perangkat lunak tersebut.
Salah satu cara untuk mengurangi kompleksitas dari perangkat lunak adalah dengan membaginya berdasarkan hirarki tertentu berdasarkan fungsi-fungsi yang ada. Salah satu pendekatan pengembangan perangkat lunak sebelum adanya pendekatan berorientasi obyek (Object oriented Programming atau OOP) adalah
pemrograman prosedural, yang membagi sebuah aplikasi berdasarkan berbagai macam fungsi yang ada didalamnya. Fungsi-fungsi tersebut bisa dieksekusi dari baris manapun dalam bagian program, dimana setiap fungsi terdiri dari serangkaian langkah-langkah pengeksekusian perintah untuk menyelesaikan sebuah aktivitas.
Fungsi-fungsi didalam program prosedural saling bergantung, sehingga sulit untuk dipisahkan satu dengan yang lainnya. Fungsi yang saling bergantung ini sulit untuk dapat digunakan (reused) didalam aplikasi lain, dan untuk menggunakannya maka harus dilakukan perubahan terhadap kode yang ada. Beberapa contoh bahasa pemrograman prosedural adalah COBOL (COmmon Business Oriented Language), Pascal dan BASIC (Beginner’s All Purpose Symbolic Instruction Code).
Kekurangan dalam pemrograman prosedural membawa kepada munculnya pemrograman berorientasi obyek. Pemrograman berorientasi obyek diciptakan untuk mempermudah pengembangan program yang mengikuti model yang telah ada dalam
kehidupan nyata. Dalam paradigma ini, sesuai dengan model kehidupan nyata, segala sesuatu entitas yang ada merupakan sebuah obyek. Obyek-obyek inilah yang saling berinteraksi dan membentuk sebuah sistem.
Mari kita ambil sebuah contoh yaitu sebuah mobil. Mobil adalah sebuah benda yang nyata ada dalam kehidupan. Kalau kita perhatikan bahwa sebuah mobil sebenarnya terdiri dari banyak komponen-komponen yang juga merupakan sebuah obyek, sebut saja mesin, pedal gas dan rem, spion, kursi penumpang, roda, dan lain-lain. Masing-masing komponen tersebut saling berinteraksi sehingga membentuk sebuah mobil yang akhirnya bisa dikendarai dan berjalan. Tak jauh beda dengan sebuah program atau aplikasi, terdiri dari banyak obyek-obyek yang saling berinteraksi. Misal program simulator mobil dari contoh diatas tadi. Semua komponen mobil akan dimodelkan menjadi obyek sendiri-sendiri yang akan berinteraksi. Spion berinteraksi dengan pengguna dalam bentuk pemilihan sudut pandangan dari kursi pengemudi. Kecepatan simulasi perjalanan bisa diperbesar dan diperkecil tenaganya dengan menekan pedal gas. Semua obyek tersebut saling berinteraksi, sehingga apa yang ada dalam dunia nyata bisa dimodelkan dengan tepat dalam sebuah program.
Dalam pemrograman berorientasi obyek, obyek bisa ditempatkan kedalam sebuah library, sehingga bisa digunakan dan diakses oleh berbagai macam aplikasi lainnya. Keuntungannya adalah kemampuannya dalam “reusability of code”, sehingga akan menghemat waktu dan usaha dalam pengembangan program.

1.2 Pemrograman Prosedural
Dalam Pemrograman prosedural, sebuah program akan dibagi menjadi beberapa subprogram (modul) yang akan melakukan tugas-tugas tertentu. Modul tersebut bisa berupa pernyataan yang ditentukan oleh user ataupun diambil dari library dari program lainnya. Dalam sebuah modul bisa terdiri dari satu atau lebih prosedur atau dalam bahasa pemrograman juga disebut sebagai fungsi, rutin, subrutin, atau method.
Sebuah prosedur adalah sekelompok perintah yang bisa dijalankan secara independen. Tetapi yang menjadi masalah dalam pemrograman procedural adalah bahwa setiap langkah dalam sebuah prosedur yang dieksekusi, selalu terkait dengan langkah yang sebelumnya. Dalam hal ini data juga bisa dengan mudah menjadi “rusak”, karena bisa diakses secara bebas dari keseluruhan fungsi, termasuk dari bagian yang harusnya tidak memiliki hak akses kedalamnya. Berikut adalah contoh dekomposisi sebuah sistem akademik menggunakan paradigm pemrograman prosedural.

1.3 Pemrograman Berorientasi Obyek
Berbeda dengan pemrograman prosedural, seperti yang telah dijelaskan sebelumnya bahwa pemrograman berorientasi obyek memecah komponen-komponennya menjadi obyek-obyek yang saling berinteraksi. Dunia nyata yang terdiri dari obyek-obyek dapat dengan mudah dimodelkan sehingga program bisa lebih mendekati kondisi yang sebenarnya.
Terdapat beberapa keuntungan menggunakan pemrograman berorientasi obyek, antara lain:
Real world programming
Dunia ini disusun atas obyek obyek yang saling berinteraksi. Sebuah program yang memodelkan dunia nyata, sebisa mungkin menggambarkan kondisi yang ada dalam bentuk yang seakurat mungkin. Dalam Pemrograman berorientasi obyek, sebuah program disusun oleh obyek-obyek yang masing-masing memiliki fungsi sesuai dengan peran dan kebutuhan interaksinya.
Reusability of code
Kelas yang telah dibuat dalam pemrograman berorientasi obyek bisa digunakan oleh program lain. Penggunaan komponen yang telah dibuat tidak hanya mengurangi usaha pembuatan komponen tersebut, tetapi juga mengurangi kemungkinan kesalahan jika harus mengembangkan lagi dari awal. Keuntungannya adalah penghematan dari segi waktu, dan usaha yang akhirnya akan membawa kepada penghematan biaya pengembangan.
Resilience to change
Dunia nyata adalah sesuatu yang dinamis, perubahan akan selalu terjadi didalamnya. Program atau aplikasi yang memodelkan dunia nyata, diharapkan juga bisa bersifat dinamis pula.
Information hiding
Informasi dalam sebuah obyek sedapat mungkin disembunyikan dari luar kelas yang ada. Tujuannya adalah mengamankan data agar hanya fungsi yang ada dalam kelas itu saja yang bisa membaca, mengubah dan memanipulasi data tersebut. Tetapi tetap disediakan sebuah cara (interface) agar obyek dari luar bisa mengakses dan mengubah data secara tidak langsung.
Konsep penyembunyian informasi ini bertujuan agar pihak luar yang membutuhkan layanan dari kelas tersebut hanya perlu untuk menerima data yang dibutuhkan saja, tanpa perlu mengetahui bagaimana sebenarnya cara kerja di dalam kelas tersebut.
Sebagai contoh pada sebuah jam. Kita sebagai pengguna tidak perlu memahami dengan pasti bagaimana cara kerja didalam jam tersebut. Para pengguna tidak perlu mengetahui sebanyak apa roda giginya, menggunakan tenaga baterai atau kinetik, dan sebagainya. Yang perlu diketahui oleh pengguna adalah bahwa jam tangan tersebut menyediakan sebuah penunjuk (yang bisa kita anggap sebagai fungsi) yang menunjukkan bahwa saat ini waktu menunjukkan pukul berapa.
Modularity of code
Salah satu keuntungan dari pemrograman berorientasi obyek adalah modularitas, yang berarti bahwa setiap obyek yang dibentuk dikelola secara terpisah dari obyek lainnya meskipun berasal dari sebuah kelas yang sama. Modifikasi terhadap sebuah obyek bisa dilakukan tanpa mempengaruhi fungsionalitas dari obyek yang lainnya.
Sebagai sebuah contoh adalah dari obyek mahasiswa dan dosen. Masing-masing obyek akan saling berinteraksi didalam sebuah perkuliahan yang terjadwal. Akan tetapi jika terjadi perubahan terhadap jumlah mahasiswa (bertambah atau berkurang) yang mengikuti proses perkuliahan, hal itu tidak akan mempengaruhi kondisi dosen dalam melakukan pengajaran.

1.4 Kelas dan Obyek
Sebuah kelas menentukan struktur dan behaviour dari sebuah obyek. Sebagai sebuah contoh, truk, bus, mobil, sepeda motor didefinisikan sebagai sebuah kendaraan bermotor karena memiliki beberapa karakteristik yang sama yaitu memiliki mesin, menggunakan bahan bakar minyak untuk pengoperasiannya. Kendaraan bermotor tersebut juga memiliki beberapa atribut yang sama dalam kelasnya, misalkan memiliki jumlah roda, no kendaraan, nomor rangka mesin, jumlah kursi penumpang, dan lain-lain.
Obyek merupakan dasar dari pemrograman berorientasi obyek, didalam dunia nyata, setiap obyek yang ada memiliki dua buah karakteristik: State dan behaviour.
• State merupakan atribut yang dimiliki oleh sebuah obyek.
• Behaviour adalah fungsi yang dimiliki dan bisa dijalankan oleh penggunanya.
Sebagai contoh obyek mahasiswa. Setiap mahasiswa memiliki atribut seperti NIM, Nama, alamat, dll. dan sebagai behaviour-nya yaitu mahasiswa melakukan fungsi registrasi, perkuliahan, ujian, praktikum, dll.
Kelas merupakan sebuah cetak biru dari obyek. Seorang programmer akan menulis kode-kode untuk masing kelas yang akan digunakan. Sedangkan obyek merupakan bentukan (instance) dari sebuah kelas yang dijalankan pada saat runtime. Pada saat runtime, variabel yang ada pada sebuah kelas akan menjadi State pada sebuah obyek, sedangkan method yang dibuat akan menjadi behaviour-nya.

1.5 Fitur Pemrograman Berorientasi Obyek

Didalam pemrograman berorientasi obyek terdapat beberapa fitur berikut:
• Enkapsulasi (Encapsulation)
• Abstraksi (Abstraction)
• Pewarisan (Inheritance)
• Polimorfisme (Polymorphism)
1.5.1 Enkapsulasi
Enkapsulasi adalah suatu cara untuk menyembunyikan detail implementasi detail dari sebuah kelas. Terdapat dua hal mendasar dari enkapsulasi yaitu:
• Information hiding: penyembunyian detil dari atribut dan method pada sebuah kelas.
• Interface untuk pengaksesan data: suatu method untuk mengambil, memberikan atau mengubah suatu nilai.
Dalam pemrograman berorientasi obyek, kebutuhan akan enkapsulasi muncul karena adanya proses sharing data antar method. Dengan menggunakan enkapsulasi, maka keamanan dari data dan method yang ada didalamnya akan terjaga.
Sebagai contoh adalah pada sebuah mesin ATM. Yang disediakan oleh mesin ATM adalah sebuah layar informasi dan perangkat untuk membaca kartu. Saat kartu ATM dimasukkan, maka pengguna akan memasukkan nomor pin. Ketika pin dimasukkan, berarti telah terjadi proses pengaksesan data yang akan memberikan nomor pin untuk dikirimkan dan divalidasi pada server dari ATM tersebut. Disini terjadi penyembunyian informasi tentang bagaimana cara kerja pengecekan validitas kartu, kecocokan pin yang dimasukkan, koneksi ke database server, dll, dimana hal-hal tersebut tidak perlu diketahui oleh pengguna tentang bagaimana cara kerjanya.

1.5.2 Abstraksi

Arti abstraksi mengacu kepada atribut dari sebuah obyek yang membedakan antara satu obyek dengan obyek yang lain. Misalnya pada sebuah sistem akademik, dimana terdapat beberapa komponen misal saja mahasiswa. Didalam obyek tersebut, terdapat suatu atribut yang akan saling membedakan antara satu obyek mahasiswa dengan mahasiswa lainnya, yaitu NIM, Nama, tanggal lahir, alamat, dan sebagainya. Dalam pemrograman berorientasi obyek konsep ini berada pada pembuatan sebuah kelas. Semua atribut dari obyek didefinisikan dalam sebuah kelas. Sebenarnya kelas tidak memiliki data, tetapi sebuah obyek-lah yang akan menyimpan data, karena obyek diciptakan dari sebuah kelas dan oleh sistem operasi akan dialokasikan sejumlah memori kepada obyek tersebut.

1.5.3 Pewarisan
Salah satu fitur yang paling kuat dalam pemrograman berorientasi obyek adalah penggunaan kode kembali (code reuse). Sekali sebuah prosedur dibuat, maka kita bisa menggunakannya berulang kali. Dalam pemrograman berorientasi obyek, kemampuan yang dimiliki tidak hanya itu, tetapi kita juga bisa mendefinisikan hubungan antar kelas yang tidak hanya dimanfaatkan untuk code reuse, tetapi juga dari segi pendesainannya yang secara garis besar jauh lebih baik, dengan cara mengelola kelas-kelas dan faktor kemiripan diantara kelas-kelas tersebut. Tujuan utama dari pewarisan (inheritance) adalah untuk menyediakan fungsionalitas tersebut.
Fitur pewarisan mengijinkan sebuah kelas yang dinamakan superclass untuk menurunkan atribut-atribut dan methodnya kepada yang lainnya, yaitu yang disebut subclass atau kelas turunannya. Hal ini akan mengijinkan pembuatan kelas baru yang didasarkan dari peng-abstrakan atribut-atribut dan behaviour yang sama.
Terdapat beberapa karakteristik dari subclass, yaitu:
• Subclass merupakan bentuk khusus dari sebuah superclass
• Dalam sebuah subclass dapat memikiki atribut dan method yang diturunkan dari sebuah superclass
• Subclass bisa memiliki fitur tambahan dan berbeda yang berbeda dari fitur-fitur yang diturunkan dari superclassnya.

Komentar

Postingan Populer