TI 1163 Pemrograman Berorientasi Objek Constructor Konsep Lanjut Pemrograman Objek Constructor merupakan metode khusus yang memiliki nama sama dengan kelasnya. Jika kita tidak mengkodekan sebuah constructor, JAVA akan membuat sebuah constructor default untuk kita. Constructor default tidak melakukan apaapa, namun memungkinkan semua variabel yang tidak diinisialisasi dalam deklarasi diberi suatu nilai default. Restyandito e-mail : [email protected] website : http://lecturer.ukdw.ac.id/~dito TI1163 – Konsep Lanjut Pemrograman Objek Constructor © Restyandito - 2 Constructor class Mahasiswa { public class MahasiswaInfo { public static void main(String args[]) { Mahasiswa mhs1 = new Mahasiswa( "Dinda“ , 3.4 ); Mahasiswa mhs2 = new Mahasiswa( "Ninda“ , 3.25 ); Mahasiswa mhs3 = new Mahasiswa(); private String nama = ""; private int nim = 0; private static int NIM = 0; private double ipk = 0.0; public Mahasiswa() { this.nim = ++NIM; } mhs1.LihatData(); mhs2.LihatData(); mhs3.LihatData(); public Mahasiswa(String na, double i) { this.nama = na; this.ipk = i; this.nim = ++NIM; } } public void LihatData() { System.out.println("Nama : " + nama + "\tNIM : " + nim + "\tIPK : " + ipk ); } } } TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 3 Class Activity © Restyandito © Restyandito - 4 Hubungan Antar Class 1. Buatlah suatu class Mobil dengan atribut berupa pabrik, tipe, mesin dan kapasitas penumpang. 2. Buatlah suatu constructor dengan 4 parameter untuk menset nilai dari pabrik, tipe, mesin dan kapasitas penumpang. 3. Buatlah suatu method untuk menampilkan atribut Mobil. 4. Buatlah 2 buah instance object, sedan dengan atribut Honda, JAZZ, 2000CC, 5 penumpang dan MPV dengan atribut VW,Caravelle,3000CC, 7 penumpang. 5. Tampilkan atribut kedua buah instance tersebut (sedan dan MPV) TI1163 – Konsep Lanjut Pemrograman Objek TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 5 Pemrograman berorientasi obyek adalah sekumpulan class-clas yang saling berintarksi. Ada banyak cara suatu class dapat berinteraksi dengan class lainnya, seperti pewarisan (GenSpec), agregasi (WholePart) dan asosiasi (instance/ message connection) TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 6 Konsep Lanjut Pemrograman Objek - 1 TI 1163 Pemrograman Berorientasi Objek Pewarisan Pewarisan Pegawai Harian - gajiHarian : int = 0 - hariKerja : int = 0 Pewarisan merupakan hubungan antar class dimana ciri-ciri dan sifat dari class induknya diturunkan ke class anaknya. + PegawaiHarian(nama:String, alamat:String, jumAnak:int, gajiHarian:int, hariKerja:int) + lihatData() Pegawai Pegawai - nama : String = “” - alamat : String = “” - jumAnak : int = 0 - noInduk : int = 0 - nama : String = “” - alamat : String = “” - jumAnak : int = 0 - noInduk : int = 0 + Pegawai(nama:String, alamat:String, jumAnak:int) + lihatData() + lihatNama() + Pegawai(nama:String, alamat:String, jumAnak:int) + lihatData() + lihatNama() Catatan: + (plus) = public, – (dash) = private, # (compound) = protected TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 7 TI1163 – Konsep Lanjut Pemrograman Objek Pewarisan © Restyandito - 8 Pewarisan Contoh: class Pegawai { private String nama; private String alamat; private int jumAnak; private int noInduk; public void lihatData() { System.out.print("nomor: " + this.noInduk); System.out.print("\tnama: " + this.nama); System.out.print("\t\talamat: " + this.alamat); System.out.print("\t\tanak: " + this.jumAnak + "\n\n"); } private static int no = 0; public Pegawai(String n, String a, int x) { this.nama = n; this.alamat = a; this.jumAnak = x; this.noInduk = ++no; } TI1163 – Konsep Lanjut Pemrograman Objek public void lihatNama() { System.out.println("\t\tnama: " + this.nama + "\n\n"); } } © Restyandito - 9 TI1163 – Konsep Lanjut Pemrograman Objek Pewarisan Pewarisan class PegawaiHarian extends Pegawai { int gajiHarian; int hariKerja; public PegawaiHarian(String n, String a, int x, int gaji, int hari) { super(n, a, x); this.gajiHarian = gaji; this.hariKerja = hari; } public class DataPegawai { public static void main(String[] args) { Pegawai emp1 = new Pegawai("Dini", "Jl.Markisa 26", 2); Pegawai emp2 = new Pegawai("Dono", "Jl.Solo 345",6); PegawaiHarian emp3 = new PegawaiHarian ("Dana", "Jl.Bulan 44", 8, 50000, 40); public void lihatData() { super.lihatData(); System.out.print("gaji: " + this.gajiHarian); System.out.print("\thari: " + this.hariKerja + "\n\n"); } } TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito © Restyandito - 10 emp1.lihatData(); emp2.lihatData(); emp3.lihatData(); emp3.lihatNama(); } } © Restyandito - 11 TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 12 Konsep Lanjut Pemrograman Objek - 2 TI 1163 Pemrograman Berorientasi Objek Polymorphism Polymorphism ( revisited ) ( revisited ) Dengan polymorphism, reference type dapat merupakan superclass dari object type yang digunakan Hewan Hewan[ ] binatang = new Hewan[5]; Hewan lumping = new Kuda() ; Anjing Anjing coki = new Anjing() ; Hewan coki = new Anjing() ; TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 13 binatang[0] = new Serigala(); binatang[1] = new Anjing(); binatang[2] = new Kucing(); binatang[3] = new KudaNil(); binatang[4] = new Singa(); for ( int i = 0; i < binatang.length; i++ ) { binatang[i].makan(); binatang[i].bersuara(); } TI1163 – Konsep Lanjut Pemrograman Objek Polymorphism © Restyandito - 14 Agregasi ( revisited ) Polymorphism memungkinkan pembuatan subclass baru, tanpa harus merubah program utama. class DokterHewan { public void menyuntik ( Hewan a) { // mengobati hewan a.bersuara() ; } } Suatu class dikatakan memiliki hubungan agregasi (aggregation) apabila kelas tersebut berisi sebuah obyek dari kelas lain. Agregasi secara umum menunjukkan suatu hubungan one-to-many atau dikenal dengan istilah WholePart. class PemilikHewan { public void memeriksakanHewan() { DokterHewan d = new DokterHewan(); Anjing a = new Anjing(); d.menyuntik(a); Kucing k = new Kucing(); d.menyuntik(k); } } TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 15 TI1163 – Konsep Lanjut Pemrograman Objek Agregasi Agregasi Mobil Roda Kursus Modul Suatu bentuk khusus dari agregasi adalah komposisi (composition), dimana suatu bagian dari class tidak dapat berdiri sendiri. Buku 1..* TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito © Restyandito - 16 Halaman 1..* © Restyandito - 17 TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 18 Konsep Lanjut Pemrograman Objek - 3 TI 1163 Pemrograman Berorientasi Objek Agregasi SerikatPegawai - namaOrganisasi : String = “” - alamatSekretariat : String = “” - noAktaPendirian : String = “” Contoh: import java.util.*; import java.util.Date; + lihatData() public class SerikatPegawai { private String NamaOrganisasi; private String AlamatSkretariat; public Pegawai pegawai; … } Pegawai -nama : String = “” -alamat : String = “” -noInduk : int = 0 public class Pegawai { private String nama; private String alamat; private int noInduk; … } + Pegawai(nama:String, alamat:String, jumAnak:int) + lihatData() + lihatNama() TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 19 Ketergantungan © Restyandito - 21 Multiplicity Array pada JAVA dapat menyimpan tipe apapun, termasuk numerik atau class Vector pada JAVA harus menyimpan obyek. Misalnya untuk menyimpan nilai int, maka harus dilakukan casting ke obyek Integer. © Restyandito Untuk menerapkan multiplicity n atau 1..* atau 0..* atau 1..n atau 0..n pada JAVA dapat digunakan beberapa pilihan, antara lain: array, class Vector dan class Collection. ARRAY Salah satu kelemahan dari array adalah pendefinisian jumlah elemen yang dapat ditampung pada suatu array bersifat terbatas pada saat runtime. TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 22 Multiplicity VECTOR Vector adalah obyek seperti array dengan jumlah elemen yang dinamis. Perbedaan antara vector dengan array: TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 20 Multiplicity Hubungan ketergantungan (dependency) menunjukkan bahwa suatu class membutuhkan class yang lain dalam melaksanakan operasinya. Jika dipahami secara logika hubungan ketergantungan memang sedikit berbeda dengan hubungan agregasi. TI1163 – Konsep Lanjut Pemrograman Objek TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 23 Untuk mendefinisikan sebuah vector digunakan perintah: Vector namaObyek = new Vector(jumlahElemenAwal); Setelah itu berikut beberapa method yang dapat digunakan untuk operasinya: size mengetahui jumlah elemen dalam vector addElement menambah elemen baru clear menghapus semua elemen vector elementAt(posisi) mengambil nilai elemen vector ke posisi setElementAt(posisi) menempatkan sebuah elemen obyek pada posisi tertentu removeElementAt(posisi) menghapus elemen dan menggeser ke bawah semua elemen di atasnya insertElementAt(obyek,posisi) menyisipkan satu elemen pada posisi TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 24 Konsep Lanjut Pemrograman Objek - 4 TI 1163 Pemrograman Berorientasi Objek Multiplicity Untuk menampilkan semua elemen dalam vektor dapat digunakan perulangan: for (int i= 0; i < ovector.size(); i++) { System.out.println(ovector.elementAt(i)); } Contoh: Pesanan + getTotal(): int 1 1..* Produk -kode: String -harga: int=100 TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 25 import java.util.*; class Produk { private String kode; private int harga = 100; public Pesanan pesanan; public String getKode() { return kode; } public void setKode(String _kode) { kode = _kode; } public int getHarga() { return harga; } public void setHarga(int _harga) { harga = _harga; } public Pesanan getPesanan() { return pesanan; } public void setPesanan(Pesanan pesanan) { if (this.pesanan != pesanan) { if (this.pesanan != null) this.pesanan.removeProduk(this); this.pesanan = pesanan; if (pesanan != null) pesanan.addProduk(this); } } } TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 26 Contoh: Pesanan.java Contoh: Pesanan.java import java.util.*; class Pesanan { private Vector produk = new Vector(); public Vector getProduk() { return produk; } public void addProduk(Produk produk) { boolean ada = false; for(int i=0; i<this.produk.size(); i++) { if(((Produk)this.produk.elementAt(i)) == produk) ada=true; } if (!ada) { this.produk.addElement(produk); produk.setPesanan(this); } } TI1163 – Konsep Lanjut Pemrograman Objek Contoh: Produk.java © Restyandito - 27 public void removeProduk(Produk produk) { for(int i=0; i<this.produk.size(); i++) { if(((Produk)this.produk.elementAt(i)) == produk) { this.produk.removeElementAt(i); produk.setPesanan((Pesanan)null); } } } public int getTotal() { int n = 0; for(int i=0; i<this.produk.size(); i++) { n += ((Produk)this.produk.elementAt(i)).getHarga(); } return n; } } TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 28 Error Handling Contoh: PesananProduk.java Pertama kali suatu class dibuat, tidak mungkin sempurna tanpa kesalahan. Jika terjadi kesalahan pemrogram dapat melakukan hal-hal berikut: 1. Tidak mengindahkan permasalahan 2. Cek hal-hal yang berpotensi menjadi masalah, dan membatalkan program saat menemukan masalah. 3. Cek hal-hal yang berpotensi menjadi masalah, ambil (catch) kesalahan dan mencoba memperbaiki persoalan 4. Membuat suatu pengecualian (throw exception) import java.util.*; public class PesananProduk { public static void main(String[] args) { Pesanan order = new Pesanan(); Produk p1 = new Produk(); p1.setKode("AA1234"); p1.setHarga(1200); Produk p2 = new Produk(); p2.setKode("AB5678"); p2.setHarga(5000); order.addProduk(p1); order.addProduk(p2); System.out.println(order.getTotal()); } } TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito © Restyandito - 29 TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 30 Konsep Lanjut Pemrograman Objek - 5 TI 1163 Pemrograman Berorientasi Objek Error Handling Error Handling Exception adalah adalah hal-hal tak terduga yang terjadi pada sistem. Exception adalah adalah hal-hal tak terduga yang terjadi pada sistem. try { try { // kemungkinan kode program yang salah // kemungkinan kode program yang salah } catch (Exception e) { } catch (Exception e) { // program untuk menangani kesalahan // program untuk menangani kesalahan } } TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 31 TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 32 Error Handling Referensi try { count = 0; count = 5 / count; } catch (Exception e) { System.out.println(e.getMessage()); count = 1; } System.out.println(“Exception telah dapat diatasi”); • Garrido, Jose M., Object Oriented Programming: From Problem Solvint to Java, Charles iver Mdia, Inc., 2003. hal 25-90 • Weisfeld, Matt, The Object-Oriented Thought Process, Developer’s Library, 2004. hal 5-28, 43-53 • Deitel H.M., Java How To Program, Prentice Hall, 2003. hal 341-500 • Hortsmann, Cay S., Core Java : Volume 1Fundamentals, Sun Microsystems Press, 1999. hal 105-224 Contoh: TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 33 TI1163 – Konsep Lanjut Pemrograman Objek © Restyandito - 34 The End terima kasih © Restyandito Konsep Lanjut Pemrograman Objek - 6