Tugas 11 - Impelemtasi Inheritance Network dan Rental Mobil

 Source Code: https://github.com/rsthopaz/Pertemuan11_PBO.git

Explanation:

Network

1). User

import java.util.ArrayList;
import java.util.List;

public class User {

    private String username;
    private List<Post> posts;

    public User(String username){
        this.username = username;
        this.posts = new ArrayList<>();
    }

    public String getUsername(){
        return username;
    }

    public void addPost(String content){
        Post post = new Post(this, content);
        posts.add(post);
        System.out.println(username + "posted:" + content);
    }

    public void likePost(Post post){
        post.addLike(this);
    }

    public List<Post> getPosts(){
        return posts;
    }
}

User adalah kelas yang merepresentasikan pengguna. username: Variabel untuk menyimpan nama pengguna, yang bertipe data String. posts: Daftar (List) dari objek Post, yang digunakan untuk menyimpan semua postingan yang dibuat oleh pengguna ini. Tipe data ini diinisialisasi dengan sebuah objek ArrayList. Konstruktor kelas User menerima parameter username, yang digunakan untuk menginisialisasi nama pengguna ketika objek User dibuat. posts diinisialisasi sebagai objek ArrayList kosong untuk menampung postingan-postingan yang akan dibuat oleh pengguna.

public void addPost(String content){
        Post post = new Post(this, content);
        posts.add(post);
        System.out.println(username + "posted:" + content);
    }

addPost menerima parameter content yang berisi konten dari sebuah postingan. Sebuah objek Post baru dibuat, di mana konstruktor Post menerima dua parameter: objek User (yaitu this, yang merujuk pada pengguna saat ini) dan konten postingan (content).

public void likePost(Post post){
        post.addLike(this);
    }

Metode ini memungkinkan pengguna untuk memberikan "like" pada sebuah objek Post. likePost menerima objek Post sebagai parameter dan kemudian memanggil metode addLike pada objek Post tersebut, yang kemungkinan menambahkan pengguna ini ke daftar "likes" pada postingan tersebut.

2). Post

import java.util.ArrayList;
import java.util.List;

public class Post {
    private User author;
    private String content;
    private List<User> likes;

    public Post(User author, String content){
        this.author = author;
        this.content = content;
        this.likes = new ArrayList<>();
    }

    public String getContent(){
        return content;
    }

    public User getAuthor(){
        return author;
    }

    public List<User> getLikes(){
        return likes;
    }

    public void addLike(User user){
        if(!likes.contains(user)){
            likes.add(user);
            System.out.println(user.getUsername() + "liked:" + content);
        }
    }

    public int getLikeCount(){
        return likes.size();
    }
}

Konstruktor ini menerima dua parameter: author: Objek User yang membuat postingan. content: String yang berisi teks atau konten dari postingan. likes diinisialisasi sebagai ArrayList kosong untuk menampung pengguna yang memberikan "like".

  public void addLike(User user){
        if(!likes.contains(user)){
            likes.add(user);
            System.out.println(user.getUsername() + "liked:" + content);
        }
    }

addLike: Metode ini digunakan untuk menambahkan "like" dari seorang pengguna pada postingan. Sebelum menambahkan "like", ada pengecekan apakah pengguna tersebut sudah memberi "like" sebelumnya dengan menggunakan likes.contains(user). Jika pengguna sudah ada dalam daftar, maka "like" tidak akan ditambahkan lagi. Jika pengguna belum memberikan "like", pengguna tersebut akan ditambahkan ke daftar likes, dan sebuah pesan dicetak ke konsol yang menunjukkan siapa yang memberikan "like" dan pada konten postingan apa.

3). Network

import java.util.ArrayList;
import java.util.List;

public class Network {
    private List<User> users;
    private List<Post> posts;

    public Network(){
        users = new ArrayList<>();
        posts = new ArrayList<>();
    }

    public User addUser(String username){
        User user = new User(username);
        users.add(user);
        System.out.println("User added:" + username);
        return user;
    }

    public void addPost(Post post){
        posts.add(post);
    }

    public void showAllPosts(){
        System.out.println("\nAll Posts:");
        for (Post post : posts){
            System.out.println(post.getAuthor().getUsername() + "posted:" + post.getContent() + "- Likes:" + post.getLikeCount());
        }
    }
}

Konstruktor ini menginisialisasi dua daftar kosong: users (untuk menyimpan pengguna) dan posts (untuk menyimpan postingan). Setiap kali objek Network dibuat, kedua daftar ini dimulai dengan kondisi kosong. 

 public User addUser(String username){
        User user = new User(username);
        users.add(user);
        System.out.println("User added:" + username);
        return user;
    }

