Apakah Class itu?

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.

Apakah Anda menyukai post ini? Mengapa tidak memberikan komentar di bawah dan melanjutkan perbincangan, atau berlangganan my feed dan dapatkan artikel semacam ini yang dikirm secara otomatis feed reader Anda.
Harap diperhatikan bahwa komentar atau pertanyaan yang disampaikan haruslah sesuai dengan topik yang sedang dibahas. Komentar atau pertanyaan yang tidak sesuai dengan topik akan kami hapus :!:

Tinggalkan komentar

Sebelum membuat komentar, pastikan Anda telah membaca komentar-komentar sebelumnya. Jangan membuat pertanyaan yang telah ditanyakan. Perhatikan pula link-link dalam artikel. Lihatlah link tersebut sebelum membuat pertanyaan, karena mungkin penjelasan dari pertanyaan Anda telah di jawab dalam link tersebut.

Komentar yang tidak mengikuti aturan ini akan dihapus!

(wajib)

(wajib)


Time limit is exhausted. Please reload the CAPTCHA.