Anda di halaman 1dari 19

LAPORAN PRAKTIKUM

PENGENALAN JAVA
MODUL V
KONSEP DASAR PBO LANJUT
RELASI ANTAR KELAS, ABSTRAK, INTERFACE

NAMA : EKA PUTRI MAHARANI


KELAS : S1-SI-04-C
NIM : 20103109

PROGRAM STUDI S1 SISTEM INFORMASI


FAKULTAS INFORMATIKA
INSTITUT TEKNOLOGI TELKOM
PURWOKERTO
2021

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 1


DASAR TEORI
A. Relasi Antar Kelas

A.1. Agregasi

Agregasi adalah bentuk hubungan yang lebih khusus dari Assosiasi dimana sebuah objek
memiliki lifecycle nya sendiri tapi dengan kepemilikan objek lain. Relasinya biasa di sebut
relasi “has-a”. Agregasi merupakan hubungan antara dua kelas di mana kelas yang satu
merupakan bagian dari kelas yang lain namun kedua kelas ini dapat berdiri sendiri-sendiri.
Relasi agregasi dalam diagram UML (Unified Modeling Language), digambarkan dengan
hollow diamond, Simbol panah menyatakan suatu class navigable terhadap class lain.

B.1. Komposisi

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 2


Komposisi merupakan varian dari agregasi (strong aggregation) dimana kelas yang
menjadi penyusun hanya dapat diciptakan setelah kelas induk / komposit dibuat dan
ketika kelas induk / komposit dihapus, maka kelas yang menjadi peyusun akan ikut
terhapus. Komposisi memiliki hubungan ‘part-of’ (bagian dari). Relasi komposisi
dalam diagram UML (Unified Modeling Language), digambarkan dengan black
diamond,Simbol panah menyatakan suatu class navigable terhadap class lain.

CP Lapto VG
U p A
var
var merk var
namaCpu cpu namaVga
CPU() VGA()
setNamaCP setMerk setNamaVg
()
B. Abstrak
Abstrak merupakan sebuah kelas. Perbedaannya dengan kelas biasa ialah pada
kelas abstrak kita dapat mendeklarasikan method/fungsi tanpa adanya implementasi.
Sebuah method/fungsi yang hanya berupa deklarasi saja tanpa adanya implementasi
disebut method/fungsi abstrak ditandai dengan adanya titik koma (;) setelah deklarasi
methodnya. Kelas abstrak dan method abstrak dideklarasikan dengan keyword
“abstract”. Kelas abstrak dapat berisi method abstrak juga method biasa. Untuk
menghubungkan kelas normal dengan kelas abstrak menggunakan keyword “extends”.

