• Tidak ada hasil yang ditemukan

3.2 Hubungan Antar Kelas

3.2.1 Asosiasi

Asosiasi merupakan hubungan antara dua kelas di yang merupakan hubungan struktural yang menggambarkan himpunan link antar obyek. Contoh dari hubungan asosiasi ini adalah:

Gambar 3-6 Contoh hubungan asosiasi

Bentuk implementasi dari diagram kelas tersebut di Java adalah sebagai berikut:

class Mahasiswa {

private String nim; private String nama;

public Mahasiswa(String nim, String nama) {

this.nim=nim; this.nama=nama; }

public void setnama (String nama) { this.nama = nama;

}

public void setnim (String nim) { this.nim = nim;

}

public String getNim() { return this.nim;

}

public String getNama () { return this.nama;

} }

class Dosen {

private String Kddosen;

private String[] nimMHS=new String[5]; private int jmlMahasiswa=0;

public Dosen(String kode) {

this.Kddosen=kode; }

public void setKddosen (String Kddosen) { this.Kddosen = Kddosen;

}

public void setNimMahasiswa (String nim) { nimMHS[jmlMahasiswa]=nim;

jmlMahasiswa++; }

public int getJmlMahasiswa () { return this.jmlMahasiswa;

}

public String getKddosen () { return this.Kddosen;

}

public void daftarMahasiswa() {

System.out.println("Kode Dosen "+Kddosen);

System.out.println("Daftar Mahasiswa"); for (int i=0;i<jmlMahasiswa;i++)

{ System.out.println(nimMHS[i]); } } } //kelas DriverMahasiswaDosen class DriverMahasiswaDosen

{

public static void main(String[] args) {

/*kode dibawah ini merupakan implementasi dari hubungan asosiasi antar kelas*/

Mahasiswa mhs1 = new Mahasiswa("30107998","Abdul Kadir");

Mahasiswa mhs2 = new Mahasiswa("30107999","Asep Sumarta");

Dosen dsn = new Dosen("SKS");

dsn.setNimMahasiswa(mhs1.getNim()); dsn.setNimMahasiswa(mhs2.getNim()); dsn.daftarMahasiswa(); } } 3.2.2 Agregasi

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. Agregasi sering juga disebut relasi “part of” atau relasi “whole-part”. Contoh hubungan agregasi ini adalah:

Gambar 3-7 Contoh hubungan agregasi

Implementasi dari diagram kelas tersebut dalam Java adalah sebagai berikut:

//mahasiswa.java

public class mahasiswa {

private String NIM, Nama;

public mahasiswa(String no, String nm) { this.NIM = no;

this.Nama = nm; }

public String GetNIM() { return (NIM); }

public String GetNama() { return (Nama); }

}

//jurusan.java

public class Jurusan {

private String KodeJurusan, NamaJurusan;

/*baris dibawah ini merupakan implementasi dari hubungan agregasi antar kelas*/

private Mahasiswa[] Daftar = new Mahasiswa[10]; public Jurusan(String kode, String nama) { this.KodeJurusan = kode;

this.NamaJurusan = nama; }

private static int JmlMhs = 0;

public void AddMahasiswa(Mahasiswa m) { this.Daftar[JmlMhs] = m;

this.JmlMhs++; }

public void DisplayMahasiswa() { int i; System.out.println("Kode Jurusan : "+this.KodeJurusan); System.out.println("Nama Jurusan : "+this.NamaJurusan); System.out.println("Daftar Mahasiswa :"); for (i=0;i<JmlMhs;i++) System.out.println(Daftar[i].GetNIM()+" "+Daftar[i].GetNama()); } } 3.2.3 Komposisi

Komposisi merupakan bentuk khusus dari agregasi di mana kelas yang menjadi part (bagian) baru dapat diciptakan setelah kelas yang menjadi whole (seluruhnya) dibuat dan

ketika kelas yang menjadi whole dimusnahkan, maka kelas yang menjadi part ikut musnah. Contoh hubungan komposisi adalah sebagai berikut:

Gambar 3-8 Contoh hubungan komposisi

Implementasi dari diagram kelas tersebut dalam Java adalah sebagai berikut:

//CPU.java