addUser: Metode ini digunakan untuk menambahkan pengguna baru ke dalam jaringan. Menerima parameter username yang akan digunakan untuk membuat objek User baru. Pengguna yang baru dibuat ditambahkan ke dalam daftar users. Pesan ditampilkan di konsol untuk menunjukkan bahwa pengguna telah berhasil ditambahkan. Metode ini mengembalikan objek User yang baru dibuat, sehingga objek User ini dapat digunakan untuk interaksi lebih lanjut (misalnya untuk membuat postingan atau memberikan "like").

 public void showAllPosts(){
        System.out.println("\nAll Posts:");
        for (Post post : posts){
            System.out.println(post.getAuthor().getUsername() + "posted:" + post.getContent() + "- Likes:" + post.getLikeCount());
        }
    }

showAllPosts: Metode ini digunakan untuk menampilkan semua postingan yang ada di dalam jaringan sosial. Pertama, sebuah pesan dicetak di konsol yang menunjukkan bahwa daftar semua postingan akan ditampilkan. Kemudian, metode ini melakukan iterasi (loop) terhadap daftar posts, dan untuk setiap objek Post, ia mencetak informasi berikut: Nama penulis postingan (post.getAuthor().getUsername()). Konten postingan (post.getContent()). Jumlah "like" pada postingan (post.getLikeCount()).

4). Main

// import java.util.ArrayList;
// import java.util.List;

public class Main {
    public static void main(String[] args){
        Network network = new Network();

        User alice = network.addUser("Alice");
        User bob = network.addUser("Bob");
        User bo = network.addUser("Bo");

        alice.addPost("Hello, this is Alice first post!");
        bob.addPost("Hello everyone, Bob is here!");

        network.addPost(alice.getPosts().get(0));
        network.addPost(bob.getPosts().get(0));

        alice.likePost(bob.getPosts().get(0));
        bo.likePost(bob.getPosts().get(0));

        // Bob likes Alice's post
        bob.likePost(alice.getPosts().get(0));

        network.showAllPosts();
    }
}

Mulai dengan membuat objek Network bernama network, yang akan digunakan untuk mengelola pengguna dan postingan.

User alice = network.addUser("Alice");
User bob = network.addUser("Bob");
User bo = network.addUser("Bo");

Menambahkan tiga pengguna ke jaringan: Alice, Bob, dan Bo menggunakan metode addUser dari objek Network.

alice.addPost("Hello, this is Alice first post!");
bob.addPost("Hello everyone, Bob is here!");

Alice dan Bob masing-masing membuat satu postingan menggunakan metode addPost pada objek User mereka. addPost akan membuat objek Post baru dengan konten yang diberikan dan menambahkannya ke daftar postingan pengguna tersebut.

network.addPost(alice.getPosts().get(0));
network.addPost(bob.getPosts().get(0));

Di sini, postingan pertama dari Alice dan Bob ditambahkan ke jaringan menggunakan metode addPost dari objek Network. alice.getPosts().get(0) dan bob.getPosts().get(0) digunakan untuk mengakses postingan pertama yang dibuat oleh Alice dan Bob.

network.showAllPosts();

Ini akan menampilkan seluruh postingan

Output:



Rental Mobil

1). Mobil

public class Mobil {
    String nama;
    String tipe;
   
    public Mobil(String nama, String tipe) {
        this.nama = nama;
        this.tipe = tipe;
    }
   
    public void tampilkanInfo() {
        System.out.println("Nama Mobil: " + nama + ", Tipe: " + tipe);
    }
}

public Mobil(String nama, String tipe): Konstruktor ini memiliki dua parameter, nama dan tipe, yang digunakan untuk menginisialisasi atribut nama dan tipe objek. this.nama = nama; dan this.tipe = tipe; this merujuk pada objek saat ini. Di sini, this.nama merujuk pada atribut nama dari objek yang sedang dibuat, sementara nama adalah parameter yang diterima oleh konstruktor. Hal yang sama berlaku untuk tipe.

2). MobilTersedia

public class MobilTersedia extends Mobil {
   
    public MobilTersedia(String nama, String tipe) {
        super(nama, tipe);
    }

}


public class MobilTersedia extends Mobil: MobilTersedia adalah kelas yang meng-extend (mewarisi) kelas Mobil. Kata kunci extends digunakan untuk menunjukkan bahwa MobilTersedia adalah subclass dari kelas Mobil. Ini berarti kelas MobilTersedia mewarisi semua atribut dan metode yang ada di kelas Mobil. Dengan kata lain, MobilTersedia adalah spesialisasi dari Mobil, yang dapat memiliki tambahan fungsionalitas di masa depan.

3). MobilDisewa

