Abstract Class - Tugas Pertemuan 13
Nama : Triana Velia Hutabalian
NRP : 5025231190
Kelas : PBO G
Kode : Github
Latihan
1. Tuliskan implementasi dari program kecil Abstract Class Makhluk hidup yang diwariskan kepada manusia, hewan, dan tumbuhan
2. Pelajari dan baca simulasi Foxes and Rabbit yang ada di buku. Kemudian buat program perubahan dari struktur class umum menjadi bentuk Abstract Class.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. Abstract Class Makhluk hidup
- Abstraksi dengan Kelas MakhlukHidup
Kelas abstrak MakhlukHidup menyediakan kerangka kerja berupa dua metode abstrak, yaitu berdiri() dan oksigen(). Kelas ini tidak bisa langsung dibuat objeknya dan hanya menjadi dasar untuk kelas turunan.
- Subclass (Turunan dari MakhlukHidup)
Tiga kelas turunan, yaitu Manusia, Hewan, dan Tumbuhan, mengimplementasikan metode abstrak tersebut:
berdiri(): Menjelaskan bagaimana setiap jenis makhluk hidup berdiri atau tumbuh.
oksigen(): Menjelaskan hubungan makhluk hidup dengan oksigen (manusia dan hewan membutuhkannya, tumbuhan menghasilkan oksigen melalui fotosintesis).
- Encapsulation
Setiap kelas turunan memiliki properti khusus yang bersifat privat untuk menjelaskan karakteristiknya. Properti ini diatur melalui konstruktor dan digunakan dalam implementasi metode.
- Polimorfisme
Metode cekMakhlukHidup menerima parameter berupa objek dari tipe MakhlukHidup, tetapi dapat memproses semua jenis objek turunan (Manusia, Hewan, atau Tumbuhan). Hal ini memungkinkan penggunaan metode yang sama untuk berbagai jenis makhluk hidup.
- Eksekusi dalam main
Objek Manusia, Hewan, dan Tumbuhan dibuat dengan karakteristik masing-masing.
Metode cekMakhlukHidup dipanggil untuk setiap objek, memanfaatkan polimorfisme untuk menjalankan metode spesifik sesuai kelas masing-masing.
2. Foxes and Rabbit
- Kelas Simulator
Kelas ini bertindak sebagai pusat kendali untuk menjalankan simulasi, bertanggung jawab mengatur populasi hewan dan area simulasi.
Atribut:
Field field: Merepresentasikan area simulasi berupa grid dua dimensi.
SimulatorView view: Menampilkan status simulasi ke layar dalam bentuk teks.
List<Animal> animals: Daftar hewan yang berpartisipasi dalam simulasi, mencakup predator (fox) dan mangsa (rabbit).
Konstruktor:
Simulator(int width, int height):
Membuat area simulasi (grid) dengan ukuran tertentu.
Membuat tampilan visualisasi simulasi.
Memanggil metode populate() untuk mengisi area dengan hewan secara acak.
Metode:
simulate(int steps):
Melakukan simulasi selama sejumlah langkah (steps).
Setiap langkah:
Memanggil metode act() pada setiap hewan untuk menjalankan aksi mereka.
Menambahkan hewan baru hasil reproduksi atau pergerakan.
Menampilkan status simulasi menggunakan view.showStatus().
populate():
Mengisi area simulasi dengan foxes dan rabbits berdasarkan probabilitas tertentu (contoh: 8% untuk fox, 20% untuk rabbit).
Hewan yang dihasilkan ditambahkan ke daftar animals.
Metode main():
Titik masuk program.
Membuat simulasi dengan ukuran grid 50x50.
Menjalankan simulasi selama 100 langkah.
- Kelas Field
Merepresentasikan area simulasi sebagai grid dua dimensi tempat semua objek (hewan) berada.
Atribut:
Object[][] field: Matriks dua dimensi yang merepresentasikan grid simulasi.
Konstruktor:
Field(int depth, int width): Membuat grid dengan ukuran tertentu (depth x width).
Metode:
getDepth() dan getWidth():
Mengembalikan jumlah baris (depth) dan kolom (width) dari grid.
place(Object object, Location location):
Menempatkan sebuah objek (contoh: hewan) di lokasi tertentu dalam grid.
getObjectAt(Location location):
Mengembalikan objek yang ada di lokasi tertentu.
clear():
Menghapus semua objek di grid, membersihkan area simulasi.
- Kelas Location
Merepresentasikan posisi tertentu dalam grid simulasi.
Atribut:
int row dan int col: Menyimpan baris dan kolom dari posisi di grid.
Konstruktor:
Location(int row, int col): Membuat lokasi dengan baris dan kolom tertentu.
Metode:
getRow() dan getCol():
Mengembalikan nilai baris dan kolom dari lokasi.
equals(Object obj):
Membandingkan dua lokasi apakah berada di posisi yang sama.
- Kelas SimulatorView
Bertanggung jawab untuk menampilkan status simulasi ke layar dalam bentuk teks.
Atribut:
Field field: Area simulasi yang akan divisualisasikan.
Konstruktor:
SimulatorView(Field field): Menghubungkan view dengan area simulasi.
Metode:
showStatus(int step, Field field):
Menampilkan status setiap langkah simulasi.
Simbol visual:
R: Rabbit.
F: Fox.
.: Sel kosong.
Melakukan iterasi pada grid untuk mencetak status setiap sel.
- Kelas Animal
Kelas abstrak yang menjadi dasar untuk semua jenis hewan (predator dan mangsa).
Atribut:
Field field: Area simulasi tempat hewan berada.
Location location: Lokasi spesifik hewan di grid.
boolean alive: Status hidup atau mati hewan.
Konstruktor:
Animal(Field field, Location location): Menginisialisasi hewan di lokasi tertentu dan menempatkannya di grid.
Metode Abstrak:
act(List<Animal> newAnimals): Subkelas harus mengimplementasikan aksi hewan di setiap langkah simulasi.
Metode Lain:
isAlive(): Mengecek apakah hewan masih hidup.
setDead(): Mengatur status hewan menjadi mati dan menghapusnya dari grid.
- Kelas Fox
Subkelas dari Animal yang merepresentasikan predator (rubah).
Konstruktor:
Fox(Field field, Location location): Membuat rubah dengan lokasi awal tertentu.
Metode:
act(List<Animal> newAnimals):
Perilaku rubah dapat mencakup:
Mencari mangsa (rabbit) di lokasi terdekat.
Bergerak ke lokasi baru jika tidak ada mangsa.
Bereproduksi setelah mendapat makanan.
- Kelas Rabbit
Subkelas dari Animal yang merepresentasikan mangsa (kelinci).
Konstruktor:
Rabbit(Field field, Location location): Membuat kelinci dengan lokasi awal tertentu.
Metode:
act(List<Animal> newAnimals):
Perilaku kelinci dapat mencakup:
Bergerak ke lokasi kosong di sekitar.
Bereproduksi setelah mencapai usia tertentu.
Melarikan diri jika ada predator di dekatnya.
- Kelas Randomizer
Kelas utilitas untuk menghasilkan nilai acak.
Atribut:
Random random: Objek generator angka acak.
Metode:
getRandom(): Mengembalikan objek random yang dapat digunakan di bagian lain program.
Komentar
Posting Komentar