Deklarasi
abstract class <nama kelas abstract> {

C. Interface
Interface pada dasarnya adalah sebuah kelas, akan tetapi method-method di
dalamnya hanya berupa deklarasi saja, tidak ada implementasi dari method-method
tersebut, ditandai dengan adanya titik koma (;) setelah deklarasi method. Secara teknis
bisa dikatakan bahwa interface adalah kelas yang bersifat abstract, semua methodnya
adalah public dan abstract, serta semua variabel yang ada dalam interface adalah static
final atau biasa disebut sebagai konstanta.
Interface dideklarasikan dengan menggunakan keyword “interface”. Kelas yang akan
mengimplementasikan interface menggunakan keyword “implements”. Semua method
dalam interface bersifat public sehingga walaupun dalam deklarasi interface tidak ada
public tetapi di class yang mengimplementasikan interface harus meletakkan access
identifers public pada deklarasi methodnya. Saat sebuah kelas mengimplementasi sebuah
interface maka seluruh method/fungsi pada interfaceharus dideklarasikan pada kelas
tersebut. Hubungan antar interface menggunakan keyword “extends”. Sebuah kelas
dapat mengimplemtasi lebih dari satu interface dengan memberikan tanda koma (,) pada
interface sebelumnya.

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 3


Deklarasi

interface <nama interface> {

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 4


GUIDED
1. Latihan 1

Class : Mahasiswa

package Latihan1;

public class Mahasiswa {


private String nama;
public String getNama() {
return this.nama;
}
public void setNama(String nama) {
this.nama = nama;
}
}

Class : Dosen

package Latihan1;

public class Dosen {


private String nidn;
private String [] namaMhs = new String[10];
private int banyakMhs;

public String getNidn() {


return this.nidn;
}

public void setNamaMhs(String nama) {


if(banyakMhs < this.namaMhs.length){
this.namaMhs[banyakMhs] = nama;
banyakMhs++;
}
}
public void setNidn(String nidn) {
this.nidn = nidn;
}

public String getNamaMhs(int indeks) {


return namaMhs[indeks];
}

public int getJumlahMahasiswa() {


return banyakMhs;
}
}

Class : Asosiasi

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 5


package Latihan1;

public class Asosiasi {


private static int jumlahMahasiswa;
public static void main(String[] args){
Mahasiswa maha1 = new Mahasiswa();
maha1.setNama("Sherook Holmes");
Mahasiswa maha2 = new Mahasiswa();
maha2.setNama("Jhon H Watson");
Mahasiswa maha3 = new Mahasiswa();
maha3.setNama("Irene Adler");
Dosen dsn = new Dosen();
dsn.setNidn("D19890001");
dsn.setNamaMhs(maha1.getNama());
dsn.setNamaMhs(maha2.getNama());
dsn.setNamaMhs(maha3.getNama());

System.out.println("Kode Dosen : " + dsn.getNidn());


System.out.println("Mahasiswa yang diampu : ");
jumlahMahasiswa = dsn.getJumlahMahasiswa();
while(jumlahMahasiswa > 0){
jumlahMahasiswa--;
System.out.println("Nama Mahasiswa : " +
dsn.getNamaMhs(jumlahMahasiswa));
}
}
}

2. Latihan 2

Class : Mahasiswa

public class Mahasiswa {


private String nama;
public String getNama() {
return this.nama;
}
public void setNama(String nama) {
this.nama = nama;
}
}

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 6


Class : Jurusan

public class Jurusan {


private String kode, nama;
private Mahasiswa[] daftarMahasiswa = new Mahasiswa[10];
private int jumlahMahasiswa;
Jurusan(String kode, String nama){
this.kode = kode;
this.nama = nama;
}
public String getKode(){
return this.kode;
}
public String getNama(){
return this.nama;
}
public int getJumlahMahasiswa(){
return jumlahMahasiswa;
}
public void tambahMahasiswa(Mahasiswa objMhs){
if(jumlahMahasiswa < this.daftarMahasiswa.length){
daftarMahasiswa[jumlahMahasiswa] = objMhs;
jumlahMahasiswa++;
}
}
public Mahasiswa[] getDaftarMahasiswa(){
return this.daftarMahasiswa;
}
}

Class : Agregasi

public class Agregasi {


private static int jumlahMahasiswa;
public static void main(String[] args) {
Jurusan si = new Jurusan("SI", "Sistem Informasi");
Mahasiswa maha1 = new Mahasiswa();
maha1.setNama("Sherlock Holmes");
Mahasiswa maha2 = new Mahasiswa();
maha2.setNama("Jhon H Watson");
Mahasiswa maha3 = new Mahasiswa();
maha3.setNama("Irene Adler");
si.tambahMahasiswa(maha1);
si.tambahMahasiswa(maha2);
si.tambahMahasiswa(maha3);
jumlahMahasiswa = si.getJumlahMahasiswa();
System.out.println("Nama Jurusan : " + si.getNama());
System.out.println("Daftar Mahasiswa : ");
Mahasiswa [] daftarMhs = si.getDaftarMahasiswa();
for(int i = 0; i < jumlahMahasiswa; i++ ){
System.out.println("Nama : " + daftarMhs[i].getNama());
}
Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 7
}
}

3. Latihan 3

Class : CPU

public class CPU {


private String nama;
CPU(String nama){
this.nama = nama;
}
public String getNama(){
return this.nama;
}
}

Class : VGA

public class VGA {


private String nama;
private int kapasitas;
VGA(String nama, int kapasitas){
this.nama = nama;
this.kapasitas = kapasitas;
}
public String getNama(){
return this.nama;
}
public int getKapasitas(){
return this.kapasitas;
}
}

Class : Laptop

public class Laptop {


private String merk, tipe;
private CPU cpu;
private VGA vga;

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 8


Laptop(String merk, String tipe){
this.merk = merk;
this.tipe = tipe;
}
public void tambahKomponen(CPU cpu, VGA vga){
this.cpu = cpu;
this.vga = vga;
}
public void tampilInfo(){
System.out.println("Laptop " + this.merk + " tipe " + this.tipe);
System.out.println("Spesifikasi : ");
System.out.println("- " + cpu.getNama());
System.out.println("- " + vga.getNama());
}
}

Class : Komposisi

public class Komposisi {


public static void main(String [] args){
Laptop asus = new Laptop("Asus", "ROG-ZEPHYRUS-S-GX701");
asus.tambahKomponen(new CPU("CPU Intel Core i7 8th Gen"),
new VGA("NVIDIA GeForce RTX 2080", 8));
asus.tampilInfo();
Laptop alienware = new Laptop("Dell", "NEW ALIENWARE AREA-
51m");
alienware.tambahKomponen(new CPU("9th Generation Intel Core i9-
9900HK"),
new VGA("NVIDIA GeForce RTX 2080", 8));
alienware.tampilInfo();
}
}

4. Latihan 4

Class : KalkulatorGeometri

public class KalkulatorGeometri {


public static void main(String [] args){
Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 9
Segitiga samaSisi = new Segitiga();
System.out.println("Luas segitiga : " + samaSisi.luasBangun(3f, 4f));
System.out.println("Keliling segitiga : " + samaSisi.kelilingBangun(3f, 4f));
System.out.println("Alas segitiga : " + samaSisi.getAlas());
System.out.println("Tinggi segitiga : " + samaSisi.getTinggi());
}
}

Class : interface Penghitung2d

public interface Penghitung2d {


float PHI = 3.14f;
float KONSTANTA_SEGITIGA = 0.5f;
float KONSTANTA_BOLA = (float) 4/3;
float luasBangun();
float luasBangun(float a, float b);
float kelilingBangun();
float kelilingBangun(float a, float b);
float volumeBangun();
}

Class : Geometri

abstract class Geometri {


private float panjang, lebar, alas, tinggi, jari_jari,sisiMiring;
private final int KONSTANTA_PHYTAGORAS = 2;
public void setPanjang(float panjang){
this.panjang = panjang;
}
public void setLebar(float lebar){
this.lebar = lebar;
}
public void setAlas(float alas){
this.alas = alas;
}
public void setTinggi(float tinggi){
this.tinggi = tinggi;
}
public void setJariJari(float jari_jari){
this.jari_jari = jari_jari;
}
public float getPanjang(){
return this.panjang;
}
public float getLebar(){
return this.lebar;
}
public float getAlas(){
return this.alas;
}

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 10


public float getTinggi(){
return this.tinggi;
}
public float getJariJari(){
return this.jari_jari;
}
public void setSisiMiring(float a, float b){
sisiMiring = (float) Math.sqrt(Math.pow(a ,
KONSTANTA_PHYTAGORAS) + Math.pow(b ,
KONSTANTA_PHYTAGORAS));
}
public float getSisiMiring(){
return sisiMiring;
}
}

Class : Segitiga

public class Segitiga extends Geometri implements Penghitung2d {


float luasSegitiga;
float kelilingSegitiga;
public float luasBangun(){
luasSegitiga = super.getAlas() * super.getTinggi()
*KONSTANTA_SEGITIGA;
return luasSegitiga;
}
public float luasBangun(float alas, float tinggi){
super.setAlas(alas);
super.setTinggi(tinggi);
luasSegitiga = super.getAlas() * super.getTinggi() *
KONSTANTA_SEGITIGA;
return luasSegitiga;
}
public float kelilingBangun(){
float sisi;
super.setSisiMiring(super.getAlas(), super.getTinggi());
sisi = super.getSisiMiring();
kelilingSegitiga = 3 * sisi;
return kelilingSegitiga;
}
public float kelilingBangun(float alas, float tinggi){
float sisi;
super.setAlas(alas);
super.setTinggi(tinggi);
super.setSisiMiring(super.getAlas(), super.getTinggi());
sisi = super.getSisiMiring();
kelilingSegitiga = 3 * sisi;
return kelilingSegitiga;
}
public float volumeBangun(){
return 0.0f;
Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 11
}
}

Case
Apa yang akan terjadi jika method/fungsi volumeBangun() pada kelas Segitiga
dihapus ? Jelaskan.

Jika method/fungsi volumeBangun() pada kelas Segitiga dihapus, program akan tetap
berjalan, tetapi pada java class Segitiga akan terdapat tanda seru berwarna merah dalam
sintaknya atau error, karena pada class Segitiga implement terhadap class interface
Penghitung2d. Di dalam class interface tersebut terdapat metode/fungsi volume bangun,
Saat sebuah class Segitiga mengimplementasi interface Penghitung2d, maka semua
method/fungsi pada interface harus dideklarasikan pada class Segitiga. Namun jika salah
satunya dihapus, program akan tetap berjalan namun akan terjadi eror pada class Segitiga.

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 12


UNGUIDED

Kembangkan program terakhir (Latihan 4) hingga memiliki 2 atau lebih interface yang
saling berhubungan dan terdapat kelas yang mengakses 2 interface atau lebih.
a. Memiliki 2 atau lebih interface yang saling berhubungan (50)
b. Terdapat kelas yang mengakses 2 interface atau lebih (50)

1. Class KalkulatorGeometri

package Unguided;

public class KalkulatorGeometri {


public static void main(String [] args){
Segitiga samaSisi = new Segitiga();
System.out.println("------------Segitiga------------");
System.out.println("Luas segitiga : " + samaSisi.luasBangun(3f, 4f));
System.out.println("Keliling segitiga : " + samaSisi.kelilingBangun(3f, 4f));
System.out.println("Alas segitiga : " + samaSisi.getAlas());
System.out.println("Tinggi segitiga : " + samaSisi.getTinggi());

System.out.println("");
Bola bolaBasket = new Bola();
System.out.println("------------Bola------------");
bolaBasket.setJari_jari(20);
System.out.println("Jari-jari bola : " + bolaBasket.getJari_jari());
System.out.println("Volume Bola : " + bolaBasket.volumeBangun());

System.out.println("");
Kubus bKubus = new Kubus();
System.out.println("------------Kubus------------");
System.out.println("Volume Kubus : " + bKubus.volumeKubus(3f, 5f, 8f));
System.out.println("Luas Permukaan Kubus : " + bKubus.luasPkubus(3f, 4f));
System.out.println("Keliling Kubus : " + bKubus.kelilingKubus(5f));

System.out.println("");
Balok balokRuang = new Balok();
System.out.println("------------Balok------------");
System.out.println("Luas Permukaan Balok : " +
balokRuang.luasPermukaanBalok(3f,5f, 8f));
System.out.println("Volume Balok : " + balokRuang.volumeBalok(3f, 4f, 9f));
}
}

2. Class Abstract Geometri

package Unguided;

abstract class Geometri {


private float panjang, lebar, alas, tinggi, jari_jari,sisiMiring,sisi;
private final int KONSTANTA_PHYTAGORAS = 2;

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 13


public void setPanjang(float panjang){
this.panjang = panjang;
}
public void setLebar(float lebar){
this.lebar = lebar;
}

public void setAlas(float alas){


this.alas = alas;
}

public void setTinggi(float tinggi){


this.tinggi = tinggi;
}

public float getPanjang(){


return this.panjang;
}

public float getLebar(){


return this.lebar;
}

public float getAlas(){


return this.alas;
}

public float getTinggi(){


return this.tinggi;
}

public void setSisiMiring(float a, float b){


sisiMiring = (float) Math.sqrt(Math.pow(a , KONSTANTA_PHYTAGORAS) +
Math.pow(b , KONSTANTA_PHYTAGORAS));
}

public float getJari_jari() {


return jari_jari;
}

public void setJari_jari(float jari_jari) {


this.jari_jari = jari_jari;
}

public float getSisiMiring(){


return sisiMiring;
}

public float getSisi() {


return sisi;
}

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 14


public void setSisi(float sisi) {
this.sisi = sisi;
}
}

3. Class Interface Penghitung2d

package Unguided;

public interface Penghitung2d {


float PHI = 3.14f;
float KONSTANTA_SEGITIGA = 0.5f;
float KONSTANTA_BOLA = (float) 4/3;

float luasBangun();
float luasBangun(float a, float b);

float kelilingBangun();
float kelilingBangun(float a, float b);

float volumeBangun();
}

4. Class Segitiga

package Unguided;

public class Segitiga extends Geometri implements Penghitung2d {


float luasSegitiga;
float kelilingSegitiga;

public float luasBangun(){


luasSegitiga = super.getAlas() * super.getTinggi() *KONSTANTA_SEGITIGA;
return luasSegitiga;
}

public float luasBangun(float alas, float tinggi){


super.setAlas(alas);
super.setTinggi(tinggi);
luasSegitiga = super.getAlas() * super.getTinggi() *KONSTANTA_SEGITIGA;
return luasSegitiga;
}

public float kelilingBangun(){


float sisi;
super.setSisiMiring(super.getAlas(), super.getTinggi());
sisi = super.getSisiMiring();
kelilingSegitiga = 3 * sisi;
return kelilingSegitiga;
}

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 15


public float kelilingBangun(float alas, float tinggi){
float sisi;
super.setAlas(alas);
super.setTinggi(tinggi);
super.setSisiMiring(super.getAlas(), super.getTinggi());
sisi = super.getSisiMiring();
kelilingSegitiga = 3 * sisi;
return kelilingSegitiga;
}

public float volumeBangun(){


return 0.0f;
}
}

5. Class Interface Penghitung3d

package Unguided;

public interface Penghitung3d extends Penghitung2d {


float volumeBangun();
float volumeBangun(float a, float b, float c);
float luasBangun(float a, float b, float c);
}

6. Class Bola

package Unguided;

public class Bola extends Geometri implements Penghitung3d {


float luasBola;
float volumeBola;

@Override
public float volumeBangun() {
volumeBola = (float) (KONSTANTA_BOLA * PHI
*(Math.pow(super.getJari_jari(), 3)));
return volumeBola;
}

@Override
public float volumeBangun(float a, float b, float c) {
super.setJari_jari(a);
float r = super.getJari_jari();
volumeBola = (float) (KONSTANTA_BOLA * PHI * (Math.pow(r, 3)));
return volumeBola;
}

@Override
public float luasBangun(float a, float b, float c){

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 16


return luasBola;
}

@Override
public float luasBangun() {
luasBola = (float) (4 * PHI * (Math.pow(super.getJari_jari(), 2)));
return luasBola;
}

@Override
public float luasBangun(float a, float b) {
super.setJari_jari(a);
float r = super.getJari_jari();
luasBola = (float)(4 * PHI * (Math.pow(r,2)));
return luasBola;
}

@Override
public float kelilingBangun() {
return 0.0f;
}

@Override
public float kelilingBangun(float a, float b) {
return 0.0f;
}
}

7. Class bangunRuang

package Unguided;

public interface bangunRuang {


float luasPermukaanBalok(float a, float b, float c);
float volumeBalok (float a, float b, float c);
}

8. bangunRuang2

package Unguided;

public interface bangunRuang2 {


float volumeKubus(float a, float b, float c);
float luasPkubus(float a, float b);
float kelilingKubus(float a);
}

9. Kubus

package Unguided;

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 17


public class Kubus extends Geometri implements bangunRuang2 {
float volumeKubus;
float luasPkubus ;
float kelilingKubus;

@Override
public float volumeKubus(float a, float b, float c) {
super.setSisi(a);
super.setSisi(b);
super.setSisi(c);
volumeKubus = super.getSisi() * super.getSisi() * super.getSisi();
return volumeKubus;
}

@Override
public float luasPkubus(float a, float b) {
super.setSisi(a);
super.setSisi(b);
luasPkubus = 6* super.getSisi() * super.getSisi();
return luasPkubus;
}

@Override
public float kelilingKubus(float a) {
super.setSisi(a);
kelilingKubus = 12 * super.getSisi();
return kelilingKubus ;
}
}

10. Balok

package Unguided;

public class Balok extends Geometri implements bangunRuang {


float luasPermukaanBalok;
float volumeBalok;
@Override
public float luasPermukaanBalok(float a, float b, float c) {
super.setPanjang(a);
super.setLebar(b);
luasPermukaanBalok =2* super.getPanjang() * super.getLebar() + 2*
super.getPanjang() * super.getLebar() + 2*super.getPanjang() *
super.getLebar();
return luasPermukaanBalok;
}
@Override
public float volumeBalok(float a, float b, float c) {
super.setPanjang(a);
super.setLebar(b);
super.setTinggi(c);

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 18


volumeBalok = super.getPanjang() * super.getLebar() * super.getTinggi();
return volumeBalok;
}
}

Praktikum Pemrograman Berbasis Objek | Sena Wijayanto, S.Pd., M.T 19

Anda mungkin juga menyukai