Download - 8 Fitur Oo Lanjutan (A)
![Page 1: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/1.jpg)
Fitur OO Lanjutan Java
Sufian IdrisMarini Abu Bakar
Jabatan Sains Komputer
![Page 2: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/2.jpg)
Pengenalan
• Tajuk berikut akan dibincangkan:– Metod pembina– Penyaratan metod– Kawalan capaian– Hubungan pewarisan– Pensubkelasan– Pembatalan metod– Polimorfisma
![Page 3: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/3.jpg)
Metod Pembina
• Pertimbangkan takrifan kelas berikut:class Akaun {
private String nbrAkaun;private boolean aktif;private String pemilik;
public void paparInfo( ) {System.out.println(“Nombor akaun: “+nbrAkaun);System.out.println(“Pemilik: “+pemilik);System.out.print(“Status: “);if (!aktif)
System.out.print(“TIDAK “);System.out.println(“AKTIF”);
}}
![Page 4: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/4.jpg)
• Apakah yang berlaku jika kod berikut dilaksanakan?
Akaun akaunBaru = new Akaun( );akaunBaru.paparInfo( );
• Satu teknik untuk menangani masalah ini adalah memperkenalkan suatu metod yang tujuannya untuk mengawalkan (initialize) atribut objek. Contoh..
Akaun akaunBaru = new Akaun( );akaunBaru.pengawalan(“010-99333-03”,
“Nada Asyiqin”, true);akaunBaru.paparInfo( );
• Apakah kelemahan pendekatan ini?
![Page 5: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/5.jpg)
• Terdapat dua cara untuk melakukan pengawalan atribut pada masa penciptaan objek:– Menspesifikasi nilai awal atribut pada
pengisytiharannya dalam takrifan kelas– Metod pembina (constructor)
![Page 6: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/6.jpg)
Menspesifikasi nilai awal atribut
class Tabung {private int sen = 0;private String pemilik = null;
public void masuk(int jumSen) {sen += jumSen;
}public void keluar(int jumSen) {
sen -= jumSen;}
}
![Page 7: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/7.jpg)
• Bagi setiap objek Tabung yang dicipta, nilai atribut sen objek tersebut diawalkan kepada 0.
for (int i=0; i < 3; i++)new Tabung( );
![Page 8: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/8.jpg)
Metod pembina (constructor)class Tabung {
private int sen;private String pemilik;
public Tabung( ) {sen = 0;pemilik = null;
}public void masuk(int jumSen) {
sen += jumSen;}public void keluar(int jumSen) {
sen -= jumSen;}
}
Metod pembina
![Page 9: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/9.jpg)
• Metod pembina dilaksanakan setiap kali suatu objek Tabung dicipta. Semasa perlaksanaan metod ini, nilai atribut sen objek Tabung yang dicipta diawalkan kepada 0.
• Perhatikan sekarang perlaksanaan kod berikut:
for (int i=0; i < 3; i++)new Tabung( );
![Page 10: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/10.jpg)
• Metod pembina adalah suatu metod istimewa yang sesuai untuk meletakkan kod pengawalan yang perlu dilaksanakan oleh objek pada masa ia dicipta.
• Metod pembina tidak boleh mengembalikan apa-apa di akhir perlaksanaannya. Malah, sintaksnya tidak ada jenis kembali.
• Satu lagi kekangan: nama metod pembina mestilah sama dengan nama kelas.
• Metod pembina boleh juga diparameterkan. Untuk suatu objek melaksanakan metod pembina yang berparameter, nilai bagi setiap parameter metod itu perlu dihulurkan semasa penciptaan objek tersebut.
![Page 11: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/11.jpg)
Contoh:class Tabung {
private int sen;private String pemilik;
public Tabung(int nilaiSen, String nama) {sen = nilaiSen;pemilik = nama;
}public void masuk(int jumSen) {
sen += jumSen;}public void keluar(int jumSen) {
sen -= jumSen;}
}
parameter
![Page 12: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/12.jpg)
• Kod berikut menunjukkan satu contoh penciptaan objek Tabung.
Tabung tabungAdik = new Tabung(100, “Raziq”);
• Setiap kelas mesti menakrifkan sekurang-kurangnya satu metod pembina.
• Sekiranya pengaturcara tidak menakrifkan sebarang metod pembina untuk suatu kelas, maka pengkompil Java akan menakrifkan satu metod pembina lalai (default constructor) untuk kelas tersebut.
• Metod pembina lalai ini adalah suatu metod kosong tanpa sebarang parameter.
![Page 13: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/13.jpg)
Contoh:class Akaun {
private String nbrAkaun;private boolean aktif;private String pemilik;public Akaun(String nomborAkaun, String nama) {
nbrAkaun = nomborAkaun;pemilik = nama;aktif = false;
}public void paparInfo( ) {
System.out.println(“Nombor akaun: “+nbrAkaun);System.out.println(“Pemilik: “+pemilik);System.out.print(“Status: “);if (!aktif)
System.out.print(“TIDAK “);System.out.println(“AKTIF”);
}public static void main(String[ ] args) {
Akaun akaun = new Akaun(“010-99333-03”, “Nada Asyiqin”);akaun.paparInfo( );
}}
![Page 14: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/14.jpg)
Penyaratan Metod• Pertimbangkan segmen kod berikut:
class Cacing {
private int panjang;private char aksara;
public Cacing(int pjg, char aks) {panjang = pjg;aksara = aks;
}
private void paparBadan(int aks) {for (int i=0; i < panjang; i++)
System.out.print(aks);}
private void paparKepala() {System.out.print(":>");
}
![Page 15: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/15.jpg)
}
public void papar1() {paparBadan(aksara);paparKepala();
}
public void papar2(char aks) {paparBadan(aks);paparKepala();
}
public void papar3(int faktor, char aks) {for (int i=0; i < faktor; i++)
paparBadan(aks);paparKepala();
}
Metod untuk memapar objek cacing
![Page 16: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/16.jpg)
class Aplikasi {
}
public static void main(String[] args) {Cacing cacing = new Cacing(3, 'x');cacing.papar1();System.out.println();cacing.papar2('*');System.out.println();cacing.papar3(3, '=');
}
Output yang diperolehi:xxx:>***:>= = = = = = = = = :>
public void papar1() {paparBadan(aksara);paparKepala();
}public void papar2(char aks) {paparBadan(aks);paparKepala();
}public void papar3(int faktor, char aks) {
for (int i=0; i < faktor; i++)paparBadan(aks);
paparKepala();}
private void paparBadan(int aks) { for (int i=0; i < panjang; i++) System.out.print(aks);}
private void paparKepala() {System.out.print(":>");
}
![Page 17: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/17.jpg)
• Ketiga-tiga metod papar1(), papar2() dan papar3() sebenarnya melakukan tugas yang sama: memaparkan objek Cacing. Alangkah cantiknya jika kita boleh gunakan nama yang sama.
• Ini boleh dilakukan dalam Java kerana adanya sokongan penyaratan metod. Menyarat metod bermaksud menggunakan nama yang sama untuk lebih daripada satu metod dalam suatu kelas.
![Page 18: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/18.jpg)
• Contoh 1:– Tulis semula aturcara:
class Cacing {
private int panjang;private char aksara;
public Cacing(int pjg, char aks) {panjang = pjg;aksara = aks;
}
private void paparBadan(int aks) {for (int i=0; i < panjang; i++)
System.out.print(aks);}
private void paparKepala() {System.out.print(":>");
}
![Page 19: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/19.jpg)
}
public void papar() {paparBadan(aksara);paparKepala();
}
public void papar(char aks) {paparBadan(aks);paparKepala();
}
public void papar(int faktor, char aks) {for (int i=0; i < faktor; i++)
paparBadan(aks);paparKepala();
}
Penyaratan metod : nama metod yang sama
![Page 20: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/20.jpg)
class Aplikasi {
}
public static void main(String[] args) {Cacing cacing = new Cacing(3, 'x');cacing.papar();System.out.println();cacing.papar('*');System.out.println();cacing.papar(3, '=');
}
![Page 21: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/21.jpg)
Contoh 2:• Metod println() sebenarnya telah disaratkan
dalam kelasnya.int pbhInt;double pbhDbl;System.out.println("UKM");System.out.println('X');System.out.println(pbhInt);System.out.println(pbhDbl);
• Metod-metod yang diberikan nama yang sama dalam suatu takrifan kelas mesti dapat dibezakan oleh Java. Dalam hal ini, Java menggunakan maklumat jenis dan urutan parameternya.
![Page 22: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/22.jpg)
class Ujian {
}
public void output(double x) {System.out.println("versi double");
}
public void output(float x) {System.out.println("versi float");
}
public void output(double x, String y) {System.out.println("versi double, String");
}
public static void main(String[] args) {Ujian u = new Ujian();u.output(3.3);u.output(3.3f);u.output('k');u.output(5.2, "cuba");//u.output("RALAT");
}ralat pengkompilan
versi double
versi float
versi float
versi double, String
guna pengacuan automatik char => int => float
![Page 23: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/23.jpg)
• Outputnya:versi doubleversi floatversi floatversi double, String
• Perhatikan kenyataan yang dikomenkan dalam metod main( ) di atas adalah suatu ralat kerana metod output(String) tidak ditakrifkan untuk objek Ujian.
![Page 24: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/24.jpg)
• Perhatikan juga bahawa u.output('k');
menyebabkan metod output(float) dilaksanakan. Oleh kerana tidak ada metod output(char), maka Java akan menggunakan pengacuan automatik (automatic casting) ke atas parameter sebenar untuk menentukan metod yang terhampir.output(char) => output(int) => output(float)
![Page 25: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/25.jpg)
• Metod pembina kerap disaratkan. Dengan itu, klien boleh memilih metod pembina yang sesuai untuk dilaksanakan dalam penciptaan suatu objek.
![Page 26: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/26.jpg)
Contoh 1:class Segiempat {
…}
public Segiempat() {lebar = 1;tinggi = 1;
}
public Segiempat(int saiz) {lebar = saiz;tinggi = saiz;
}
public Segiempat(int lb, int tg) {lebar = lb;tinggi = tg;
}
private int lebar, tinggi;
Metod pembina disaratkan
![Page 27: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/27.jpg)
class Aplikasi {
}
public static void main(String[] args) {Segiempat sg4a = new Segiempat();Segiempat sg4b = new Segiempat(5);Segiempat sg4c = new Segiempat(3, 4);...
}
Boleh pilih metod pembina yang sesuai
![Page 28: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/28.jpg)
Contoh 2:• Kelas pustaka Date dalam pakej java.util
menakrifkan beberapa metod pembina:public Date();public Date(long milisaat);public Date(int tahun, int bulan, int hari);public Date(int tahun, int bulan, int hari, int jam, int
minit);public Date(int tahun, int bulan, int hari, int jam, int
minit, int saat);
![Page 29: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/29.jpg)
Kawalan Capaian
• Kawalan capaian adalah berkaitan dengan skop: – Bagi pemboleh ubah ahli, ia menentukan kawasan
kod aturcara yang mana nilainya boleh dicapai. – Bagi metod ahli suatu kelas, ia menentukan
kawasan kod aturcara yang mana mesej bagi metod itu boleh dihantar kepada objek daripada kelas tersebut.
• Terdapat tiga kawalan capaian yang disediakan oleh Java iaitu private, protected dan public. Kawalan capaian protected akan diterangkan kemudian.
![Page 30: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/30.jpg)
Kawalan Capaian private• Pertimbangkan kod aturcara di bawah:
class Wang{
}
public Wang(int r, int s) {ringgit = r; sen = s;System.out.println("Jumlah sen: "+jumlahSen());
}
private int jumlahSen() {return 100*ringgit+sen;
}
private int ringgit, sen;
OK!
![Page 31: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/31.jpg)
• Atribut private hanya boleh dicapai dalam kelasnya.
• Penghantaran mesej untuk melaksanakan metod private hanya boleh dilakukan di dalam kelas metod tersebut.
class Aplikasi {
}
public static void main(String[] args) {Wang wang = new Wang(5, 20);wang.ringgit = -100;System.out.println("Jumlah sen: "+wang.jumlahSen());
}
RALAT!
![Page 32: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/32.jpg)
Kawalan Capaian public• Pertimbangkan pula kod aturcara di bawah:
class Wang{
}
public Wang(int r, int s) {ringgit = r; sen = s;System.out.println("Jumlah sen: "+jumlahSen());
}
public int jumlahSen() {return 100*ringgit+sen;
}
public int ringgit, sen;
OK!
YUK!!
![Page 33: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/33.jpg)
class Aplikasi {
}
public static void main(String[] args) {Wang wang = new Wang(5, 20);wang.ringgit = -100;System.out.println("Jumlah sen: "+wang.jumlahSen());
}
OK!
YUK!!
![Page 34: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/34.jpg)
• Atribut public boleh dicapai di dalam dan di luar kelasnya.
• Atribut objek TIDAK digalakkan diisytiharkan sebagai public kerana ini bercanggah dengan prinsip pengkapsulan.
• Penghantaran mesej untuk melaksanakan metod public boleh dilakukan di dalam dan di luar kelas metod tersebut.
![Page 35: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/35.jpg)
Hubungan Pewarisan
• Hubungan pewarisan boleh dipandang sebagai hubungan diantara kategori objek dengan subkategori-subkategorinya. – Contoh..
![Page 36: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/36.jpg)
Pengangkutan
![Page 37: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/37.jpg)
Pengangkutan
PengangkutanUdara
![Page 38: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/38.jpg)
Pengangkutan
PengangkutanUdara
PengangkutanLaut
![Page 39: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/39.jpg)
Pengangkutan
PengangkutanUdara
PengangkutanDarat
PengangkutanLaut
![Page 40: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/40.jpg)
• Hubungan pewarisan juga dikenali sebagai hubungan “is-a”. – Contoh...
![Page 41: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/41.jpg)
Pengangkutan
Pengangkutan Laut
Pengangkutan Darat
Pengangkutan Udara
Hubungan pewarisan
Objek Pengangkutan Laut “is a” Pengangkutan
Objek Pengangkutan Darat “is a” Pengangkutan
Objek Pengangkutan Udara “is a” Pengangkutan
![Page 42: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/42.jpg)
• Berdasarkan kepada maksud hubungan “is-a”, setiap objek daripada suatu subkategori akan memiliki atribut dan perlakuan kategori induknya disamping atribut dan perlakuan subkategori tersebut. – Contoh...
• Suatu hirarki pewarisan boleh dibina menerusi proses pengitlakan (generalization) atau pengkhususan (specialization).
![Page 43: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/43.jpg)
Pengangkutan
kelajuan
getKelajuan( )
Pengangkutan Udara
ketinggian
terbang( )
Atribut
Perlakuan
kelajuan
getKelajuan()
terbang()
ketinggian
![Page 44: 8 Fitur Oo Lanjutan (A)](https://reader034.vdocuments.net/reader034/viewer/2022050818/559e05c81a28aba6428b45d7/html5/thumbnails/44.jpg)
bersambung....