Основы программирования на C++, PASCAL
Type <Идентификатор типа oбъeктa>=Object
<поле>;
. . .
<поле>;
<метод>;
. . .
<метод>;
End;
Поле содержит имя и тип данных. Методы — это процедуры или функции, объявленные внутри декларации объектного типа, в том числе и особые процедуры, создающие и уничтожающие объекты (конструкторы и деструкторы). Объявление метода внутри описания объектного типа состоит только из заголовка (как в разделе Interface в модуле).
Пример 3. Опишем объект «обыкновенная дробь» с методами «НОД числителя и знаменателя», «сокращение», «натуральная степень».
Type Natur=l..32767;
Frac=Record P: Integer; Q: Natur End;
Drob=Object A: Frac;
Procedure NOD (Var C: Natur);
Procedure Sokr;
Procedure Stepen(N: Natur; Var C: Frac);
End;
Описание объектного типа, собственно, и выражает такое свойство, как инкапсуляция.
Проиллюстрируем далее работу с описанным объектом, реализацию его методов и обращение к указанным методам. При этом понадобятся некоторые вспомогательные методы.
Type Natur=l..Maxint;
Frac=Record P: Integer; Q: Natur End;
{Описание объектного типа}
Drob=Object
A: Frac;
Procedure Vvod; {ввод дроби}
Procedure NOD(Var C: Natur); {НОД}
Procedure Sokr;
Procedure Stepen(N: Natur; Var C: Frac);
Procedure Print; {вывод дроби}
End;
(Описания методов объекта)
Procedure Drob.NOD;
Var M,N: Natur;
Begin M:=Abs(A.P); N:=A.Q;
While M<>N Do
If M>N
Then If M Mod N<>0 Then M:=M Mod N Else M:»=N
Else If N Mod M<>0 Then N:=N Mod M Else N:=M;
C:=M
End;
Procedure Drob.Sokr;
Var N: Natur;
Begin If A.P<>O
Then Begin
Drob.NOD(N);
A.P:=A.P Div N; A.Q:=A.Q Div N
End
Else A.Q:=1
End;
Procedure Drob.Stepen;
Var I: Natur;
Begin
C.P:=1; C.Q:=1;
For I:=1 To N Do Begin C.P:=C.P*A.P;
C.Q:=C.Q*A.Q
End;
End;
Procedure Drob.Vvod;
Begin
Write('Введите числитель дроби:'); ReadLn(A.P) ;
Write('Введите знаменатель дроби:');ReadLn(A.Q) ;
End;
Procedure Drob.Print;
Begin WriteLn(A.P,'/',A.Q) End;
{Основная программа}
Var Z: Drob; F: Frac;
Begin
Z.Vvod; {ввод дроби}
Z.Print; {печать введенной дроби}
Z.Sokr; {сокращение введенной дроби)
Z.Print; (печать дроби после сокращения}
Z.Stepen(4,F); (возведение введенной дроби в 4-ю степень}
WriteLn(F.P,'/'/F.Q)
End.
Прокомментируем отдельные моменты в рассмотренном примере. Во-первых,