Object Oriented Programing merupakan suatu metode pemrograman yang berbasis pada objek. Tujuan dari metode ini adalah untuk mempermudah developer dalam mengembangkan model yang sudah ada pada kehidupan sehari-hari.
Objek disini merupakan sebuah instance atau variabel dari sebuah class, sedangkan class sendiri merupaka blueprint atau prototype yangmendefinisikan atribut dan perilaku dari suatu jenis objek.
Selain objek dan class dalam OOP juga terdapat prinsip-prinsip penyusun yaitu, inheritance, polymorphsim, abstraction dan encapsulation.
1. Inheritance
Inheritance adalah konsep dalam pemrograman berorientasi objek yang memungkinkan kelas baru dibuat berdasarkan kelas yang sudah ada. Kelas baru disebut “subclass” atau “derived class”, dan kelas yang sudah ada disebut “superclass” atau “base class”. Subclass mewarisi semua properti dan metode dari superclass, dan juga dapat menambahkan properti dan metode baru atau mengubah yang sudah ada.
Inheritance berguna untuk membuat kelas baru yang memiliki atribut dan perilaku yang sama dengan kelas yang sudah ada, tetapi juga memiliki fitur yang unik. Dengan mewarisi dari superclass, subclass dapat memanfaatkan kembali kode dan menghindari duplikasi kode yang sudah diimplementasikan di superclass.
Inheritance sering direpresentasikan dengan menggunakan hubungan “is-a” atau “adalah”.
2. Polymorphsim
Polymorphism adalah konsep dalam pemrograman berorientasi objek di mana objek dapat merespons permintaan atau panggilan metode dengan cara yang berbeda tergantung pada jenis objeknya atau kelas yang ia wakili. Artinya, beberapa objek yang berbeda dapat merespons permintaan atau panggilan metode yang sama dengan cara yang berbeda.
Dalam bahasa yang lebih sederhana, polymorphism memungkinkan kita untuk memiliki banyak bentuk atau implementasi yang berbeda dari metode yang sama di dalam berbagai kelas yang berbeda. Konsep ini memungkinkan kita untuk menghasilkan kode yang lebih fleksibel, mudah diubah, dan mudah dikembangkan.
Polymorphism juga dapat dicapai melalui konsep overloading dan overriding. Overloading terjadi ketika kita memiliki beberapa metode dengan nama yang sama tetapi dengan parameter yang berbeda, sedangkan overriding terjadi ketika kita menimpa atau mengganti implementasi metode yang sudah ada di superclass dengan implementasi yang berbeda di subclass.
3. Abstraction
Abstraction atau abstraksi adalah konsep dalam pemrograman berorientasi objek yang memungkinkan kita untuk menyembunyikan detail kompleksitas suatu objek dan hanya menampilkan informasi penting atau yang dibutuhkan. Dalam abstraksi, kita membuat kelas abstrak yang hanya memiliki definisi atau rancangan dasar dari properti dan metodenya, tanpa harus memberikan detail implementasi dari properti dan metodenya.
Abstraksi membantu kita untuk mengisolasi atau memisahkan bagian-bagian yang kompleks dan tidak perlu dari program, sehingga program menjadi lebih mudah dimengerti dan diorganisir. Dengan menggunakan abstraksi, kita dapat fokus pada apa yang penting atau esensial dalam suatu objek dan mengabaikan atau menyembunyikan detail yang tidak relevan atau tidak diperlukan.
Abstraksi juga dapat digunakan untuk menciptakan kelas-kelas yang bersifat generik atau umum, yang dapat digunakan kembali dalam berbagai konteks atau situasi. Misalnya, kita dapat membuat kelas abstrak “Shape” yang berisi definisi dasar dari properti dan metode yang diperlukan oleh semua bentuk geometri, seperti persegi, lingkaran, segitiga, dan lain-lain. Kelas ini dapat digunakan sebagai dasar untuk membuat kelas-kelas bentuk yang lebih spesifik dan kompleks.
4. Encapsulation
Encapsulation atau enkapsulasi adalah salah satu konsep utama dalam pemrograman berorientasi objek yang mengacu pada cara menyembunyikan data dan detail implementasi internal suatu objek atau kelas dari kode di luar objek atau kelas tersebut. Tujuan dari enkapsulasi adalah untuk melindungi data dari manipulasi yang tidak sah atau tidak terduga dan untuk memastikan bahwa objek atau kelas hanya dapat diakses melalui antarmuka atau metode yang telah ditentukan.
Dalam enkapsulasi, data atau properti dari objek atau kelas diatur dengan akses modifier seperti private atau protected, yang berarti bahwa data hanya dapat diakses dan dimanipulasi di dalam kelas tersebut. Untuk mengakses atau memodifikasi data di dalam kelas, kita menggunakan metode akses seperti getter atau setter, yang juga disebut sebagai accessors atau mutators. Dengan cara ini, kode di luar kelas tidak dapat secara langsung mengakses atau memodifikasi data, sehingga memastikan bahwa data di dalam kelas terlindungi dan tidak dapat rusak atau diubah secara tidak sengaja.
Enkapsulasi juga membantu meningkatkan keamanan dan fleksibilitas kode. Dengan menyembunyikan detail implementasi internal dari kelas, kita dapat memperbaiki atau mengubah bagian dari kode tanpa mempengaruhi kode yang menggunakan kelas tersebut. Hal ini juga memungkinkan untuk memodifikasi implementasi kelas tanpa merusak fungsionalitas kode yang menggunakan kelas tersebut.