Sebenarnya object merupakan tipe yang hanya digunakan sebagai kompatibilitas dengan versi-versi awal. Untuk versi yang lebih baru sebaiknya menggunakan class. Akan tetapi tipe class selalu merupakan pointer. Jadi deklarasi terhadap variabel dengan tipe class hanya menyediakan pointer untuk obyeknya, tidak sekaligus membuat obyeknya. Sedangkan untuk membuat obyek dengan tipe class tidak dilakukan dengan new(NamaObyek) tetapi dengan NamaObyek:=TipeClass.Create. Demikian juga untuk menghapus obyek dari memori, perintah yang digunakan adalah NamaObyek.Free;. Untuk selanjutnya kita hanya akan membahas tentang class.
HariLahir dengan Class
Perhatikan cara pembuatan class dan penggunaannya pada contoh berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | program HariLahir6; {$APPTYPE CONSOLE} type TNamaBulan=(Januari=1, Pebruari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, Nopember, Desember); TClassTanggal=class Tanggal:integer; Bulan:TNamaBulan; Tahun:integer; procedure AmbilTanggal; function JumlahHari:integer; function NamaHari:string; end; const Hari:array[0..6]of string= ('Minggu','Senin','Selasa','Rabu', 'Kamis','Jumat','Sabtu'); HariPertama=5; var TglLahir:TClassTanggal; //---implementasi TClassTanggal------------------ procedure TClassTanggal.AmbilTanggal; var tmp:integer; begin Write('Tanggal ?: '); Readln(Tanggal); Write('Bulan ? : '); Readln(tmp); Bulan:=TNamaBulan(tmp); Write('Tahun ? : '); Readln(Tahun); end; function IsKabisat(Y:integer):boolean; begin result:=((Y mod 4=0)and(Y mod 100<>0)) or(Y mod 400=0); end; function TClassTanggal.JumlahHari:integer; function HariDlmBulan(B:TNamaBulan):integer; begin case B of Januari,Maret,Mei,Juli,Agustus, Oktober,Desember:result:=31; April,Juni,September,Nopember:result:=30; Pebruari:if IsKabisat(Tahun) then result:=29 else result:=28; end; end; var i:TNamaBulan; ii:integer; begin result:=0; //Hitung hari dalam tahun for ii:=0 to Tahun-1 do if IsKabisat(ii)then result:=result+366 else result:=result+365; //tambahkan dengan sisa hari for i:=Januari to Pred(Bulan)do result:=result+HariDlmBulan(i); result:=result+Tanggal; end; function TClassTanggal.NamaHari:string; var i:integer; begin i:=(JumlahHari+HariPertama)mod 7; result:=Hari[i]; end; //--------------------------------------------- procedure DisplayHari(Tgl:TClassTanggal); begin Writeln('Anda lahir hari ',Tgl.NamaHari); end; procedure AmbilData; begin Writeln('**Semua data dalam angka**'#13#10); Writeln('Masukkan data tanggal lahir'); TglLahir.AmbilTanggal; end; begin //membuat obyek TglLahir:=TClassTanggal.Create; AmbilData; DisplayHari(TglLahir); //menghapus obyek TglLahir.Free; Writeln('Tekan Enter'); Readln; end. |
Class dan obyek
Class (versi baru dari object) adalah sebuah cara untuk membuat batasan-batasan definisi untuk sebuah obyek (instan dari object). Sebagai contoh, class manusia memiliki batasan-batasan seperti punya dua tangan, dua kaki, dua mata, dua lubang hidung, dua telinga, suka makan, bisa berbicara, tertawa jika mendengar cerita lucu, dan lain-lain. Budi adalah obyek dari class manusia. Oleh karena itu Budi juga memiliki dua tangan, dua kaki, dua mata, dua lubang hidung, dua telinga, suka makan, bisa berbicara, dan tertawa jika mendengar cerita lucu.
Obyek tersusun dari obyek lain
Budi memiliki dua tangan. Tangan juga merupakan obyek. Class tangan memiliki batasan-batasan seperti memiliki lengan atas, lengan bawah, lima jari, bisa memengang, dan sebagainya. Jadi obyek tangan juga memiliki lima jari dimana jari juga merupakan obyek. Tingkatan-tingkatan ini bisa Anda teruskan sesuai dengan kebutuhan klasifikasi.


