modul 09

11
Modul 09 : Pemrograman C# Page 1 of 11 Modul 09 – Kelas & Objek (Lanjutan) Indikator: Setelah mempelajari modul 08 ini, mahasiswa dapat: 1. Menjelaskan pengertian base-class dan subclass 2. Membuat subclass dari suatu class 3. Penggunaan kata kunci base 4. Melakukan override terhadap suatu method 5. Menggunakan kata kunci abstract Pengertian dan Perbedaan Base-class dan Subclass Pada modul sebelumnya, kita telah mempelajari cara pembuatan suatu class. Dalam C#, kita dapat membuat suatu kelas baru yang mewarisi sifat-sifat kelas yang ada. Kelas baru yang dibuat tersebut disebut subclass dan kelas yang mewariskan sifat disebut base-class. Subclass mewarisi data-data dan atribut dari base-class-nya, dan memiliki data-data dan atribut baru yang didefinisikan. Subclass juga dapat dibuat subclass lagi, dan seterusnya. Sebagai contohnya misalkan kita membuat kelas MakhlukHidup. Dari kelas MakhlukHidup, diturunkan suatu kelas misalnya kelas Binatang dan Tumbuhan. Dari kelas Binatang, dapat diturunkan lagi menjadi kelas Herbivora, Karnivora, dan Omnivora. Secara hirarki, kelas tersebut dapat diilustrasikan sebagai berikut: Bagan struktur kelas MakhlukHidup Cara Membuat Kelas Turunan (Subclass) Kerangka umum pembuatan class adalah: class SubClassName:Base-className { //isi kode untuk SubClass } MakhlukHidup Binatang Tumbuhan Herbivora Omnivora Karnivora

Upload: robin-layarso

Post on 25-Jan-2016

216 views

Category:

Documents


0 download

DESCRIPTION

io

TRANSCRIPT

Page 1: Modul 09

Modul 09 : Pemrograman C# Page 1 of 8

Modul 09 – Kelas & Objek (Lanjutan)

Indikator:

Setelah mempelajari modul 08 ini, mahasiswa dapat:

1. Menjelaskan pengertian base-class dan subclass2. Membuat subclass dari suatu class3. Penggunaan kata kunci base4. Melakukan override terhadap suatu method5. Menggunakan kata kunci abstract

Pengertian dan Perbedaan Base-class dan SubclassPada modul sebelumnya, kita telah mempelajari cara pembuatan suatu class. Dalam C#,

kita dapat membuat suatu kelas baru yang mewarisi sifat-sifat kelas yang ada. Kelas baru yang dibuat tersebut disebut subclass dan kelas yang mewariskan sifat disebut base-class.

Subclass mewarisi data-data dan atribut dari base-class-nya, dan memiliki data-data dan atribut baru yang didefinisikan. Subclass juga dapat dibuat subclass lagi, dan seterusnya.

Sebagai contohnya misalkan kita membuat kelas MakhlukHidup. Dari kelas MakhlukHidup, diturunkan suatu kelas misalnya kelas Binatang dan Tumbuhan. Dari kelas Binatang, dapat diturunkan lagi menjadi kelas Herbivora, Karnivora, dan Omnivora. Secara hirarki, kelas tersebut dapat diilustrasikan sebagai berikut:

Bagan struktur kelas MakhlukHidup

