0% menganggap dokumen ini bermanfaat (0 suara)
9 tayangan5 halaman

Praktikum OOP: Polymorphism dan Abstraksi

Dokumen ini adalah modul praktikum untuk pemrograman berorientasi objek, berfokus pada konsep polymorphism dan abstraction. Terdapat instruksi untuk membuat repositori dan kelas-kelas yang diperlukan, termasuk BaseRepository, PlayerRepository, dan ScoreRepository, serta metode yang harus diimplementasikan. Selain itu, terdapat petunjuk untuk menjalankan program utama dan melakukan pengujian terhadap fungsionalitas yang telah dibuat.
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
9 tayangan5 halaman

Praktikum OOP: Polymorphism dan Abstraksi

Dokumen ini adalah modul praktikum untuk pemrograman berorientasi objek, berfokus pada konsep polymorphism dan abstraction. Terdapat instruksi untuk membuat repositori dan kelas-kelas yang diperlukan, termasuk BaseRepository, PlayerRepository, dan ScoreRepository, serta metode yang harus diimplementasikan. Selain itu, terdapat petunjuk untuk menjalankan program utama dan melakukan pengujian terhadap fungsionalitas yang telah dibuat.
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

Praktikum Pemrograman Berorientasi Objek

Modul 3 – Polymorphism & Abstraction


Case Study

Catatan Penting
❖ Pastikan codingan kalian dapat di compile sebelum melakukan commit dan push ke
remote repository.
❖ Untuk semua ‘findBy…’ gunakan Optional<>

1.​ Pada Root Directory yang sama dengan Model, buatlah package bernama ‘Repository’!
2.​ Buatlah Abstract Class ‘BaseRepository<T, ID>’ dengan ketentuan;
a.​ Attribute:
●​ ‘Map’ dengan tipe data HashMap<ID, T>
●​ ‘List’ dengan tipe data ArrayList<T> dan bersifat protected
b.​ Method;
●​ findById(ID id) yang berfungsi untuk mengembalikan data bedasar ID. Method akan
mengembalikan object bertipe T yang ada.
●​ findAll() yang berfungsi untuk mengembalikan seluruh data
c.​ Selain itu, buat juga Abstract Method;
●​ save(T entity) yang menerima objek entity bertipe T dan tidak mengembalikan
apapun.
●​ getId(T entity) yang menerima objek entity bertipe T dan mengembalikan ID.
Dimana keduanya akan diimplementasikan dalam subclass.

1
3.​ Buatlah Class ‘PlayerRepository<Player, UUID>’ dengan ketentuan;
a.​ Merupakan pewaris dari BaseRepository
b.​ Mengimport Player dari model
c.​ Memiliki Method;
●​ findByUsername(String username) yang berfungsi untuk mencari Player berdasar
Usernamenya. Untuk kodenya, bisa meng-copy kode di bawah;

public Optional<Player> findByUsername(String username)


{
return [Link]()
.filter(player ->
[Link]().equals(username))
.findFirst();
}

●​ findTopPlayersByHighScore(int limit) yang mengembalikan Player dengan


highscore tertinggi sebanyak input limit yang diminta. HINT: gunakan sorted()
●​ findByHighscoreGreaterThan(int minScore) yang mengembalikan Player dengan
score lebih besar dibanding input minScore yang diminta
●​ findAllByOrderByTotalCoinsDesc() yang mengembalikan semua Player diurut
berdasar coins yang dimiliki. HINT: gunakan compareTo()
●​ findAllByOrderByTotalDistanceTravelledDesc() yang mengambalikan semua
Player diurutkan berdasar Distance yang ditempuh.
●​ save(Player player) yang mengoverride superclassnya
●​ getId(Player entity) yang mengoverride superclassnya

4.​ Buatlah Class ‘ScoreRepository’ dengan ketentuan;


