Menyembunyikan Kerumitan dan Melindungi Data

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.

  1. private

    Field atau method dengan visibilitas ini hanya bisa diakses dari unit dimana difinisi class berada.

  2. public

    Field atau method dengan visibilitas ini bisa diakses dari mana saja.

  3. protected

    Visibilitas ini adalah public untuk class turunan dan private untuk akses selain class turunan.

  4. 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.

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.