Cara Membuat Kelas Turunan (Subclass)Kerangka umum pembuatan class adalah:class SubClassName:Base-className { //isi kode untuk SubClass}

MakhlukHidup

Binatang Tumbuhan

Herbivora OmnivoraKarnivora

Page 2: Modul 09

Modul 09 : Pemrograman C# Page 2 of 8

Contoh Membuat Kelas TurunanBuatlah C# class baru, beri nama “TurunanBalok”, yang merupakan turunan dari kelas

Balok.01| public class TurunanBalok: Balok

02| {

03| double berat;

04| public double Berat {

05| set { berat = value;}

06| get { return berat;}

07| }

08| }

Kemudian buatlah kelas baru untuk menguji kelas baru TurunanBalok tersebut.01| public static void Main(string[] args)

02| {

03| TurunanBalok tb = new TurunanBalok();

04| tb.Berat = 5;

05| tb.CetakVolume();

06| Console.WriteLine("Berat = {0}",tb.Berat);

07| }

Tampilannya adalahVolume = 6Berat = 5

Pertanyaannya adalah: mengapa volume balok bernilai 6 ???

Penggunaan Kata Kunci basePenggunaan kata kunci base mengacu kepada kelas base-class. Jadi kita tidak perlu

menghapal nama kelas base dari kelas yang sedang dibuat. Penggunaan base biasanya dipakai untuk mengacu kepada constructor dari base-class maupun mengacu kepada base-class untuk memanggil method dari base-class. Sebagai contohnya perhatikan modifikasi kelas TurunanBalok berikut ini.

Sebelumnya, tambahkan terlebih dahulu method void cetakUkuran() ke kelas Balok.public void CetakUkuran() {

Console.WriteLine("panjang = {0}", Panjang); Console.WriteLine("lebar = {0}", Lebar); Console.WriteLine("tinggi = {0}", Tinggi); }

Lalu, ubahlah kelas TurunanBalok menjadi seperti berikut:01| public class TurunanBalok: Balok

02| {

03| double berat;

04| public double Berat {

05| set { berat = value;}

06| get { return berat;}

Page 3: Modul 09

Modul 09 : Pemrograman C# Page 3 of 8

07| }

08|

09| public TurunanBalok(): base()

10| {

11| berat = 1;

12| }

13| public TurunanBalok(double p, double l, double t): base(p,l,t)

14| {

15| berat = 1;

16| }

17| public TurunanBalok(double p, double l, double t, double b):base(p,l,t)

18| {

19| berat = b;

20| }

21| public new void CetakUkuran()

22| {

23| base.CetakUkuran();

24| Console.WriteLine("Berat = {0}",Berat);

25| }

26| }

Untuk mencoba kelas TurunanBalok tersebut, kita akan coba membuat program utamanya sebagai berikut.

01| public static void Main(string[] args)

02| {

03| TurunanBalok tb = new TurunanBalok(1,2,5,6);

04| tb.CetakVolume();

05| tb.CetakUkuran();

06|

07| Console.Write("Press any key to continue . . . ");

08| Console.ReadKey(true);

09| }

Tampilannya adalahVolume = 10Panjang = 1Lebar = 2Tinggi = 5Berat = 6Press any key to continue . . .

Page 4: Modul 09

Modul 09 : Pemrograman C# Page 4 of 8

Melakukan Override Terhadap suatu MethodSaat membuat kelas turunan, maka objek dari kelas turunan akan mewarisi data dan

method dari kelas base. Apabila dalam kelas turunan kita membuat method yang bernama yang sama dengan method kelas base, maka kedua method tersebut mungkin saja bersifat “dapat diakses (public)”. Oleh karena itu, maka C# akan “menyembunyikan (hiding)” semua nama method yang sama di dalam base class. Agar compiler tidak memberikan peringatan, maka kata kunci new ditambahkan di method CetakUkuran yang berada di kelas TurunanBalok.

Selain dengan menambahkan kata kunci new, kita juga dapat membuat method yang bernama yang sama dengan method di base class dengan cara “menimpa (override)” method yang ada di base class.

Kegunaan dari mengoverride suatu method adalah kadang-kadang kita merasa method yang diwarisi dari kelas base tidak cocok dengan kelas turunan yang dibuat, sehingga harus menyesuaikan method dengan kelas turunan baru.

Method yang dapat dioverride adalah method yang bersifat virtual. Jadi, pada kelas Balok, tambahkan kata kunci virtual pada method CetakUkuran() seperti berikut.

virtual public void CetakUkuran() {     Console.WriteLine("Panjang = {0}",Panjang);     Console.WriteLine("Lebar   = {0}",Lebar);     Console.WriteLine("Tinggi  = {0}",Tinggi);}

Kemudian untuk mengoverride method tersebut, pada kelas TurunanBalok, tambahkan kata kunci override pada method CetakUkuran() seperti berikut.

override public void CetakUkuran(){ base.CetakUkuran();   Console.WriteLine("Berat   = {0}",Berat);}

Kelas AbstrakKadang kala dalam sebuah kelas, kita hendak membuat method yang implementasinya

bergantung kepada kelas turunan. Dengan demikian, method yang demikian tidak memerlukan implementasi sama sekali. Method demikian dinamakan method abstract.

Apabila di dalam suatu kelas terdapat method abstract, maka kelas tersebut merupakan kelas abstract pula, dan harus ditambahkan kata kunci abstract di depan deklarasi kelas tersebut. Method abstrak harus bertingkat akses public atau protected, tidak boleh bertingkat akses private. Hal ini dikarenakan method abstrak harus diimplementasikan oleh kelas turunan sehingga jika bertingkat akses private, kelas tersebut tidak dapat diakses oleh kelas turunan.

Kelas abstract tidak dapat diinstansiasi (tidak dapat dibuat objek). Cara menggunakan kelas abstrak adalah dengan mendeklarasikan sebuah variabel bertipe kelas abstrak, kemudian variabel tersebut merujuk ke kelas turunan dari kelas abstrak tersebut. Untuk lebih jelasnya, perhatikanlah contoh pembuatan kelas abstrak dan turunannya, dan contoh pemakaiannya berikut ini.

Page 5: Modul 09

Modul 09 : Pemrograman C# Page 5 of 8

01| abstract public class Bangun2D

02| {

03| public string namaBangun;

04| int banyakSegi;

05|

06| //method abstrak yang tidak mempunyai implementasi

07| //method abstrak harus bersifat public

08| abstract public double Luas();

09| abstract public void CetakUkuran();

10|

11| //method non-abstrak

12| public void SetBanyakSegi(int n) {

13| banyakSegi = n;

14| }

15| }

Kelas turunannya:01| public class PersegiPanjang: Bangun2D

02| {

03| double p, l;

04|

05| //implementasi method abstrak Luas() dan CetakUkuran()

06| //untuk mengimplementasi, perlu ditambahkan kunci "override"

07| override public double Luas() {

08| return p * l;

09| }

10| override public void CetakUkuran() {

11| Console.WriteLine("Panjang = {0}",p);

12| Console.WriteLine("Lebar = {0}",l);

13| }

14| //constructor

15| public PersegiPanjang()

16| {

17| P = 1; L = 1;

18| namaBangun = "Persegi Panjang";

19| SetBanyakSegi(4);

20| }

21| public PersegiPanjang(double p, double l)

22| {

23| P = p;

24| L = l;

25| namaBangun = "Persegi Panjang";

26| SetBanyakSegi(4);

27| }

Page 6: Modul 09

Modul 09 : Pemrograman C# Page 6 of 8

28| public double P {

29| set {p = value;}

30| get {return p;}

31| }

32| public double L {

33| set {l = value;}

34| get {return l;}

35| }

36| }

Kelas turunannya yang lainnya:01| public class Lingkaran: Bangun2D

02| {

03| double r;

04| public double R

05| {

06| set {r = value;}

07| get {return r;}

08| }

09| //implementasi method abstrak

10| public override void CetakUkuran()

11| {

12| Console.WriteLine("jari-jari = {0}",r);

13| }

14| public override double Luas()

15| {

16| return Math.PI * Math.Pow(r,2);

17| }

18| //constructor

19| public Lingkaran()

20| {

21| R = 1;

22| namaBangun = "Lingkaran";

23| SetBanyakSegi(0);

24| }

25| public Lingkaran(double r)

26| {

27| R = r;

28| namaBangun = "Lingkaran";

29| SetBanyakSegi(0);

30| }

31| }

Page 7: Modul 09

Modul 09 : Pemrograman C# Page 7 of 8

Contoh Pemakaiannya:01| public static void Main(string[] args)

02| {

03| //mendeklarasikan

04| Bangun2D bangun;

05|

06| //menciptakan objek turunan

07| PersegiPanjang pp = new PersegiPanjang(2,5);

08| Lingkaran lingk = new Lingkaran(10);

09|

10| //bangun dirujuk ke pp

11| bangun = pp;

12| Console.WriteLine("Nama Bangun : {0}",bangun.namaBangun);

13| bangun.CetakUkuran();

14| Console.WriteLine("Luas = {0}",bangun.Luas());

15| Console.WriteLine();

16|

17| //bangun dirujuk ke lingk

18| bangun = lingk;

19| Console.WriteLine("Nama Bangun : {0}",bangun.namaBangun);

20| bangun.CetakUkuran();

21| Console.WriteLine("Luas = {0}",bangun.Luas());

22|

23| Console.Write("Press any key to continue . . . ");

24| Console.ReadKey(true);

25| }

Tampilannya adalah:Nama Bangun : Persegi PanjangPanjang = 2Lebar = 5Luas = 10

Nama Bangun : Lingkaranjari-jari = 10Luas = 314.159265358979Press any key to continue . . .

Pada program di atas, kita membuat kelas Bangun2D yang merupakan kelas abstrak dan mempunyai 2 method abstrak, yaitu (1) double Luas() dan (2) void CetakUkuran(). Kemudian dibuat kelas turunan dari Bangun2D, yaitu (1) kelas PersegiPanjang dan (2) kelas Lingkaran.

Oleh karena Bangun2D mempunyai 2 method abstrak, maka kedua method abstrak tersebut harus diimplementasikan dalam kelas PersegiPanjang maupun kelas Lingkaran. Dalam kelas turunan, kita bebas memberikan data baru maupun method baru. Namun harus diingat bahwa kelas turunan mewarisi data dan method dari kelas base.

Page 8: Modul 09

Modul 09 : Pemrograman C# Page 8 of 8

Perhatikan bahwa method Luas() dan CetakUkuran() sangat bergantung kepada kelas turunan. Dalam kelas PersegiPanjang, implementasi method tersebut berbeda dengan implementasi pada kelas Lingkaran.

Pada program PemakaianKelasBangun2D, pertama-tama dideklarasikan suatu variabel bangun yang bertipe Bangun2D. Ingat bahwa kita tidak dapat membuat objek bangun, karena kelas Bangun2D merupakan kelas abstrak.

Kemudian kita membuat 2 objek, yaitu objek pp bertipe PersegiPanjang, dan objek lingk bertipe Lingkaran. Saat pembuatan objek, kita mendefinisikan bahwa pp berukuran 2x5, sedangkan lingk mempunyai jari-jari 10.

Perhatikan bahwa bangun dapat dirujuk ke objek pp maupun lingk (baris ke 11 dan 18). Saat dirujuk ke objek berbeda, maka bangun mempunyai perilaku sesuai dengan objek yang dirujuknya (baris ke-12 s/d 14 sama dengan baris ke-19 s/d 21, namun memberikan hasil output yang berbeda).