Saya baru mengenal pemrograman berorientasi objek, dan saya terus mengalami masalah ini. (Saya pemrograman di Jawa) Saya agak enggan bertanya tentang hal ini, karena sepertinya ini masalah mendasar, tapi saya tidak dapat menemukan informasi tentang itu, atau pertanyaan tentang hal itu di sini, dan tidak ada satupun buku teks yang telah saya baca (pada tingkat yang cukup mendasar tentu saja) telah menyentuh masalah ini:
Seringkali saya perlu melacak semua objek dari kelas yang telah dibuat, untuk beralih melalui mereka untuk berbagai keperluan. Mereka cara saya saat ini menulis program, banyak objek hanya direferensikan dari objek lain, artinya saya tidak memiliki array atau koleksi untuk referensi mereka semua.
Saya membayangkan bahwa, karena ini seperti kebutuhan yang sangat mendasar dalam OOP, harus ada cara yang cukup dilembagakan, dan sederhana, untuk melakukan ini? Apakah itu praktik biasa untuk menyimpan daftar yang terpisah dari semua objek kelas?
Saya berpikir tentang array statis atau koleksi, yang melalui konstruktornya, setiap objek baru yang dibuat akan ditambahkan. Namun ini tidak akan bekerja dengan subclass, karena konstruktor tidak diwarisi?
Saya menyadari pertanyaan ini mungkin tidak memiliki satu jawaban mudah; Saya hanya berharap seseorang dapat sedikit mencerahkan saya tentang hal ini. Saya merasa jika saya kurang memiliki pengetahuan utama di sini.
Jawaban:
Saya tidak tahu mengapa Anda perlu menyimpan daftar semua instance kelas.
Itu akan menyebabkan kebocoran memori karena benda-benda itu tidak akan pernah dibuang, karena daftar masih akan merujuk mereka setelah tidak ada kelas lain yang melakukannya.
Tetapi jika Anda benar-benar ingin mengikuti rute itu:
Omong-omong: konstruktor diwarisi.
sumber
Perlu dicatat bahwa referensi yang lemah dapat digunakan dalam kombinasi dengan solusi lain yang diberikan untuk memungkinkan pengumpul sampah untuk membuang benda yang dilacak ketika mereka tidak lagi dirujuk di tempat lain. Ini menghilangkan kebocoran memori tanpa memerlukan kode di tempat lain untuk secara manual membuang objek, atau peduli bahwa mereka sedang dilacak. Anda dapat memberikan ReferenceQueue untuk menerima pemberitahuan referensi ke objek yang telah dibebaskan.
Konstruktor kelas dasar dipanggil sebelum konstruktor kelas turunan. Setiap kelas memiliki setidaknya satu konstruktor dan konstruktor tidak dapat ditimpa.
sumber
Saat membuat game, terkadang orang menginginkan koleksi "swakelola" dari setiap jenis objek game.
Satu implementasi terlihat seperti ini:
Dengan cara ini, metode yang memanipulasi koleksi dapat dinyatakan statis, sedangkan metode non-statis memanipulasi instance (updateAll vs. update).
Meskipun bagus untuk skenario yang sangat sederhana, bahkan dengan kompleksitas moderat biasanya terbaik untuk membuat kelas manajer terpisah.
sumber
static ArrayList<ListeStatic> list = new ArrayList<ListeStatic>();
menekan statc {..}uptdateAll(){..;}
Cobalah untuk memikirkan konteksnya. Saat Anda membuat objek, Anda melakukannya dalam konteks tertentu. Misalnya, jika game Anda tentang menembak alien, aplikasi Anda akan membuat objek Alien baru setiap saat. Mereka akan ditampilkan di bidang yang disebut Space (yang bisa menjadi kelas yang mewakili UI utama).
Sangat wajar bagi Space untuk memiliki properti bernama currentAliens, yang akan menjadi array, tempat Anda menambahkan setiap alien baru yang Anda buat. Jika Anda ingin mengizinkan pengguna untuk merobek jalinan ruangwaktu dan menghancurkan semua alien sekaligus, Anda akan beralih melalui koleksi itu dan menghancurkan setiap objek.
Jika Anda ingin memiliki akses ke koleksi alien ini dari dalam bagian lain aplikasi Anda (katakanlah, dari halaman Pengaturan, di mana Anda mungkin ingin membolehkan pengguna untuk menghapus jenis alien tertentu dalam satu gerakan), konteks Pengaturan Anda akan perlu diberi akses ke objek Space.
sumber