Anda di halaman 1dari 12

Nama/NIM : Nama/NIM :

Minggu 3 Eksplorasi Enkapsulasi

Tujuan : Mahasiswa mampu menggunakan enkapsulasi untuk memproteksi data

Ketentuan Pengerjaan Tugas 1. Praktikum dikerjakan berkelompok 2. Pengumpulan hasil praktikum dan laporan cukup 1 saja untuk setiap kelompok 3. Silakan buat 1 project bernama P3NIM1_NIM2 Pengumpulan : E-learning di akhir sesi, berupa folder P3_NIM1_NIM2.zip berisi 1. Laporan praktikum *.doc

2. File project Anda

Soal 1 :
Vehicle +load : double +maxLoad : double +Vehicle (max_Load : double) +getLoad() : double +getMaxLoad() : double -----------------Weight dalam kg -----------------Weight dalam kg

1. Buatlah kelasVehicle yang mengimplementasikan diagram UML di atas, mencakup : a. Dua atribut, yaitu load(berat kargo saat ini) dan maxLoad(batas berat maksimal kargo) b. Satu konstruktor, untuk mengeset atribut maxLoad c. Dua method, yaitu getLoad untuk mengembalikan nilai atribut load dan getMaxLoad yang mengembalikan nilai getMaxLoad d. Semua data diasumsikan dalam kg 2. Diketahui kelas TestVehicle. Silakan gunakan kelas ini dan lengkapi yang bertanda titik-titik
public class TestVehicle { public static void main(String[] args) {

Nama/NIM : Nama/NIM :

// Create a vehicle that can handle 10,000 kilograms weight System.out.println("Creating a vehicle with a 10,000kg maximum load."); Vehicle vehicle = new Vehicle (10000.0); // Add a few boxes System.out.println("Add box #1 (500kg)"); vehicle.load = vehicle.load + 500.0; System.out.println("Add box #2 (250kg)"); vehicle.load = vehicle.load + 250.0; System.out.println("Add box #3 (5000kg)"); vehicle.load = vehicle.load + 5000.0; System.out.println("Add box #4 (4000kg)"); vehicle.load = vehicle.load + 4000.0; System.out.println("Add box #5 (300kg)"); vehicle.load = vehicle.load + 300.0; // Print out the final vehicle load System.out.println("Vehicle load is " + vehicle.getLoad()+" kg"); } }

3. Kompilasi class Vehicle dan class TestVehicle. Eksekusi class TestVehicle. Output yang diharapkan adalah : Creating a vehicle with 10,000 kg maximum load Add box #1 (500kg) Add box #2 (250kg) Add box #3 (5000kg) Add box #4 (4000kg) Add box #5 (300kg) Vehicle load is 10050.0 kg

Nama/NIM : Nama/NIM : 4. Catatan : Program akan dalam masalah ketika box terakhir ditambahkan ke dalam Vehicle, karena kode tidak mengecek apakah penambahan beban sudah melebihi maxLoad

Tempat pengumpulan hasil praktikum soal 1 : Silakan paste kode Class Vehicle yang Anda buat di sini : ...

Silakan Anda tulis hasil eksekusi class TestVehicle di sini : ...

Soal 2 : Penyembunyian Data Internal


Vehicle1 -load : double -maxLoad : double +Vehicle1(max_Load : double) +getLoad() : double +getMaxLoad() : double +addBox(weight : double) : Boolean ---------------Weight dalam kg ---------------Weight dalam kg

Untuk menyelesaikan masalah yang muncul pada soal no 1, Anda dapat menyembunyikan data internal (load dan maxLoad) dan menyediakan method baru bernama addBox, untuk memastikan bahwa Vehicle1 tidak akan mengalami overload

Langkah-langkah : 1. Buat kelas Vehicle1. Copy kode class Vehicle ke class Vehicle1. Lakukan modifikasi untuk mengimplementasikan diagram UML di atas a. Modifikasi atribut load dan maxLoad menjadi private b. Tambahkan method addBox. Method ini mempunyai satu argument, yaitu berat box dalam satuan kg. Method harus memverifikasi bahwa penambahan box tidak akan melebihi berat maksial. Jika melebihi berat maksimal, maka box tersebut akan ditolak dengan mengembalikan nilai false; jika tidak melebihi berat maksimal, berat box akan ditambahkan ke vehicle load dan method mengembalikan true

Nama/NIM : Nama/NIM : 2. Baca TestVehicle1.java di bawah ini. Kode tidak dapat memodifikasi atribut load secara langsung, tetapi harus mengunakan method addBox. Method ini menghasilkan nilai true atau false, yang akan dicetak pada layar
public class TestVehicle1 { public static void main(String[] args) { // Create a vehicle that can handle 10,000 kilograms weight System.out.println("Creating a vehicle with a 10,000kg maximum load."); Vehicle1 vehicle = new Vehicle1(10000.0); // Add a few boxes System.out.println("Add box #1 (500kg) : " + vehicle.addBox(500.0)); System.out.println("Add box #2 (250kg) : " + vehicle.addBox(250.0)); System.out.println("Add box #3 (5000kg) : " + vehicle.addBox(5000.0)); System.out.println("Add box #4 (4000kg) : " + vehicle.addBox(4000.0)); System.out.println("Add box #5 (300kg) : " + vehicle.addBox(300.0)); // Print ot the final vehicle load System.out.println("Vehicle load is " + vehicle.getLoad()+ " kg"); } }

5. Kompilasi class Vehicle1 dan class TestVehicle1. Eksekusi class TestVehicle1. Output yang dihasilkan adalah : Creating a vehicle with 10,000 kg maximum load Add box #1 (500kg) : true Add box #2 (250kg) : true Add box #3 (5000kg) : true Add box #4 (4000kg) : true Add box #5 (300kg) : false Vehicle load is 9750.0 kg

Tempat pengumpulan hasil praktikum soal 2: Silakan paste kode Class Vehicle1 yang Anda buat di sini : ...

Nama/NIM : Nama/NIM :

Silakan Anda tulis hasil eksekusi class TestVehicle1 di sini : ... ...

Soal 3 : Penyembunyian Detail Proses


Vehicle2 -load : double -maxLoad : double +Vehicle2(max_Load : double) +getLoad() : double +getMaxLoad() : double +addBox(weight : double) : Boolean -newtsToKilo(weight : double) : double -kiloToNewts(weight : double) : double ------------Weight dalam kg ------------Weight dalam newton

Sekarang kita akan melakukan perhitungan terkait engine kendaraan. Perhitungan ini lebih mudah jika berat beban diukur dalam satuan newton.

Di kasus ini, variable load dan maxLoad mempunyai satuan newton. Semua method memproses variabel load dan maxLoad yang mempunyai satuan newton. Dari sisi pengguna, pengguna menambah beban dan menerima informasi beban kendaraan dalam satuan kg. Jadi diperlukan sebuah method yang bertugas untuk melakukan konversi dari kg ke newton dan sebaliknya.

Langkah-langkah : 1. Buat kelas Vehicle2 yang mengimplementasikan diagram UML di atas 2. Copy kelas Vehicle1 ke kelas Vehicle2. Modifikasi konstruktor, method getLoad, getMaxLoad, dan addBox dengan melakukan konversi dari kilogram ke newton. Silakan Anda gunakan method private berikut ini :
private double kiloToNewts(double weight){ return (weight * 9.8);

Nama/NIM : Nama/NIM :
} private double NewtsToKilo(double weight){ return (weight / 9.8); }

Sekarang data internal objek Vehicle adalah dalam newton dan data external (dilewatkan antar method) adalah masih dalam kilogram 3. Silakan baca TestVehicle2 di bawah ini :
public class TestVehicle2 { public static void main(String[] args) { // Create a vehicle that can handle 10,000 kilograms weight System.out.println("Creating a vehicle with a 10,000kg maximum load."); Vehicle2 vehicle = new Vehicle2(10000.0); // Add a few boxes System.out.println("Add box #1 (500kg) : " + vehicle.addBox(500.0)); System.out.println("Add box #2 (250kg) : " + vehicle.addBox(250.0)); System.out.println("Add box #3 (5000kg) : " + vehicle.addBox(5000.0)); System.out.println("Add box #4 (4000kg) : " + vehicle.addBox(4000.0)); System.out.println("Add box #5 (300kg) : " + vehicle.addBox(300.0)); // Print out the final vehicle load System.out.println("Vehicle load is " + vehicle.getLoad()+ " kg"); } }

4. Kompilasi class Vehicle2 dan class TestVehicle2. Eksekusi class TestVehicle2. Output yang dihasilkan adalah : Creating a vehicle with 10,000kg maximum load Add box #1 (500kg) : true Add box #2 (250kg) : true Add box #3 (5000kg) : true Add box #4 (4000kg) : true Add box #5 (300kg) : false Vehicle load is 9750.0 kg

Nama/NIM : Nama/NIM :

Anda dapat melihat bahwa tidak ada perubahan pada output program. Ini mendemonstrasikan bahwa perubahan internal pada soal 4 tidak akan mengubah kode klien di class TestVehicle2

Tempat pengumpulan hasil praktikum: Silakan paste kode Class Vehicle2 yang Anda buat di sini : ...

Silakan Anda tulis hasil eksekusi class TestVehicle2 di sini : ...

Soal 4
Silakan kembali ke soal 1. Di soal tersebut class Vehicle diaktifkan menjadi object dalam class TestVehicle. Pada soal 4 ini, class Vehicle akan diaktifkan menjadi object dalam class FormTestVehicle, yang berbentuk graphical user interface (GUI)

Caranya adalah : 1. Silakan buat class FormTestVehicle. Caranya klik kanan package, pilih new JFrame Form seperti gambar di bawah ini

2. Isilah form tersebut dengan 6 label, 1 textfield, dan 2 button dari pallete yang ada di sebelah kanan. Anda bisa melakukan drag and drop.

Nama/NIM : Nama/NIM :

3. Silakan Anda atur letaknya, supaya enak dibaca. 4. Lakukan perubahan nama variabel textfield dan button. Caranya : a. klik kanan textfieldnya, pilih change variable name. Beri nama baru txtBeban. b. Nama baru button adalah btnInput dan btnClear 5. Langkah selanjutnya adalah mengisi kodingnya. a. Koding untuk pembentukan objek. Sisipkan kode dengan warna merah ini
public class FormTestVehicle extends javax.swing.JFrame { /*variabel vehicle dideklarasikan di sini supaya bisa dikenali di seluruh bagian class FormtextVerhicle*/ Vehicle vehicle; public FormTestVehicle() { initComponents(); //pembentukan objek vehicle vehicle = new Vehicle (10000.0); //mengisi jLabel6 dengan maxLoad jLabel6.setText(String.valueOf(vehicle.maxLoad)); }

Nama/NIM : Nama/NIM :

Silakan Anda klik isi method initComponents(). Anda akan menjumpai proses pembentukan objek JLabel, JTextField(), dan JButton, dan proses pemberian nilai awal terhadap objek yang terbentuk
private void initComponents() { jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); txtBeban = new javax.swing.JTextField(); btnInput = new javax.swing.JButton(); btnClear = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); dll }

b. Koding untuk btnClear. Di btnClear kita beri event, jika btnClear diklik, maka isi txtBeban akan kosong. Definisi event adalah kejadian atau peristiwa yang dilakukan oleh user terhadap user interface menggunakan peralatan mouse dan keyboard Caranya memberi event pada button : Klik kanan btnClear pilih eventpilih Actionpilih actionPerformed.

Gambar 1 Menu untuk membuat event

Nama/NIM : Nama/NIM :

Isi dengan kode warna merah di bawah ini :


private evt) { // TODO add your handling code here: txtBeban.setText(""); } //mengisi txtBeban dengan void btnClearActionPerformed(java.awt.event.ActionEvent

c. Koding untuk btnInput. Buatlah event sesuai dengan langkah yang sama dengan btnClear. Isilah dengan kode warna merah di bawah ini :
private evt) { // TODO add your handling code here: //menambahkan nilai vehicle.load dengan isi txtBeban vehicle.load=vehicle.load+Integer.parseInt(txtBeban.getText()); // Apa arti Integer.parseInt(txtBeban.getText() ? void btnInputActionPerformed(java.awt.event.ActionEvent

//mengisi jLabel4 dengan nilai vehicle.load jLabel4.setText(String.valueOf(vehicle.load)); //Apa arti String.valueOf(vehicle.load)? }

d. Berikut tampilan hasil eksekusinya

Nama/NIM : Nama/NIM :

Soal 5
Silakan kembali ke soal 2. Di soal tersebut class Vehicle1 diaktifkan menjadi object dalam class TestVehicle1. Pada soal 5 ini, class Vehicle1 akan diaktifkan menjadi object dalam class FormTestVehicle1, yang berbentuk graphical user interface (GUI).

Tampilan yang diharapkan :

Keterangan : jLabel8 akan terisi true/false

Soal 6
Silakan kembali ke soal 3. Di soal tersebut class Vehicle2 diaktifkan menjadi object dalam class TestVehicle2. Pada soal 6 ini, class Vehicle2 akan diaktifkan menjadi object dalam class FormTestVehicle2, tampilan di soal 5 yang berbentuk graphical user interface (GUI). Tampilannya seperti

Nama/NIM : Nama/NIM :

Pertanyaan dan kesimpulan


1. Mana di antara class Vehicle, Vehicle1, dan Vehicle2 yang menerapkan konsep abstraction? Apa alasannya? 2. Pertanyaan tentang encapsulation : a. Mana di antara class Vehicle, Vehicle1, dan Vehicle2 yang menerapkan konsep encapsulation? Apa alasannya? b. Apa keuntungan penerapan konsep encapsulation? 3. Pertanyaan tentang access modifier : a. Apa efek dari penggunaan access modifier public di atribut load dan maxLoad kelas Vehicle? b. Apa efek dari penggunaan access modifier private di atribut load dan maxLoad kelas Vehicle1? c. Mengapa method newtsToKilo(weight : double) dan method kiloToNewts(weight : double)
diberi access modifier private? Apa tujuannya?

4. Mengapa soal 2 diberi judul penyembunyian data internal dan soal 3 diberi judul
Penyembunyian detail Proses ?

5. Tulis kesimpulan Anda ! 6. Apakah Anda mengalami kesulitan dalam praktikum ini? Jika ada, apa saja kesulitannya?

Anda mungkin juga menyukai