Prinsip Perancangan Class Pada Object-Oriented Programming dengan Java Beserta Contoh Penerapannya

Daftar Isi

Perlu kita ketahui kembali adanya Empat Prinsip utama dalam Pemrograman Berorientasi Obyek (PBO) atau lebih dikenal luas dengan Object Oriented Programming (OOP).

Berikut Empat Prinsip utama dalam OOP:

1. Abstraction

Abstraksi berarti menggunakan hal-hal sederhana untuk mewakili hal-hal rumit. Perhatikan contoh sederhana berikut:

Pada contoh di atas, pada if pertama, orang lain yang belum paham tentang kode kita mungkin akan bertanya-tanya kondisi apa yang sedang dicek di if tersebut. Sedangkan pada if kedua, jika kita menunjukan kode kita pada orang awam pun, orang itu akan paham bahwa kode tersebut sedang mengecek apakah input yang diterima program valid atau invalid.

2. Encapsulation

Enkapsulasi berarti menyembunyikan data-data kompleks di balik modifier Private dan menyediakan sedikit method Public sebagai “jalan” untuk mengakses data-data Private tersebut.

Baca juga : Pengenalan Object Oriented Programming

Bayangkan sebuah TV. Anggaplah tombol-tombol di depan TV yang dapat kita tekan adalah method Public milik TV tersebut, sedangkan proses kompleks yang terjadi di belakang layar saat kita menekan tombol-tombol tersebut adalah method dan atribut Private. Sebagai pemilik TV, kita tahu apa fungsi dari masing-masing tombol, tetapi kita tidak tahu dan tidak peduli apa proses kompleks yang terjadi di belakang layar saat kita menekan tombol tersebut. 

3. Inheritance

Inheritance (arti: Pewarisan) merupakan konsep menurunkan atribut dan method milik sebuah class ke class lain. Perhatikan contoh class diagram berikut:

Pada contoh di atas, class Animal disebut Parent class atau Superclass, sedangkan class Duck, Fish, dan Zebra disebut Child class atau Subclass. Ketiga Child class tersebut akan memiliki SEMUA atribut dan method milik Parent class.

Dalam merancang class, jika kita menemukan ada beberapa class dengan atribut dan method yang konteksnya sama, lebih baik menggunakan konsep Pewarisan saja. Salah satu keuntungannya adalah jika kita sewaktu-waktu ingin mengubah kode kita, kita hanya perlu mengubah kode kita satu kali saja, sedangkan jika kita menuliskan class berbeda tanpa ada hubungan Inheritance, jika kita ingin melakukan perubahan kita harus merubah isi dari semua class tersebut satu persatu. 

Baca Juga :   Pengenalan Class dan Object Pada Object-Oriented Programming dengan Java Beserta Contoh Penerapannya

4. Polymorphism

Polimorfisme merupakan konsep pembuatan method berbeda dengan nama yang sama. Polimorfisme dibagi menjadi dua, yaitu:

Overloading

Overloading adalah ketika di sebuah class ada 2 atau lebih method dengan nama sama namun masing-masing memiliki parameter berbeda. Walau namanya sama, program tetap mengerti harus menjalankan method yang mana berdasarkan parameter yang dimasukan saat pemanggilan method.

Contoh sederhana method overloading:

Overriding

Overriding adalah ketika sebuah Child class memiliki method dengan nama yang sama dengan Parent class-nya, namun dengan isi yang berbeda (parameter boleh sama). Nantinya program akan memprioritaskan method milik Child class ini jika ternyata ketahuan Child class memiliki method yang di-Override dari Parent-nya.

Contoh sederhana method overriding:

Beberapa prinsip-prinsip perancangan kelas yang perlu diperhatikan, antara lain:

1. Constructor. Method ini digunakan untuk inisialisasi atau mempersiapkan data untuk objek.

2. Visibilitas Bagi Atribut dan Method. Diperlukan kontrol akses untuk mengatur siapa saja yang dapat mengakses atau mengubah nilai dari atribut atau method dalam kelas tersebut sehingga penyalahgunaan atribut atau method dapat dihindari. Kontrol akses yang sering digunakan dalam perancangan suatu kelas sudah ada pada modul minggu lalu.

3. Fungsi Accessor dan Mutator. Fungsi accessor merupakan fungsi untuk mendapatkan properti dari suatu objek dan mengembalikan nilai atau value dari suatu atribut (get). Sedangkan fungsi mutator mengubah properti dari suatu objek dan mengubah nilai atau value dari sebuah atribut (set).

4. Method dan Operator Overloading. Method-method tersebut harus dapat dibedakan antara satu dengan yang lain dalam jumlah dan atau tipe datanya. 

5. Melewatkan Argumen/Parameter ke Method. Cara melewatkan argumen/parameter ini dapat dilakukan dengan melewatkan secara nilai (pass by value) dan melewatkan secara referensi (pass by reference).

