Eslatma
Ba’zan sinfning barcha elementlarini yashirishga to’g’ri keladi. Bu holda sinfning berilishini alohida modulga joylashtirishga to’g’ri keladi, ushbu sinfning ob’yektlarini ishlatuvchi dasturda esa modulga ko’rsatkich qo’yiladi.
Polimorfizm - bu har xil sinflarga kiruvchi uslublar uchun bir hil nomlardan foydalnish imkoniyatidir. Polimorfizmning mohiyati uslubni ob’yektga qo’llanganda, aynan ob’yekt sinfiga tegishli bo’lgan uslubdan foydalinish imkonini beradi.
Quyidagi misolda uchta sinf aniqlangan bo’lib, ulardan biri qolgan ikkitasiga manbaa bo’lsin:
tуре
// Manbaa sinf TPerson = class fname: string; // Ism
constructor Create(name:string); function info: string; virtual; end;
// TPerson sinfidan hosil qilingan TStud = class(TPerson) fgr:integer; // guruh raqami
constructor Create(name:string; gr:integer);
function info: string; override; end;
// TPerson sinfidan hosil qilingan TProf = class(TPerson) fdep:string; // kafedra nomi
constructor Create(name:string; dep:string); function info: string; override;
end;
Ushbu sinflarning har birida info uslubi aniqlangan. Manbaa sinfda virtual direktivasi yordamida info uslubi virtual deb e’lon qilingan. Uslubni virtual holda e’lon qilish avlod sinfga virtual uslubni o’zining uslubiga almashtish imkonini beradi. Har bir avlod sinfda ajdod sinfdagi mos uslubning o’rnini oluvchi o’zining info uslubi aniqlangan. Ajdod sinfdagi virtual uslubning o’rnini oluvchi avlod sinf uslubi override direktivasi bilan belgilanadi.
Quyida har bir sinfning info uslubi aniqlanishi keltirilgan.
function TPerson.info:string;
begin result := ''; end;
function TStud.info:string; begin
result := fname + ' ' + IntTostr(fgr)+’ gr.’;
end;
function TProf.info:string;
begin
result := fname + ' ' + fdep+’ kaf.’;
end;
Har ikki sinf bitta manbaa sinfdan tug’ilgani sababli, talabalar va o’qituvchilar ro’yhatini quyidagicha e’lon qilish mumkin (bu yerda ob’yekt ko’rsatkich ekanligini yodga olish kerak):
list: array[1..SZL] of TPerson;
Ro’yhatni bunday yo’l bilan e’lon qilish mumkin chunki Delphi tili ajdod sinfga qo’yilgan ko’rsatkich orqali avlod sinfga qo’yilgan ko’rsatkichga qiymat yuklash imkonini beradi. Shuning uchun TStud sinfining ob’yekti ham, TProf sinfining ob’yekti ham list massivining elmenti bo’lishi mumkin bo’lishi mumkin.
Talabalar va O’qituvchilar ro’yhatini info uslubini massiv elementiga qo’llash oraqli chiqarish mumkin. Masalan:
st := '';
for i:=1 to SZL do // SZL - massiv ro’yhatining soni
if list[i] <> NIL
then st := st + list[i].Info + #13; ShowMessage (st);
Navbatdagi dastur yuqorida e’lon qilingan TPerson, TStud va TProf sinflaridan foydalanib talabalar va o’qituvchilarning ro’yhatini tashkil qiladi va chiqaradi. Dastur matni 9.1-listingda, muloqot oynasi esa 9.1- rasmda keltirilgan.
Do'stlaringiz bilan baham: |