Kategori
Pemrograman

Object Oriented Programming (OOP)

Pengantar Object Oriented Programming (OOP)

Dengan dunia dan teknologi yang berkembang pesat, peradaban manusia telah mulai menuntut lebih banyak solusi software berteknologi tinggi untuk memudahkan dan mengotomatiskan tugas sehari-hari mereka.

Setiap sistem akan dikomputerisasi sehingga operasinya menjadi semakin kompleks dan menyebabkan meningkatnya kompleksitas algoritma software. Terlihat bahwa bahasa pemrograman tradisional berjuang untuk menghasilkan output sesuai tuntutan karena meningkatnya kompleksitas algoritma software. Untuk mengatasi masalah pendekatan pemrograman konvensional, konsep object oriented programming diperkenalkan.

Pendekatan pemrograman terbaru, object oriented programming (OOP) menawarkan cara yang sangat kuat dan juga mudah untuk menangani kompleksitas.

Pemograman Berorientasi Object atau dalam bahasa inggris lebih dikenal dengan Object Oriented Programming (OOP) adalah sebuah paradigma dalam pemograman yang menyelesaikan masalah program dengan menyediakan objek-objek(terdiri dari beberapa attribute dan method) yang saling berkaitan dan disusun kedalam satu kelompok atau yang disebut dengan class. Nantinya objek-objek tersebut akan saling berinteraksi untuk menyelasaikan masalah program yang rumit.

Tujuan utama OOP adalah menghasilkan program yang jelas, handal, dan mudah dikelola. OOP dirancang pada konsep tertentu untuk mencapai tujuannya mengatasi kelemahan pendekatan pemrograman konvensional.

Image for post

Ada 4 prinsip utama yang membuat bahasa Object Oriented. Ini adalah Encapsulation, Data Abstraction, Polymorphism, dan Inheritance. Ini juga disebut sebagai empat pilar Pemrograman Berorientasi Objek.

Pemrograman berorientasi objek atau dalam bahasa inggris disebut Object Oriented Programming (OOP) adalah paradigma atau teknik pemrograman di mana semua hal dalam program dimodelkan seperti objek dalam dunia nyata. Objek di dunia nyata memiliki ciri atau attribut dan juga aksi atau kelakuan (behaviour).

Kita misalkan sebuah mobil. Mobil memiliki ciri punya ban, stang, kursi, pedal gas, rem, dan lain sebagainya. Ada juga ciri warna, atau tahun keluaran berapa. Selain punya ciri, mobil juga punya aksi atau sesuatu yang bisa dilakukan olehnya. Misalnya, ketika pedal diinjak apa yang terjadi. Ketika di rem apa yang terjadi, dan lain sebagainya.

Program juga demikian. Semua unit dalam program bisa dianggap sebagai objek. Objek besar dibangun dari objek – objek yang lebih kecil. Objek yang satu berinteraksi dengan objek yang lain, sehingga semua menjadi sebuah kesatuan yang utuh.

Python dari awal dibuat sudah mengadopsi OOP. Selain itu Python juga bisa menggunakan paradigma pemrograman lama yaitu pemrograman terstruktur. Oleh karena itu, Python disebut bersifat hibrid.

Objek

Konsep Dasar Object Oriented Programming (OOP)

Konsep dasar dari object oriented programming adalah sebagai berikut:

OOP - 1

Objects

Objek adalah entitas runtime dasar yang dapat diidentifikasi dalam OOP. Objek dapat mewakili entitas dunia nyata, seperti orang, mobil, tempat, dan lain-lain. Misalnya, kita dapat mengatakan mobil adalah objek yang memiliki beberapa karakteristik khusus, seperti jumlah gear, warna serta memiliki beberapa fungsi seperti pengereman, akselerasi, dan sebagainya.

Jadi, suatu objek mewakili suatu entitas yang dapat menyimpan data dan memiliki interface melalui fungsi.

Classes

