Object Oriented Programming
OOP (Object-Oriented Programming) adalah paradigma pemrograman yang didasarkan pada konsep objek. Dalam OOP, program dibangun dengan membuat kelas (class) yang berisi data (atribut) dan fungsi (method) yang beroperasi pada data tersebut. Objek kemudian diciptakan dari kelas, dan pengguna dapat berinteraksi dengan objek tersebut melalui fungsionalitas yang diberikan oleh method.
Konsep OOP memiliki empat asas utama: abstraksi, encapsulation, inheritance, dan polymorphism. Abstraksi adalah proses menyederhanakan kompleksitas dengan cara memperhatikan hanya detail penting dan mengabaikan yang tidak penting. Encapsulation adalah proses menyembunyikan detail implementasi dari objek dan hanya mengekspos fungsionalitas yang diperlukan kepada pengguna. Inheritance adalah proses membuat kelas baru dari kelas yang sudah ada, dengan menurunkan sifat dan perilaku dari kelas induk. Polymorphism adalah proses dimana objek dapat memiliki banyak bentuk atau perilaku.
OOP memiliki beberapa kelebihan, seperti memudahkan pengembangan program karena struktur kode yang terorganisir, mendorong penggunaan kode kembali (reuse), dan meningkatkan keamanan program karena data dan method yang tersembunyi. Namun, OOP juga memiliki beberapa kelemahan, seperti kompleksitas yang lebih tinggi dan kinerja yang lebih lambat dibandingkan dengan paradigma pemrograman lain seperti procedural programming.
Beberapa bahasa pemrograman yang mendukung OOP termasuk Java, Python, C++, Ruby, dan banyak lagi. OOP telah digunakan untuk membangun berbagai macam aplikasi seperti game, sistem manajemen database, aplikasi desktop, dan aplikasi web.
Inheritance (pewarisan)
dalam pemrograman berorientasi objek (OOP) adalah konsep dimana sebuah class dapat mewarisi atribut dan metode yang sudah ada dari class lain. Class yang mewarisi disebut sebagai subclass, dan class yang memberikan warisan disebut sebagai superclass. Cara kerjanya adalah mendefinisikan superclass terlebih dahulu, kemudian subclass dibuat dengan menggunakan keyword “extends” diikuti dengan nama superclass. Setelah itu, subclass dapat menggunakan atribut dan metode yang diwarisi dari superclass serta menambahkan atribut dan metode tambahan yang sesuai dengan kebutuhan subclass tersebut.
Abstract class
Abstraksi (abstraction) adalah salah satu konsep dalam pemrograman berorientasi objek (OOP) yang memungkinkan programmer untuk memfokuskan pada informasi penting dan mengabaikan detail yang tidak relevan. Dalam OOP, abstraksi biasanya dicapai melalui kelas abstrak dan interface.
Kelas abstrak adalah kelas yang tidak dapat diinstansiasi secara langsung, melainkan hanya dapat diwarisi oleh kelas lain. Kelas abstrak berisi definisi dari satu atau lebih method abstrak, yaitu method yang tidak memiliki implementasi dan hanya memiliki deklarasi. Kelas turunan dari kelas abstrak harus mengimplementasikan semua method abstrak yang didefinisikan di kelas induknya.
Perbedaan utama antara abstract class dan interface dalam pemrograman berorientasi objek adalah sebagai berikut:
- Implementasi method: Abstract class dapat memiliki method dengan implementasi dan dapat memiliki method yang abstrak, sedangkan interface hanya dapat memiliki method abstrak, yaitu method yang tidak memiliki implementasi.
- Konstruktor: Abstract class dapat memiliki konstruktor dan diinstansiasi menggunakan kata kunci “new”, sedangkan interface tidak dapat memiliki konstruktor dan tidak dapat diinstansiasi.
- Level akses: Abstract class dapat memiliki variabel dengan level akses protected, sedangkan semua variabel pada interface bersifat public dan final secara otomatis.
- Pewarisan: Subclass dapat mewarisi dari satu abstract class, tetapi dapat mengimplementasikan beberapa interface.
- Kelebihan penggunaan: Abstract class biasanya digunakan ketika ada kelas-kelas yang memiliki hubungan erat dan bersifat lebih spesifik, sedangkan interface digunakan ketika ada banyak kelas yang memiliki method dengan nama yang sama tetapi dapat diimplementasikan secara berbeda.
Polymorphism
Polymorphism adalah salah satu konsep utama dalam OOP (Object-Oriented Programming) yang mengacu pada kemampuan suatu objek untuk mengambil banyak bentuk atau perilaku yang berbeda. Secara lebih spesifik, polymorphism mengacu pada kemampuan suatu objek untuk merespons secara berbeda terhadap pesan yang sama atau metode yang sama, tergantung pada konteks atau kondisi yang berbeda.
Dalam OOP, polymorphism biasanya dicapai melalui konsep overloading dan overriding. Overloading adalah ketika suatu kelas memiliki beberapa metode dengan nama yang sama, tetapi parameter yang berbeda, sehingga memungkinkan suatu objek untuk memanggil metode yang sesuai dengan parameter yang diberikan. Contoh sederhana dari overloading adalah metode print() dalam kelas Java System.out, yang dapat menerima argumen berbeda seperti tipe data int, double, atau string.
Sementara itu, overriding adalah ketika kelas turunan memiliki metode yang sama dengan kelas induknya, tetapi dengan implementasi yang berbeda. Saat memanggil metode pada objek kelas turunan, metode yang diwarisi dari kelas induk akan digantikan dengan metode yang didefinisikan di kelas turunan. Contoh sederhana dari overriding adalah metode toString() dalam kelas Java Object, yang diimplementasikan ulang dalam kelas-kelas turunan untuk menghasilkan representasi string objek yang sesuai dengan kelas tersebut.
Polymorphism memungkinkan programmer untuk menulis kode yang lebih fleksibel dan dapat digunakan kembali, karena objek yang berbeda dapat menggunakan metode yang sama namun menghasilkan hasil yang berbeda. Ini juga memudahkan pemeliharaan dan pengembangan program, karena perubahan pada satu metode dapat mempengaruhi seluruh program, tergantung pada konteks atau kondisi yang berbeda.
Encapsulation
Encapsulation atau penyembunyian informasi adalah salah satu konsep utama dalam pemrograman berorientasi objek (OOP) yang mengizinkan data atau informasi di dalam suatu objek hanya dapat diakses dan dimodifikasi melalui metode-metode yang telah ditentukan.
Dalam OOP, objek dianggap sebagai suatu entitas yang memiliki state (keadaan) dan behavior (perilaku). State objek didefinisikan oleh variabel atau properti objek, sedangkan behavior objek didefinisikan oleh metode objek. Encapsulation memungkinkan programmer untuk menyembunyikan detail implementasi state dan behavior objek dari pengguna atau klien.
Dengan menggunakan encapsulation, programmer dapat menjaga keamanan data dan mencegah terjadinya perubahan atau modifikasi yang tidak diinginkan dari objek yang lain. Selain itu, encapsulation juga mempermudah perubahan dan pemeliharaan kode, karena detail implementasi dapat diubah tanpa mempengaruhi kode yang menggunakan objek tersebut.
Coupling dan Cohesion
Coupling dan cohesion adalah dua konsep penting dalam pemrograman berorientasi objek yang berhubungan dengan cara objek-objek dalam sistem saling berinteraksi dan terorganisir.
Coupling mengacu pada tingkat ketergantungan antara objek-objek dalam sistem. Semakin tinggi tingkat coupling, semakin besar ketergantungan antara objek-objek tersebut, yang dapat membuat perangkat lunak sulit untuk dimodifikasi dan dipelihara. Sebaliknya, semakin rendah tingkat coupling, semakin mandiri objek-objek tersebut dan semakin mudah perangkat lunak tersebut untuk dimodifikasi dan dipelihara. Oleh karena itu, coupling yang rendah dianggap sebagai tujuan yang diinginkan dalam pemrograman berorientasi objek.
Cohesion mengacu pada seberapa terkait dan fokus objek-objek dalam sistem terhadap tugas yang diberikan. Semakin tinggi tingkat cohesion, semakin fokus objek-objek tersebut terhadap tugas-tugas yang diberikan, yang dapat membuat perangkat lunak menjadi lebih mudah dipahami dan dimodifikasi. Sebaliknya, semakin rendah tingkat cohesion, semakin tidak terkait objek-objek tersebut terhadap tugas-tugas yang diberikan, yang dapat membuat perangkat lunak sulit untuk dipahami dan dimodifikasi. Oleh karena itu, cohesion yang tinggi dianggap sebagai tujuan yang diinginkan dalam pemrograman berorientasi objek.
Dalam praktiknya, pengembang perangkat lunak harus mencoba untuk mencapai tingkat coupling yang rendah dan tingkat cohesion yang tinggi dalam sistem yang mereka bangun. Hal ini dapat dicapai dengan merancang objek-objek yang mandiri dan terfokus pada tugas-tugas yang spesifik, dan dengan meminimalkan ketergantungan antara objek-objek tersebut. Dengan demikian, perangkat lunak akan lebih mudah dimodifikasi, dipelihara, dan dipahami.
Private, Protected, dan Public Accsess Modifier
Dalam pemrograman berorientasi objek, access modifier adalah konsep yang digunakan untuk mengatur tingkat aksesibilitas suatu atribut atau metode dalam suatu class. Terdapat tiga access modifier utama dalam pemrograman berorientasi objek, yaitu private, protected, dan public.
Private: Atribut atau metode yang diberi modifier private hanya dapat diakses dari dalam class itu sendiri. Atribut atau metode ini tidak dapat diakses dari class turunan atau dari luar class tersebut. Private digunakan untuk membatasi aksesibilitas suatu atribut atau metode agar hanya dapat diakses dan dimodifikasi oleh class tersebut sendiri.
Protected: Atribut atau metode yang diberi modifier protected dapat diakses dari dalam class itu sendiri, class turunan, dan class dalam package yang sama. Atribut atau metode ini tidak dapat diakses dari luar package tempat class tersebut berada. Protected digunakan untuk membatasi aksesibilitas suatu atribut atau metode agar hanya dapat diakses oleh class turunan atau class dalam package yang sama.
Public: Atribut atau metode yang diberi modifier public dapat diakses dari mana saja, baik dari dalam class itu sendiri, class turunan, atau dari luar class tersebut. Public digunakan untuk memungkinkan aksesibilitas suatu atribut atau metode dari mana saja, tanpa harus membatasi aksesibilitas tersebut.
Dalam praktiknya, penggunaan access modifier ini akan tergantung pada kebutuhan dan desain dari program yang dibuat. Public dapat digunakan jika ingin membuat suatu atribut atau metode dapat diakses dari mana saja, sedangkan protected dan private dapat digunakan untuk membatasi aksesibilitas suatu atribut atau metode agar tidak dapat diakses dari mana saja.
Class dan Object
Class adalah blueprint atau cetak biru yang digunakan untuk membuat objek. Class menyediakan definisi untuk variabel dan fungsi yang akan dimiliki oleh objek yang dibuat dari class tersebut. Class juga dapat digunakan untuk menerapkan konsep abstraksi dan inheritance dalam pemrograman berorientasi objek.
Objek adalah instance atau representasi konkret dari class. Ketika objek dibuat dari sebuah class, objek tersebut memiliki akses ke variabel dan fungsi yang didefinisikan dalam class. Objek dapat berinteraksi dengan objek lain dan melakukan tugas-tugas yang ditentukan dalam class. Setiap objek adalah unik dan dapat memiliki properti dan perilaku yang berbeda dari objek lain yang dibuat dari class yang sama.
Sebagai contoh, kita dapat membuat class “Mobil” yang memiliki variabel seperti “merk”, “tahun”, dan “warna” serta fungsi seperti “accelerate” dan “brake”. Setelah class “Mobil” dibuat, kita dapat membuat objek-objek mobil dari class tersebut, seperti “Mobil A” dengan merk “Toyota”, tahun “2021”, dan warna “Merah”, serta “Mobil B” dengan merk “Honda”, tahun “2019”, dan warna “Hitam”. Objek-objek ini dapat melakukan tugas-tugas seperti mempercepat dan mengerem sesuai dengan definisi dalam class “Mobil”.