public class CPU {

private String Merk; private int Kecepatan;

public CPU(String m, int k) { this.Merk = m;

this.Kecepatan = k; }

public void DisplaySpecCPU() {

System.out.println(this.Merk + ", " + this.Kecepatan);

} }

//Monitor.java

public class Monitor { private String Merk;

public Monitor(String m) { this.Merk = m;

}

public void DisplaySpecMonitor() { System.out.println(this.Merk); }

}

//Printer.java

public class Printer {

private String Merk, Type;

public Printer(String m, String t) { this.Merk = m;

this.Type = t; }

public void DisplaySpecPrinter() {

System.out.println(this.Merk + ", " + this.Type);

} }

//Komputer.java

public class Komputer { private String Kode; private long Harga; private CPU Proc; private Monitor Mon; private Printer Prn ;

public Komputer(String k, long h) { this.Kode = k;

this.Harga = h; if (k == "PC-01") {

/*baris dibawah ini merupakan implementasi dari hubungan komposisi antar kelas*/

Proc = new CPU("Pentium IV", 500);

Mon = new Monitor("Sony Multiscan 15sf"); Prn = new Printer("Canon BJC-210SP", "Color");

}

}

public void DisplaySpec() {

System.out.println("Kode : " + this.Kode); System.out.print("Processor: "); Proc.DisplaySpecCPU(); System.out.print("Monitor : "); Mon.DisplaySpecMonitor(); System.out.print("Printer : "); Prn.DisplaySpecPrinter();

System.out.println("Harga : Rp. " + this.Harga);

} }

3.3 Pewarisan di Java

Pewarisan di Java hanya mengenal pewarisan tunggal, artinya sebuah kelas hanya mewarisi atribut dan method dari satu kelas induk. Untuk menggunakan pewarisan di Java digunakan keywordextends.

Contoh pewarisan dapat dilihat pada diagram kelas berikut ini: +getDetails() : String +name : String = "" +salary : double +birthDate : Date Employee +departement : String Manager

Gambar 3-9 Contoh Pewarisan Kelas

Implementasi dari diagram kelas di atas dalam Java adalah sebagai berikut:

//Employee.java

public class Employee { public String name; public Date birthDate; public double salary;

public String getDetails() {...} }

//Manager.java

public class Manager extends Employee { public String department;

}

Atribut name, birthDate, dan salary serta method getDetails() diturunkan ke kelas Manager sehingga kelas

Manager dapat menggunakan atribut dan method tersebut.

Konstruktor dari kelas induk tidak dapat diturunkan kepada kelas turunannya.

Untuk menggunakan method dan konstruktor dari kelas induk pada kelas anak digunakan keywordsuper, contoh:

//Employee.java

public class Employee { private String name; private double gaji;

public Employee (String s, double g) { name = s;

gaji=g; }

public double getgaji() { return gaji;

} }

//Manager.java

public class Manager extends Employee { private String alamat;

private double tunjangan; private double bonus;

public Manager(String nama, String s) { super(nama);

alamat = s; }

Public double getgaji() {

return (super.getgaji()+tunjangan+bonus); }

}

3.4 Kelas Abstrak

Kelas abstrak merupakan suatu bentuk khusus dari kelas di mana kelas tersebut tidak dapat diinstansiasi dan digunakan hanya untuk diturunkan ke dalam bentuk kelas konkret atau kelas abstrak berikutnya.

Kelas abstrak dideklarasikan menggunakan keyword abstract. Di dalam kelas abstrak dapat dideklarasikan atribut dan

method sama seperti kelas konkret, namun ada juga method

abstrak, yaitu suatu method yang tidak mempunyai implementasi hanya memiliki deklarasi saja, contoh:

public abstract class LivingThing { public void breath(){

System.out.println("Living Thing breathing..."); }

public void eat(){

System.out.println("Living Thing eating..."); }

public abstract void walk(); //merupakan method abstrak

}

Ketika sebuah kelas mewarisi sebuah kelas abstrak, kelas tersebut harus mendefnisikan implementasi dari method

abstrak yang ada dalam kelas induknya. Jika tidak didefnisikan implementasinya, maka kelas tersebut akan menjadi kelas abstrak juga, contoh:

public class Human extends LivingThing {

//implementasi dari method abstrak walk() public void walk(){

System.out.println("Human walks..."); }

}

3.5 Interface