Kelas adalah struktur pembuatan tipe data yang ditentukan pengguna yang menampung seluruh kumpulan data suatu objek. Jadi, kelas pada dasarnya adalah template dari serangkaian objek yang berbagi beberapa properties dan behaviour.

Kita juga bisa mengatakan bahwa kelas adalah kumpulan objek bertipe serupa.

Image for post

Kita ambil contoh tubuh manusia yang terdiri dari beberapa class seperti tangan(hand), kaki(leg) dan sebagainya. Class hand terdiri dari beberapa objek seperti lengan, siku, dan jari. Kita lihat satu objek jari yang memiliki beberapa attribut private yaitu seperti tulang, pembuluh darah, dan kulit. Selain itu, jari juga memiliki aktivitas yang umum yaitu public method menggenggam(), menyentuh(), dan menulis (). Pemisahan tersebut merupakan tujuan utama dari encapsulation.

Setelah kelas dibuat, kita dapat membuat sejumlah objek milik kelas itu. Sebenarnya, kelas tidak menentukan data apapun. Kelas menentukan properti atau metode yang mungkin berisi dalam objek dari kelas itu. Kelas biasanya bertindak seperti tipe data bawaan tetapi sebenarnya tipe data yang ditentukan pengguna.

Class dalam OOP

Pembuatan Kelas

Kita mendefinisikan sebuah kelas dengan menggunakan kata kunci class diikuti oleh nama kelas tersebut. Berikut adalah sintaks pembuatan kelas di Python.

class ClassName:
    '''class docstring'''
    class_body

class_body terdiri dari semua pernyataan berupa attribut, fungsi, dan data dari kelas

Data Abstraction

Abstraksi data adalah konsep yang menyembunyikan detail latar belakang dan hanya mewakili informasi yang diperlukan untuk dunia luar. Ini adalah proses penyederhanaan konsep dunia nyata menjadi komponen yang mutlak diperlukan.

Contoh sesuatu yang disebut abstraksi adalah Anda hanya tahu bagian-bagian penting untuk naik sepeda, seperti roda, rem, gear, tanpa menyertakan proses latar belakang atau penjelasan (akselerasi, pengereman, dan sebagainya).

Abstraction adalah konsep dimana terdapat berbagai objek yang sejenis, namun pada saat memiliki impelementasi yang berbeda-beda. Kita dapat mengambil sebuah objek dari contoh sebelumnya seperti objek Dosen. Dosen memiliki kepentingan yang berbeda terhadap matakuliah yang tersedia dalam satu semester akademik, namun sistem akan selalu mengenali objek Dosen sebagai suatu entitas yang sama walaupun memiliki kepentingan yang berbeda-beda.

Data Encapsulation

Enkapsulasi data adalah salah satu konsep terpenting dari OOP. Ini adalah teknik yang menggabungkan data members dan fungsi, beroperasi pada data itu dalam satu unit yang dikenal sebagai kelas. Teknik ini pada dasarnya mencegah akses ke data secara langsung. Satu-satunya cara untuk mengakses data disediakan oleh fungsi.

Jika Anda ingin membaca data dalam suatu objek, Anda harus memanggil fungsi anggota dalam objek. Fungsi akan membaca data dan mengembalikan data kepada Anda. Jadi, Anda tidak memiliki akses ke data secara langsung. Karena data disembunyikan, data tersebut diamankan dari perubahan yang tidak disengaja.

Encapsulation adalah proses dalam menciptakan sebuah objek dimana terdapat beberapa bagian atau attribute yang terbagi berdasarkan sifat yakni public(umum) dan private (khusus). Sebagaimana yang kita ketahui dalam definisi OOP, objek akan selalu berinteraksi dengan objek lain untuk menyelesaikan masalah dengan mengakses proses dari objek tersebut. Untuk menghindari redundansi atau ketidakakuratan program, maka diberikan batasan akses setiap objek terhadap objek lain. Saat objek bisa mengakses method dari objek lain, maka kita menyebutnya method bersifat public. Sedangkan saat suatu attribute hanya mampu diakses oleh objek itu sendiri, maka kita menyebutnya sebagai attribute bersifat private.

