"Halo, Amigo! Saya ingin memberi tahu Anda tentang manfaat lain dari OOP. Soalnya, program lebih seperti binatang daripada bangunan. Mereka tidak dibangun, mereka tumbuh. Pengembangan berarti perubahan konstan. Dalam konstruksi, Anda bisa memiliki rencana yang bagus dan mengikutinya ke T. Tetapi dalam pengembangan perangkat lunak, bukan itu masalahnya."

Cukup sering, Anda tidak dapat melakukan sesuatu seperti yang Anda inginkan, dan Anda harus sering mengerjakan ulang program Anda. Dan bahkan lebih sering, persyaratan pelanggan berubah.

"Tapi bagaimana jika pelanggan memberikan spesifikasi yang sangat detail?"

"Lihatlah apa yang terjadi dari waktu ke waktu. Jika sebuah produk berhasil, pelanggan akan ingin merilis versi baru, lalu versi baru, dan lainnya. Dan, tentu saja, Anda harus membuat beberapa « perubahan kecil » untuk produk yang sudah ada. Jadi pengembangan perangkat lunak adalah serangkaian perubahan yang panjang. Hanya iramanya yang berbeda. Versi baru mungkin dirilis setiap minggu, sebulan sekali, atau setiap enam bulan."

"Jadi apa yang kita simpulkan dari semua ini?"

"Struktur internal produk harus dipertahankan dengan cara yang memungkinkan perubahan besar (dan kecil) dilakukan dengan pengerjaan ulang minimum."

"Bagaimana kamu melakukannya?"

"Kita telah berbicara tentang bagaimana sebuah program terdiri dari objek yang berinteraksi satu sama lain. Mari gunakan titik tebal untuk mewakili semua objek program kita di papan tulis. Kita akan menggambar panah dari setiap objek (titik) ke semua objek (titik) yang berinteraksi dengannya."

Sekarang mari gabungkan objek (titik) ke dalam grup. Titik-titik milik grup yang sama jika mereka lebih terhubung satu sama lain daripada titik-titik lainnya. Jika sebagian besar panah titik mengarah ke titik-titik dalam grupnya, maka kita telah mengelompokkan objek dengan benar. Titik-titik dalam kelompok yang sama dikatakan digabungkan dengan erat, sedangkan titik-titik dalam kelompok yang berbeda digabungkan secara longgar.

Ini disebut « prinsip kopling longgar ». Suatu program dibagi menjadi beberapa bagian, sering kali lapisan, yang logikanya terikat kuat pada struktur internalnya dan terikat lemah pada lapisan/bagian lain. Interaksi antar lapisan biasanya sangat terkotak-kotak. Satu lapisan dapat memanggil lapisan lain hanya dengan menggunakan sebagian kecil dari kelasnya.

"Prinsip 'pembagian kerja' yang sama, tetapi dalam skala yang lebih besar?"

"Tepat. Ini memungkinkan kami untuk mengatur ulang departemen, membuatnya lebih efisien, dan mempekerjakan lebih banyak orang, dan jika kami tidak mengubah protokol antardepartemen, maka semua perubahan kami akan bersifat lokal. Tidak ada yang harus dilatih ulang. Kami tidak tidak harus mengerjakan ulang seluruh sistem. Setiap departemen dapat mengoptimalkan urusan internalnya dengan cara ini jika mekanisme interaksi departemen dipilih dengan baik."

"Jika mereka dipilih dengan baik. Dan bagaimana jika mereka tidak dipilih dengan baik?"

'Maka Anda akan segera kehabisan « ruang gerak » untuk melakukan perubahan, dan harus mengerjakan ulang seluruh sistem. Itu terjadi dari waktu ke waktu. Kami tidak dapat memprediksi masa depan, tetapi kami dapat meminimalkan berapa kali kami harus menulis ulang program."

"Oke. Saya melihat manfaat membagi program seperti itu, tetapi bagaimana OOP muncul?"

"Ketika kita memilih bagaimana menyusun departemen dan bagaimana mereka akan berinteraksi, kita menerapkan ' prinsip abstraksi '. Dalam pemrograman, abstraksi digunakan untuk menentukan cara terbaik untuk memisahkan program dan bagaimana bagian-bagian harus berinteraksi. Prinsip ini dapat juga diterapkan berulang kali ke bagian-bagian pokok sampai kita memecah program menjadi kelas-kelas individual."

"Dan menyembunyikan struktur internal dari bagian-bagian ini, dan dengan tegas membatasi bagaimana mereka berinteraksi dengan bagian lain – itu enkapsulasi , bukan?"

"Tepat. Enkapsulasi dan abstraksi adalah landasan OOP. Program yang baik harus mematuhi kedua prinsip ini. Nanti kita akan melihat prinsip lain dan memahami keuntungannya."

"Bagus. Aku tidak sabar!"