{"id":1409,"date":"2013-12-19T23:42:53","date_gmt":"2013-12-19T16:42:53","guid":{"rendered":"http:\/\/www.sulhansetiawan.com\/?p=1409"},"modified":"2013-12-20T14:09:26","modified_gmt":"2013-12-20T07:09:26","slug":"property","status":"publish","type":"post","link":"https:\/\/sulhansetiawan.com\/id\/property\/","title":{"rendered":"Property"},"content":{"rendered":"<p><\/p>\n<div style=\"width: 96px; margin-left: auto; margin-right: auto;\"><a href=\"\/id\/?p=1408\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/arrowleft_green_32.png\" title=\"Menyembunyikan Kerumitan dan Melindungi Data\"\/><\/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=1410\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/arrowright_green_32.png\" title=\"Visual Component Library\"\/><\/a><\/div>\n<p>Apa yang sudah dilakukan pada program Visibilitas adalah sudah cukup untuk menjaga konsistensi data, akan tetapi cara tersebut masih terasa kurang alami. Alangkah lebih mudahnya jika kita tetap memperlakukan posisi seperti sebuah variabel biasa. Jika kita menginginkan nilainya maka kita menempatkan variabel tersebut pada sebelah kanan operator penugasan. Sebaliknya jika kita ingin mengubah nilainya maka kita menempatkan variabel tersebut pada sebelah kiri operator penugasan.<\/p>\n<p>Tidak masalah, keinginan Anda dikabulkan! Dengan menggunakan mekanisme property, maka Anda bisa memperlakukan Posisi seperti halnya variabel biasa.<\/p>\n<p>Pindahkan fungsi GetPosisi dan prosedur SetPosisi ke bagian private sehingga kedua method itupun sekarang hanya dapat diakses secara internal oleh TGambar. Pada bagian public, tambahkan baris berikut:<\/p>\n<pre class='brush: delphi'>property Posisi:TPoint read GetPosisi write SetPosisi;<\/pre>\n<p>Perhatikan perubahan pada program di bawah ini:<\/p>\n<pre class='brush: delphi'>program Visibilitas2;\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  private\r\n    FPosisi:TPoint;\r\n    function GetPosisi:TPoint;\r\n    procedure SetPosisi(const Value:TPoint);\r\n  public\r\n    procedure GambarObyek;\r\n    property Posisi:TPoint read GetPosisi\r\n                           write SetPosisi;\r\n  end;\r\n\r\n  procedure TGambar.GambarObyek;\r\n  begin\r\n    Write('Menggambar obyek pada ');\r\n    Writeln(FPosisi.X,':',FPosisi.Y);\r\n  end;\r\n\r\n  function TGambar.GetPosisi:TPoint;\r\n  begin\r\n    result:=FPosisi;\r\n  end;\r\n\r\n  procedure TGambar.SetPosisi(const Value:TPoint);\r\n  begin\r\n    \/\/tidak ada yang perlu dilakukan jika\r\n    \/\/Value sama dengan Posisi\r\n    if(Value.X=FPosisi.X)and(Value.Y=FPosisi.Y)\r\n       then exit;\r\n    FPosisi:=Value;\r\n    \/\/merefleksikan perubahan\r\n    GambarObyek;\r\n  end;\r\nvar\r\n  Gambar:TGambar;\r\n  Pilihan:Char;\r\n  P:TPoint;\r\nbegin\r\n  \/\/membuat obyek\r\n  Gambar:=TGambar.Create;\r\n  Gambar.GambarObyek;\r\n  repeat\r\n    Writeln(#13#10'Tentukan pilihan');\r\n    Writeln('1:Melihat posisi');\r\n    Writeln('2:Memindah posisi');\r\n    Writeln('3:Menggambar ulang');\r\n    Writeln('4:Selesai');\r\n    Write('Pilihan Anda: ');\r\n    Readln(Pilihan);\r\n    Writeln;\r\n    case Pilihan of\r\n    '1':begin\r\n          P:=Gambar.Posisi;\r\n          Write('Posisi gambar pada ');\r\n          Writeln(P.X,':',P.Y);\r\n        end;\r\n    '2':begin\r\n          Write('Posisi X baru: ');\r\n          Readln(P.X);\r\n          Write('Posisi Y baru: ');\r\n          Readln(P.Y);\r\n          Gambar.Posisi:=P;\r\n        end;\r\n    '3':Gambar.GambarObyek;\r\n    '4':Break;\r\n    else continue;\r\n    end;\r\n  until False;\r\n  \/\/membuang obyek\r\n  Gambar.Free;\r\nend.<\/pre>\n<p>Perhatikan bagaimana kita mendapatkan nilai posisi dan bagaimana memberi nilai yang baru. Tepat seperti akses terhadap variabel biasa. Mekanisme seperti ini sering disebut dengan <strong>abstraksi<\/strong> dan <strong>enkapsulasi<\/strong>. Perhatikan bahwa posisi adalah sesuatu yang abstrak. Kita melihatnya seolah-olah itu adalah variabel biasa. Padahal akses terhadap posisi adalah melalui sebuah method berupa GetPosisi untuk membaca dan method SetPosisi untuk menulis. Kerumitan-kerumitan tersebut kita bungkus (proses enkapsulasi) dalam sebuah mekanisme yang menjadikannya terlihat sederhana.<\/p>\n<h3>Cara membuat property<\/h3>\n<p>Untuk membuat property, pertama kali kita tentukan tipe dari property-nya. Jika property tersebut adalah property yang bisa dibaca, maka kita harus membuat sebuah fungsi dengan nilai kembalian dengan tipe yang sama dengan tipe property-nya. Jika property tersebut bisa dimodifikasi, maka kita harus membuat sebuah prosedur yang mengambil satu parameter dengan tipe sesuai tipe property-nya. Kemudian kita tempatkan fungsinya setelah kata <strong>read<\/strong> dan kita tempatkan prosedurnya setelah kata <strong>write<\/strong>.<p><\/p>\nproperty bisa bersifat <strong>read only<\/strong>, yaitu jika property tersebut tidak memiliki bagian write, atau <strong>write only<\/strong>, yaitu jika property tersebut tidak memiliki bagian read.<\/p>\n<div style=\"width: 96px; margin-left: auto; margin-right: auto;\"><a href=\"\/id\/?p=1408\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/arrowleft_green_32.png\" title=\"Menyembunyikan Kerumitan dan Melindungi Data\"\/><\/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=1410\"><img decoding=\"async\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/12\/arrowright_green_32.png\" title=\"Visual Component Library\"\/><\/a><\/div>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Apa yang sudah dilakukan pada program Visibilitas adalah sudah cukup untuk menjaga konsistensi data, akan tetapi cara tersebut masih terasa kurang alami. Alangkah lebih mudahnya jika kita tetap memperlakukan posisi seperti sebuah variabel biasa. Jika kita menginginkan nilainya maka kita menempatkan variabel tersebut pada sebelah kanan operator penugasan. Sebaliknya jika kita ingin mengubah nilainya maka&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-1409","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\/1409","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=1409"}],"version-history":[{"count":0,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/posts\/1409\/revisions"}],"wp:attachment":[{"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/media?parent=1409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/categories?post=1409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/tags?post=1409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}