Analisis Polimorfisme di Delphi
1 apa itu polimorfisme? 2
1.1 Konsep 2
1.2 Arti Polimorfisme 2
1.3 Bagaimana menerapkan polimorfisme di Delphi? 2
1.3.1 Warisan 2
1.3.2 Metode Virtual, Metode Dinamis dan Metode Abstrak, VMT/DMT, Ikatan Statis dan Ikatan Dinamis 2
1.3.3 Kelebihan dan polimorfisme 2
1.4 Diskusi tentang Spesies Polimorfik 2
1.4.1 Polimorfisme dua tingkat 2
1.4.2 Polimorfisme Tidak Aman 2
2 Aplikasi Polimorfisme di VCl2
2.1 Metode Konstruksi dan Destruktur 2
2.2 tstrings2
2.3 Lainnya (tolong tambahkan jiwa) 2
Abstrak Polimorfisme adalah jiwa yang berorientasi pada objek.
Kata kunci polimorfisme, warisan, berorientasi objek, vcl, metode virtual, override
pertanyaan
Polimorfisme adalah jiwa yang berorientasi pada objek, dan pemahaman polimorfisme adalah salah satu kunci untuk menguasai teknologi yang berorientasi objek. Tapi apa sebenarnya polimorfisme? Apa arti polimorfisme? Bagaimana cara mencapai polimorfisme? Saya dapat memahami konsep polimorfisme, tetapi saya tidak tahu bagaimana menggunakannya dan kapan menggunakannya? Harap baca artikel ini secara detail.
Analisis ahli
Dunia (objek, yaitu, objek) selalu berubah; tetapi di dunia komputer, hanya ada satu baris instruksi mesin, dan keduanya tampaknya tidak relevan. baik dalam bahasa komputer. Seluruh industri perangkat lunak mengguncang bumi. Alat pengembangan yang berorientasi juga muncul, seperti VC, Delphi, dan BCB. Desain berorientasi (OOD), analisis berorientasi objek (OOA), dan database berorientasi objek (OODB)), teknologi berorientasi objek hampir menembus seluruh bidang perangkat lunak, dan cara berpikir pemrogram juga telah mengalami perubahan mendasar! Di mata beberapa ahli teori pemurnian oo, semuanya adalah objek! Meskipun saya tidak begitu setuju dengan pandangan ini. Tapi saya pikir metode ini paling sesuai dengan kebiasaan berpikir orang Otak sejak saat itu, saya dibebaskan! Ini adalah revolusi!
Konten inti dari objek adalah objek, enkapsulasi, warisan, polimorfisme dan mekanisme pesan. Master polimorfisme, Anda tidak akan benar-benar menguasai teknologi yang berorientasi objek.
1 apa itu polimorfisme?
1.1 Konsep
Ada banyak pendapat berbeda tentang konsep polimorfisme, dan berikut ini adalah beberapa pernyataan representatif:
“Kemampuan untuk memanipulasi lebih dari satu jenis dengan pointer atau referensi ke kelas dasar yang berbicara tentang polimorfisme” (C ++ Primer, halaman 838). Artinya, kemampuan untuk mengoperasikan objek dari beberapa kelas (kelas dasar dan kelas yang diturunkan) menggunakan pointer/referensi ke kelas dasar disebut polimorfisme. Ini dipertimbangkan dari perspektif implementasi bahasa.
"Polimorfisme memberikan dimensi lain dari pemisahan antarmuka dari implementasi, untuk memisahkan apa dari bagaimana" ("pikirkan dalam java" Edtion ke -3), yaitu, polimorfisme menyediakan antarmuka dan implementasi pemisahan jenis lain (mis. "Bagaimana melakukan skala" secara terpisah ". Itu dianggap dari perspektif desain.
“Kemampuan untuk menggunakan ekspresi yang sama untuk menunjukkan operasi yang berbeda disebut sebagai polimorfisme” (Prinsip & Praktik Metode Berorientasi Objek Edisi ke-3, hal. 16). Sederhananya, polimorfisme adalah "ekspresi yang sama, operasi yang berbeda", atau dapat dikatakan "perintah yang sama, operasi yang berbeda". Ini dari perspektif semantik yang berorientasi objek.
Tiga pernyataan menjelaskan esensi polimorfisme dari berbagai perspektif. Pernyataan ketiga sangat akurat.
Izinkan saya menjelaskan arti kalimat ini terlebih dahulu:
Ekspresi yang sama - panggilan fungsi
Operasi yang berbeda - ada operasi yang berbeda menurut objek yang berbeda.
Misalnya, di perusahaan, ada berbagai karyawan dengan tanggung jawab yang berbeda (pemrogram, penjual, manajer dokumen, dll.) Yang melakukan hal -hal berbeda ketika mereka "bekerja" (juga dapat dianggap sebagai semacam logika bisnis), kami Abstrak Karya mereka masing -masing sebagai "untuk bekerja", dan hubungannya adalah sebagai berikut:
staf
/ |
Manajer Dokumen Penjual Programmer
Setelah jam kerja datang setiap hari, setara dengan mengeluarkan perintah seperti ini:
"Karyawan. Mulai Bekerja" (ekspresi yang sama)
Setelah setiap karyawan menerima perintah ini (perintah yang sama), ia "mulai bekerja", tetapi apa yang mereka lakukan adalah pekerjaan masing -masing, programmer memulai "pengkodean", penjual mulai "hubungi bisnis", dan manajer budaya mari kita mulai " Mengorganisir dokumen ”. Yaitu, "ekspresi yang sama (panggilan fungsi), operasi yang berbeda (jalankan menurut objek yang berbeda selama periode runtime)."
Dari perspektif implementasi bahasa polimorfisme, polimorfisme dicapai dengan memanggil metode virtualnya dengan pointer kelas dasar atau referensi ke objek yang menunjuk ke kelas yang diturunkan. Berikut ini adalah implementasi bahasa Pascal Object
TEMWOWEREE = kelas // karyawan abstrak ke dalam kelas abstrak
publik
Prosedur mulai bekerja; virtual; abstrak;
{Fungsi abstrak (mis. Fungsi virtual murni dalam C ++), tidak melakukan apa -apa, makna sebenarnya adalah memesan antarmuka terlebih dahulu. Overload mengimplementasikannya di kelas turunannya. }
akhir;
Tprogramer = class (templeee) // programmer
publik
Prosedur mulai bekerja;
akhir;
Tbusinessman = class (templeee) // wiraniaga
publik
Prosedur mulai bekerja;
akhir;
TDocManager = class (Temproject) // Manajer Teks
publik
Prosedur mulai bekerja;
akhir;
Prosedur Tprogramer.Startworking;
Mulai
showmessage ('coding');
akhir;
{Tbusinessman}
Prosedur Tbusinessman.Startworking;
Mulai
Showmessage ('Linking Business');
akhir;
{TDocManager}
Prosedur TDocManager.Startworking;
Mulai
Showmessage ('Managing Document');
akhir;
Prosedur TFORM1.BUTTON1CLICK (Pengirim: Tobject);
const
enum = 3;
var
Karyawan: Array Temp Schoyee;
I: Integer;
Mulai
setLength (karyawan, enum);
Karyawan [0]: = TProgramer.Create;
// lihat karyawan kelas dasar [0] untuk menunjuk ke objek TProgramer yang baru saja dibuat
Karyawan [1]: = TBusinessMan.Create;
// Lihat karyawan kelas dasar [1] untuk menunjuk ke objek TBusinessman yang baru saja Anda buat
Karyawan [2]: = TDocManager.Create;
// lihat karyawan kelas dasar [2] untuk menunjuk ke objek TDocManager yang baru saja dibuat
untuk i: = 0 hingga panjang (karyawan) -1 lakukan
Karyawan [i] .Warsterworking; // Ikatan Dinamis dari Metode yang sesuai sesuai dengan tipe objek aktual selama periode berjalan.
{Dari perspektif polimorfisme implementasi bahasa, polimorfisme diimplementasikan dengan memanggil metode virtualnya dengan penunjuk kelas dasar atau objek referensi yang menunjuk ke kelas yang diturunkan. Karyawan [] mengacu pada array untuk objek kelas dasar, dan anggotanya menunjuk ke objek kelas yang berbeda.
akhir;
Cobalah
Anda dapat mengetikkan beberapa kode di atas (atau program demo), mengkompilasi dan menjalankan, dan mengklik tombol untuk melihat efek ajaib polimorfisme.
1.2 Arti polimorfisme
Arti enkapsulasi dan warisan adalah bahwa mereka menerapkan penggunaan kembali kode, sedangkan makna polimorfisme adalah bahwa ia mengimplementasikan penggunaan kembali antarmuka (ekspresi yang sama). Mampu.
Misalnya, untuk mengelola dengan lebih baik, pemrogram dibagi menjadi programmer C ++ dan pemrogram Delphi. ...
staf
/ |
Manajer Dokumen Penjual Programmer
/ / — - hubungan warisan
Programmer C ++ Programmer Delphi
Setelah programmer menambahkan dua kelas turunan TCPPProgramer dan TDelphiprogramer, metode panggilan masih tidak berubah, dan masih "karyawan. Mulai bekerja", yang dijelaskan dengan objek Pascal:
...
setLength (karyawan, enum+2);
Karyawan [enum]: = tcppprogramer.create;
// Buat objek TCPPProgramer dan arahkan karyawan referensi kelas dasar [enum]
Karyawan [enum+1]: = tdelphiprogramer.create;
...
{Sektor.
untuk i: = 0 hingga panjang (karyawan) -1 lakukan
Karyawan [I] .Marasiworking; // Masih metode panggilan yang sama (karena antarmuka tidak berubah).
...
1.3 Bagaimana menerapkan polimorfisme di Delphi?
Kondisi yang diperlukan untuk mencapai polimorfisme adalah warisan, metode virtual, pengikatan dinamis (atau pengikatan lag-back).
1.3.1 Warisan
Warisan mengacu pada hubungan "AKO (semacam, adalah a)" antara kelas, seperti seorang programmer "adalah" karyawan, yang menunjukkan hubungan warisan. Di Delphi, hanya warisan tunggal yang didukung (tidak ada pertimbangan warisan yang diimplementasikan oleh antarmuka). Meskipun ini tidak memiliki fleksibilitas warisan ganda, itu membawa kita manfaat besar, sehingga kita dapat tampil kelas dasar kapan saja objek dapat diganti Dengan objek kelas yang diturunkan (atau sebaliknya). Ini adalah apa yang disebut "Prinsip Permutasi Polimorfik".
petunjuk
Di UML:
AKO: semacam hubungan warisan
APO: Bagian dari merepresentasikan hubungan kombinasi
ISA: Isa mewakili hubungan antara suatu objek dan kelas tempatnya.
1.3.2 Metode Virtual, Metode Dinamis dan Metode Abstrak, VMT/DMT, Ikatan Statis dan Ikatan Dinamis
Untuk semua metode, tidak ada jejak di objek. Pointer metodenya (alamat entri) disimpan di kelas, sedangkan kode aktual disimpan di segmen kode. Untuk metode statis (metode non-virtual), kompiler secara langsung menentukan alamat entri metode objek berdasarkan jenis referensi objek pada waktu kompilasi, yang disebut pengikatan statis; Kompiler tidak dapat menentukan kelas aktual yang menjadi miliknya, sehingga alamat entri metode ini hanya dapat ditentukan melalui alamat entri tabel VMT (mis. Empat byte pertama dari objek) selama runtime. Ini disebut pengikatan dinamis (atau lag-bundling).
Metode virtual
Metode virtual mewakili metode yang dapat diganti. Selain menyimpan penunjuk metode virtual sendiri, kelas ini juga menyimpan penunjuk metode virtual dari semua kelas dasar.
Metode deklarasi:
nama metode prosedur;
Ini setara dengan memberi tahu kompiler Delphi:
Metode ini dapat kelebihan beban di kelas yang diturunkan, dan metode virtual masih setelah kelebihan beban.
Jangan menentukan alamat entri metode selama periode kompilasi. Selama runtime, alamat entri metode ditentukan melalui pengikatan dinamis.
Berikan implementasi default di kelas dasar.
Metode dinamis
Metode dinamis dan metode virtual pada dasarnya sama. Tapi ini benar -benar transparan untuk pengguna.
Metode deklarasi:
nama prosedur; dinamis;
Metode abstrak
Metode virtual khusus, yang tidak perlu memberikan implementasi default di kelas dasar, hanya digunakan untuk antarmuka panggilan, yang setara dengan fungsi virtual murni di C ++. Kelas yang berisi metode abstrak disebut kelas abstrak.
Metode deklarasi:
Nama Prosedur; Virtual; Abstrak;
VMT/DMT
Di Delphi, Tabel Metode Virtual (VMT) sebenarnya tidak secara fisik. Metode virtual dari kelas dasarnya. "Alamat entri VMT" yang disimpan dalam empat byte pertama objek sebenarnya adalah alamat kelas yang dimilikinya (lihat program demo). Dengan kelas yang sebenarnya, alamat metode virtual dapat ditemukan.
Obj (nama objek) kelas yang dimiliki oleh objek aktual
Alamat entri VMT
Anggota data
Alamat entri VMT Tabel Metode Virtual Kelas
Informasi Template Anggota Data
Metode statis, dll.
Metode Virtual (VMT)
Metode Dinamis (DMT)
Gambar 3 Hubungan antara nama objek, objek dan kelas
DMT mirip dengan VMT, dan juga merupakan konsep logis. tidak secepat metode virtual.
Kutipan contoh di atas untuk menjelaskan:
Karyawan [i] .Warworking;
Karyawan [i] adalah referensi objek dari TempleEyee kelas dasar. Jadi objek aktual tidak dapat diketahui selama kompilasi, sehingga alamat metode tidak dapat ditentukan. Selama periode lari, tentu saja, saya tahu "wajah sejati Lushan" dari objek. Fungsi yang akan dipanggil, yaitu, polimorfisme direalisasikan.
1.3.3 Kelebihan dan polimorfisme
Banyak netizen percaya bahwa kelebihan fungsi juga merupakan semacam polimorfisme, tetapi tidak. Untuk "operasi yang berbeda", kelebihan beban tidak dapat memberikan metode panggilan yang sama. Premis penerapan polimorfisme adalah ekspresi yang sama! Misalnya, karyawan [i] .Ming -startworing, panggilan kelebihan beban memiliki parameter atau tipe parameter yang berbeda. Kelebihan beban hanyalah mekanisme bahasa, dan ada juga kelebihan beban dalam C, tetapi C tidak memiliki polimorfisme dan C bukan bahasa pemrograman yang berorientasi objek. Kecuali jika fungsi kelebihan beban juga merupakan metode virtual, kompiler dapat menentukan alamat entri fungsi berdasarkan jenis parameter, atau pengikatan statis! Kutipan ayah dari C ++, "Jangan bodoh. Jika itu bukan pengikatan dinamis, itu bukan polimorfisme."
1.4 Diskusi tentang Spesies Polimorfik
1.4.1 Polimorfisme dua tingkat
Level Objek: Gunakan penunjuk/referensi kelas dasar untuk menunjuk ke objek kelas yang diturunkan, dan panggilan metode virtual (atau metode dinamis, metode abstrak), yang merupakan yang paling umum digunakan.
Level kelas: Gunakan referensi kelas (referensi ke kelas daripada objek) untuk menunjuk ke kelas yang diturunkan, memanggil metode kelas virtual (atau metode kelas dinamis, metode kelas abstrak), dan umumnya digunakan dalam polimorfisme yang dibuat oleh objek (karena konstruktor adalah Semacam metode tipe "untuk khusus", silakan merujuk pada karya saya yang lain "analisis struktur dan penghancuran di Delphi", Bagian 2.1).
petunjuk
Referensi kelas adalah variabel referensi kelas itu sendiri, bukan kelas, atau referensi objek. Sama seperti nama objek mewakili referensi objek, nama kelas mewakili referensi kelas, karena di Delphi, kelas juga diproses sebagai objek. Jenis referensi kelas adalah jenis referensi kelas, dan metode deklarasi jenis referensi kelas:
Jenis Referensi Kelas Nama = Kelas Nama Kelas
Kita dapat melihat banyak deklarasi referensi kelas dalam kode sumber VCL, seperti:
Tclass = kelas Tobject;
TComponentClass = kelas tcomponent;
Tconstrolclass = kelas tconstrol;
Melihat
Dalam metode kelas, diri yang tersirat dalam metode ini adalah referensi kelas, bukan referensi objek.
1.4.2 Polimorfisme yang tidak aman
Polimorfisme juga dapat diimplementasikan menggunakan pointer/referensi kelas yang diturunkan ke objek kelas dasar!
Prosedur TFORM1.BTNBADPOLYCLICK (Pengirim: Tobject);
var
CPPProgramer: TCPPProgramer; // Tentukan referensi programmer CPP, referensi ke kelas turunan!
Mulai
{*****************************penyataan******************* ******************
Polimorfisme diimplementasikan dengan pointer/referensi kelas yang diturunkan ke objek kelas dasar. Ini adalah polimorfisme patologis!
Metode polimorfik ini seperti hal yang sangat kecil (objek kelas dasar) yang ditutupi dengan yang kuat
Penampilan produk (referensi kelas turunan) dengan demikian membawa banyak faktor rasa tidak aman potensial (seperti pengecualian akses), jadi
Dengan hampir tidak ada nilai. "File" Contoh bertujuan untuk menggambarkan sifat polimorfisme di Delphi, sifat polimorfisme: gunakan penunjuk/referensi legal (biasanya kelas dasar) untuk mengoperasikan objek, menurut objek aktual selama runtime, untuk menjalankan operasi yang berbeda metode, atau ke pernyataan yang lebih jelas: objek itu sendiri memutuskan metode operasinya sendiri. objek. Ini memungkinkan pemisahan antarmuka dan implementasi, memungkinkan penggunaan kembali antarmuka.
********************************************** ******* *****************************}
CPPProgramer: = TCPPProgramer (TProgramer.Create);
{Untuk mencapai polimorfisme patologis ini, referensi objek dilemparkan ke tipe TCPPProgramer,
Dengan demikian lolos dari cek kompiler}
CPPProgramer.Startworking;
{Tprogramer.startworking dipanggil alih -alih tcppprogramer.startworking
Ini adalah polimorfisme yang diimplementasikan dengan pointer kelas/referensi yang diturunkan ke objek kelas dasar. }
cppprogramer.free;
CPPProgramer: = TCPPProgramer (TDocManager.Create);
CPPProgramer.Startworking;
{Panggilannya adalah tdocmanager.startworking,
Ini adalah polimorfisme yang diimplementasikan dengan pointer kelas/referensi yang diturunkan ke objek kelas dasar. Metode ini sangat tidak aman.
Dan tidak perlu}
cppprogramer.free;
akhir;
Cobalah
Untuk mendapatkan pemahaman persepsi seperti ini tentang polimorfisme, disarankan untuk mencobanya ? Dalam keadaan apa pengecualian akses akan terjadi? (Lihat program demo)
2 Aplikasi Polimorfisme di VCL
2.1 Metode Konstruksi dan Destruktur
Polimorfisme metode konstruksi
Karena konstruktor dapat dianggap sebagai metode kelas "khusus", semua kelas turunan setelah tcomponent didefinisikan ulang sebagai metode kelas virtual, sehingga untuk mewujudkan polimorfisme konstruktor, Anda harus menggunakan referensi kelas. Di setiap file proyek ada kode yang mirip dengan yang berikut:
application.createForm (tform1, form1);
Definisi metodenya:
prosedur tapplikasi.createForm (InstanceClass: TComponentClass; VAR Referensi);
Var // InstanceClass adalah referensi kelas.
Contoh: TComponent;
Mulai
Instance: = tComponent (InstanceClass.NewInstance);
{Metode NewInstance Deklarasi: Fungsi Kelas NewInstance: Tobject; InstanceClass adalah referensi kelas yang mengimplementasikan polimorfisme tingkat kelas, sehingga mewujudkan penggunaan kembali antarmuka untuk membuat komponen}
TComponent (referensi): = instance;
mencoba
Instance.create (self); // hubungi konstruktor untuk menginisialisasi itu
kecuali
TComponent (referensi): = nil; // hilangkan pointer "liar"! Bagus
mengangkat;
akhir;
{Jika jendela yang dibuat dan belum ada formulir utama, atur formulir yang baru saja dibuat sebagai bentuk utama}
if (fmainform = nil) dan (instance tform) kemudian
Mulai
Tform (instance) .handleneeded;
FmAintForm: = tform (instance); // atur formulir utama
{Faktanya, mengatur formulir utama dalam opsi proyek (Proyek-> Opsi) sebenarnya adalah pernyataan formulir yang sesuai dalam file proyek sebelum semua pernyataan pembuatan formulir. }
akhir;
akhir;
2) Untuk polimorfisme metode destruktur, silakan merujuk pada "Analisis Struktur dan Penghancuran di Delphi", Bagian 3.3
2.2 TSTRING
Pemrosesan array string sangat umum dalam kontrol Delphi, biasanya dengan beberapa atribut item, yang sangat nyaman untuk kita gunakan (karena mereka semua menggunakan antarmuka yang sama), berkat desain arsitektur array string di Delphi. Ini adalah desain yang sukses.
Karena banyak kontrol menggunakan array string, seperti ComboBox, TStringGrid, dll., Tetapi array string di setiap kontrol berbeda, delphi abstrak array string, sehingga banyak kelas terkait muncul. Tstring kelas dasar hanya menyediakan antarmuka untuk berbagai panggilan, dan implementasi spesifik dapat diimplementasikan sepenuhnya dari kelas yang diturunkan.
Mari kita lihat definisi metode umum kelas TSTRING kelas dasar (lihat Kelas Unit Baris 442):
Tstrings = class (tpersistent)
terlindung
...
function get (index: integer): string;
Prosedur Put (Indeks: Integer; Const S: String);
Fungsi GetCount: Integer;
...
publik
Function Add (Const S: String): Integer;
{Tambahkan string S ke akhir daftar string}
prosedur addstrings (string: tstrings);
{Tambah string ke akhir daftar string}
Prosedur Sisipkan (Indeks: Integer; Const S: String);
{Metode abstrak, masukkan string S baru pada posisi indeks}
Prosedur yang jelas;
{Hapus semua string}
Prosedur Delete (Indeks: Integer);
{Hapus string di lokasi tertentu}
Function Indexof (Const S: String): Integer;
{Dapatkan posisi S dalam daftar string}
Function IndexOfName (Const Name: String): Integer;
{Mengembalikan posisi string pertama dengan nama form = nilai dengan bagian nama yang ditentukan}
Function IndexOfObject (AObject: Tobject): Integer;
{Dapatkan posisi objek dengan objek bernama AObject: dalam daftar string}
Prosedur LoadFromFile (nama file const: string);
{Mengisi daftar dengan baris teks dalam file yang ditentukan}
Prosedur LoadFromStream (Stream: TStream);
{Mengisi daftar dengan baris teks yang dibaca dari aliran}
Prosedur Savetostream (Stream: TStream);
{Menulis nilai properti teks ke objek aliran}
string properti [indeks: integer]: string baca get write put;
{Referensi string dalam daftar berdasarkan posisinya}
nilai properti [nama const: string]: string baca getValue tulis setValue;
{Merupakan bagian nilai dari string yang terkait dengan nama yang diberikan, pada string dengan nama formulir = nilai.}
...
akhir;
Dari definisi TSTRING, dapat dilihat bahwa sebagian besar metode yang dilindungi dan publik adalah metode virtual atau metode abstrak. (Tambahkan beberapa, tStringList-> tStringGridString)
2.3 Lainnya (tolong tambahkan jiwa)
Jika Anda belum memahami polimorfisme, harap ingat esensi polimorfisme:
"Ekspresi yang sama, operasi yang berbeda" (sesederhana itu)
Dari perspektif implementasi bahasa OOP, polimorfisme adalah menggunakan pointer/referensi dari kelas dasar untuk mengoperasikan objek (kelas turunan), dan melakukan metode operasi yang berbeda sesuai dengan objek aktual selama periode berjalan; Pernyataan yang lebih jelas: Objek memutuskan metode operasinya sendiri. diri. Ini memungkinkan pemisahan antarmuka dan implementasi, memungkinkan penggunaan kembali antarmuka.
Faktanya, polimorfisme sederhana! Jadi apa yang harus Anda perhatikan saat menggunakan polimorfisme? Inilah dua saran saya:
Menganalisis logika bisnis, kemudian abstrak hal -hal terkait menjadi "objek", dan kemudian merangkum logika bisnis menggunakan metode objek. Menyatakan beberapa operasi dengan polimorfisme sebagai metode virtual di kelas dasar, dan menyatakannya sebagai metode abstrak virtual untuk mereka yang tidak perlu diimplementasikan di kelas dasar, dan kemudian membebani mereka di kelas yang diturunkan. /Pointer dari kelas dasar ketika digunakan, yang secara alami mewujudkan polimorfisme di dunia nyata. Ingatlah untuk tidak mencapai polimorfisme demi polimorfisme.
Karena ada hubungan "kopling" yang alami antara kelas -kelas dasar dan kelas yang diturunkan, memodifikasi kelas dasar akan mengarah pada "mencapai seluruh tubuh", yang akan sangat merepotkan! Oleh karena itu, kita harus mencoba melemahkan implementasi fungsional kelas dasar, merancangnya sebagai "kelas abstrak" jika perlu, dan memastikan antarmuka yang stabil.
Pertanyaan terkait
Diskusikan polimorfisme Delphi: http://www.delphibbs.com/delphhibbs/dispq.asp?lid=1753965
Tentang polimorfisme: http://www.delphibbs.com/delphhibbs/dispq.asp?lid=1854895
Apa itu polimorfisme? Apa kegunaan dalam pemrograman harian? http://www.delphibbs.com/delphibbs/dispq.asp?lid=960465
Apa perbedaan antara kelebihan beban dan override? http://www.delphibs.com/delphibs/dispq.asp?lid=296739
Mengeluarkan bahwa penunjuk kelas turunan menunjuk ke objek kelas dasar http://www.delphibs.com/delphibs/dispq.asp?lid=2104106
(Pertanyaan terakhir disebutkan di Delphibbs ketika saya sangat mempelajari polimorfisme, yang menyebabkan diskusi yang panas. Saya sarankan Anda melihatnya)