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.