Pertemuan 12 - Class Abstraction
Aditya Rizki Muhammad
5025221272
PBO B2
Abstraksi Kelas - Pemrograman Berorientasi Objek
Pada tugas abstraksi ini, kita diminta untuk mengimplementasikan abstraksi. Kita menggunakan konsep makhluk hidup yang dijadikan superclass dan hewan, manusia, dan tumbuhan dijadikan objek yang menggunakan superclass makhluk hidup.
Gambar 1. Hasil Class Diagram
Dari class diagram tersebut, implementasi dari setiap filenya adalah seperti berikut :
Main.java
public class Main {
public static void main(String[] args) {
System.out.println("=== SISTEM MAKHLUK HIDUP ===\n");
// Membuat objek Manusia
Manusia manusia1 = new Manusia("Budi", 25, "Programmer");
System.out.println("--- MANUSIA ---");
manusia1.info();
manusia1.bernafas();
manusia1.makan();
manusia1.bekerja();
manusia1.tumbuh();
System.out.println("\n--- HEWAN ---");
// Membuat objek Hewan
Hewan hewan1 = new Hewan("Simba", 5, "Karnivora", "Darat");
hewan1.info();
hewan1.bernafas();
hewan1.makan();
hewan1.bersuara();
hewan1.tumbuh();
System.out.println("\n--- HEWAN AIR ---");
Hewan hewan2 = new Hewan("Nemo", 2, "Omnivora", "Air");
hewan2.info();
hewan2.bernafas();
hewan2.makan();
System.out.println("\n--- TUMBUHAN ---");
// Membuat objek Tumbuhan
Tumbuhan tumbuhan1 = new Tumbuhan("Mawar", 3, "Serabut", true);
tumbuhan1.info();
tumbuhan1.bernafas();
tumbuhan1.makan();
tumbuhan1.fotosintesis();
tumbuhan1.tumbuh();
System.out.println("\n=== DEMONSTRASI POLIMORFISME ===");
// Polimorfisme: array dari tipe superclass
MakhlukHidup[] makhlukHidupArray = {
new Manusia("Ani", 30, "Dokter"),
new Hewan("Kucing", 4, "Karnivora", "Darat"),
new Tumbuhan("Anggrek", 2, "Serabut", true)
};
for (MakhlukHidup mh : makhlukHidupArray) {
System.out.println("\n" + mh.getNama() + ":");
mh.bernafas();
mh.makan();
}
}
}
MakhlukHidup.java
abstract class MakhlukHidup {
protected String nama;
protected int umur;
// Constructor
public MakhlukHidup(String nama, int umur) {
this.nama = nama;
this.umur = umur;
}
// Metode konkret (sudah ada implementasinya)
public void tumbuh() {
umur++;
System.out.println(nama + " bertambah umur menjadi " + umur + " tahun");
}
// Abstract methods (wajib diimplementasikan oleh kelas turunan)
public abstract void bernafas();
public abstract void makan();
// Getter methods
public String getNama() {
return nama;
}
public int getUmur() {
return umur;
}
public void info() {
System.out.println("Nama: " + nama);
System.out.println("Umur: " + umur + " tahun");
}
}
Manusia.java
class Manusia extends MakhlukHidup {
private String pekerjaan;
public Manusia(String nama, int umur, String pekerjaan) {
super(nama, umur);
this.pekerjaan = pekerjaan;
}
@Override
public void bernafas() {
System.out.println(nama + " bernafas menggunakan paru-paru");
}
@Override
public void makan() {
System.out.println(nama + " makan nasi, sayur, dan lauk pauk");
}
public void bekerja() {
System.out.println(nama + " bekerja sebagai " + pekerjaan);
}
@Override
public void info() {
super.info();
System.out.println("Pekerjaan: " + pekerjaan);
}
}
Hewan.java
class Hewan extends MakhlukHidup {
private String jenis;
private String habitat;
public Hewan(String nama, int umur, String jenis, String habitat) {
super(nama, umur);
this.jenis = jenis;
this.habitat = habitat;
}
@Override
public void bernafas() {
if (habitat.equalsIgnoreCase("air")) {
System.out.println(nama + " bernafas menggunakan insang");
} else {
System.out.println(nama + " bernafas menggunakan paru-paru");
}
}
@Override
public void makan() {
System.out.println(nama + " makan makanan " + jenis);
}
public void bersuara() {
System.out.println(nama + " mengeluarkan suara khas " + jenis);
}
@Override
public void info() {
super.info();
System.out.println("Jenis: " + jenis);
System.out.println("Habitat: " + habitat);
}
}
Tumbuhan.java
class Tumbuhan extends MakhlukHidup {
private String jenisAkar;
private boolean berbunga;
public Tumbuhan(String nama, int umur, String jenisAkar, boolean berbunga) {
super(nama, umur);
this.jenisAkar = jenisAkar;
this.berbunga = berbunga;
}
@Override
public void bernafas() {
System.out.println(nama + " bernafas melalui stomata pada daun");
}
@Override
public void makan() {
System.out.println(nama + " membuat makanan sendiri melalui fotosintesis");
}
public void fotosintesis() {
System.out.println(nama + " melakukan fotosintesis dengan bantuan sinar matahari");
}
@Override
public void info() {
super.info();
System.out.println("Jenis Akar: " + jenisAkar);
System.out.println("Berbunga: " + (berbunga ? "Ya" : "Tidak"));
}
}
hasil dari implementasi tersebut adalah seperti berikut.