Immutable obyek PEMROGRAMAN BERORIENTASI OBJEK

2008 | Direktorat Pembinaan SMK 511 Immutable objek sering berguna karena beberapa biaya operasional seperti menyalin dan membandingkan dapat diabaikan, menyederhanakan kode program dan mempercepat eksekusi. Namun, membuat obyek immutable biasanya tidak tepat jika objek berisi sejumlah besar data yang berubah-ubah. Karena itu, banyak bahasa yang mempunyai fasilita kedua objek tersebut baik mutable dan immutable obyek. Dalam kebanyakan bahasa berorientasi objek, objek dapat disebut dengan referensi. Beberapa contoh seperti bahasa Java, C++, C, VB.NET dan banyak bahasa scrip seperti Ruby dan Python. Dalam hal ini, hal-hal apakah kondisi obyek dapat berbeda bila benda dibagi melalui referensi. Jika obyek yang diketahui adalah immutable, maka dapat disalin cukup dengan membuat salinan referensi, bukan untuk menyalin seluruh objek. Karena referensi biasanya hanya ukuran sebuah pointer biasanya jauh lebih kecil daripada obyek itu sendiri, sehingga lebih mudah dalam penyimpanan di memori dan meningkatkan kecepatan dalam eksekusi. Teknik penyalinan Referensi jauh lebih sulit digunakan pada objek mutable, karena jika ada pengguna referensi ke sebuah obyek mutable yang merubahnya, semua pengguna lain akan melihat perubahannya. Jika ini bukan efek dimaksudkan, maka akan lebih sulit untuk memberitahukan ke pengguna yang lain untuk meminta mereka merespon dengan benar. Dalam situasi ini, defensif menyalin dari seluruh obyek daripada referensi biasanya lebih mudah namun solusi mahal. Para pengamat menyatakan bahwa teknik alternatif untuk menangani perubahan objek mutabel. Immutable objects dapat berguna dalam aplikasi multi- threaded. Multiple threads dapat bertindak berdasarkan data yang diwakili oleh immutable objek tanpa memperhatikan data yang diubah oleh thread lainnya. immutable obyek mempunyai pertimbangan atau dianggap lebih aman daripada mutable object atau obyek yang berubah. Dalam Praktiknya selalu menggunakan referensi pada saat melakukan copy atau sering dikenal sebagai objek interning. Jika interning digunakan, dua benda dianggap sama jika dan hanya jika mereka referensi, biasanya digambarkan sebagai integers yang keuanya sama. Beberapa bahasa secara otomatis: misalnya, secara otomatis Python interns string dan lain-lain. Jika algoritma yang menerapkan interning dijamin, maka untuk melakukan setiap kasus yang mungkin membandingkan dengan obyek untuk mengurangi pointer, dan yang penting dalam mendapatkan kecepatan maksimal dalam aplikasi. Bahkan jika algoritma tidak dijamin secara lengkap, masih ada kemungkinan jalan yang cepat untuk meningkatan kasus ketika obyek yang sama dan menggunakan referensi yang sama. Interning umumnya hanya berguna untuk immutable benda. Kadang-kadang kalau bicara tertentu mengenai satu bidang obyek yang immutable. Ini berarti bahwa tidak ada cara untuk mengubah kondisi bagian objek, walaupun 512 Direktorat Pembinaan SMK | 2008 bagian lain dari objek mungkin berubah-ubah. Hal ini dapat, misalnya, untuk membantu menegakkan tertentu secara eksplisit invariants tentang beberapa data dalam obyek yang sama tinggal melalui masa objek. Dalam beberapa bahasa, hal ini dilakukan dengan kata kunci misalnya const di C++, final di Java yang mana dirancang pada field dari obyek yang immutable. Keimmutablean tidak menyiratkan bahwa sebagai objek yang disimpan dalam memori komputer unwriteable. Sebaliknya, keimmutablean adalah kompilasi waktu membangun dan menunjukkan apa yang harus dilakukan oleh programmer. Dalam bahasa C++ implementasi pada sebuah cart akan memungkinkan pengguna menyatakan sebuah kasus kelas baru sebagai salah satu const immutable atau mutable, seperti yang dikehendaki, dengan menyediakan dua versi yang berbeda dari getItems method. Perhatikan bahwa dalam C + + itu tidak diperlukan dan bahkan mustahil - untuk menyediakan constructor khusus untuk kasus const. Template typename T. perhatikan potongan program dibawah ini: Program 15.1 class Cart { private: std::vectorT items; public: Cartconst std::vectorT v: itemsv { } std::vectorT getItems { return items; } const std::vectorT getItems const { return items; } int total const { return sum of the prices } };

15.5. Modularitas dan Abstraksi Data

Modularitas dan abstraksi data dapat didefinisikan  Modul atau sebuah unit dari organisasi sistem perangkat lunak yang membundel sekumpulan entitas data dan metoda operasi dan dengan secara teliti mengontrol apa user eksternal bisa lihat atau gunakan.  Penyembunyian informasi yang dilakukan modul untuk melindungi informasi dari user external dalam penggunaannya misalnya software error, security dan merupakan basis dari abstract data type ragam data abstraks.  Abstract data type ADT atau Kumpulan obyek dan metoda operasi yang mempresentasikan 2008 | Direktorat Pembinaan SMK 513 sifat-sifat abstraks bagi user dengan menyembunyikan bagaimana semua itu direpresentasikan dalam representasi data level yang lebih rendah.  Interface dari modul atau Spesifikasi bagaimana modul tersebut dilihat atau digunakan oleh user sementara bagian yang private tetap tersembunyi, perhatikan contoh dibawah ini: o Sebuah microwave oven sebagai suatu modul. Pemakai dapat menggunakannya dengan tersedianya interface panel tombol. Pemakai hanya perlu tahu untuk apa tombol- tombol tersebut dan bagaimana mengoperasikannya. Pemakai tidak perlu tahu mekanisme kerja oven tersebut secara intenal seperti kerja tabung magnetron, mikrokontroller mekanik penggerak dan lain sebagainya.. o Window menyediakan sejumlah button untuk dapat menutup, memperbesar, memperkecil, dan sebagainya.

15.5.1. Pemrograman Modular

Bahasa-bahasa pemrograman modern menyediakan cara-cara untuk dapat membuat sistem perangkat lunak secara modular demikian, antara lain:  Cara untuk mengelompokkan bersama data dan metoda operasi  Cara untuk mendefinisikan interface yang clean  Cara untuk menyembunyikan rincian internal dari data dan metoda-metoda operasi  Cara untuk kompilasi secara terpisah misalnya: o Turbo Pascal menyediakan fasilitas pembuatan TPU dengan definisi interface. o Bahasa C memungkinkan pembuatan object module .obj dan library .a yang dapat dilink ke modul program utama melalui interface header file .h. Dalam bahasa Java memungkinkan konsep pemrograman modular, enkapsulasi, dan abstraksi data dengan disediakannya skema-skema class, interface, dan packages. Enkapsulasi dimungkinkan dengan pendefinisian private bagi datametoda yang disemebunyikan dan public bagi datametoda yang berperan sebagai interface. Dalam Java terdapat keyword interface dengan pengertian yang lain. Keword ini digunakan sebagai suatu definisi teknis yang menyatakan sekumpulan metoda abstraks yang bisa diimplementasikan dalam pendefinisian kelas-kelas obyek. Manfaat definisi interface ini agar obyek-obyek dari sejumlah kelas yang mengimplementasikan interface ini dapat saling direfer oleh variabel beragam interface ini. Perhatikan contoh dibawah ini: