8 fitur oo lanjutan (a)

Post on 09-Jul-2015

613 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Fitur OO Lanjutan Java

Sufian IdrisMarini Abu Bakar

Jabatan Sains Komputer

Pengenalan

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

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”);

}}

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

• Terdapat dua cara untuk melakukan pengawalan atribut pada masa penciptaan objek:– Menspesifikasi nilai awal atribut pada

pengisytiharannya dalam takrifan kelas– Metod pembina (constructor)

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;}

}

• Bagi setiap objek Tabung yang dicipta, nilai atribut sen objek tersebut diawalkan kepada 0.

for (int i=0; i < 3; i++)new Tabung( );

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

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

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

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

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

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( );

}}

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(":>");

}

}

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

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(":>");

}

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

• 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(":>");

}

}

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

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, '=');

}

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.

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

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

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

• Metod pembina kerap disaratkan. Dengan itu, klien boleh memilih metod pembina yang sesuai untuk dilaksanakan dalam penciptaan suatu objek.

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

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

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

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.

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!

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

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!!

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!!

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

Hubungan Pewarisan

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

Pengangkutan

Pengangkutan

PengangkutanUdara

Pengangkutan

PengangkutanUdara

PengangkutanLaut

Pengangkutan

PengangkutanUdara

PengangkutanDarat

PengangkutanLaut

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

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

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

Pengangkutan

kelajuan

getKelajuan( )

Pengangkutan Udara

ketinggian

terbang( )

Atribut

Perlakuan

kelajuan

getKelajuan()

terbang()

ketinggian

bersambung....

top related