a.​ Merupakan pewaris dari BaseRepository
b.​ Mengimport Score dari model
c.​ Memiliki method;
●​ findByPlayerId(UUID playerId) yang berfungsi untuk mengembalikan Player
berdasar input playerID yang diminta.
●​ findByPlayerIdOrderByValueDesc(UUID playerId) yang berfungsi untuk
mengembalikan semua score player dari yang terbesar ke yang terkecil

2
●​ findTopScores(int limit) yang mengembalikan score tertinggi.
●​ findHighestScoreByPlayerId(UUID playerId) yang mengembalikan highscore
Player yang diminta.
●​ findByValueGreaterThan(Integer minValue) yang mengembalikan score yang
lebih tinggi dibanding input minScore.
●​ findAllByOrderByCreatedAtDesc() yang mengembalikan semua score berdasar
kapan score dibuat.
●​ getTotalCoinsByPlayerId(UUID playerId) yang mengembalikan semua coins yang
dimiliki oleh Player yang diminta. Untuk kodenya, bisa meng-copy kode berikut;

public Integer getTotalCoinsByPlayerId(UUID playerId) {


return [Link]()
.filter(score ->
[Link]().equals(playerId))
.mapToInt(Score::getCoinsCollected)
.sum();
}

●​ getTotalDistanceByPlayerId(UUID playerId) yang mengembalikan total Distance


Player yang diminta.
●​ save(Score score)
●​ getId(Score entity)

5.​ Jalankan Main dan tunjukkan outputnya! Gunakanlah class Main seperti berikut dan isi kode merah
dengan kode anda!

import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class Main {


public static void main(String[] args) {
PlayerRepository playerRepo = new PlayerRepository();
ScoreRepository scoreRepo = new ScoreRepository();

Player player1 = new Player("Stelle");


Player player2 = new Player("gamerLooxmaxxing");
Player player3 = new Player ("Stelle123");
3
Player player4 = new Player ("Banananana");

// Buat dan simpan player

[Link](1500);
[Link](250);
[Link](5000);

[Link](3200);
[Link](750);
[Link](12000);

// Buat update stats untuk player 3 dan 4 (bebas)

// Buat dan simpan nilai dengan ketentuan;


// Score 1: Untuk player 2, memiliki score 1500, coins
250, dan distance 5000
// Score 2: Untuk Player 4, memiliki score 3200, coins
750, dan distance 12000
// Score 3: Untuk Player 1, memiliki score 4000, coins
400, dan distance 32000
// Score 4: Untuk Player 4, memiliki score 1800, coins
300, dan distance 6000
// Score 5: Untuk Player 3, memiliki score 2400, coins
240, dan distance 2400
// Score 6: Untuk Player 2, memiliki score 6200, coins
320, dan distance 5000
// Score 7: Untuk Player 4, memiliki score 1800, coins 60,
dan distance 1200
// Score 8: Untuk Player 1, memiliki score 2100, coins
200, dan distance 7000
// Score 9: Untuk Player 1, memiliki score 8000, coins
720, dan distance 6200
// Score 10: Untuk Player 3,memiliki score 1900, coins
210, dan distance 4200

[Link]("=== TESTING CS3 ===");

[Link]("Find player by ID:");


// Tunjukkan detail Player 3

[Link]("All players:");
// Tunjukkan semua player

// Urutkan player berdasar highscore

[Link]("Scores for player1:");


// Cari Score Player 1

4
}
}

6.​ Berikan screenshot output yang membuktikan jawaban kamu!


a.​ Siapakah yang memiliki score tertinggi, dan berapa score-nya?
b.​ Siapa yang paling banyak memainkan permainan ini?
c.​ Siapa pemilik score terendah, dan berapa score-nya?
d.​ Apakah saat ini kamu bisa membuat akun dan menjadi salah satu pemainnya? Jelaskan
alasanmu!

7.​ Screenshot output yang didapat dan push beserta kode yang kamu buat ke Repository
masing-masing!

Contoh Output!

Anda mungkin juga menyukai