Объекттердің модульде жариялану ерекшеліктері. SELF параметрі

  1. Объекттердің модульде жариялану ерекшеліктері

Объектілі типтерді Паскаль тілінің модульдерінде(unit) жариялап, бұдан соң басқа модульдерде не негізгі программада пайдалануға болады. Әдетте үлкен мәселелерді шешуде осындай принципті қолданады. Модульдермен жұмыс істеу барысында класс атауы, егер ол экспортталатын болса, яғни модуль сыртында да экземпляр тудыру үшін қолданылуы тиіс болса, interfaceбөлімінде сипатталады, ал тәсілдер реализациясы — implementation бөлімінде.

Турбо Паскалдың 7-ші версиясында модульде жарияланған класс тәсілдері мен өрістерінің көрінуін сыртта (модуль сыртында, яғни басқа модульдерде) шектейтін құрал бар. Бұл public жәнеprivate директивалары. Олар класс атауында бірнеше рет кездесуі мүмкін. Мұндай директивадан кейін өрістер мен тәсіл атаулары келтіріледі және оларғасәйкесінше public немесе private атрибуты беріледі. Үнсіз келісім бойынша (өрістер мен тәсілдер бұл директиваларды қолданбай сипатталса) public атрибуты беріледі.

public – класс өрістері мен тәсілдері программаның кез-келген жерінен көріне алады(олар объектте бар деп есептеледі).

private – класс өрістері мен тәсілдері сол класс қайсы модульде жарияланған болса сол жерде ғана көріне алады.

Средств, чтобы сделать поля и методы видимыми только изнутри самого объекта (его методов) в Турбо Паскале нет. В Дельфи это директива protected.

Мысалы:

unit A;

interface

type TObj1=object

procedure init;

procedure done;

private

x,y:integer;

procedure Hidden;

end;

var AObj:TObj1;

implementation

begin

AObj.init;

AObj.x:=10; {здесь — можно}

AObj.Hidden;

end.

program My;

uses A;

begin

AObj.init;

AObj.x:=10;{а здесь так нельзя}

AObj.Hidden;

end.

Объекттерді жадыда орналастыру

Бір класстың барлық экземплярлары үшін жады өріске ғана бөлінеді.

Бір класстың барлық экземплярларының тәсілдері код сегментінде бір мәрте ғана жазылады, яғни, сол бір тәсіл берілген класстың барлық экземплярларына қызмет етеді. (Для всех экземпляров одного класса память выделяется только под поля.)

Объект экземпляры өз тәсілдеріне көрсеткішке ие емес (Бұған кейінірек тоқталамыз).

  1. SELF параметрі және тәсілді шақыру

Тәсілді шақыру кезінде оған тағы бір параметр жіберіледі, бұл тәсілді шақырып отырған объект экземплярына алыс (дальний) 32-битті көрсеткіш.Бұл көрсеткіш Self идентификаторы арқылы қолданылады.

Егер тәсіл жұмысының логикасы объекттің өзіне-өзі хабар жіберуінде болса(өз тәсілін Self шақырады), онда программаның оқылуын түсінкті ету үшін Self –ті айқын түрде көрсеткен дұрыс. Бұл параметрге шын мәнінде қажеттілік тәсіл ішінде ассемблерді пайдаланған уақытта туады.

Паскалда тәсіл әрдайым алыс шақыруды қолданып шақырылады.

Егер TMyObject классындағы тәсілдің атауы мынадай болса

procedure Init(x,y:integer);

онда шақыру былай жазылған кездегідей орындалады

procedureInit(x,y:integer;var SELF:TMyObject);

және

MyObject^.Init(10,20);

деп шақырылған уақытта стекқа 10,20 сандары ендіріледі, бұдан соң MyObject көрсетіп тұрған жады орнының сегменті мен жылжуы (смещение) ендіріледі. Бұдан кейін компилятор алыс CALL командасын Init тәсіліне ену адресін көрсетумен бірге генерация жасайды (адрес бұл жағдайда қатаң түрде компилятор арқылы жазылады, және ешқандай таблицадан таңдап алынбайды).