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:

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.

Time limit is exhausted. Please reload the CAPTCHA.

Beritahu saya melalui email jika ada balasan komentar di artikel ini. Anda juga dapat berlangganan tanpa harus memberi komentar.