Layar monitor yang sedang Anda gunakan untuk melakukan percobaan ini, di dalamnya terdapat banyak sekali kerumitan yang tidak Anda lihat. Tentu saja karena layar monitor tersebut dibungkus dengan kotak (walaupun tidak benar-benar berbentuk kotak). Kotak layar monitor disamping untuk membuatnya tampak rapi juga berfungsi agar peralatan-peralatan penting di dalamnya tidak dijamah secara langsung. Pada bagian depan terdapat beberapa tombol untuk melakukan pengaturan seperti untuk mengatur kontras dan kecerahan gambar. Hanya melalui tombol-tombol itulah Anda diijinkan untuk melakukan pengaturan terhadap layar monitor Anda.
Visibilitas field dan method
Untuk membentuk class yang memiliki gambaran seperti layar monitor di atas, kita bisa mengatur visibilitas field atau method. Pengaturan visibilitas pada class adalah dengan memberikan kata private, protected, public, dan publish.
- private
Field atau method dengan visibilitas ini hanya bisa diakses dari unit dimana difinisi class berada.
- public
Field atau method dengan visibilitas ini bisa diakses dari mana saja.
- protected
Visibilitas ini adalah public untuk class turunan dan private untuk akses selain class turunan.
- publish
Visibilitas ini adalah seperti public. Field dengan visibilitas ini akan terlihat melalui Object Inspector. Selain visibilitas pada Object Inspector, publish akan memiliki akses yang sama dengan public. Visibilitas publish akan berguna pada pembuatan komponen.
Mengapa kita mengatur visibilitas field dan method
Dalam contoh program Turunan, proses menggambar hanya membuat tulisan untuk menunjukkan bahwa proses tersebut dijalankan. Pada program yang sesungguhnya, proses menggambar tentu akan benar-benar membuat gambar tertentu dan menggunakan variabel posisi untuk menentukan dimana harus menggambar.
Jika variabel posisi ini berubah, maka program harus melakukan penggambaran ulang sesuai dengan posisi yang baru. Jika menggambar ulang ini tidak dilakukan, maka antara gambar dan variabel posisi bisa terjadi ketidaksesuaian atau sering disebut dengan inkonsistensi. Untuk mencegah terjadinya ketidaksesuaian ini, maka akses terhadap variabel posisi tidak boleh dilaksanakan secara langsung.
Untuk mendapatkan nilai variabel ini dilakukan melalui sebuah fungsi yang biasanya diberi nama Get diikuti nama field-nya (misalnya GetPosisi). Sementara untuk merubah nilai variabel ini dilakukan melalui sebuah prosedur yang biasanya diberi nama Set diikuti nama field-nya (misalnya SetPosisi). Sementara variabel (field) itu sendiri ditempatkan pada lokasi yang tersembunyi. Yaitu dengan menempatkan pada bagian private. Dengan cara ini, maka kita bisa memastikan agar isi dari variabel posisi akan konsisten dengan posisi gambar obyeknya.
Contoh program yang menggunakan pengatur visibilitas
program Visibilitas; {$APPTYPE CONSOLE} type TPoint=record X,Y:integer; end; TGambar=class(TObject) private FPosisi:TPoint; public procedure GambarObyek; function GetPosisi:TPoint; procedure SetPosisi(const Value:TPoint); end; procedure TGambar.GambarObyek; begin Write('Menggambar obyek pada '); Writeln(FPosisi.X,':',FPosisi.Y); end; function TGambar.GetPosisi:TPoint; begin result:=FPosisi; end; procedure TGambar.SetPosisi(const Value:TPoint); begin //tidak ada yang perlu dilakukan jika //Value sama dengan Posisi if(Value.X=FPosisi.X)and(Value.Y=FPosisi.Y) then exit; FPosisi:=Value; //merefleksikan perubahan GambarObyek; end; var Gambar:TGambar; Pilihan:Char; P:TPoint; begin //membuat obyek Gambar:=TGambar.Create; Gambar.GambarObyek; repeat Writeln(#13#10'Tentukan pilihan'); Writeln('1:Melihat posisi'); Writeln('2:Memindah posisi'); Writeln('3:Menggambar ulang'); Writeln('4:Selesai'); Write('Pilihan Anda: '); Readln(Pilihan); Writeln; case Pilihan of '1':begin P:=Gambar.GetPosisi; Write('Posisi gambar pada '); Writeln(P.X,':',P.Y); end; '2':begin Write('Posisi X baru: '); Readln(P.X); Write('Posisi Y baru: '); Readln(P.Y); Gambar.SetPosisi(P); end; '3':Gambar.GambarObyek; '4':Break; else continue; end; until False; //membuang obyek Gambar.Free; end.
Jika program dijalankan, hasilnya adalah sebagai berikut:
C:\Source>Visibilitas Menggambar obyek pada 0:0 Tentukan pilihan 1:Melihat posisi 2:Memindah posisi 3:Menggambar ulang 4:Selesai Pilihan Anda: 2 Posisi X baru: 0 Posisi Y baru: 0 Tentukan pilihan 1:Melihat posisi 2:Memindah posisi 3:Menggambar ulang 4:Selesai Pilihan Anda: 2 Posisi X baru: 3 Posisi Y baru: 4 Menggambar obyek pada 3:4 Tentukan pilihan 1:Melihat posisi 2:Memindah posisi 3:Menggambar ulang 4:Selesai Pilihan Anda: 1 Posisi gambar pada 3:4 Tentukan pilihan 1:Melihat posisi 2:Memindah posisi 3:Menggambar ulang 4:Selesai Pilihan Anda: 3 Menggambar obyek pada 3:4 Tentukan pilihan 1:Melihat posisi 2:Memindah posisi 3:Menggambar ulang 4:Selesai Pilihan Anda: 4 C:\Source>
Perhatikan jika kita melakukan pemberian nilai kepada field posisi. Jika angka yang diberikan masih sama dengan angka lama, maka tidak diperlukan gambar ulang. Tetapi jika angka yang diberikan berbeda dari angka lama, maka secara otomatis obyek digambar ulang. Dengan cara seperti ini maka inkonsistensi data bisa dihindari. Tentu saja kita masih bisa melakukan akses secara langsung kepada variabel FPosisi karena kita menempatkan definisi dan implementasi TGambar pada program utama. Jika kita menempatkan definisi dan implementasi TGambar pada unit yang terpisah, maka variabel FPosisi akan tersembunyi pada obyek TGambar.
Sebagai informasi tambahan, penamaan field private biasanya diberi huruf depan F.