Interface adalah prototype kelas yang berisi defnisi konstanta dan deklarasi method (hanya nama method tanpa defnisi kode programnya). Dalam sebuah interface:

o Semua atribut adalah public, static dan fnal

(semua atribut bertindak sebagai konstanta)

o Semua method adalah abstract dan public o Tidak boleh ada deklarasi konstruktor

Dengan adanya interface, Java menyediakan sebuah ftur untuk keperluan pewarisan jamak (multiple inheritance). Contoh interface dan kegunaannya:

Gambar 3-10 Contoh Interface

Untuk membuat interface di Java digunakan keyword

interface. Source code untuk diagram kelas di atas dalam Java adalah sebagai berikut:

//Relation.java

public interface Relation {

public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); }

//Line.java

public class Line implements Relation { private double x1;

private double x2; private double y1; private double y2;

public Line(double x1, double x2, double y1, double y2){ this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; }

public double getLength(){

double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1));

}

public boolean isGreater( Object a, Object b){ double aLen = ((Line)a).getLength();

double bLen = ((Line)b).getLength(); return (aLen > bLen);

}

public boolean isLess( Object a, Object b){ double aLen = ((Line)a).getLength();

double bLen = ((Line)b).getLength(); return (aLen < bLen);

}

public boolean isEqual( Object a, Object b){ double aLen = ((Line)a).getLength();

double bLen = ((Line)b).getLength(); return (aLen == bLen);

} }

Latihan 1. Latihan 1 Penjual nama : String alamat : String barang : String[5] hargaBeli : Double[5] jumlahBarang : Integer[5] hargaJual : Double[5] jumlahTerjual : Integer[5] keuntungan : Double Penjual() String getNama() String getAlamat() setBarang() setHargaBeli() setJumlahBarang() setHargaJual() setJumlahTerjual() setKeuntungan() String getBarang() Double getHargaBeli() Integer getJumlahBarang() Double getHargaJual() Integer getJumlahTerjual() Double getKeuntungan()

Diketahui sebuah class diagram seperti di atas. Kelas penjual

o Atribut nama menyimpan nama penjual

o Atribut alamat menyimpan alamat penjual

o Atribut barang menyimpan jenis barang yang dijual oleh penjual. Maksimal seorang penjual membeli 5 jenis barang

o Atribut hargabeli menyimpan harga beli barang per satuannya

o Atribut jumlahbarang menyimpan jumlah barang yang dibeli tiap jenisnya

o Atribut hargajual menyimpan harga jual tiap barang per satuannya

o Atribut jumlahterjual menyimpan jumlah barang yang berhasil dijual tiap jenisnya

o Atribut keuntungan menyimpan total keuntungan penjual

o Konstruktor penjual digunakan untuk mengeset nama dan alamat penjual

o Method getKeuntungan digunakan untuk menghitung keuntungan seorang penjual dengan persamaan: Keuntungan = (JumlahTerjual x HargaJual) – (JumlahBarang x HargaBeli)

Tugas :

 Buatlah code Java untuk diagram kelas di atas!

 Buatlah sebuah class driver dengan menggunakan Java yang menggunakan kelas di atas di mana driver

akan memanggil array bertipe kelas penjual berisi 5 orang penjual. Class driver harus menampilkan nama dan alamat setiap penjual, beserta data barang dagangan masing-masing penjual (jumlahBarang, hargaBeli, jumlahTerjual, hargaJual), dan juga keuntungan masing-masing penjual! (data diasumsikan sendiri) 2. Latihan 2 Mobil String merek String noPlat long tahunKeluaran Mobil() String getMerek() String getnoPlat() long getTahunKeluaran() Pemilik String nama String alamat Integer jumlahMobil String[5] noPlatMobil Pemilik() jualMobil() beliMobil() String getNama() String getAlamat() Integer getJumlahMobil() String getNoPlatMobil() 1..* 1..* memiliki

Diketahui class diagram di atas menggambarkan hubungan antara kelas Pemilik dan kelas Mobil.

Pada kelas mobil:

o Terdapat atribut merek untuk menyimpan merek mobil, noPlat untuk menyimpan nomor plat

mobil, dan tahunKeluaran untuk menyimpan tahun keluaran mobil

o Terdapat konstruktor mobil untuk mengeset nilai

