{"id":1407,"date":"2013-12-19T21:57:11","date_gmt":"2013-12-19T14:57:11","guid":{"rendered":"http:\/\/www.sulhansetiawan.com\/?p=1407"},"modified":"2013-12-19T22:52:48","modified_gmt":"2013-12-19T15:52:48","slug":"tobject","status":"publish","type":"post","link":"https:\/\/sulhansetiawan.com\/id\/tobject\/","title":{"rendered":"TObject"},"content":{"rendered":"<p><\/p>\n<div style=\"width: 96px; margin-left: auto; margin-right: auto;\"><a href=\"\/id\/?p=1406\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/arrowleft_green_32.png\" title=\"Method Virtual, Dynamic, dan Abstract\"\/><\/a><a href=\"\/id\/?p=1379\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/home_green_32.png\" title=\"Tutorial Delphi\"\/><\/a><a href=\"\/id\/?p=1408\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/arrowright_green_32.png\" title=\"Menyembunyikan kerumitan dan melindungi data\"\/><\/a><\/div>\n<p>Semua class di dalam Delphi adalah turunan dari TObject. Jadi definisi tipe class seperti<\/p>\n<pre class='brush: delphi'>  TGambar=class<\/pre>\n<p>Memiliki arti yang sama dengan<\/p>\n<pre class='brush: delphi'>  TGambar=class(TObject)<\/pre>\n<h3>Constructor dan destructor<\/h3>\n<p><strong>Constructor<\/strong> 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.<\/p>\n<p><strong>Destructor<\/strong> 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.<\/p>\n<p>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.<\/p>\n<h4>Cara membuat constructor dan destructor<\/h4>\n<p>Membuat constructor dan destructor pada dasarnya sama dengan membuat prosedur biasa. Perbedaannya hanya terletak pada penggantian kata <strong>procedure<\/strong> menjadi <strong>constructor<\/strong> atau <strong>destructor<\/strong>.<\/p>\n<p>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 <strong>inherited<\/strong> di depan nama method yang dipanggil. Jadi, biasanya Create akan terlihat misalnya seperti:<\/p>\n<pre class='brush: delphi'>  constructor TLingkaran.Create;\r\n  begin\r\n    inherited Create;\r\n    .....\r\n  end;<\/pre>\n<p>Pada destructor, pemanggilan terhadap destructor leluhurnya biasanya dilakukan pada beris terakhir sebelum end. Contohnya seperti:<\/p>\n<pre class='brush: delphi'>  destructor TLingkaran.Destroy;\r\n  begin\r\n    .....\r\n    inherited Destroy;\r\n  end;<\/pre>\n<h4>Tujuan pembuatan constructor dan destructor<\/h4>\n<p>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.<\/p>\n<p>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.<\/p>\n<h4>Contoh program dengan constructor dan destructor<\/h4>\n<pre class='brush: delphi'>program Turunan4;\r\n{$APPTYPE CONSOLE}\r\ntype\r\n  TPoint=record\r\n    X,Y:integer;\r\n  end;\r\n\r\n  TGambar=class(TObject)\r\n    Posisi:TPoint;\r\n    procedure GambarObyek;virtual;abstract;\r\n  end;\r\n\r\n  TLingkaran=class(TGambar)\r\n    Jari2:integer;\r\n    constructor Create;\r\n    destructor Destroy;override;\r\n    procedure GambarObyek;override;\r\n  end;\r\n\r\n  TKotak=class(TGambar)\r\n    Panjang:integer;\r\n    Lebar:integer;\r\n    constructor Create;  \r\n    destructor Destroy;override;\r\n    procedure GambarObyek;override;\r\n  end;\r\n\r\n  constructor TLingkaran.Create;\r\n  begin\r\n    inherited Create;\r\n    Write('Tentukan jari-jari: ');\r\n    Readln(Jari2);\r\n  end;\r\n\r\n  destructor TLingkaran.Destroy;\r\n  begin\r\n    Writeln('Lingkaran dihapus...');\r\n    inherited Destroy;\r\n  end;\r\n\r\n  procedure TLingkaran.GambarObyek;\r\n  begin\r\n    Writeln('Menggambar lingkaran dengan ');\r\n    Writeln('  jari-jari ',Jari2);\r\n  end;\r\n\r\n  constructor TKotak.Create;\r\n  begin\r\n    inherited Create;\r\n    Write('Tentukan panjang: ');\r\n    Readln(Panjang);\r\n    Write('Tentukan lebar: ');\r\n    Readln(Lebar);\r\n  end;  \r\n\r\n  destructor TKotak.Destroy;\r\n  begin\r\n    Writeln('Kotak dihapus...');\r\n    inherited Destroy;\r\n  end;\r\n\r\n  procedure TKotak.GambarObyek;\r\n  begin\r\n    Writeln('Menggambar kotak dengan');\r\n    Writeln('  panjang ',Panjang,' dan');\r\n    Writeln('  lebar ',Lebar);\r\n  end;\r\n\r\nvar\r\n  Gambar:TGambar;\r\n  Pilihan:Char;\r\nbegin\r\n  repeat\r\n    Writeln(#13#10'Tentukan pilihan');\r\n    Writeln('1:Lingkaran');\r\n    Writeln('2:Kotak');\r\n    Writeln('3:Selesai');\r\n    Write('Pilihan Anda: ');\r\n    Readln(Pilihan);\r\n    Writeln;\r\n  \/\/membuat obyek\r\n    case Pilihan of\r\n    '1':Gambar:=TLingkaran.Create;\r\n    '2':Gambar:=TKotak.Create;\r\n    '3':Break;\r\n    else continue;\r\n    end;\r\n  \/\/memanggil method\r\n    Gambar.GambarObyek;\r\n  \/\/membuang obyek\r\n    Gambar.Free;\r\n  until False;\r\nend.<\/pre>\n<p>Jika program dijalankan, hasilnya akan tampak seperti:<\/p>\n<pre>C:\\Source&gt;Turunan4\r\n\r\nTentukan pilihan\r\n1:Lingkaran\r\n2:Kotak\r\n3:Selesai\r\nPilihan Anda: 1\r\n\r\nTentukan jari-jari: 16\r\nMenggambar lingkaran dengan\r\n  jari-jari 16\r\nLingkaran dihapus...\r\n\r\nTentukan pilihan\r\n1:Lingkaran\r\n2:Kotak\r\n3:Selesai\r\nPilihan Anda: 2\r\n\r\nTentukan panjang: 16\r\nTentukan lebar: 8\r\nMenggambar kotak dengan\r\n  panjang 16 dan\r\n  lebar 8\r\nKotak dihapus...\r\n\r\nTentukan pilihan\r\n1:Lingkaran\r\n2:Kotak\r\n3:Selesai\r\nPilihan Anda: 3\r\n\r\n\r\nC:\\Source&gt;<\/pre>\n<div style=\"width: 96px; margin-left: auto; margin-right: auto;\"><a href=\"\/id\/?p=1406\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/arrowleft_green_32.png\" title=\"Method Virtual, Dynamic, dan Abstract\"\/><\/a><a href=\"\/id\/?p=1379\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/home_green_32.png\" title=\"Tutorial Delphi\"\/><\/a><a href=\"\/id\/?p=1408\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/arrowright_green_32.png\" title=\"Menyembunyikan kerumitan dan melindungi data\"\/><\/a><\/div>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>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.&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[105,104,96,145],"tags":[106],"class_list":["post-1407","post","type-post","status-publish","format-standard","hentry","category-delphi-lazarus","category-programming","category-all","category-tutorial","tag-delphi"],"_links":{"self":[{"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/posts\/1407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/comments?post=1407"}],"version-history":[{"count":0,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/posts\/1407\/revisions"}],"wp:attachment":[{"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/media?parent=1407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/categories?post=1407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/tags?post=1407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}