Setelah membaca "Membuat Kode yang Dirancang dengan Baik (Berbasis Delphi/VCL)" yang saya tulis terakhir kali, banyak teman yang mengatakan kepada saya bahwa saya merasa dapat menerima sudut pandang di dalamnya, tetapi tampaknya terlalu sederhana dan kurang spesifik; beberapa teman juga menyatakan keraguannya. Contoh kecil dari beberapa keberatan. Oleh karena itu artikel ini.
Terakhir kali, contoh yang saya berikan adalah ini: Misalkan Anda ingin mendapatkan daftar string dari suatu tempat dan kemudian menampilkannya di TListBox. Kode yang saya rekomendasikan adalah:
ObjectXXX := TObjectXXX.Buat;
ListBox1.Item := ObjectXXX.GetStringList;
ObjekXXX.Gratis;
Memang saya akui kalau dilihat dari tiga baris kode ini saja, sepertinya ada dugaan "penyalahgunaan objek". Mungkin contohnya terlalu sederhana sehingga memberikan kesan bahwa TObjectXXX hanya memiliki satu fungsi anggota publik, GetStringList. Jika ini benar, maka itu benar-benar "penyalahgunaan objek". Kelas adalah abstraksi suatu objek, dan objek terdiri dari kumpulan status dan operasi (yaitu, data dan operasi pada data). Oleh karena itu, suatu benda tanpa keadaan bukanlah suatu benda! Desain kelas tanpa anggota data pribadi adalah desain yang gagal (itu bukan kelas, tapi antarmuka).
Oke, izinkan saya memberi Anda contoh mendetail untuk mengilustrasikan cara memisahkan kode antarmuka dan kode fungsi.
Misalkan saya ingin membuat perangkat lunak manajemen buku alamat pribadi yang sederhana. Jelas, seluruh perangkat lunak dibagi menjadi dua bagian: satu bagian berorientasi pengguna, yang disebut bagian antarmuka. Saya dapat menyediakan empat tombol (masing-masing "tambahkan". , " "Hapus", "Ubah", "Cari") dan kotak edit (menampilkan informasi buku alamat dan menerima masukan pengguna) digunakan untuk berinteraksi dengan pengguna; bagian lainnya berfungsi, yaitu operasi akses dari buku alamat dalam perangkat lunak.
Jadi, ada kelas TAddrBook, yang merupakan abstraksi dari bagian fungsional.
TAddrBook = kelas
Pribadi
//Beberapa anggota pribadi
publik
konstruktor Buat;
destruktor Hancurkan;timpa;
DapatkanHitungan: Bilangan Bulat;
TemukanRekam(strString): Integer;
GetRecord(nIndeks:Bilangan Bulat): String;
SetRecord(nIndex:integer; strRec:String): Boolean;
AddRecord(strRec:String): Boolean;
DelRecord(nIndeks): Boolean;
//Fungsi anggota bersama lainnya
akhir;
Alasan mengapa anggota swasta tidak dapat ditentukan terutama bergantung pada implementasi kelas ini.
Dengan cara ini, logika operasi akses ke buku alamat dapat diringkas. Kode di bagian antarmuka tidak akan melibatkan logika akses ini. Kode bagian antarmuka adalah sebagai berikut:
var
Formulir1: TForm1;
Buku Tambahan: Buku TAddr;
nCurRec: Bilangan Bulat;
pelaksanaan
prosedur TForm1.FormCreate(Pengirim: TObject);
mulai
AddrBook := TAddrBook.Buat;
nCurRec := AddrBook.GetCount;
akhir;
procedure TForm1.FormClose(Pengirim: TObject; var Action: TCloseAction);
mulai
AddrBook.Gratis;
akhir;
//tombol Tambah
prosedur TForm1.Button1Click(Pengirim: TObject);
mulai
jika bukan AddrBook.AddRecord(memo1.Text) maka
Tampilkan Pesan("kesalahan");
akhir;
//Tombol Hapus
prosedur TForm1.Button2Click(Pengirim: TObject);
mulai
jika bukan AddrBook.DelRecord(nCurRec) maka
Tampilkan Pesan("kesalahan");
akhir;
//tombol ubah
prosedur TForm1.Button3Click(Pengirim: TObject);
mulai
jika bukan AddrBook.SetRecord(nCurRec, memo1.Text) maka
Tampilkan Pesan("kesalahan");
akhir;
//Tombol Temukan
prosedur TForm1.Button4Click(Pengirim: TObject);
mulai
memo1.Teks := AddrBook.GetRecord(AddrBook.FindRecord(memo1.Text));
akhir;
Kode pada bagian antarmuka di atas tidak melibatkan logika akses apa pun. Kode setiap modul sederhana, mudah dipahami, dan mudah dipelihara. Faktanya, kode antarmuka tidak mengetahui apakah buku alamat disimpan dalam database atau file teks. Jika database digunakan, apakah database diakses melalui ODBC, ADO, atau BDE, kode antarmuka tidak mengetahui. Faktanya, logika akses ini bergantung pada implementasi kelas TAddrBook. Implementasi kelas TAddrBook dapat ditempatkan dalam file .pas terpisah. Setiap perubahan pada implementasi kelas TAddrBook tidak akan mempengaruhi bagian antarmuka. Saat memelihara kode, sebaiknya batasi perubahan pada satu modul saja.
Nicrosoft([email protected]) pada 2001.7.14