Apa fitur itu menurut Anda yang membuat pemrograman berorientasi objek jauh lebih sukses?
- Pesan Berlalu
- Warisan
- Polimorfisme
- Enkapsulasi
Atau fitur lain yang mungkin ingin Anda perkenalkan.
Juga saya ingin tahu bahwa apa hubungan antara tipe data abstrak dan pemrograman berorientasi objek?
object-oriented
Tony
sumber
sumber
Jawaban:
Saya menyarankan bahwa karakteristik paling penting dari pemrograman berorientasi objek adalah manajemen kompleksitas .
Otak manusia hanya dapat memiliki begitu banyak konsep dalam satu waktu - batas yang sering dikutip untuk mengingat 7 +/- 2 item independen muncul di pikiran.
Ketika saya bekerja pada sistem 600kloc di tempat kerja, saya tidak bisa menyimpan semuanya di kepala saya sekaligus. Jika saya harus melakukan itu, saya akan dibatasi untuk bekerja pada sistem yang jauh lebih kecil.
Untungnya, saya tidak harus melakukannya. Berbagai pola desain dan struktur lain yang telah kami gunakan pada proyek itu berarti bahwa saya tidak harus berurusan dengan seluruh sistem sekaligus - saya dapat mengambil masing-masing bagian dan mengerjakannya, mengetahui bahwa mereka cocok dengan aplikasi yang lebih luas dengan cara yang jelas.
Semua konsep OO penting menyediakan cara untuk mengelola kompleksitas.
Enkapsulasi - izinkan saya berurusan dengan API eksternal yang memberi saya berbagai layanan, tanpa khawatir bagaimana layanan itu diterapkan.
Abstraksi - izinkan saya berkonsentrasi pada karakteristik esensial dan mengabaikan yang tidak relevan.
Komposisi - izinkan saya menggunakan kembali komponen yang telah dibangun dalam kombinasi baru
Polimorfisme - izinkan saya meminta layanan tanpa khawatir tentang bagaimana benda yang berbeda dapat menyediakannya dengan cara yang berbeda.
Warisan - izinkan saya menggunakan kembali antarmuka atau implementasi, hanya menyediakan bagian-bagian yang berbeda dari apa yang telah terjadi sebelumnya.
Prinsip Tanggung Jawab Tunggal - menjaga agar tujuan setiap objek tetap jelas dan ringkas, sehingga mudah untuk dipikirkan
Prinspitusi Substitusi Liskov - jangan saling perangkap dengan memperkenalkan dependensi ganjil
Prinsip Terbuka / Tertutup - mari izinkan ekstensi dan modifikasi dengan cara yang tidak mengharuskan kita mengambil risiko melanggar kode yang ada
Ketergantungan Injeksi - mari kita komposisi ke tingkat berikutnya dan merakit komponen bersama-sama nanti.
Pengembangan berorientasi antarmuka - mari kita abstraksi ke tingkat berikutnya dan hanya bergantung pada abstraksi, tidak pernah pada implementasi konkret.
sumber
Antarmuka pengguna grafis. Pada akhir tahun delapan puluhan, awal tahun sembilan puluhan, ketika Mac, Amigas, Atari STs, Windows dan GEM mulai mengganti antarmuka pengguna berbasis karakter, menjadi jelas bahwa bahasa seperti C tidak cocok untuk menulis program GUI. Sementara pemrosesan data tradisional dianggap sebagai skema "input data -> pemrosesan -> data keluaran", yang dapat dilakukan dalam bahasa prosedural juga, fitur OO berguna untuk menangani kompleksitas yang melekat pada GUI.
sumber
Menyembunyikan Data disediakan oleh Enkapsulasi.
sumber
Fitur yang belum disebutkan oleh jawaban lain: pemodelan domain . Karena orang cenderung berpikir tentang melakukan sesuatu dengan atau ke objek, dan tentang objek yang memiliki sifat intrinsik, sangat mudah untuk memodelkan masalah atau alur kerja menggunakan perangkat lunak berorientasi objek. Pada dasarnya, ini memungkinkan kita untuk menggunakan kemampuan yang ada untuk menangani kata benda, kata kerja, dan kata sifat dalam kode.
sumber
Saya pikir warisan adalah poin terpenting dari OOP.
[dari pengembangan game] Anda dapat membuat sesuatu seperti kelas Drawable, dengan merender metode dan atribut, dan membuat kelas Spaceship dan Planet, yang diturunkan dari Drawable. Ambil semua objek dari [dan anak Sprite lainnya] lainnya, masukkan drawableObjArray dan panggil metode draw untuk setiap objek. Anda hanya perlu tahu bahwa itu Drawable.
sumber
Abstraksi
Memberikan layanan yang diperlukan menyembunyikan hal-hal yang tidak perlu. Lihat penjelasan saya di sini- Apa itu abstraksi?
sumber
Ini agak sukses karena mendorong penggunaan organisasi pikiran manusia menjadi benda. Orang umumnya pandai melihat hubungan hal-hal - hal-hal seperti perbedaan, persamaan dan perilaku. OO mendorong pengembangan perangkat lunak untuk meniru konseptualisasi manusia di dunia.
Membuat pengembangan perangkat lunak mirip dengan cara kita memandang dunia membuatnya lebih mudah bagi pikiran kita untuk menangani kerumitan.
sumber
" ADT vs objek " telah diminta beberapa kali di sini. Jawaban satu-baris adalah "ADT dan objek adalah kebalikan dari satu sama lain - apa yang satu abstrak tidak bisa dengan yang lain; masing-masing memungkinkan fleksibilitas dengan cara yang berbeda."
Untuk jawaban yang lebih lama, lihat Abstraksi Data Pemahaman William Cook , Diperoleh Kembali . Secara singkat, objek memungkinkan Anda untuk dengan mudah menggunakan beberapa implementasi / representasi dari beberapa datum (sesuatu yang terlihat seperti daftar bisa berupa array, atau pohon penyeimbang sendiri, atau ...) tetapi membuatnya sulit untuk menambahkan operasi baru (karena Anda harus menambahkan operasi baru ke masing-masing representasi Anda), sementara ADT memudahkan untuk menambahkan operasi baru pada tipe data Anda, tetapi membuatnya sulit untuk memiliki beberapa implementasi.
Sunting: Saya telah mengatakan bahwa pesan yang lewat adalah yang membuat OO sukses. Berdasarkan komentar Jonas, itu tidak benar, karena sebagian besar bahasa yang orang anggap OO tidak menggunakan passing pesan. Karena itu tidak benar, saya mengambilnya dari jawaban saya.
sumber
Tiga fitur teratas saya. Komposisi Objek - memungkinkan objek untuk berkolaborasi. Polimorfisme - mendukung perilaku dinamis saat runtime. Warisan - dengan menggunakan kembali kode dan memodifikasi perilaku melalui metode yang menimpa.
ADT - Anda dapat memilikinya bahkan dalam bahasa yang tidak berorientasi objek seperti Pascal. Tumpukan atau antrian adalah contoh ADT.
sumber
dengan kata sederhana OOP adalah kunci untuk re-usability dan enkapsulasi yang menghasilkan produksi kerangka kerja besar yang membuat hidup lebih mudah bagi programmer di era ini karena hanya dapat memanggil API dan melakukan hari apa yang paling sering diinginkan.
karena pertanyaan Anda adalah tentang 4 fitur OOP sehingga Anda dapat mengatakan
jadi 1. Passing Pesan dan 3. Polimorfisme sebenarnya mendukung 2. Warisan dan 4. Enkapsulasi.
sumber
Menurut pendapat saya, tiga fitur terakhir adalah yang paling penting yang mempengaruhi penggunaan OOP secara luas:
Sunting: Poin lain adalah IDE dan lingkungan pengembangan antarmuka grafis seperti Visual studio dan Eclipse. Karena mereka merangkul bahasa OOP, maka semakin banyak desain cenderung ke arah OOP.
Dan tentu saja Prinsip SOLID adalah yang pernah membuat produk-produk perangkat lunak ROCK solid disampaikan :)
sumber