Saya selalu cenderung menyalahkan popularitas C pada perlunya bahasa assembly universal. Ini kombinasi kekhususan di tingkat mesin, standarisasi, dan portabilitas ekstrim memungkinkan C berfungsi sebagai yang de facto bahasa assembly universal, dan untuk alasan itu saya menduga perannya akan berlanjut tanpa henti.
Saya harus menyebutkan bahwa saya selalu sedikit terkejut ketika OOP disajikan dalam kursus pemrograman sebagai semacam "model akhir" yang merupakan satu-satunya titik akhir yang mungkin untuk pemrograman yang baik. Seperti banyak aspek pemrograman lainnya, nilai OOP adalah kompromi antara banyak faktor yang bersaing, termasuk bagaimana otak manusia mengatur informasi, bagaimana kelompok masyarakat mendukung perangkat lunak dalam jangka panjang, dan dalam kasus pemrograman berorientasi objek, beberapa aspek yang cukup dalam tentang bagaimana alam semesta itu bekerja.
Dan poin terakhir itu layak dipalu sedikit. Baca lebih lanjut jika Anda tertarik dalam eksplorasi tingkat fisika tentang mengapa gaya pemrograman tertentu ada, bagaimana mereka bekerja bersama, dan ke mana dunia menuju ke masa depan saat kami memperluas lebih lanjut tentang konsep-konsep seperti ...
Objek dalam fisika adalah segala sesuatu yang mempertahankan koherensi yang dapat dikenali dari waktu ke waktu. Itu pada gilirannya memungkinkan makhluk sederhana seperti kita untuk pergi dengan mewakili objek hanya menggunakan sejumlah kecil bit, tanpa membahayakan kelangsungan hidup kita terlalu buruk. Tetapi dalam hal fisika dalam jumlah besar, jumlah hal yang harus Anda dapatkan dengan tepat agar penyederhanaan semacam itu mudah dan umum sangat besar. Sebagai manusia, kita tidak terlalu memikirkan semua itu karena terus terang, kita tidak akan berada di sini jika itu tidak benar.
Kedengarannya terlalu abstrak? Sebenarnya tidak. Bayangkan misalnya mencoba menavigasi jalan ke rumah teman Anda jika alih-alih mobil yang Anda temui berosilasi dengan cepat bidang plasma dan kondensasi sesaat dari materi bergerak dengan rentang kecepatan yang sangat besar. Skenario seperti itu mungkin memotong peluang sosialisasi secara mendalam, ya? Kita membutuhkan objek, kita adalah objek, dan keberadaan objek memberi kita tingkat penyederhanaan yang sangat penting dan sangat penting dari lingkungan di sekitar kita.
Jadi mari kita tarik semua itu kembali ke perangkat lunak. Apa yang dikatakan objek di dunia nyata tentang objek dalam hal pemrograman?
Yah, untuk satu hal itu berarti bahwa apa yang mendefinisikan objek "baik" dalam perangkat lunak harus benar-benar apakah jenis data yang Anda tangani dengan mudah mendukung gagasan kegigihan yang dapat dikenali dari waktu ke waktu .
Dengan definisi tersebut, bentuk OOP yang paling mudah mudah dikenali. Mereka adalah orang-orang yang sedikit keluar dengan hanya menggunakan data yang sudah "dilampirkan" atau didefinisikan oleh beberapa objek dunia nyata, benar-benar fisik seperti seseorang, rumah, atau mobil. Bahkan hari ini, ini masih terlalu sering satu - satunya definisi objek yang orang dapatkan dalam kursus perangkat lunak. Itu terlalu buruk, karena bahkan program berorientasi objek sepele membutuhkan definisi yang lebih luas dari itu.
Kategori objek kedua dan yang jauh lebih menarik terdiri dari apa yang saya sebut peristiwa dunia nyata yang diabadikan . Dengan "diabadikan" maksud saya hal-hal yang setidaknya secara singkat ada sebagai entitas yang didefinisikan dengan baik atau koleksi di dunia nyata, tetapi yang kemudian bubar dan tidak ada lagi sebagai koleksi yang bermakna secara fisik. Sebuah simposium adalah contoh yang bagus: Simposium ini ada untuk sementara waktu sebagai kumpulan tempat dan orang yang didefinisikan dengan baik. Namun sayang, bahkan konferensi terbaik pun harus berakhir, dan bagian-bagian individu yang membuatnya beralih ke kegiatan lain.
Tetapi dengan menggunakan komputer dan jaringan, kita dapat membuat simposium sementara seperti tampak seperti objek jangka panjang dengan menangkap dan mempertahankan memori sebagai objek perangkat lunak. Banyak hal yang kita lakukan dengan komputer dan basis data sama dengan keabadian jenis sementara ini, di mana kita sebenarnya berusaha membuat alam semesta kita lebih kaya dengan menangkap dan memperluasnya dengan cara yang tidak mungkin ada secara fisik. Misalnya, apakah Anda melihat Pandora nyata belakangan ini? Pengambilan dan perluasan karya dunia nyata semacam itu membantu memperkaya dan memperpanjang hidup kita sendiri, ekonomi, dan pilihan dengan cara yang luar biasa. Bagi saya ini adalah pusat pemrograman berorientasi objek, tempat di mana ia memiliki, dan terus memiliki, dampak paling luar biasa.
Kategori terakhir OOP terdiri dari objek yang tidak memiliki koneksi dekat dengan peristiwa eksternal, tetapi merupakan infrastrukturdiperlukan untuk mendukung perpanjangan realitas kita yang berkelanjutan dengan menggunakan benda-benda yang diabadikan dari dunia nyata. Di sinilah Anda bisa turun hingga ke (semi) logam komputer, menciptakan kepingan-kepingan realitas persisten yang seperti unsur-unsur kimia dari dunia nyata dapat digabungkan dengan cepat dan dengan cara yang menarik untuk membangun dunia internal baru. Komputasi mobile telah membantu mempromosikan pertumbuhan pendekatan rekombinatorial semacam ini, yang sekali lagi meniru fitur rekombinatorial dari dunia fisik. Ini juga sulit: Apa yang tampak seperti pilihan yang baik mungkin terbukti dari waktu ke waktu merupakan pilihan yang buruk, biasanya karena pada akhirnya menghalangi keanekaragaman dan ekspansi alih-alih mendukungnya.
Kategori terakhir ini juga menunjukkan risiko menggunakan hanya satu model untuk pemrograman, karena seperti dunia nyata, dunia terprogram juga membutuhkan proses yang tidaksesuai dengan benda yang relatif tidak berubah. Bumi penuh dengan benda-benda, tetapi matahari penuh dengan aliran energi yang sangat dinamis yang pada akhirnya diperlukan untuk "mendorong" benda-benda dan aktivitas-aktivitas di bumi berenergi lebih rendah. Demikian pula, dalam menciptakan dunia komputasi ada kasus-kasus di mana Anda harus berurusan dengan aliran dan transformasi dan konteks yang berubah dengan cepat yang, meskipun tidak terlalu seperti objek dalam diri mereka, tetap sangat penting untuk memungkinkan objek yang lebih sederhana, lebih ramah-manusia yang digunakan pada level yang lebih tinggi . Bukan kebetulan bahwa banyak pemrograman yang dilakukan pada level kernel tidak seperti objek, atau cenderung bergantung pada bahasa seperti C yang lebih berorientasi pada pemrosesan. Ini adalah domain yang lebih dalam yang melengkapi keragaman menarik yang kita lihat lebih tinggi di dunia yang dihasilkan komputer.
Area lain di mana OOP bisa serba salah adalah terlalu fokus pada konsep objek lama .
Objek di dunia nyata, dan terutama objek hidup , memiliki tingkat kemampuan yang benar-benar menakjubkan untuk berinteraksi dengan lingkungannya dengan cara yang kompleks dan halus. Widget kompos yang melihat satu sama lain, melakukan beberapa kompatibilitas dan pemeriksaan kewarasan, dan mungkin bahkan menemukan beberapa cara baru untuk berinteraksi lebih dekat dengan konsep objek biologis dunia nyata daripada kerangka kerja sederhana dan skema pewarisan sederhana yang kita cenderung untuk fokus pada (biasanya karena kebutuhan!) di tingkat kode. Ini adalah salah satu area pertumbuhan untuk objek-objek di dunia cyber, semakin banyak pendekatan "seperti agen" di mana reaktivitas terhadap lingkungan adalah norma bahkan dalam pemrograman itu sendiri.
Dan banyak untuk "kritik" saya terhadap OOP! Meski begitu, saya harap saya telah menunjukkan mengapa menciptakan dunia maya yang lebih kaya berarti mencakup keragaman gaya pemrograman, daripada mengasumsikan bahwa "hanya satu" yang dibutuhkan. Perasaan saya adalah bahwa hal yang sangat menarik belum datang, tidak peduli seberapa biasa apa yang kita lakukan sekarang!