8 fitur oo lanjutan (a)

44
Fitur OO Lanjutan Java Sufian Idris Marini Abu Bakar Jabatan Sains Komputer

Upload: madzani-nusa

Post on 09-Jul-2015

610 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: 8   Fitur Oo Lanjutan (A)

Fitur OO Lanjutan Java

Sufian IdrisMarini Abu Bakar

Jabatan Sains Komputer

Page 2: 8   Fitur Oo Lanjutan (A)

Pengenalan

• Tajuk berikut akan dibincangkan:– Metod pembina– Penyaratan metod– Kawalan capaian– Hubungan pewarisan– Pensubkelasan– Pembatalan metod– Polimorfisma

Page 3: 8   Fitur Oo Lanjutan (A)

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)

• 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)

• 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)

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)

• 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)

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)

• 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)

• 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)

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)

• 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)

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)

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)

}

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)

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)

• 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)

• 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)

}

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)

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)

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)

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)

• 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)

• 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)

• 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)

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)

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)

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)

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)

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)

• 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)

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)

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)

• 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)

Hubungan Pewarisan

• Hubungan pewarisan boleh dipandang sebagai hubungan diantara kategori objek dengan subkategori-subkategorinya. – Contoh..

Page 36: 8   Fitur Oo Lanjutan (A)

Pengangkutan

Page 37: 8   Fitur Oo Lanjutan (A)

Pengangkutan

PengangkutanUdara

Page 38: 8   Fitur Oo Lanjutan (A)

Pengangkutan

PengangkutanUdara

PengangkutanLaut

Page 39: 8   Fitur Oo Lanjutan (A)

Pengangkutan

PengangkutanUdara

PengangkutanDarat

PengangkutanLaut

Page 40: 8   Fitur Oo Lanjutan (A)

• Hubungan pewarisan juga dikenali sebagai hubungan “is-a”. – Contoh...

Page 41: 8   Fitur Oo Lanjutan (A)

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)

• 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)

Pengangkutan

kelajuan

getKelajuan( )

Pengangkutan Udara

ketinggian

terbang( )

Atribut

Perlakuan

kelajuan

getKelajuan()

terbang()

ketinggian

Page 44: 8   Fitur Oo Lanjutan (A)

bersambung....