merek, noPlat, dan tahunKeluaran mobil

Pada kelas pemilik:

o Terdapat atribut nama untuk menyimpan nama pemilik, alamat untuk menyimpan alamat pemilik,

jumlahMobil untuk menyimpan jumlah mobil pemilik, dan noPlatMobil untuk menyimpan nomor plat mobil pemilik

o Seorang pemilik maksimal memiliki 5 mobil

o Terdapat konstruktor pemilik untuk mengeset nama dan alamat pemilik

o Terdapat method beliMobil untuk menambahkan nomor plat mobil baru seorang pemilik

o Terdapat method jualMobil untuk mengurangi nomor plat mobil seorang pemilik

Tugas:

 Buatlah kode Java untuk mengimplementasikan class diagram di atas!

 Buatlah class driver untuk menampilkan data seorang pemilik dan mobilnya dengan jumlah mobilnya 5! (data diasumsikan sendiri)

3. Latihan 3

Diketahui class diagram di atas menggambarkan hubungan antara kelas nasabah dan kelas rekening. Seorang nasabah bisa membuat maksimal 5 rekening pada sebuah bank.

Pada kelas nasabah:

o Terdapat atribut nama untuk menyimpan nama nasabah, alamat untuk menyimpan alamat nasabah, jumlahRekening untuk menyimpan jumlah rekening nasabah, dan rek untuk menyimpan data rekening nasabah

o Terdapat konstruktor nasabah untuk mengeset nama dan alamat nasabah

o Terdapat method bukaRekening untuk mengeset rekening baru

Pada kelas rekening:

o Terdapat atribut noRekening untuk menyimpan nomor rekening dan saldo untuk menyimpan nilai saldo

o Terdapat method deposit untuk menambahkan nilai saldo

o Terdapat method withdraw untuk mengurangi nilai saldo

Tugas:

 Buatlah code Java untuk mengimplementasikan class diagram di atas!

 Buatlah class driver untuk menampilkan data seorang nasabah dan rekeningnya! (data diasumsikan sendiri)

4. Latihan 4 Kelas String idKelas long angkatan Integer jumlahMahasiswa Mahasiswa[40] mhs Kelas() tambahMahasiswa() String getIDKelas() Long getAngkatan() Integer getJumlahMahasiswa() Mahasiswa getMahasiswa() Mahasiswa String nama Long nim String alamat Double nilai Mahasiswa() setNilai() String getNama() Long getNim() String getAlamat() Double getNilai()

Diketahui class diagram di atas menggambarkan hubungan antara class Kelas dan class Mahasiswa. Satu kelas maksimal memiliki 40 orang mahasiswa.

Pada class Kelas:

o Terdapat atribut idKelas untuk menyimpan ID Kelas, angkatan untuk menyimpan angkatan,

jumlahMahasiswa untuk menyimpan jumlah mahasiswa pada kelas tersebut, dan juga mhs untuk menyimpan data mahasiswa sebuah kelas

o Terdapat konstruktor kelas untuk mengeset

idKelas dan angkatan

o Terdapat method tambahMahasiswa untuk menambahkan data mahasiswa suatu kelas

Tugas:

 Buatlah code Java untuk mengimplementasikan class diagram di atas!

 Buatlah class driver untuk menampilkan data kelas dan mahasiswanya! (data diasumsikan sendiri)

5. Latihan 5 Employee String nama String nip Integer gol Employee() String getNama() String getNip() Integer getGolongan() Manager String departemen Manager() String getDept()

Keterangan kelasEmployee:

Konstruktor mengeset nilai nama, nip, dan golongan

Keterangan kelasManager:

Konstruktor mengeset nilai nama, nip, golongan, dan

departemen

Buatlah kelas employee dan kelas Manager sesuai class diagram di atas!

Buatlah sebuah driver class yang menampilkan data

Employee dan data Manager jika diketahui sebagai berikut: Employee Nama : Andi NIP : 12345 Golongan : 8 Manager Nama : Joni NIP : 11111 Golongan : 10

6. Latihan 6 Employee String nama String nip Integer gol Employee() setNip() String getNama() String getNip() Integer getGolongan() setGolongan() Double getGaji() Staf Staf() Dosen String departemen Dosen() setDepartemen() String getDepartemen()

