Pertemuan 12: Implementasi Abstract Class
Tugas Pertemuan 12
Nama: Farrel Aqilla Novianto
NRP: 5025241015
Kelas: Pemrograman Berorientasi Objek (A)
Abstract Class
Abstract class adalah kelas yang terletak pada posisi tertinggi pada hierarki kelas. Kelas ini digunakan sebagai basis bagi penurunan kelas lainnya, sehingga abstract class tidak dapat diinstansiasi secara langsung menjadi object. Suatu abstract class bisa mengandung method kongkrit dan/atau method abstract. Abstract method meruapakan suatu method yang tidak mempunyai badan method. Hanya berupa nama method dan parameter inputan method. Ketika suatu abstract class diturunkan/diextends, maka subclass harus mengimplementasikan semua method abstract pada parent/base class. Jika tidak mengimplementasikan semua method abstract maka subclass harus dideklarasikan sebagai abstract class.
Interface
Latihan
- Tuliskan implementasi dari program kecil Abstract Class Makhluk hidup yang diwariskan kepada manusia, hewan, dan tumbuhan.
- Pelajari dan baca simulasi Foxes and Rabbit yang ada di buku. Kemudian buat program perubahan dari struktur class umum menjadi bentuk Abstract Class.
Kode MakhlukHidup.java
/**
* @author Farrel Aqilla Novianto
*/
public abstract class MakhlukHidup {
public abstract void berdiri ();
public void oksigen(){
System.out.println("- butuh Makanan");
System.out.println("- butuh oksigen");
System.out.println("- butuh air");
}
}Kode Hewan.java
/**
* @author Farrel Aqilla Novianto
*/
public class Hewan extends MakhlukHidup {
private String kakiEmpat, kakiDua ;
public Hewan(String kakiEmpat, String kakiDua){
this.kakiEmpat = kakiEmpat;
this.kakiDua = kakiDua;
}
public void berdiri (){
System.out.println("Kambing berdiri menggunakan : " +kakiEmpat);
System.out.println("Ayam berdiri menggunakan : " + kakiDua);
}
}Kode Manusia.java
/**
* @author Farrel Aqilla Novianto
*/
public class Manusia extends MakhlukHidup {
private String duaKaki;
public Manusia(String duaKaki){
this.duaKaki = duaKaki;
}
public void berdiri (){
System.out.println("Manusia berdiri menggunakan : "+duaKaki);
}
}Kode Tumbuhan.java
/**
* @author Farrel Aqilla Novianto
*/
public class Tumbuhan extends MakhlukHidup {
private String Akar;
public Tumbuhan (String Akar){
this.Akar = Akar;
}
public void berdiri (){
System.out.println("Tumbuhan berdiri dengan : "+Akar);
}
}Kode Main.java
/**
* @author Farrel Aqilla Novianto
*/
public class Main {
public void cekMakhlukHidup (MakhlukHidup mHidup){
mHidup.berdiri();
mHidup.oksigen();
}
public static void main(String[] args){
Main tMakhlukHidup = new Main();
tMakhlukHidup.cekMakhlukHidup(new Manusia("Dua Kaki"));
System.out.println("-----------------------------------------");
tMakhlukHidup.cekMakhlukHidup(new Hewan ("Empat Kaki","Dua Kaki"));
System.out.println("-----------------------------------------");
tMakhlukHidup.cekMakhlukHidup(new Tumbuhan ("Akar"));
}
}
Dokumentasi
Kode Animal.java
/** * @author Farrel Aqilla Novianto */ import java.util.List; public abstract class Animal{ private int age; private boolean alive; private Field field; private Location location; public Animal(Field field, Location location){ this.age = 0; this.alive = true; this.field = field; setLocation(location); } public boolean isAlive(){ return alive; } public void setDead(){ alive = false; if(location != null){ field.clear(location); location = null; field = null; } } public Location getLocation(){ return location; } public void setLocation(Location newLocation){ if(location != null){ field.clear(location); } location = newLocation; field.place(this, newLocation); } protected Field getField(){ return field; } protected int getAge(){ return age; } protected void incrementAge(){ age++; } public abstract void act(List<Animal> newAnimals); }Kode Rabbit.java
/** * @author Farrel Aqilla Novianto */ import java.util.List; public class Rabbit extends Animal { public Rabbit(Field field, Location location){ super(field, location); } @Override public void act(List<Animal> newAnimals){ if(isAlive()){ Location newLocation = getField().freeAdjacentLocation(getLocation()); if(newLocation != null){ setLocation(newLocation); } else{ setDead(); } } } }Kode Fox.java
/** * @author Farrel Aqilla Novianto */ import java.util.List; public class Fox extends Animal{ public Fox(Field field, Location location){ super(field, location); } @Override public void act(List<Animal> newAnimals){ if(isAlive()){ Location newLocation = findFood(); if(newLocation == null){ newLocation = getField().freeAdjacentLocation(getLocation()); } if(newLocation != null){ setLocation(newLocation); } else{ setDead(); } } } private Location findFood(){ List<Location> adjacent = getField().adjacentLocations(getLocation()); for(Location loc : adjacent){ Object animal = getField().getObjectAt(loc); if(animal instanceof Rabbit){ Rabbit rabbit = (Rabbit) animal; rabbit.setDead(); return loc; } } return null; } }Kode Field.java
/** * @author Farrel Aqilla Novianto */ import java.util.List; import java.util.ArrayList; public class Field{ private Object[][] field; public Field(int depth, int width){ field = new Object[depth][width]; } public void clear(Location location){ field[location.getRow()][location.getCol()] = null; } public void place(Object object, Location location){ field[location.getRow()][location.getCol()] = object; } public Object getObjectAt(Location location){ return field[location.getRow()][location.getCol()]; } public Location freeAdjacentLocation(Location location){ List<Location> free = new ArrayList<>(); List<Location> adjacent = adjacentLocations(location); for(Location loc : adjacent){ if(getObjectAt(loc) == null){ free.add(loc); } } return free.isEmpty() ? null : free.get(0); } public List<Location> adjacentLocations(Location location){ List<Location> locations = new ArrayList<>(); int row = location.getRow(); int col = location.getCol(); for(int roffset = -1; roffset <= 1; roffset++){ int nextRow = row + roffset; if(nextRow >= 0 && nextRow < field.length){ for(int coffset = -1; coffset <= 1; coffset++){ int nextCol = col + coffset; if(nextCol >= 0 && nextCol < field[0].length && (roffset != 0 || coffset != 0)){ locations.add(new Location(nextRow, nextCol)); } } } } return locations; } public int getDepth(){ return field.length; } public int getWidth(){ return field[0].length; } }Kode Location.java
/** * @author Farrel Aqilla Novianto */ public class Location{ private int row; private int col; public Location(int row, int col){ this.row = row; this.col = col; } public int getRow(){ return row; } public int getCol(){ return col; } }Kode Simulator.java
/** * @author Farrel Aqilla Novianto */ import java.util.ArrayList; import java.util.List; import java.util.Random; public class Simulator { private Field field; private List<Animal> animals; public Simulator(int depth, int width){ field = new Field(depth, width); animals = new ArrayList<>(); populate(); } public void simulate(int steps){ for(int step = 1; step <= steps; step++){ List<Animal> newAnimals = new ArrayList<>(); for(Animal animal : animals){ animal.act(newAnimals); } animals.addAll(newAnimals); animals.removeIf(animal -> !animal.isAlive()); System.out.println("Step " + step + ": " + countAnimals()); } } private void populate(){ Random rand = new Random(); int depth = field.getDepth(); int width = field.getWidth(); for(int row = 0; row < depth; row++){ for(int col = 0; col < width; col++){ double random = rand.nextDouble(); Location location = new Location(row, col); if(random <= 0.08){ Fox fox = new Fox(field, location); animals.add(fox); } else if(random <= 0.20){ Rabbit rabbit = new Rabbit(field, location); animals.add(rabbit); } } } System.out.println("Populasi awal: " + countAnimals()); } private String countAnimals(){ int foxCount = 0; int rabbitCount = 0; for(Animal animal : animals){ if(animal instanceof Fox){ foxCount++; } else if(animal instanceof Rabbit){ rabbitCount++; } } return "Foxes = " + foxCount + ", Rabbits = " + rabbitCount; } public static void main(String[] args){ System.out.println("SIMULASI FOXES AND RABBITS"); Simulator simulator = new Simulator(20, 20); simulator.simulate(10); } }
Komentar
Posting Komentar