Metode în delphi

Delphi pentru profesioniști. Programarea orientată pe obiecte

Din cele de mai sus cititori materialul aflat că exploatarea instalațiilor de furnizate de diverse tipuri de metode care sunt diferite caracteristici moștenire de punere în aplicare. Acum este momentul să ia în considerare aceste metode mai detaliat.







metode abstracte Chemat definite în clasă, dar nu conțin nici o acțiune, nu a invocat și trebuie să fie înlocuite în clasele descendentă. Rezumat poate fi numai metode virtuale și dinamice. Object Pascal În astfel de metode sunt declarate cu aceeași directivă numele. Este indicat în descrierea metodei:

Procedura NeverCallMe; virtuale; abstract;

În acest caz, nici un cod nu are nevoie să scrie această metodă. Apelată metoda NeverCallMe va conduce la crearea unei situații excepționale EAbstractError (situații excepționale dedicate Ch. 4).

Un exemplu al unei clase de TField Sec. „Polimorfismul“ din acest capitol explică de ce aveți nevoie pentru a utiliza metode abstracte. În acest caz, clasa TField nu este utilizat de sine; scopul său principal - să fie strămoșul ierarhiei claselor de beton - „câmpuri“ și permit să abstracte de la indicații. Cu toate că procedurile showData parametri și descris ca TField. dar dacă-l treci un obiect al acestei clase, va exista o excepție numesc o metodă abstractă.







Metodele statice, precum și orice câmp se comportă la fel în obiecte descendente: puteți, fără restricție să se suprapună numele vechi, și, astfel, a schimba tipul de tehnici. Codul noii metode statice blochează complet (înlocuiește) codul de metoda veche:

Procedura SetData (AValue: Extended);

T2ndObj = class (TlstObj)

Procedura SetData (AValue: Integer);

moștenită SetData (0.99);

În acest exemplu, diferite metode numite SetData atribuie valori diferite câmpuri cu numele i. Suprapuneri (același nume) câmp descendent în strămoș N; astfel încât, desigur, două din același nume de domeniu cu numele i - este un nonsens; așa că este făcută numai de exemplu.

În practică, programarea este de obicei toate datele de identificare din program (inclusiv câmpurile de obiecte) nume semnificative. Acest lucru va facilita în mare măsură activitatea cu codul sursă, nu numai la alți dezvoltatori, dar, de asemenea, vă.

Dacă vă gândiți la exemplele de mai sus, este clar că compilatorul nu este posibil să se determine clasa obiectului este de fapt transmis în procedura showData. Avem nevoie de un mecanism pentru a determina acest lucru în timpul rulării. Un astfel de mecanism este numit întârziere de legare (târzie de legare).

Desigur, acest mecanism ar trebui să fie într-un fel asociat cu obiectul transferat. Acesta folosește tabel virtuală metodă (Metoda virtuală Table, VMT) și tabelul de metode dinamice (Dynamic Metoda Table, DMT).

Pentru a acoperi și metode virtuale și dinamice este directiva suprascriere. prin care (și numai cu ea!), puteți trece peste ambele aceste tipuri de metode. Iată un exemplu:

Procedura VirtMethodl; virtuale;

Procedura VirtMethod2; virtuale;

Procedura DynaMethodl; dinamică;