Langsung ke konten utama

Object Oriented Programming Pada Delphi - Bag 5

Delphi Lover, pada artikel sebelumnya kita telah belajar membuat kelas sendiri lengkap dengan method-methodnya. Pada artikel ini, kita akan mempelajari konvensi penamaan kelas, membuat kelas yang sering dipakai di dunia nyata. Dengan mempelajari artikel ini diharapkan baris kode kita mudah dibaca (karena sesuai dengan konvensi di Delphi) dan memperdalam pemahaman kita tentang kelas, objek dan cara penggunaanya. Selamat mengikuti.


Konvensi Penamaan Pada Delphi

Salah satu konvensi pada Delphi adalah nama kelas selalu diawali dengan huruf T (te) yang merupakan sigkatan dari type. Itulah mengapa pada artikel-artikel terdahulu kita menamakan TSquare dan Tstudent bukan Student dan Square. Coba perhatikan kelas-kelas bawaan Dephi semua diawali dengan huruf T (type), mis TButton, TForm, dll.




Konvensi lainnya yaitu nama atribut selalu diawali dengan huruf F (ef), yang merupakan singkatan dari Field. Akan lebih jelas kenapa diawali huruf F (ef) setelah kita mempelajari istilah properties pada artikel-artikel berikutnya. Untuk sekarang ikuti dulu aja : )




Kelas MRU List

Sudah ada beberapa hal tentang OOP yang kita pelajari, namun contoh berikut, yang merupakan contoh yang sering terjadi di dunia nyata akan lebih memperdalam pemahaman kita tentang OOP. Kita akan membuat kelas (tipe data baru) MRUList – yaitu sebuah kelas yang akan dipakai untuk mencatat string yang sering digunakan pada sebuah aplikasi (Most Recently Used). Contoh implementasi MRU antara lain :


1.Produk Microsoft Office, bisa menampilkan file yang paling sering dipakai.
2.Delphi , bisa menampilkan file-file yang baru saja dibuka.


Kita akan membuat sebuah aplikasi di mana user bisa melihat string apa saja yang baru saja dipakai. Karena kita belum mempelajari semua fitur OOP di delphi, kelas yang akan kita buat merupakan kelas yang sederhana dulu. Kita akan mencoba memakai fitur-fitur OOP yang sudah kita pelajari selama ini.
OK, sekarang kita mulai dengan menentukan operasi-operasi apa saja yang akan dilakukan oleh kelas. Kira-kira operasi yang kita butuhkan meliputi :


1.Operasi Query berapa elemen yang ada di list;
2.Operasi untuk menambahkan string pada MRU List;
3.Operasi untuk menampilkan string yang ada pada posisi tertentu;


Ketika kita menambahkan sebuah string pada list, string tersebut akan berada di awal list.Pada aplikasi ini kita harus tentukan jumlah maksimal string yang bisa ditampung di dalam list. Jika sudah mencapai jumlah maksimal, ketika ada string yang ditambahkan lagi, maka kita harus menghapus string yang terakhir dan menempatkan string yang baru pada awal list. Itulah mengapa aplikasi ini disebut MRU (Most Recently Used) List, karena kita dengan aplikasi ini kita bisa mengetahui daftar string apa saja yang baru saja dipakai.
Berikut ini deklarasi awal dari kelas yang akan kita buat :

Type
  TMruList = Class
    Function Count : Integer;
    Procedure Add( s : String);
    Procedure GetString( n : Integer) : String
  End;
Berdasarkan deklarasi kelas di atas, berikut ini contoh penggunaannya :

Var
  muList : TMruList;
  s : String;

Begin
  // inisialisasi objek / alokasikan memori
  mruList := TMruList.Create;
  Try 
    // menambahkan string ke objek
    mruList.Add(‘Spence’);
    mruList.Add(‘Jones’);

    // akses string dalam list
    // string terakhir dipakai berada di index 0
    s := mruList.GetString( 0 );
    // s berisi Jones (string terakhir);
 Finally
  // bebaskan memori
  mruList.Free;
 End;
End;

Pada contoh di atas, kita alokasikan dan membebasan meori pada procedure yang sama. Jika kita menggunakan kelas ini pada sebuah form, maka kita sebaiknya mengalokasikan memori pada saat form dicreate (onCreate Event) dan membebaskan memori pada saat form didestrory (onDestroy event).


OK, sekarang tiba saatnya kita menuliskan baris kode di bagian implementasi kelas. Namun sebelum itu, kita harus tentukan dulu bagaimana caranya menyimpan string pada kelas ini. Solusi terbaik mungkin dengan menggunakan TstringList untuk menyimpan string. Ketika user menambahkan string ke dalam MRUList, kita tambahkan saja string tersebut pada awal stringlist. OK, karena solusi untuk menyimpan string kita gunakan stringlist, maka kita harus deklarasikan sebuah variable yang bertipe TstringList. Kira-kira bagian deklarasi dari kelas TmruLIst seperti di bawah ini :
Type
  TMruList = Class
    FMList : TStringList;
    Function Count : Integer;
    Procedure Add( s : String);
    Procedure GetString( n : Integer) : String
  End;

Dengan demikian kelas di atas harus mengalokasikan memori untuk variable FMList. Kita harus menambahkan baris kode berikut ini :

FMList := TStringList.Create;

Dimana kita harus tambahkan baris kode di atas? Hmmm , perhatikan, proses pengalokasian memori untuk kelas TmruLIst tidak otomatis mengalokasikan memori untuk varable FMList. Kita bisa mengalokasikan memori untuk variable FMList (dengan menambahkan baris kode di atas) pada baris setelah kita alokasikan memori untk kelas TmruList ini. Lihat baris kode berikut :

