- Объектілі типті жариялау
Паскалда «объект» терминінен шатасуымыз мүмкін, өйткені «объект» термині классты да, осы класстың экземплярын да білдіре береді. Сондықтан, анық болуы үшін бұдан бұлай әңгіме класс туралы болатын болса, «класс» не «объектілі тип» терминдерін қолданамыз, әңгіме экземпляр туралы болатын болса онда «экземпляр (объекттің)» терминін қолданамыз. Барлық объекттер қайсыбір объектілі типтің экземпляры ретінде туындайды. Демек, тип экземплярды жариялаудан (сипаттаудан) бұрын жариялануы (сипатталуы) керек.
Объектілі типті жариялау (сипаттау) 2 бөлімнен тұрады: 1.Класс атауын жариялау. Класс атауы интерфейсті (тәсілдер атауының тізімі) және берілгендер өрісі құрылымынөз ішіне алады. 2.Тәсілдер орындалуларын (реализациясын) жариялау. Класс атауын жариялау type секциясында жүргізіледі. Тип атауынан соң object кілттік сөзі жазылады, бұдан соң өрістер тізімі жазылады, одан кейін тәсіл атауларының тізімі жазылады(нүктелі үтір арқылы).
Тәсіл процедура немесе функция болу мүмкін.
Әдетте, Паскалда объект міндетті түрде Init атаулы инициализации тәсіліне және Done атаулы деинициализации (жойып жіберуге дайындық) тәсіліне ие болу керек.
- Объект және тәсілді жариялау мысалы
Мысал:
Сөздік сипаттама. Объект – бұл жерде жүгіріп тұрған қатар(бегущая строка). Экранның белгілі бір жерінде төртбұрыш орналастырылуы мүмкін, оның ішіндегі текст қатарлары горизонталь бойынша жылжып отырады. Бұл әрекетті тоқтатуға және іске түсіруге болады.
Әрекеттер(Действия): инициализация (қатарды және оның экрандағы орнын беру), іске түсіру, тоқтату. Деинициализация әрекеті талап етілмейді, бірақ ол ереже бойынша қатысуы тиіс. Сондықтан оның тәсілін объект интерфейсіне тіркейміз, ал орындалуын бос қалдырамыз.
Локал жадының құрылымы: X,Y координаталары, S қатары, әрекеттің іске түскендігінің белгісі — running, жүгірмелі қатардың экранда көрсетілетін ағымдағы бөлігі (текущее смещение от начала строки для показа на экране) — offset.
type TRunnungString = object
x,y: integer;
s:string;
running:boolean;
offset:integer;
procedure Init(xx,yy:integer;ss:string);
procedure Run;
procedure Stop;
function IsRunning:boolean;
procedure Done;
end;
Тәсілдің формальді параметрлерінің атауы объект өрістерінің атауларымен бірдей болмауы қажет. (Init тәсіліне қараңыз).
- Тәсіл реализациясының жариялануы және тәсілді шақыру
Класс атауын жариялаудан бөлек, одан әрі программаның процедураларды сипаттау бөлімінде класс атауында келтірілген барлық тәсілдердің орындалуы (реализациясы) жарияланады. Тәсіл орыдалуы процедура не функция сипаттамасына ұқсас сипатталады. Бірақ:
— тәсіл атауының алдынан міндетті түрде классының атауы нүкте арқылы жазылады;
— тәсіл ішінде класс атауында келтірілген объекттің барлық өрістері көрінетін (видимыми) деп есептеледі.
Мәселен, Init тәсілінің орындалуы (реализациясы) мынадай болады:
procedure TRunningString.Init(xx,yy: integer; ss:string);
begin
x:=xx; y:=yy; s:=ss;
end;
Паскаль тілі синтаксисінің ережесі тәсілдің реализациясын (орындалуын) сипаттау кезінде формальді параметрлер тізімін жазбауға рұқсат береді, себебі олар класс атауында келтірілген. Бірақ бұлай істеу керек емес! Программа оқылғанда түсінікті болуы үшін тәсіл реализациясында да формальді параметрлер тізімін келтірген дұрыс.
Жазылған Init тәсілі нені білдіреді? Бұл мынаны білдіреді: TMyObject классының әрбір экземпляры инициализация бойынша әрекет ете алады, және формальді параметр ретінде берілген 2 бүтін сан және қатар инициализация жасалуын қалап отырған экземплярдың өрістеріне орналастырылады.
Алайда, біздің класстың әлі бірде-бір экземпляры жоқ, сондықтан біз сипатталған тәсілдерді шақыра алмаймыз.
Программаға жүгірмелі қатардың экземплярын құру керектігін білдіру үшін айнымалыларды сипаттау бөлімінде былай жазамыз:
var RunningString:TRunningString;
Бұл экземплярды (айнымалыны) пайдаланып программа денесінде мысалы былай жазуға болады:
RunningString.Init(10,10,’Hello, world’);
RunningString.Run;
RunningString.Done;
Яғни, тәсілді шақыру үшін объект экземплярының атауынан кейін нүкте қойылып, тәсіл атауы нақты (фактический) параметрлер тізімімен бірге жазылады.