Naufal Daffa Alfa Zain 5025241066 Pemrograman Berorientasi Objek – A
Pada pertemuan kesebelas mata kuliah Pemrograman Berorientasi Objek (PBO A), kami melanjutkan latihan pemahaman konsep OOP dengan membuat program bernama SalesItem menggunakan bahasa Java di platform BlueJ. Program ini bertujuan untuk mensimulasikan sistem ulasan (review system) pada suatu produk, di mana pengguna dapat memberikan komentar, rating, serta melakukan upvote dan downvote terhadap komentar yang ada.
Program terdiri dari tiga kelas utama yaitu SalesItem, Comment, dan SalesItemTest. Kelas SalesItem berfungsi sebagai representasi suatu produk yang dijual, menyimpan nama barang, harga, serta daftar komentar yang diberikan pengguna. Kelas Comment merepresentasikan satu ulasan dari pengguna yang terdiri dari nama penulis, isi komentar, rating, dan jumlah suara. Sementara kelas SalesItemTest berperan sebagai kelas penguji yang menjalankan berbagai skenario untuk memastikan fungsi-fungsi dalam program berjalan sebagaimana mestinya.
Melalui program ini, pengguna dapat menambahkan komentar dengan validasi tertentu — seperti rating yang harus berada dalam rentang 1 hingga 5 dan tidak boleh ada dua komentar dari penulis yang sama. Selain itu, setiap komentar dapat diberi upvote atau downvote yang memengaruhi keseimbangan suara (vote balance). Program juga mampu menampilkan komentar yang dianggap paling membantu, yaitu komentar dengan nilai vote balance tertinggi.
Source Code Lengkap
SalesItem
import java.util.ArrayList;
public class SalesItem {
private String name;
private int price;
private ArrayList<Comment> comments;
public SalesItem(String name, int price) {
this.name = name;
this.price = price;
this.comments = new ArrayList<Comment>();
}
public boolean addComment(String author, String text, int rating) {
if (rating < 1 || rating > 5) {
return false; // rating tidak valid
}
for (Comment comment : comments) {
if (comment.getAuthor().equals(author)) {
return false;
}
}
Comment newComment = new Comment(author, text, rating);
comments.add(newComment);
return true;
}
public boolean removeComment(Comment comment) {
return comments.remove(comment);
}
public int getNumberOfComments() {
return comments.size();
}
public void showInfo() {
System.out.println("=================================");
System.out.println("Item: " + name);
System.out.println("Price: " + price);
System.out.println("Number of comments: " + getNumberOfComments());
System.out.println("---------------------------------");
for (Comment comment : comments) {
comment.print();
System.out.println();
}
}
public Comment findMostHelpfulComment() {
if (comments.isEmpty()) {
return null;
}
Comment best = comments.get(0);
for (Comment current : comments) {
if (current.getVoteBalance() > best.getVoteBalance()) {
best = current;
}
}
return best;
}
//Method tambahan untuk testing
public Comment getCommentByAuthor(String author) {
for (Comment comment : comments) {
if (comment.getAuthor().equals(author)) {
return comment;
}
}
return null;
}
}
SalesItemTest
public class SalesItemTest {
public static void main(String[] args) {
SalesItem item = new SalesItem("Rice Cooker Serbaguna", 300000);
item.addComment("Andi", "Nasinya jadi pulen dan enak", 5);
item.addComment("Andi", "Mau nambahin review lain.", 4); //ga bisa karena author sama dengan sebelumnya
item.addComment("Budi", "Kurang bagus", 6); //ga valid
item.addComment("Citra", "Nasinya cepat basi jika disimpan agak lama", 3);
System.out.println("\n=== Informasi Item ===");
item.showInfo();
Comment andiComment = item.getCommentByAuthor("Andi");
if (andiComment != null) {
System.out.println("Menambah upvote pada komentar Andi");
andiComment.upvote();
System.out.println("Menambah upvote pada komentar Andi");
andiComment.upvote();
System.out.println("Menambah downvote pada komentar Andi");
andiComment.downvote();
} else {
System.out.println("Komentar Andi tidak ditemukan.");
}
System.out.println("");
Comment citraComment = item.getCommentByAuthor("Citra");
if (citraComment != null) {
System.out.println("Menambah upvote pada komentar Citra");
citraComment.upvote();
System.out.println("Menambah upvote pada komentar Citra");
citraComment.upvote();
System.out.println("Menambah downvote pada komentar Citra");
citraComment.downvote();
System.out.println("Menambah downvote pada komentar Citra");
citraComment.downvote();
} else {
System.out.println("Komentar Citra tidak ditemukan.");
}
System.out.println("\n=== Komentar Paling Membantu ===");
Comment best = item.findMostHelpfulComment();
if (best != null) {
best.print();
} else {
System.out.println("Belum ada komentar.");
}
}
}
Comment
public class Comment {
private String author;
private String text;
private int rating;
private int upvotes;
private int downvotes;
public Comment(String author, String text, int rating) {
this.author = author;
this.text = text;
this.rating = rating;
this.upvotes = 0;
this.downvotes = 0;
}
public String getAuthor() {
return author;
}
public void upvote() {
upvotes++;
}
public void downvote() {
downvotes++;
}
public int getVoteBalance() {
return upvotes - downvotes;
}
public void print() {
System.out.println("Author: " + author);
System.out.println("Rating: " + rating);
System.out.println("Comment: " + text);
System.out.println("Votes: " + getVoteBalance());
}
}
No comments:
Post a Comment