- •Московский государственный технический университет
- •Содержание.
- •Предисловие
- •Лабораторная работа №1 Процедурные типы
- •1. Теоретические сведения
- •Var X: real; I: integer;
- •X, y : byte;
- •VarFunc : FuncType;
- •I : integer;
- •2.Задачи для самостоятельного решения
- •Лабораторная работа №2 Модули
- •Теоретическая часть
- •Структура модулей
- •Связь модулей друг с другом
- •ISwap(a,b);
- •Var I, y :integer;
- •2.2. Практическая часть
- •Interface
- •Implementation
- •I: Integer;
- •3. Задачи, для самостоятельного решения
- •Лабораторная работа №3 Меню
- •1. Теоретическая часть
- •Var X,y,I: byte;
- •XUpLeft;
- •Var npos,I: integer;
- •Case npos of
- •Лабораторная работа №4.
- •2.Задачи, для самостоятельного решения:
- •Лабораторная работа № 5 Указатели. Связанные списки
- •1. Теоретические сведения
- •1.1. Указатели
- •1.2. Связные списки записей
- •1.3. Управление связанным списком записей (на примере)
- •1.3.1. Построение списка
- •Var ListOfChecks, CurrentCheck: pCheck;
- •1.3.2. Перемещение по списку
- •Var p: Pint;
- •2. Демонстрационные примеры
- •X1,y1,x2,y2: word;
- •Var npos,I,n,j :integer;
- •3: Begin
- •Interface
- •Задачи 1..4. Создать типизированный файл записей, содержащих сведения о багаже пассажира. Структура записи имеет следующий вид:
- •Var rec, beg, endd, current: pnt;
- •Задача 5. Создать типизированный файл записей, содержащих сведения об автомобиле. Структура записи имеет следующий вид:
- •Var rec, beg, endd, current : pnt;
- •Задача 22. Создать типизированный файл записей, содержащих сведения о книгах. Структура записи имеет следующий вид:
- •1.2.Объект и инкапсуляция
- •1.3. Иерархия объектов и наследование
- •Visible: Boolean;
- •Init(x1,y1);
- •Interface
- •Interface
- •X,y : Integer;
- •Visible : Boolean;
- •Implementation
- •Var Temp : Word;
- •Var Temp : Word;
- •Var gm,gd:Integer;
- •Xp:Point;
- •Xs:Square;
- •Xps:PaintSquare;
- •InitGraph(Gd,Gm,'');
- •2. Демонстрационные примеры
- •X,y:integer;
- •Inherited init(ax,ay);
- •Задача 12. Простые объекты.
- •Задача 14. Простые объекты.
- •Задача 15. Простые объекты.
- •Задача 20. Простые объекты.
- •Задача 21. Простые объекты.
- •Задача 22. Простые объекты.
- •Задача 23. Простые объекты.
- •Задача 25. Простые объекты.
- •Лабораторная работа №8 Статические объекты
- •Теоретическая часть
- •1.1.Вывод точек и линий
- •1.2.Вывод многоугольников
- •Виды закраски определяется константами.
- •1.3.Вывод дуг, окружностей, эллипсов
- •1.4.Вывод текста
- •Демонстрационные примеры
- •Лабораторная работа №9
- •2. Задачи, для самостоятельного решения
- •Лабораторная работа №10
- •1.2. Перенос изображения
- •1.3. Масштабирование изображения
- •1.4. Масштабирование рисунка
- •1.5. Поворот изображения
- •1.5.1.Поворот точки
- •1.5.2. Поворот рисунка
- •1.6. Композиция преобразований
- •2. Демонстрационные примеры
- •X,y:integer;
- •1: CloseGraph;
- •3.Задачи, для самостоятельного решения
- •Лабораторная работа №12 Рубежный контроль №2
- •Задачи, для самостоятельного решения
1.2.Объект и инкапсуляция
В Паскале объект очень похож на запись, которая является упаковкой для соединения нескольких взаимосвязанных элементов данных вместе, под одним именем. Данные определяют свойства объекта. С другой стороны, объект имеет свое поведение, определяемое процедурами и функциями этого объекта.
Инкапсуляция - объединение данных с процедурами и функциями для создания нового типа данных - объекта. Связанные с объектом процедуры и функции называются методами. Таким образом, поля данных объекта - это то, что объект "знает", его методы - это то, что объект делает.
Для описания объектов используется зарезервированное слово OBJECT. Описание объекта помещается в разделе описания типов. Вначале описываются все инкапсулированные в объекте данные, а затем - методы доступа к этим данным. Сами методы при описании объекта не раскрываются, указываются лишь заголовки. Методы описываются ниже по тексту программы.
В рассмотренном ниже примере тип объекта "координаты точки" может быть определен следующим образом:
Type Location = Object
X,Y: Integer; {данные}
Procedure Init(InitX, InitY: Integer); {заголовки методов}
Function GetX: Integer;
Function GetY: Integer;
End;
{описание методов}
Procedure Location.Init(InitX, InitY: Integer);
Begin
X:=InitX;
Y:=InitY;
End;
Function Location.GetX: Integer;
Begin
GetX:=X; {получение координаты Х текущей позиции на экране}
End;
Function GetY: Integer;
Begin
GetY:=Y; {получение координаты У текущей позиции на экране}
End;
1.3. Иерархия объектов и наследование
Предположим, что мы хотим высветить точку на экране в позиции, описанной типом LOCATION. Определим тип POINT, который содержит булевское поле, указывающее, светится ли пиксель в данной позиции. Так как все точки должны содержать позицию, мы говорим, что тип POINT - это тип, порожденный типом LOCATION. POINT наследует все, что имеет LOCATION и добавляет в него нечто новое (признак светимости):
Type Location = Object
X,Y: Integer; {данные}
Procedure Init(InitX, InitY: Integer); {заголовки методов}
Function GetX: Integer;
Function GetY: Integer;
End;
Point = Object(Location)
Visible: Boolean;
End;
В качестве примера построим иерархию объектов Координаты - Точка - Квадрат (Lоcation - Point - Square). Удобно определять объекты в модулях, причем тип объекта описывается в интерфейсной части модуля, а тела процедур-методов типа объекта - в разделе модуля Implementation.
Пример 7.1. Этот модуль определяет объекты Lоcation, Point и Square.
unit obj1_OOP;
interface
uses graph;
type location = object
x,y: integer;
procedure init(X1,Y1:integer);
function getX: integer;
function getY: integer;
end;
point = object(location)
procedure init(X1,Y1:integer);
visible: boolean;
procedure show;
procedure hide;
procedure shift(X1,Y1:integer);
end;
square = object(point)
side: integer;
procedure init(X1,Y1,side1:integer);
procedure show;
procedure hide;
procedure shift(X1,Y1:integer);
procedure explode(Step:integer);
end;
{-----------------------------------------}
IMPLEMENTATION
procedure location.init(X1,Y1:integer);
begin
x:=X1;
y:=Y1;
end; {location.init}
function location.getX:integer;
begin
getX:=x;
end; {location.getX}
function location.getY:integer;
begin
getY:=y;
end; {location.getY}
procedure point.init(X1,Y1:integer);
begin
location.init(X1,Y1);
end; {point.init}
procedure point.show;
begin
visible:=true;
putpixel(x,y,getcolor);
end; {point.show}
procedure point.hide;
begin
visible:=false;
putpixel(x,y,getbkcolor);
end; {point.hide}
procedure point.shift(X1,Y1:integer);
begin
hide;