Inheritance

Warisan juga merupakan karakteristik penting dari OOP. Ini pada dasarnya adalah metode yang menyediakan cara yang kemampuan dan properti dari satu kelas untuk datang ke kelas lain. Teknik ini memberikan penggunaan kembali kode untuk programmer. Kita bisa membentuk kelas baru dari kelas yang ada, di mana kelas yang ada berisi beberapa properti atau metode yang juga ada di kelas baru. Di sini kelas baru disebut sebagai kelas turunan. Sedangkan kelas yang ada yaitu kelas dari mana kelas baru diturunkan disebut sebagai kelas dasar.

OOP 2

Saat membuat objek-objek dalam sebuah class, mungkin kita sering menemukan sifat yang sama antar objek dan menulisnya berulang kali sebanyak objek yang memiliki sifat tersebut. Hal itu tentu terlalu merepotkan dan memerlukan waktu yang lebih lama. Oleh karena itu terdapat suatu konsep dalam OOP yang mampu membantu kita dalam mengatasi masalah tersebut. Inheritance merupakan hubungan antara dua objek atau lebih dimana akan terdapat sebuah objek utama yang mewariskan attribute atau method yang dimilikinya kepada objek lain, baik itu keseluruhan atau sebagian.

Image for post

Misalkan saat kita membuat sebuah sistem informasi kampus yang akan diakses oleh Dosen dan Mahasiswa. Kedua objek tersebut pasti memiliki attribut yang sama seperti nama, umur, alamat, dan lainnya. Untuk menghindari penulisan ulang ketiga attribut tersebut disetiap objek, ada baiknya kita membuat objek baru yang mampu menyimpan ketiga attribute tersebut dan nantinya akan diwariskan kepada objek Dosen dan Mahasiswa seperti gambar disamping. Lalu bagaimana objek Person mengetahui apakah objek Dosen atau objek Mahasiswa yang mengaksesnya? Untuk menghindari kebingungan saat diakses maka Objek Dosen dan Mahasiswa memiliki attribute pembeda yang didefinisikan dalam masing-masing objek yaitu IdDosen dan NIM mahasiswa. Pengaksesan ini juga erat kaitannya dengan Polymorphism dimana sebuah objek yang diakses menggunakan konsep inheritance juga memiliki attribute-attribute pembeda untuk mengedintifikasi setiap objek tersebut.

Polymorphism

Ini adalah kunci kekuatan OOP. Jika suatu bahasa tidak mendukung polimorfisme maka itu bukan dalam kategori bahasa OOP. Pada dasarnya polimorfisme adalah kemampuan suatu pesan atau data untuk diproses lebih dari satu bentuk. Ini adalah konsep penting dari pemrograman berorientasi objek yang mendukung kemampuan suatu objek kelas untuk berperilaku berbeda dalam menanggapi pesan atau tindakan.

OOP 3

Overloading

Overloading juga merupakan konsep kunci lain dari bahasa OOP. Dalam satu baris, kita dapat mendefinisikan beban berlebih karena merupakan kemampuan fungsi tunggal untuk melakukan tugas yang berbeda bergantung pada situasinya. Jadi, konsep overloading entah bagaimana terkait dengan properti polymorphism OOP. Ketika fungsi atau operator yang ada akan dioperasikan pada tipe data baru, itu disebut kelebihan beban (overloaded).

Overloading memungkinkan membuat metode yang berbeda dengan nama yang sama yang mana berbeda satu sama lain dalam jenis fungsi input dan output. Ini dapat digunakan dengan fungsi dan anggota.

Composition

Composition adalah konsep dimana sebuah class terdiri dari beberapa bagian objek yang terpisah dan memiliki fungsi yang berbeda-beda. Contoh paling mudah untuk kita pahami adalah kembali pada contoh pertama. Tubuh manusia disusun oleh beberapa class seperti tangan, kaki, kepala dan sebagainya. Class tangan terdiri dari beberapa objek seperti Jari, Siku, dan Lengan. Kumpulan dari beberapa objek akan membangun sebuah class dan kumpulan dari beberapa class akan membangun sebuah program yang kita inginkan.