public class MobilDisewa extends Mobil {
    String penyewa;

    public MobilDisewa(String nama, String tipe, String penyewa) {
        super(nama, tipe);
        this.penyewa = penyewa;
    }

    @Override
    public void tampilkanInfo() {
        super.tampilkanInfo();
        System.out.println("Penyewa: " + penyewa);
    }
}


public class MobilDisewa extends Mobil: Kelas MobilDisewa adalah subclass dari kelas Mobil. Ini berarti kelas MobilDisewa mewarisi semua atribut dan metode yang ada di kelas Mobil. MobilDisewa menambahkan fungsionalitas baru yang terkait dengan mobil yang disewa, seperti menyimpan informasi tentang penyewa. tampilkanInfo(); Memanggil metode tampilkanInfo() dari kelas induk untuk menampilkan informasi tentang nama dan tipe mobil. System.out.println("Penyewa: " + penyewa); Menambahkan informasi tentang penyewa setelah informasi mobil ditampilkan.

4). RentalMobil

import java.util.ArrayList;

public class RentalMobil {

    public static void main(String[] args) {
        // Membuat daftar mobil
        ArrayList<Mobil> daftarMobil = new ArrayList<>();

        // Menambahkan mobil yang tersedia
        daftarMobil.add(new MobilTersedia("Toyota Avanza", "MPV"));
        daftarMobil.add(new MobilTersedia("Honda Jazz", "Hatchback"));
        daftarMobil.add(new MobilTersedia("Daihatsu Xenia", "MPV"));

        // Menambahkan mobil yang disewa
        daftarMobil.add(new MobilDisewa("Suzuki Ertiga", "MPV", "Budi"));
        daftarMobil.add(new MobilDisewa("Nissan X-Trail", "SUV", "Siti"));

        // Menampilkan daftar mobil yang tersedia
        System.out.println("Daftar Mobil Tersedia:");
        for (Mobil mobil : daftarMobil) {
            if (mobil instanceof MobilTersedia) {
                mobil.tampilkanInfo();
            }
        }

        System.out.println("\nDaftar Mobil Disewa:");
        // Menampilkan daftar mobil yang disewa
        for (Mobil mobil : daftarMobil) {
            if (mobil instanceof MobilDisewa) {
                mobil.tampilkanInfo();
            }
        }
    }
}


daftarMobil.add(new MobilTersedia("Toyota Avanza", "MPV")): Menambahkan objek MobilTersedia yang menyatakan mobil yang tersedia untuk disewa. daftarMobil.add(new MobilDisewa("Suzuki Ertiga", "MPV", "Budi")); Menambahkan objek MobilDisewa, yang berarti mobil ini sedang disewa oleh seorang penyewa dengan nama "Budi". Proses ini diulang untuk beberapa mobil lain yang tersedia dan yang disewa.

        System.out.println("Daftar Mobil Tersedia:");
        for (Mobil mobil : daftarMobil) {
            if (mobil instanceof MobilTersedia) {
                mobil.tampilkanInfo();
            }
        }

System.out.println("Daftar Mobil Tersedia:"): Mencetak judul untuk daftar mobil yang tersedia. for (Mobil mobil : daftarMobil) { if (mobil instanceof MobilTersedia) { mobil.tampilkanInfo(); } }: Ini adalah loop yang digunakan untuk menelusuri setiap objek dalam daftarMobil. Jika objek tersebut merupakan instansiasi dari kelas MobilTersedia (mobil yang tersedia), maka tampilkanInfo() dipanggil untuk menampilkan informasi mobil tersebut. Kata kunci instanceof digunakan untuk memeriksa apakah objek merupakan instance dari kelas tertentu. Dalam hal ini, mobil instanceof MobilTersedia memeriksa apakah objek mobil adalah objek dari kelas MobilTersedia.

        System.out.println("\nDaftar Mobil Disewa:");
        // Menampilkan daftar mobil yang disewa
        for (Mobil mobil : daftarMobil) {
            if (mobil instanceof MobilDisewa) {
                mobil.tampilkanInfo();
            }
        }

Proses yang sama dilakukan untuk menampilkan daftar mobil yang sedang disewa. for (Mobil mobil : daftarMobil) { if (mobil instanceof MobilDisewa) { mobil.tampilkanInfo(); } }: Ini adalah loop yang memeriksa apakah objek mobil adalah instance dari kelas MobilDisewa (mobil yang disewa) dan jika benar, informasi mobil tersebut ditampilkan.

Output:



Komentar

Postingan populer dari blog ini

The Busy Beaver Problem

Tugas 15 - Final Project

Church-Turing Thesis dan Kaitannya dengan Bahasa Pemrograman