(Bagian 3 dari "Menempatkan Pemikiran Berorientasi Objek - Berbicara tentang Pengembangan Delphi")
Dua artikel pertama membahas topik terkait enkapsulasi. Di sini, saya ingin berbicara dengan Anda tentang pewarisan dan polimorfisme.
Warisan dan polimorfisme berkaitan erat. Object Pascal memperkenalkan mekanisme polimorfik yang disebut kelebihan beban. Idenya tidak ada hubungannya dengan berorientasi objek dan tidak akan dibahas di sini. Polimorfisme yang erat kaitannya dengan pemikiran berorientasi objek inilah yang menjadi fokus kami.
Polimorfisme bertumpu pada konsep metode abstrak dan metode virtual, dan juga erat kaitannya dengan pewarisan. Diperkirakan kita sering mendefinisikan beberapa objek yang mendasarinya dan kemudian mendefinisikan beberapa implementasinya sebagai abstrak, yang berarti kita hanya mendefinisikan antarmuka tanpa mendefinisikan detail implementasi spesifik. Mengikuti ide ini, kami juga akan mendefinisikan beberapa objek turunan (yang diwarisi), di mana detail yang belum diimplementasikan di kelas leluhur sebenarnya diimplementasikan. Hal ini membuat kelas dasar yang kita definisikan sebelumnya bersifat polimorfik. Keuntungan dari mekanisme ini adalah ketika kita menggunakan kelas-kelas ini, kita hanya memerlukan satu set kode untuk menyelesaikan beberapa fungsi. Satu-satunya hal yang perlu diubah adalah bagian yang membuat instance objek.
Amati kelas seperti ini:
TSstream = kelas(TObjek)
…
publik
fungsi Baca(var Buffer; Hitung: Longint): virtual;
fungsi Tulis(const Buffer; Hitung: Longint): Longint;
…
akhir;
Kata-kata cadangan virtual dan abstrak menunjukkan bahwa metode Baca dan Tulis adalah fungsi virtual murni. Hal ini menunjukkan bahwa kelas TStream tidak dapat benar-benar digunakan (contoh kelas ini tidak dapat dibuat). Ini hanyalah kelas yang mirip dengan antarmuka, yang mendefinisikan fungsi dasar yang harus dimiliki dan ditangani oleh kelas TStream. Dan juga ditetapkan bahwa kelas lain yang berasal dari kelas TStream harus mengimplementasikan fungsi (seperti Baca dan Tulis, dll).
Misalnya, TFileStream mengimplementasikan kelas TStream dalam bentuk aplikasi file disk; sedangkan TMemoryStream mengimplementasikan kelas TStream dalam bentuk aplikasi memori. Sekarang anggaplah ada kelas TMyClass yang menyediakan metode SaveToStream:
TMyClass = Kelas(TObject)
Prosedur SaveToStream(Stream: TStream);
akhir;
Kemudian menerapkan ide polimorfisme, Anda dapat memiliki kode seperti ini:
var
strm: TSaliran;
Kelas Saya: TMyClass;
mulai
strm := TFileStream.Create('abc.txt'); // ß Tipe instance sebenarnya dari Stream di sini adalah TFileStream
Kelas Saya := TMyClass.Buat;
Kelas Saya.SaveToStream(strm);
…..
akhir;
Untuk menyimpan konten MyClass di memori, ubah saja
strm := TFileStream.Buat('abc.txt');
untuk:
strm := TMemoryStream.Buat;
Itu saja.
Penggunaan polimorfisme memerlukan dua aspek kerja. Yang pertama tentu saja polimorfisme diperhitungkan dalam struktur kelas dan dapat menyediakan kelas perantara (kelas abstrak) yang mengimplementasikan fungsi tertentu; kelas. Pekerjaan ini tercermin dalam pendefinisian beberapa prosedur dan parameter fungsi.
Hal lain yang sangat penting, saya ingin mengingatkan semua orang bahwa perencanaan kelas sangat penting. Di era pemrograman berorientasi objek, kerangka kelas sangat menentukan kerangka program dan menentukan keberhasilan atau kegagalan pengembangan perangkat lunak. Arsitektur kelas yang jelas dan hierarkis tidak hanya memfasilitasi pembagian dan perluasan fungsional, tetapi juga membuat pemeliharaan kode lebih mudah. Diantaranya, menerapkan gagasan pewarisan dan polimorfisme, memperkenalkan kelas abstrak, dan memperkenalkan kelas perantara adalah metode yang lebih disukai.
Berikut ini daftar beberapa kelas abstrak dan kelas konkrit yang disediakan di Delphi:
kelas konkrit berasal dari kelas abstrak
TStream TFileStream, TMemoryStream;
TCustomIniFile TIniFile, TMemIniFile, TRegistryIniFile;
TStrings TStringList, TMemoStrings, TListBoxStrings;
Masih banyak lagi yang menunggu untuk Anda dan saya temukan. Yang paling umum digunakan di sini adalah TStream, dan yang paling mengejutkan saya adalah TCustomIniFile. TRegistryIniFile-nya memungkinkan Anda mengakses registri dengan cara yang sama seperti IniFile! Hal ini memungkinkan saya menggunakan sekumpulan kode untuk mengimplementasikan fungsi penulisan registri dan penulisan file Ini. Meskipun teknologi yang terlibat sederhana, signifikansinya luar biasa!
(Belum selesai, untuk dilanjutkan)
Lebih banyak artikel