6. Pass by value diterapkan pada argumen bertipe data primitif dan prosesnya hanya menyalin isi memori (yang telah dialokasikan untuk suatu variabel), dan kemudian menyampaikan salinan tersebut kepada method yang bersangkutan (isi memory merupakan data sesungguhnya yang akan dioperasikan), karena yang disampaikan hanya salinan dari isi memori, maka perubahan yang terjadi pada variabel akibat proses didalam method tidak mempengaruhi nilai variabel asalnya di dalam memori. Sedangkan, pass by reference diterapkan pada argumen bertipe data array atau objek dan isi memori pada variabel array atau objek merupakan penunjuk alamat memori yang mengandung data sesungguhnya yang akan dioperasikan.

Baca juga : Pengenalan Class dan Object

7. Responsibility Driven Design. Semua fungsi dan method yang ada harus mencerminkan perilaku lengkap yang dimiliki kelas tersebut. Semua fungsi/method tersebut bertanggung jawab terhadap maintenance atribut yang dimiliki kelas.

Baca Juga :   Enjoy the Best Winter in Winter Wonderland

Contoh Perancangan Kelas

Buatlah package baru dengan format com.nama.praktikumpbo.pertemuan3.guided, lalu ikuti langkah langkah di bawah:

Dasar Array

Untuk membuat array kosong di Java, pertama kita tuliskan dulu tipe data yang nantinya akan ditampung array yang kita buat. Setelah itu, jangan lupa berikan kurung siku terbuka dan tertutup []. Setelah itu, tulis nama yang akan kita gunakan untuk mereferensikan array tersebut. Terakhir, kita harus menuliskan tipe data array tersebut lagi dan kali ini di dalam kurung siku kita tuliskan jumlah elemen (isi) maksimum yang dapat ditampung oleh array tersebut.

Buatlah sebuah package baru di dalam package guided dan beri nama array. Buat class baru di dalam package array tersebut dan beri nama ArrayBasic. Salin kode berikut:

Pada contoh di atas, array kita beri nama numbers. dan array numbers ini dapat menampung sejumlah 10 bilangan bulat. Untuk mencetak isi array, kita bisa memanfaatkan for loop. Ada 2 variasi for loop, anda bebas ingin menggunakan yang mana.

Hasil running kodenya:

Array dengan Nilai yang Sudah Ditentukan Dari Awal

Untuk membuat sebuah array yang sudah langsung memiliki nilai sejak ia dibuat, pertama tuliskan tipe datanya terlebih dahulu diikuti dengan 2 kurung siku []. Setelah itu jangan lupa tulis nama array-nya. Lalu, tulis = {}. Nah, untuk memasukan sesuatu ke array ini, anda tinggal mengetikan saja apa yang anda masukan ke array tersebut ke dalam {} tadi. Gunakan tanda koma (,) sebagai pemisah antara elemen/nilai index satu dengan index lainnya.

Di package yang sama, buatlah class baru lagi dan beri nama ArrayNotSoBasic, lalu salin kode berikut:

Pada contoh di atas, kita membuat array dengan nama numbers yang menampung bilangan bulat 1, 2, 3, 4, 5, 6, 7, 8. Jika anda membuat array dengan cara seperti ini, anda tidak perlu menuliskan berapa panjang array-nya, karena panjang array akan menyesuaikan, tergantung anda memasukan berapa nilai atau object ke dalam array tersebut saat anda membuatnya. 

Baca Juga :   10 Negara dengan Populasi Negara Terendah di Dunia

Untuk mengecek panjang array, anda bisa menuliskan nama array tersebut, lalu menambahkan .length setelahnya. Pada contoh di atas, karena nama array-nya adalah numbers, jadi kita menuliskan numbers.length

Hasil running kodenya:

Array Kosong dengan Panjang Bervariasi

Selain 2 cara di atas, ada cara lain lagi yang bisa anda gunakan untuk membuat array. Pada cara ini, panjang array akan ditentukan oleh variable, yang mana berarti kita bisa membuat program yang memiliki array dengan panjang yang berbeda tergantung inputan user!

Masih di package yang sama, buatlah class baru dan beri nama ArrayVariableLength, lalu salin kode berikut:

Prinsipnya sama seperti metode pembuatan array pertama, hanya saja kita memasukan sebuah variable ke dalam [], bukan angka.

Hasil running kodenya:

Sekarang, kita akan mencoba merapikan kode ArrayVariableLength ini. Menggunakan prinsip Enkapsulasi yang kita pelajari di awal pertemuan ini, jika ada serangkaian kode yang memiliki konteks atau tujuan yang sama, alangkah baiknya jika kita buat rangkaian kode tersebut menjadi sebuah fungsi. Mari kita coba terapkan prinsip tersebut!

Source kode ArrayVariableLength setelah dirapikan:

Penggunaan Array dalam OOP

Buatlah package baru di luar package array tetapi masih di dalam package guided. Namai package tersebut restaurant. Anda berada di jalan yang benar jika package anda terlihat seperti ini: com.nama.praktikumpbo.pertemuan3.guided.restaurant

Di dalam package tersebut, buat class baru bernama Item, lalu salin kode berikut:

Masih di package yang sama, buat class baru dan beri nama Pembeli. Salin kode berikut:

Terakhir, buat class baru lagi bernama Main masih di package yang sama, lalu salin kode berikut:

Semoga bermanfaat!!