3/2/14

Kelas dan Objek

Sebuah kelas, atau type kelas, menggambarkan sebuah struktur yang terdiri atas field, method dan property, hasil jadi sebuah kelas disebut objek. field,method,dan property dari sebuah kelas di sebut komponen member.
"kelas adalah cetakan bagi objek" (Abdul Kadir: Dasar Pemrograman Perl)


Pada hakikatnya objek adalah pengalokasian blok memory secara dinamis yang strukturnya  ditentukan oleh type class.masing-masing objek memiliki kopian tersendiri dari field yang didefinisikan didalam kelas.akan tetapi objek turunan dari kelas berbagi method yang sama. objek dibuat dan dibebaskan dengan method khusus yang diberi nama constructors dan destructors.


Sebuah variabel kelas sejatinya adalah variabel pointer yang mengacu kepada objek.oleh karenanya beberapa variabel bisa mengacu pada objek yang sama. Seperti variabel pointer umumnya variabel tipe kelas dapat mengandung nilai nil,namun ketika penulisan kita tidak memperlakukan variabel kelas ini sebagai mana kita mengacu pada sebuah variabel pointer.
Contoh : sebuahkelas.ukuran:=100; dimana bila variabel pointer akan dibubuhkan tanda “^”  untuk mengacu variabelnya seperti  sebuahkelas^.ukuran:=100; namun hal ini tidak bisa dilakukan.

 
Sebuah tipe kelas  harus dideklarasikan terlebih dahulu dan diberi nama sebelum di kenali,kita tidak bisa mendefinisikan sebuah kelas didalam deklarasi variabel,pendeklarasian kelas hanya pada bagian terluar dari program atau unit bukan pada bagian procedur atau function.
Kita dapat menuliskan deklarasi sebuah kelas seperti ini:

Type
Namakelas=class (ancestorClass)
//Daftar member
End;

Dimana nama dari kelas adalah valid identifier(lihat aturan identifier dalam elemen sintak). (ancestor class) bersifat opsional ancestor di isi parent kelas yang sudah ada(telah dideklarasikan), daftar member berisi field,method, dan properti dari kelas tersebut.jika kita mengosongkan (ancestor class) maka kelas yang baru akan mewarisi kelas Tobject.tapi jika klita mengisinya dan tidak mengisi memberlist kita tidak perlu membubuhkan kata End diakhir deklarasi.

Method yang di bubuhkan didalam deklarasi sebuah kelas hanya heading dari sebuah fungsi atau prosedur tanpa body. Gambaran body ditempatkan pada bagian lain dari program.
Mari kita lihat contoh berikut sebuah contoh deklarasi TMemoryStream sebuah kelas dari unit classes.

type TMemoryStream = class(TCustomMemoryStream)
            private
              FCapacity: Longint;
              procedure SetCapacity(NewCapacity: Longint);
            protected
              function Realloc(var NewCapacity: Longint): Pointer; virtual;
              property Capacity: Longint read FCapacity write SetCapacity;
            public
              destructor Destroy; override; 
              procedure Clear;
              procedure LoadFromStream(Stream: TStream);
              procedure LoadFromFile(const FileName: string);
              procedure SetSize(NewSize: Longint); override;
              function Write(const Buffer; Count: Longint): Longint; override;
          end;

TmemoryStream adalah turunan dari TcustomMemoryStream. Kebanyakan membernya diwarisi darinya,dengan atau tanpa dideklarasikan ulang.

Warisan
Ketika kita membuat sebuah kelas kita dapat menentukan ancestor(indo:nenek moyang)nya secara langsung, dan secara otomatis mewarisi setiap member yang dimiliki ancestornya ,dan kita dapat menambah atau mendeklarasikan ulang setiap member,tetapi kita tidak bisa menghapus member yang dimiliki oleh ancestornya.

Tobject dan Tclass
Kelas Tobject dideklarasikan didalam unit System ,nenek moyang pertama darisemua kelas yang ada. Tobjek hanya mendefinisikan sebagian kecil dari method-method,termasuk constructor dan destructor. Unit system mendefinisikan kelas acuan untuk tipe-tipe kelas.
Tclass = class of Tobject;
Jika deklarasi sebuah kelas tidak dibubuhi ancestor, kelas tersebut akan mewarisi dari kelas Tobject secara langsung.
Seperti:

Type
        Myclass :class
......
End;

Sama dengan

Type
            Myclass=class(Tobject);
             ......
            End;
Tetapi bentuk yang terakhir direkomendasikan untuk tujuan kemudahan pembacaan.

Compatibility of type class
Sebuah tipe kelas bersifat assignment-compatible dengan nenekmoyangnya(yaitu nilai yang dimasukan kedalam kelas nenek moyang nya dapat juga dimasukan kepada kelas tersebut). 

Type
TFigure=class(TObject);
Trectangle=class(TFigure);
Tsquare=class(TRectangle);
Var
            Fig:Tfigure;

Variabel fig di atas dapat dimasukan nilai dari tipe Tfigure,Trectangle,dan Tsquare.

Tipe Objek
kompiler delphi 32 menyediakan alternatip lain untuk mendeklarasikan sebuah kelas. dan kita dapat mendeklarasikannya seperti:

type
      Objectypename=object(ancestorobjecttype)
      //daftar member;
      end;

Tipe objek bukan turunan dari TObject,artinya objek tidak memilikiwarisan berupa construktor dan destruktor maupun method dan yang lainnya. untuk menciptakan sebuah objeck kita dapat menggunakan kata procedure New dan membebaskan dengan procedure Dispose.atau kita hanya menempatkan variable sebagai mana kita membuat sebuah record.

Visibility of Class Members
 setiap member sebuah kelas memiliki atribut yang disebut visibility, yang mana atribut ini ditandai dengan reservedword private, protected, public, published, atau automated.
contoh :
published property color:TColor read Getcolor write Setcolor;

Visibility menentukan dimana dan bagaimana sebuah member dapat di akses.
untuk tingkatan level pengaksesan sebuah member dapat ditandai privat dengan akses level terrendah protected pertengahan dan public,published atau automated akses level tertinggi.

jika sebuah member ditulis tanpa dibubuhi visibility maka member tersebut akan mengikuti visibility member sebelumnya, dan bila member pertama tidak memiliki visibility maka member tersebut memiliki tingkat visibility default yaitu published.


Namun agar skrip kita readability(mudah dibaca oleh manusia) kida dapat membegi kepada blok-blok seperti dibawah ini

type
    TMyClass = class(TControl)
      private
         ...  { private declarations here }
      protected
         ...  { protected declarations here }
      public
         ...  { public declarations here }
      published
         ...  { published declarations here }
    end;

kita dapat meningkatkan visibility sebuah member dengan mendeklarasikan ulang member tersebut. tapi kita tidak dapat menurunkan visibility dari sebuah member, sebuah protected property dapat kita ubah menjadi public property didalam turunan. tapi tidak bisa dirubah kepad private.dan published member tidak dapat menjadi public.

Private, Protected, dan Public Members

sebuah private member bersifat invisible terhadap modul (unit atau program) diluar modul dimana member tersebut dideklarasikan. dengan kata lain private methodnya tidak dapat dipanggil dari modul lain dan filed ,property method tidak dapat ditulis atau di baca dari luar modul 

protected- field, method dan property dengan sifat ini hanya bisa diakses turunan.

public dapat diakses dari luar unit

published property yang berisfat published ditampilkan pada objectinspector. method dan filed nya dapat diakses dari mana saja.

bersambung

 

No comments:

Iklan

Iklan

Iklan