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.