tanggal = tanggal; bulan = bulan; tahun = tahun; return t;

Jurusan Teknik Informatika - Unijoyo 1 2 4 metode tambahan bernama copy public TTanggal copy { TTanggal t = new TTanggal; t.tanggal = tanggal; t.bulan = bulan;

t.tahun = tahun; return t;

} } public class TestTanggal02 { public static void main String[] args { TTanggal tanggal1 = new TTanggal1, 10, 2007; TTanggal tanggal2 = tanggal1.copy; System.out.printlntanggal1: + tanggal1; System.out.printlntanggal2: + tanggal2; System.out.println“Pernyataan : tanggal2.setTanggal3;; tanggal2.setTanggal3; System.out.printlntanggal1: + tanggal1; System.out.printlntanggal2: + tanggal2; } } • Keluaran dari program adalah : tanggal1: 1, 10, 2007 tanggal2: 1, 10, 2007 Pernyataan : tanggal2.setTanggal3; tanggal1: 1, 10, 2007 tanggal2: 3, 10, 2007 Diktat - Pemrograman Berorientasi Obyek 2007 1 2 5 Latihan • Apa keluaran kode berikut? Gambarkan status memory selama eksekusi program TTanggal tanggal1 = new TTanggal1, 10, 2000; TTanggal tanggal2 = tanggal1.copy; System.out.printlntanggal1: + tanggal1; System.out.printlntanggal2: + tanggal2; System.out.printlnPernyataan: tanggal2.setTanggal3;; tanggal2.setTanggal3; tanggal2 = tanggal1; tanggal1 = tanggal2.copy; System.out.printlntanggal1: + tanggal1; System.out.printlntanggal2: + tanggal2; Contoh: Class Orang public class Orang { private static final String NO_NAME = “NONAME”; private String nama; private int tinggi; private TTanggal tanggalLahir; public Orang { nama = NO_NAME; tinggi = 0; tanggalLahir = new TTanggal; } public OrangString n, int t { nama = n; tinggi = t; tanggalLahir = new TTanggal; } public OrangString n, int t, TTanggal tg { thisn, t; tanggalLahir = tg; } public void setNamaString n { nama = n; } public void setTinggiint t { tinggi = t; } public String getNama { return nama; } public int getTinggi { return tinggi; } Jurusan Teknik Informatika - Unijoyo 1 2 6 public void setTanggalLahirTTanggal tg { tanggalLahir = tg; } public TTanggal getTanggalLahir { return tanggalLahir; } public String toString { return +nama+, +tinggi+, +tanggalLahir+; } } Obyek Dalam Obyek • Pemakaian class Orang: public class TestOrang { public static void main String[] args { TTanggal tanggal1 = new TTanggal13, 4, 2005; Orang orang = new Orang“MAysarA”, 120, tanggal1; System.out.println“orang: “ + orang; TTanggal tanggal2 = orang.getTanggalLahir; System.out.println“tanggal2: “ + tanggal2; } } • Keluaran yang diperoleh: orang: MAysarA, 120, 13, 4, 2005 tanggal2: 13, 4, 2005 • Status memory saat eksekusi adalah Diktat - Pemrograman Berorientasi Obyek 2007 1 2 7 Deep Copy Dalam Class Orang • Constructor Orang membuat suatu shallow copy dari instance TTanggal yang dilewatkan ke dirinya: public OrangString n, int t, TTanggal tg { thisn, t; tanggalLahir = tg; } • Pendekatan ini sebaiknya tidak diteruskan, karena dapat menyebabkan kesalahan, secara tidak sengaja. • Perubahan terhadap tanggal1 dan tanggal2 juga mempengaruhi atribut tanggalLahir. • Salah satu solusinya adalah menggunakan anonymous reference: Orang orang = new Orang“MAysarA”,120, new TTanggal13,4,2005; • Sehingga referensi ke obyek TTanggal hanya dari atribut tanggalLahir dari Orang. • Atau dapat digunakan deep copy dalam metode terkait: public TTanggal.getTanggalLahir { return tanggalLahir.copy; } public OrangString n, int t, TTanggal tg { thisn, t; tanggalLahir = tg.copy; } public void setTanggalLahirTTanggal tg { tanggalLahir = tg.copy; } • Umumnya, deep copy lebih disukai daripada shallow copy. Information Hiding Komposisi Obyek • Class TTanggal dapat disembunyikan di dalam class Orang dengan menyediakan metode di dalam Orang yang mengambil parameter untuk kedua class : Jurusan Teknik Informatika - Unijoyo 1 2 8 public class Orang { private String nama; private int tinggi; private TTanggal tanggalLahir; public OrangString n, int t, int tg, int bl, int th { nama = n; tinggi = t; tanggalLahir = new TTanggaltg, bl, th; } public void setTanggalLahirint tg, int bl, int th { tanggalLahir = new TTanggaltg, bl, th; } public int getTanggalLahir { return tanggalLahir.getTanggal; } public int getBulanTanggalLahir { return tanggalLahir.getBulan; } public int getTahunTanggalLahir { return tanggalLahir.getTahun; } } • Q. Apa keuntungan dan kerugian penerapan teknik Information Hiding di atas? Array Obyek • Deklarasi variabel array standar adalah : int[] number = new int[5]; • Dengan cara sama, dapat dideklarasikan array yang akan menampung 5 obyek orang, sebagai berikut Orang[] tabelOrang = new Orang[5]; • Terlihat bahwa variabel bertipe Orang[] array Orang merujuk ke suatu blok elemen bertipe Orang. • Setelah deklarasi ini, obyek tabelOrang hanya berisi suatu array yang tidak diketahui referensinya, null. Diktat - Pemrograman Berorientasi Obyek 2007 1 2 9 • Konstruktor untuk suatu array telah dijalankan tetapi instance Orang belum dibuat karena konstruktor Orang tidak dijalankan • Q. Diberikan situasi di atas, apa hasil dari pernyataan berikut?