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?