TObject

Semua class di dalam Delphi adalah turunan dari TObject. Jadi definisi tipe class seperti

  TGambar=class

Memiliki arti yang sama dengan

  TGambar=class(TObject)

Constructor dan destructor

Constructor adalah method khusus yang berguna untuk pembuatan obyek. Biasanya constructor diberi nama Create. Pembuatan obyek yang sudah biasa kita lakukan adalah pemanggilan terhadap constructor yang telah didefinisikan di dalam TObject. Dengan demikian setiap class akan mempunyai method Create.

Destructor adalah kebalikan dari constructor. Destructor adalah method khusus yang dipanggil untuk membuang obyek. Saat kita memanggil method Free, maka destructor akan dipanggil. Destructor biasanya diberi nama Destroy.

Seperti pada method-method lain, constructor dan destructor juga bisa dibuat supaya memiliki implementasi yang berbeda dengan leluhurnya. Destroy bersifat virtual. Jadi Anda harus menambahkan override jika akan membuat Destroy pada class buatan Anda. Sedangkan Create bersifat static (tanpa virtual). Jadi jika Anda membuat class turunan langsung dari TObject, maka Anda tidak bisa menambahkan override untuk Create yang Anda definisikan sendiri. Akan tetapi pada class-class dibawahnya, banyak yang telah menerapkan Create sebagai virtual. Jadi untuk membuat turunan dari class selain TObject Anda perlu mencoba untuk menambahkan override pada Create yang Anda buat. Jika Create pada class tersebut ternyata static, maka akan muncul pesan kesalahan pada penambahan override tersebut.

Cara membuat constructor dan destructor

Membuat constructor dan destructor pada dasarnya sama dengan membuat prosedur biasa. Perbedaannya hanya terletak pada penggantian kata procedure menjadi constructor atau destructor.

Pada constructor, yang dilakukan pertama kali biasanya adalah memanggil constructor milik leluhurnya, baru melakukan proses-proses lain yang dibutuhkan. Untuk memanggil method yang diwariskan oleh leluhur, kita menggunakan kata inherited di depan nama method yang dipanggil. Jadi, biasanya Create akan terlihat misalnya seperti:

  constructor TLingkaran.Create;
  begin
    inherited Create;
    .....
  end;

Pada destructor, pemanggilan terhadap destructor leluhurnya biasanya dilakukan pada beris terakhir sebelum end. Contohnya seperti:

  destructor TLingkaran.Destroy;
  begin
    .....
    inherited Destroy;
  end;

Tujuan pembuatan constructor dan destructor

Constructor dibuat untuk membuat inisialisasi terhadap obyek. Sering kali kita membutuhkan agar sebuah obyek yang dibuat memiliki nilai-nilai tertentu pada beberapa fieldnya. Pemberian nilai awal ini bisa dilakukan di dalam constructor. Jika class yang kita buat tersusun dari obyek-obyek lain, maka obyek-obyek tersebut harus dibuat sebelum bisa digunakan. Ingat bahwa class selalu bertipe pointer sehingga deklarasi obyek tidak serta-merta membuat obyeknya. Pembuatan obyek-obyek ini bisa dilakukan di dalam constructor.

Jika class Anda membuat obyek-obyek lain, maka class Anda juga bertanggung jawab membuang obyek-obyek tersebut saat class Anda akan dibuang. Pembuangan obyek-obyek tersebut bisa dilakukan di dalam destructor.

Contoh program dengan constructor dan destructor

program Turunan4;
{$APPTYPE CONSOLE}
type
  TPoint=record
    X,Y:integer;
  end;

  TGambar=class(TObject)
    Posisi:TPoint;
    procedure GambarObyek;virtual;abstract;
  end;

  TLingkaran=class(TGambar)
    Jari2:integer;
    constructor Create;
    destructor Destroy;override;
    procedure GambarObyek;override;
  end;

  TKotak=class(TGambar)
    Panjang:integer;
    Lebar:integer;
    constructor Create;  
    destructor Destroy;override;
    procedure GambarObyek;override;
  end;

  constructor TLingkaran.Create;
  begin
    inherited Create;
    Write('Tentukan jari-jari: ');
    Readln(Jari2);
  end;

  destructor TLingkaran.Destroy;
  begin
    Writeln('Lingkaran dihapus...');
    inherited Destroy;
  end;

  procedure TLingkaran.GambarObyek;
  begin
    Writeln('Menggambar lingkaran dengan ');
    Writeln('  jari-jari ',Jari2);
  end;

  constructor TKotak.Create;
  begin
    inherited Create;
    Write('Tentukan panjang: ');
    Readln(Panjang);
    Write('Tentukan lebar: ');
    Readln(Lebar);
  end;  

  destructor TKotak.Destroy;
  begin
    Writeln('Kotak dihapus...');
    inherited Destroy;
  end;

  procedure TKotak.GambarObyek;
  begin
    Writeln('Menggambar kotak dengan');
    Writeln('  panjang ',Panjang,' dan');
    Writeln('  lebar ',Lebar);
  end;

var
  Gambar:TGambar;
  Pilihan:Char;
begin
  repeat
    Writeln(#13#10'Tentukan pilihan');
    Writeln('1:Lingkaran');
    Writeln('2:Kotak');
    Writeln('3:Selesai');
    Write('Pilihan Anda: ');
    Readln(Pilihan);
    Writeln;
  //membuat obyek
    case Pilihan of
    '1':Gambar:=TLingkaran.Create;
    '2':Gambar:=TKotak.Create;
    '3':Break;
    else continue;
    end;
  //memanggil method
    Gambar.GambarObyek;
  //membuang obyek
    Gambar.Free;
  until False;
end.

Jika program dijalankan, hasilnya akan tampak seperti:

C:\Source>Turunan4

Tentukan pilihan
1:Lingkaran
2:Kotak
3:Selesai
Pilihan Anda: 1

Tentukan jari-jari: 16
Menggambar lingkaran dengan
  jari-jari 16
Lingkaran dihapus...

Tentukan pilihan
1:Lingkaran
2:Kotak
3:Selesai
Pilihan Anda: 2

Tentukan panjang: 16
Tentukan lebar: 8
Menggambar kotak dengan
  panjang 16 dan
  lebar 8
Kotak dihapus...

Tentukan pilihan
1:Lingkaran
2:Kotak
3:Selesai
Pilihan Anda: 3


C:\Source>

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.