Mengapa JavaScript adalah Bahasa OOP ?
Anda mungkin tahu cara kerja OOP. Kelas anjing mewarisi dari kelas Animal, yang berarti bahwa jika Anda memiliki anjing Anda mengakses metode dari Animal. Ini sebenarnya hanya sebagian dari OOP. Anda dapat berorientasi objek tanpa kelas, dan itulah yang dilakukan JavaScript.
Kelas adalah cetak biru. Ini berisi informasi tentang apa yang dimiliki setiap instance dari kelas itu . Ini memberi tahu Anda metode dan properti mana yang ada dan bagaimana Anda dapat menggunakan kelas ini.
Kelas itu sendiri sebenarnya tidak mengandung data apa pun. Itu pekerjaan sebuah objek. Kelas adalah cetak biru untuk sebuah rumah, tetapi sebuah objek adalah rumah yang sebenarnya, dengan kayu, ubin, batu bata dan semua bobot rumah yang sebenarnya. Sebuah instance berisi data aktual yang hanya individu untuk instance itu. Anda mungkin telah menggunakan cetak biru yang sama untuk rumah Anda dengan tetangga Anda, tetapi itu tidak berarti Anda dapat tidur di tempat tidur mereka.
Perbedaan antara instance dan kelas adalah mendasar dalam cara kebanyakan orang memahami OOP. Tapi itu tidak perlu untuk OOP. Ada cara untuk melakukan OOP tanpa kelas . Bagaimanapun, itu pemrograman berorientasi objek : objek adalah bintang pertunjukan, bukan kelas.
Gaya OOP di mana tidak ada perbedaan antara kelas dan objek disebut pemrograman berbasis prototipe (untuk membuat hidup kita lebih mudah, kita akan menyebutnya PBP).
Dalam PBP, setiap objek bisa menjadi individu. Ini berisi metode dan data sekaligus. Biasanya, Anda bisa menambahkan properti dan metode baru ke objek kapan pun Anda suka, bahkan saat program sedang berjalan.
Jika ini terdengar seperti sesuatu yang hanya beberapa programmer gunakan untuk masalah tepi mereka, Anda akan terkejut. Salah satu bahasa paling populer di dunia adalah bahasa PBP: JavaScript.
Dalam JavaScript, tidak ada kelas dalam arti kata OOP berbasis kelas. JavaScript berfungsi dengan objek. Jika Anda ingin merangkum beberapa fungsi dan properti secara bersamaan, Anda akan membuat objek yang berisi fungsi dan properti, dan bukan kelas.
Ini adalah objek yang memiliki properti dan fungsi yang berfungsi. Ini berbeda dari kelas karena fungsi itu sendiri adalah sepotong data yang dimiliki objek. Ini bisa berubah seperti keadaan properti.
Sekarang, tiba-tiba, hewan tidak lagi berfungsi. JavaScript tidak memiliki cetak biru, hanya memiliki rumah.
Bagaimana dengan Warisan?
Properti mendasar dari suatu kelas adalah ia dapat mewarisi metode dan properti dari kelas lain. Baik a Housedan Apartmentdapat diwarisi dari Residenceuntuk memastikan kita tidak harus menduplikasi kode yang sama di kedua kelas.
Tetapi sekali lagi, kelas tidak diperlukan untuk warisan . Dalam PBP pewarisan dilakukan sepenuhnya dengan menggunakan objek.
Saya sebutkan sebelumnya bahwa dalam PBP objek berisi semua metode dan properti, serta keadaan sebenarnya. Jadi satu-satunya cara untuk mewarisi semua itu adalah dengan menyalin (atau mereferensikan) semua metode dan properti itu. Inilah yang dilakukan oleh bahasa PBP, dan itu disebut pewarisan prototypal .
Jika kita ingin membuat anjing objek yang akan memiliki akses ke metode yang sama dengan animal, kita dapat membuat anjing mengandung animal , karena metode tersebut ada di dalamnya animal.
Jika kita ingin membuat anjing makan makanan, kita bisa ke ini:
Untungnya, JavaScript memanggil fungsi pada prototipe secara otomatis. Jika suatu fungsi tidak ada pada objek itu, ia akan mencari prototipe untuk fungsi tersebut. Prototipe itu sendiri dapat berisi prototipe lain, jadi JS akan mencari sepenuhnya sampai menemukan fungsi yang dicari.
Alasan mengapa mereka disebut bahasa berbasis prototipe adalah karena prototipe, berbeda dengan kelas, konkret . Prototipe adalah hal yang berfungsi, dan bukan cetak biru. Anda mungkin tidak ingin menjual prototipe ke jutaan pelanggan, tetapi itu adalah hal nyata yang berhasil. Anda kemudian menggunakan prototipe itu untuk membuat banyak salinan yang benar-benar akan Anda gunakan. Sama seperti yang Anda lakukan di pabrik.
animal objek adalah prototipe dari binatang. Ini adalah objek seperti yang lainnya, tetapi akan digunakan untuk membuat hewan baru yang konkret, seperti seekor anjing.
Apakah Ini Lebih Baik Daripada Kelas?
PBP lebih mudah daripada OOP berbasis kelas. Ini memiliki bagian bergerak lebih sedikit dan benar-benar transparan. Anda dapat melihat cara kerjanya. OOP berbasis kelas adalah lapisan abstraksi di atas ini. Ini berarti PBP memiliki banyak kelebihan, tetapi juga kekurangan.
Keuntungan utama PBP terletak pada fleksibilitasnya. Cetak biru adalah sesuatu yang harus dibuat sebelumnya, dan harus benar. Jika Anda membangun rumah, Anda akan mengalami banyak masalah jika Anda menyadari setengah jalan membangun atap Anda yang Anda lupa menambahkan jendela di cetak biru. Kelas serupa: Anda membuatnya sebelum membuat dan menggunakan objek. Anda harus tahu metode dan properti mana yang Anda perlukan sebelum mulai menggunakannya. Tidak peduli seberapa bagus Anda dalam pemrograman, Anda tidak akan dapat memprediksi semuanya.
Jika Anda tidak harus membuat kelas sebelumnya, Anda dapat segera mulai membuat objek Anda. Anda dapat menyesuaikannya saat Anda menggunakannya tanpa harus membayar biaya besar. Ini sangat bermanfaat dalam pemrograman, di mana persyaratan berubah setiap saat. Anda ingin kemampuan berubah dengan cepat dan mudah.
Tetapi perubahan yang cepat dan mudah disertai dengan risiko besar: kebenaran. Cetak biru ada untuk merencanakan rumah sebelum dibangun, sehingga kesalahan ditangkap lebih awal dan pekerja tidak tersesat saat membangun. Jika Anda mencoba membangun rumah hanya dengan melakukannya dan melihat ke mana arahnya, Anda mungkin akan berakhir dengan rumah yang roboh di atas Anda. Hal yang sama berlaku untuk pemrograman: Anda perlu memastikan basis kode Anda baik dan benar. Jika semua orang bisa masuk dan mulai mengubah segalanya, itu akan cepat runtuh dengan sendirinya.
Seperti segala sesuatu dalam pemrograman, PBP dan OOP berbasis kelas jatuh dalam spektrum pengorbanan. Di satu sisi, PBP fleksibel dan mudah dikerjakan, yang mengarah ke pengembangan yang lebih cepat. Di sisi lain, OOP berbasis kelas lebih kaku dan kokoh, yang menyebabkan lebih sedikit bug. Masalah yang berbeda membutuhkan alat yang berbeda, dan dengan pengetahuan PBP, Anda sekarang lebih siap untuk memecahkan masalah yang membutuhkannya. Selamat coding!
