Prinsip Pemrograman Berorientasi Objek

Halo, Habr! Nama saya Vladislav Rodin. Saat ini saya adalah Kepala kursus Arsitek Tugas Berat di OTUS, dan saya juga mengajar kursus arsitektur perangkat lunak.



Khusus untuk permulaan kelas di aliran baru mata kuliah "Arsitektur dan Pola Desain" saya menyiapkan satu lagi bahan penulis.






pengantar



Ketika datang ke pola desain klasik, orang tidak bisa tidak memikirkan pemrograman berorientasi objek itu sendiri. Bagaimanapun, pola GoF adalah pola pemrograman berorientasi objek. Pemrograman fungsional memiliki polanya sendiri.



Secara umum semuanya diatur sebagai berikut: ada pemrograman berorientasi objek itu sendiri. Dia memiliki prinsip. Dari prinsip-prinsip pemrograman berorientasi objek, pola GRASP yang kami parse mengikuti (sebagai opsi - prinsip SOLID), yang selanjutnya mengikuti pola GoF. Sejumlah hal menarik mengikuti dari mereka, misalnya pola usaha.



Paradigma Berorientasi Objek



Definisi tersebut menyatakan bahwa "Pemrograman berorientasi objek adalah paradigma pemrograman yang konsep dasarnya adalah pengertian tentang suatu objek yang diidentifikasikan dengan domain".



Dengan demikian, sistem direpresentasikan sebagai sekumpulan objek dari area subjek, yang berinteraksi satu sama lain dalam beberapa cara. Setiap objek memiliki tiga komponen: identitas, status, dan perilaku.



Keadaan suatu objek adalah kumpulan dari semua bidangnya dan nilainya.



Perilaku objek adalah kumpulan semua metode kelas objek.



Identitas objek inilah yang membedakan satu objek kelas dengan objek kelas lainnya. Dari perspektif Java, metode sama didefinisikan dengan identitas.



Prinsip Pemrograman Berorientasi Objek



Pemrograman berorientasi objek memiliki sejumlah prinsip. Gagasan tentang nomor mereka berbeda. Seseorang mengklaim bahwa ada tiga dari mereka (sekolah programmer lama), seseorang itu ada empat dari mereka (sekolah programmer baru):



  1. Abstraksi
  2. Enkapsulasi
  3. Warisan
  4. Polimorfisme


Saya mengusulkan untuk membicarakannya lebih detail. Satu-satunya hal adalah saya menyarankan untuk tidak mempertimbangkan abstraksi, karena saya menganggap diri saya berada di sekolah lama programmer.



Enkapsulasi



Bertentangan dengan pendapat banyak orang yang diwawancarai (dan terkadang orang yang diwawancarai), enkapsulasi bukanlah "ketika semua bidang bersifat pribadi". Enkapsulasi adalah prinsip paling mendasar dari desain perangkat lunak, jejaknya hanya diamati di tingkat mikro, tetapi juga di tingkat desain makro.



Definisi ilmiah menyatakan bahwa "Enkapsulasi adalah prinsip bahwa setiap kelas dan, dalam arti yang lebih luas, setiap bagian dari sistem harus dianggap sebagai" kotak hitam ": pengguna kelas atau subsistem hanya boleh melihat antarmuka (yaitu daftar properti dan metode yang dideklarasikan ) dan tidak mempelajari implementasi internal. "



Jadi, ternyata jika kelas A mengacu pada bidang kelas B secara langsung, ini tidak mengarah pada fakta bahwa "keamanan informasi dilanggar", tetapi pada fakta bahwa kelas A terikat ke perangkat internal kelas B, dan upaya untuk mengubah struktur internal kelas B akan menyebabkan perubahan kelas A. Selain itu, kelas A tidak hanya bekerja dengan bidang kelas B, ia bekerja menurut beberapa logika bisnis. Artinya, logika untuk bekerja dengan keadaan kelas B terletak pada kelas A, dan ketika kita ingin menggunakan kembali kelas B, ini tidak dapat dilakukan, karena tanpa bagian dari kelas A, kelas B mungkin tidak berguna, yang akan mengarah pada fakta bahwa kelas B harus diberikan bersama dengan class A. Ekstrapolasi ini ke seluruh sistem, ternyata hanya seluruh sistem yang dapat digunakan kembali.



Enkapsulasi adalah prinsip yang paling diabaikan dan, sayangnya, hanya sedikit orang yang menafsirkannya dengan benar. Ini memungkinkan Anda untuk meminimalkan jumlah tautan antara kelas dan subsistem dan, karenanya, menyederhanakan implementasi independen dan modifikasi kelas dan subsistem.



Warisan



Inheritance adalah kemampuan untuk menurunkan satu kelas dari kelas lain sambil mempertahankan semua properti dan metode kelas leluhur (superclass), menambahkan properti dan

metode baru jika perlu .



Warisan adalah prinsip yang paling dilebih-lebihkan. Pernah dipercaya bahwa "Untuk programmer yang ideal, pohon warisan pergi ke tak terbatas dan diakhiri dengan objek yang benar-benar kosong", karena dulu orang tidak mengerti betul bahwa warisan adalah cara untuk mengekspresikan properti dunia nyata seperti hierarki, dan bukan cara menggunakan kembali kode dengan mewarisi mesin dari lemari es, karena kedua item tersebut memiliki pegangan. Dianjurkan untuk menghindari warisan sebisa mungkin, karena warisan adalah hubungan yang sangat kuat. Untuk mengurangi jumlah level pewarisan, disarankan untuk membangun pohon β€œbottom-up”.



Polimorfisme



Polimorfisme adalah kemampuan untuk menggunakan kelas turunan dalam konteks yang ditujukan untuk kelas leluhur.



Di balik definisi yang paling sadis terletak kemampuan bahasa pemrograman untuk menguraikan tugas dan refactor if's and switch.






All Articles