Keterangan kelas Employee:

o Merupakan kelas abstrak

o Memiliki method abstrak setGolongan() dan

getGaji()

o Memiliki konstruktor yang mengeset nama

Employee

o Golongan 1 s.d. 7 termasuk ke dalam staf sedangkan golongan 8 s.d. 15 termasuk ke dalam dosen

Keterangan kelasStaf:

o Memiliki konstruktor untuk mengeset nama

o Gaji seorang karyawan adalah Rp 8000/jam kerja Keterangan kelasDosen:

o Memiliki atribut departemen

o Memiliki konstruktor untuk mengeset nama

o Gaji seorang dosen adalah Rp 10000/jam kerja

Jika data seorang dosen dan staf adalah sebagai berikut: Dosen Nama : Budi NIP : 11111 Departemen : IF Golongan : 8

Jam kerja : 9 jam

Staf

Nama : Joni

NIP : 22222

Golongan : 3

Jam kerja : 6 jam

Maka buatlah implementasi dari class diagram di atas dalam Java dan buatlah sebuah class driver untuk :

o Menghitung gaji dosen dan staf tersebut

o Menampilkan data dosen dan staf tersebut

7. Latihan 7

Buatlah Interface Employee sesuai dengan class diagram di atas :

a. Terdapat 3 buah method :

- getNama() yang mengembalikan nilai nama dari seorang pegawai

- getGol() yang mengembalikan nilai golongan dari seorang pegawai

Buatlah Class Manager sesuai dengan class diagram di atas :

a. Terdapat 3 buah atribut : nama,nip, dan gol

b. Terdapat 2 buah method :

- setNip (n:String) untuk memberikan nilai atribut nip

- setGol (g:int) untuk memberikan nilai atribut gol, dimana nilai dari golongan seorang employee adalah 7 s.d. 15. Selain itu dianggap golongannya 7.

c. Terdapat 1 buah constructor untuk memberikan nilai atribut

nama

Misalkan diberikan aplikasi TestEmployee.java :

public class TestEmployee {

public static void main(String[] args) { Manager m = new Manager("Joni"); m.setNip("11111"); m.setGol(10); System.out.println("Nama: "+m.getNama()); System.out.println("NIP :"+m.getNip()); System.out.println("Gol :"+m.getGol()); } }

Compile Employee.java, Manager.java & TestEmployee.java

Jalankan TestEmployee.class

4 Polimorfisme

Overview

Polymorphism merupakan konsep OOP yang memberikan feksibilitas kepada programmer dalam menulis program.

Dengan mengaplikasikan konsep polymorphism,

programmer dapat memperlakukan seluruh object yang berasal dari superclass yang sama seakan-akan mereka adalah object dari superclass.

Pada Java, konsep polymorphism diimplementasikan melalui beberapa cara yaitu overloading, overriding, abstract class

dan melalui interface.

Tujuan

Dengan praktikum ini mahasiswa diharapkan dapat:

1. Memahami dan menerapkan konsep polimorfsme dalam pemrograman

2. Memahami proses terjadinya Virtual Method Invocation

3. Memahami dan menerapkan polymorphicarguments

dalam pemrograman

4. Memahami penggunaan instanceof dan cara melakukan

5. Memahami tentang overloading

6. Memahami tentang overriding

7. Memahami aturan tentang overridden

4.1 Polymorphism

 Memahami proses terjadinya Virtual Method

Invocation Tulislah listing program berikut ini dan amati yang terjadi pada saat terjadinya Virtual Method Invocation.

Ketika program tersebut dijalankan, akan tampak hasil seperti dibawah ini :

Nilai x = 5 Ini class Child

 Mengimplementasikan UML classdiagram dalam program Suatu program terdiri dari class Pegawai sebagai parent class, dan kelas Manajer dan kelas Kurir sebagai subclass. Buatlah suatu program yang menerapkan konsep

polymorphic argument sebagaimana yang telah disinggung dalam pembahasan sebelumnya.

Gambar 4-11 Diagram kelas pegawai

Transformasikan class diagram diatas ke dalam bentuk program?. Tulislah listing program berikut ini sebagai pengetesan.

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas.

Bayaran untuk Manajer : 850 Bayaran untuk Programmer : 630

Dokumen terkait