Rangkuman Istilah Dalam OOP

  • Kelas – Kelas adalah cetak biru atau prototipe dari objek dimana kita mendefinisikan atribut dari suatu objek. Atribut ini terdiri dari data member (variabel) dan fungsi (metode).
  • Variabel Kelas – Variabel kelas adalah variabel yang dishare atau dibagi oleh semua instance (turunan) dari kelas. Variabel kelas didefinisikan di dalam kelas, tapi di luar metode-metode yang ada dalam kelas tersebut.
  • Data member – Data member adalah variabel yang menyimpan data yang berhubungan dengan kelas dan objeknya
  • Overloading Fungsi – Overloading fungsi adalah fungsi yang memiliki nama yang sama di dalam kelas, tapi dengan jumlah dan tipe argumen yang berbeda sehingga dapat melakukan beberapa hal yang berbeda.
  • Overloading operator – Overloading operator adalah pembuatan beberapa fungsi atau kegunaan untuk suatu operator. Misalnya operator + dibuat tidak hanya untuk penjumlahan, tapi juga untuk fungsi lain.
  • Variabel instansiasi – Variabel instansiasi adalah variabel yang didefinisikan di dalam suatu metode dan hanya menjadi milik dari instance kelas.
  • Pewarisan/Inheritansi – Inheritansi adalah pewarisan karakteristik sebuah kelas ke kelas lain yang menjadi turunannya.
  • Instance – Instance adalah istilah lain dari objek suatu kelas. Sebuah objek yang dibuat dari prototipe kelas Lingkaran misalnya disebut sebagai instance dari kelas tersebut.
  • Instansiasi – Instansiasi adalah pembuatan instance/objek dari suatu kelas
  • Metode – Metode adalah fungsi yang didefinisikan di dalam suatu kelas
  • Objek – Objek adalah instansiasi atau perwujudan dari sebuah kelas. Bila kelas adalah prototipenya, dan objek adalah barang jadinya.

Encapsulation

Encapsulation adalah teknik membatasi akses pada method yang dimiliki sebuah object dari luar object tersebut. Teknik ini bermanfaat untuk beberapa hal yakni:

  1. Menyembunyikan kompleksitas internal dari sebuah class/object, sehingga yang terlihat dari luar hanya attributes/methods yang relevan.
  2. Menjaga perubahan langsung pada attribute yang dimiliki sebuah object, ini dapat berguna saat nilai baru sebuah attribute perlu divalidasi terlebih dahulu.
  3. Menjaga agar method dengan hak akses public pada class tidak perlu ikut berubah saat field/method internal class bersangkutan berubah, sehingga kode program di tempat lain yang menggunakan class tersebut tidak perlu ikut berubah.

Teknik encapsulation pada bahasa pemrograman python

Encapsulation pada bahasa pemrograman python dilakukan dengan membuat method tertentu tersembunyi dari luar object. Berbeda dengan bahasa pemrograman lainnya (misal java), python tidak mengenal access modifier seperti private,protected, atau public.

Sebagai gantinya, python menggunakan underscore ( tanda ‘_’) untuk menandai access scope sebuah method pada class . Defaultnya instance method pada python bertipe public, jika sebuah nama method diawali dengan tanda satu underscore (‘_’) berarti ia adalah protected method, sedangkan jika diawali dua underscore (‘__’) berarti method tersebut adalah private method.

Contoh penerapan

Kode berikut memberikan contoh penerapan encapsulation pada simulasi pemutar rangkaian lagu yang dikumpulkan dalam sebuah playlist. Terdapat dua buah class yakni Lagu dan Playlist, dimana object Playlist dibuat dari kumpulan(listobject Lagu.

Ref : [1][2][3][4]