mruList := TMruList.Create;
mruList.FMList := TStringList.Create;

Tapi cara yang demikian cara yang kurang bagus (poor design) . Dengan cara di atas berarti kita mewajibkan programmer lain yang menggunakan kelas ini untuk melakukan operasi yang berurutan, yaitu mengalokasikan memori untuk kelas, lalu mengalokasikan memori untuk variable FMList. Demikian juga ketika akan melakukan proses membebaskan memori, programmer harus membebaskan memori FMList dulu baru membebaskan memori untuk kelas ini. Hal ini sangat merepotkan dan cenderung menambah resiko kesalahan.



Ada satu solusi untuk masalah di atas, yaitu dengan menyerahkan proses pengalokasian memori pada constructor dan pembebasan memori pada destructor. Cara ini akan kita implementasikan nanti pada artikel berikutnya. Untuk sementara kita akan menggunakan array dengan panjang yang kita tetapkan di awal. Array ini dipakai untuk menampung string. Selain itu kita juga mendeklarasikan satu variable yang akan mencatat berapa string yang digunakan pada satu waktu. Lihat baris kode berikut ini :

Const
 MRUMaxItems = 4;

Type
 TMruList = Class
  FMList : Array[0..MRUMaxItems – 1] of String;
  FNumItems : Integer;
  Function Count : Integer;
  Procedure Add( s : String);
  Function GetString( n : Integer) : String
 End;
Implementation

// Return the number of elements in the MRUList
Function TMruList.Count : Integer;
Begin
 Result := Self.FNumItems;
End;
// Shift all the elements in the list up by one, add new element at the start
Procedure TMruList.Add(s : String);
Var
 i : Integer;
Begin
 For i := max(Self.FNumItems, MRUMaxItems - 1] DownTo 1   Do
  Self.FMList[i] := Self.FMList[i – 1];

 Self.MList[0] := s;
 Self.FNumItems := Max(FNumItems + 1, MRUMaxItems);
End;
Function GetString( n : Integer ) : String;
Begin
 If (n >= 0) and (n <= Self.FNumItems - 1) Then
  Result := Self.FMList[n];
End; 

(Bersambung)

Komentar

Postingan populer dari blog ini

Cara Efektif Menggunakan StringGrid

StringGrid merupakan salah satu VCL yang sangat berguna. Jika anda sudah familiar dengan Webbased Application, anda bisa analogikan StringGrid dengan Table. Table digunakan untuk meenampilkan data. Adapun StringGrid, selain sebagai komponen untuk menampilkan data, dia juga juga bisa sebagai tempat untuk memasukkan data, lihat gambar di bawah ini : Pada gambar di atas, saya menampilkan form jurnal umum sebagai contoh penggunaan StringGrid. Pada contoh di atas, stringgrid dipakai untuk memasukkan data item jurnal berupa Kode dan nama perkiraan, status Debet/Kredit dan Nominal. Untuk memanfaatkan Stringgrid saya mempunyai beberapa konstanta yang mencerminkan nomor urut kolom, misalnya _KolKode merujuk pada kolom Kode Perkiraan, _KolNama merujuk pada kolom Nama. Lebih jelasnya lihat baris kode berikut : Const _KolKode : Integer = 0; _KolNama : Integer = 1; _KolDK : Integer = 2; _KolNominal : Integer = 3; Konstanta-konstanta tersebut saya pakai di beberapa tempat. Diantaran...

Object Oriented Programming (OOP) Pada Delphi - Bag 1

Object Pascal, adalah sebuah bahasa dimana delphi menjadi salah satu IDE (Integrated Development Environment) nya, adalah sebuah bahasa yang mendukung penuh konsep OOP. Sederhananya, bahasa ini memungkinkan bagi programmer untuk membuat dan memanipulasi object. Lebih detailnya, bahasa ini mendukung empat prinsip pokok OOP yaitu : Data Abstraction, Encapsulation, Inheritance, Polymorphism. Mempelajari OOP berbeda dengan mempelajari Delphi. Apalagi bagi seorang yang sudah mengenal bahasa Pascal. Bisa jadi ada orang yang sangat mahir delphi/pascal namun sangat lemah pada konsep OOP. Apa itu OOP? Apa Itu Object? Apa Itu Kelas? OOP adalah semua hal yang berkaitan dengan writing programs that manipulate objects : ). Delphi, Java, C++ adalah beberapa contoh bahasa yang mendukung OOP. Ketiga bahasa di atas mempunyai prinsip-prinsip OOP yang sama, tentunya dengan sintaks (penulisan baris kode program) yang berbeda. Sekali kita sudah menguasai konsep OOP, maka akan begitu mudah mempelaja...

Menambahkan Function Pada Fast Report

Fast report merupakan salah satu reporting tool yang banyak dipakai oleh para developer delphi. Fast Reprt menyediakan built-in function yang sangat memudahkan kita dalam membuat sebuah laporan. Namun adakalanya kita membutuhkan function/procedure yang tidak ada pada built-in function bawaan fast report. Oleh karena itu kita harus menambahkan sendiri. Untuk menambahkan function pada fast report kita perlu membuat kelas yang diturunkan dari TfsRTTIModule. Lebih jelasnya lihat baris kode berikut ini : unit uTSFastReportFunction; interface uses SysUtils, Classes, fs_iinterpreter, Forms; type TTSFastReportFunction = class(TfsRTTIModule) private function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; var Params: Variant): Variant; public constructor Create(AScript: TfsScript); override; function Quot(AString : String): String; end; const _Kategori : string = 'My Functions'...