OBJECTS (516216)
Текст из файла
28
Московский государственный технический университет им. Н.Э. Баумана
Г. С. Иванова, Т.Н. Ничушкина, Е.К. Пугачев
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В СРЕДЕ BORLAND PASCAL 7.0
Учебное пособие
по курсу “Алгоритмические языки и программирование”
Под редакцией Г.С. Ивановой
МОСКВА 1997
Аннотация.
Учебное пособие предназначено для студентов 1 курса кафедры ИУ6, изучающих программирование в среде Borland Pascal 7.0.
Предлагаемый материал разбит на две части.
В первой части вводятся основные понятия объектно-ориентированного программирования (ООП), описываются соответствующие средства языка и приводятся простые, но законченные примеры их использования. При этом некоторые детали технологии программирования с объектами опускаются.
Во второй части рассматриваются примеры использования средств ООП при создании программного обеспечения и обсуждаются некоторые технологические детали.
Введение.
Считается, что некий язык поддерживает технологию ООП, если он содержит средства, позволяющие поддерживать абстракцию, инкапсуляцию, наследование и полиморфизм.
Попытаемся дать определения указанным понятиям.
Абстракция - использование обобщенных представлений данных и процедурных частей программы. До появления концепции ООП языки программирования, как правило, поддерживали невысокий уровень абстракции (на уровне описания простейших абстрактных структур данных, таких как массив или запись, и использования подпрограмм в качестве абстрактных операций, которые использовались при разработке программ). Уровень абстракции современных языков программирования существенно вырос. В частности Borland Pascal (начиная с версии 5.5) и С++ позволяют создавать сложнейшие структуры данных и практически полностью абстрагироваться от деталей их реализации, оперируя с ними как некоторыми объектами, правила поведения которых также описаны внутри структуры.
Инкапсуляция - объединение данных с процедурами и функциями, которые манипулируют этими данными. Такое объединение позволяет «скрыть» детали реализации отдельных структур данных и функций, оставляя на «поверхности» интерфейсные процедуры и функции, выполняющие заданные действия над объектом. Ограничение доступа к внутренним полям и подпрограммам позволяет существенно упростить интерфейс программного объекта, вместе с тем увеличивая уровень абстракции языка до оперирования объектами.
Наследование - создание более сложных объектов из более простых посредством добавления параметров и определения новых свойств, что позволяет повторно не определять уже описанные параметры и свойства объектов, которые новый объект “наследует”.
Полиморфизм - это возможность определения единого по имени действия (процедуры или функции), применимого одновременно ко всем объектам иерархии наследования, причем каждый объект иерархии может "заказывать" особенность реализации этого действия над самим собой (аспект полиморфной функции). Использование полиморфизма позволяет выполнять оперативную перестройку программы в соответствии с типами используемых объектов. Для обеспечения этой возможности язык также должен включать средства определения типа объекта в момент выполнения программы и динамического подключения требуемых функций (механизм виртуальных функций).
Язык Borland Pascal поддерживает эти свойства наряду со средствами процедурного, структурного и модульного программирования, которыми обладали предыдущие версии языка.
Появление средств, поддерживающих ООП, позволило при разработке программного обеспечения перейти к использованию технологии ООП. Основное достоинство этой технологии заключается в существенном удешевлении программных разработок и снижении временных затрат за счет многократного использования существующих кодов, например, иерархии классов, используемой при разработке интерфейса с пользователем.
Общий подход ООП состоит в определении набора объектных типов. Объектные типы - это некоторые структуры, интегрирующие данные, содержащие необходимые параметры, с операциями, необходимыми для получения необходимого результата. Как только необходимый набор определен, создаются объекты для конкретной задачи и вызываются операции для выполнения конкретных действий.
1Средства объектно-ориентированного программирования.
1.1. Определение объекта. Компоненты: поля и методы.
Объект представляет собой описание нового типа данных. В отличие от описания обычного (не объектного) типа объект может включать описание не только полей данных, но и заголовков процедур и функций, работающих с этими полями данных. Применительно к объектам такие процедуры и функции получили название методов.
Type
<имя объектного типа> = Object
<описание полей объекта>
<заголовки методов объекта>
end;
Например:
Type TRoom=Object
length,wight:real;
Function Square:real;
end;
Примечание. С точки зрения синтаксиса языка программирования объект представляет собой усложненную запись (record), в которую в частности разрешается включать заголовки процедур и функций.
Тела методов, объявленных в объекте, располагаются после определения объекта с указанием перед именем метода имени объекта (причем, как и в других случаях с предописанием, заголовок метода можно приводить без списка параметров).
Например:
Function TRoom.Square;
Begin Square:=length*wight; end;
1.2. Определение экземпляров объектов. Операция присваивания над объектами. Обращение к компонентам объекта из программы и методов. Неявный параметр Self.
В программе по мере надобности объявляются переменные (экземпляры объектов) определенных ранее объектных типов.
Например:
Var A,B:TRoom; {экземпляры объекта}
pS:^TRoom; { указатель на объект}
C:array[1..10] of TRoom; { массив объектов}
Для экземпляров одного объекта разрешена операция присваивания, при этом выполняется копирование полей одного экземпляра объекта в другой, например: a:=b; {поля a копируются в b}
Доступ к полям и методам объектов из программы осуществляется с указанием конкретного экземпляра объекта, для чего используется точечная нотация или оператор with(аналогично доступу к полям записей). Например:
а) Ss:=A.Square; {вызов функции-метода объекта TRoom}
б) ReadLn(A.length); {обращение к полю объекта}
в) with A do begin ReadLn(length); Ss:=Square; end; { использование оператора with }
Поскольку данные и методы инкапсулированы в одном объекте, все данные автоматически становятся глобальными по отношению к методам, и, соответственно, доступны внутри них без дополнительных уточнений.
При вызове каждый метод неявно получает в качестве параметра указатель на тот экземпляр объекта, для которого он вызван - Self. Этот параметр используется для доступа к полям конкретного объекта, т. е. каждый раз, когда мы обращаемся внутри метода к тому или иному полю объекта, обращение выглядит как
Self.length Self.wight
В некоторых случаях параметр Self используется внутри методов явно.
Пример 1. Использование параметра Self.
{ Программа определения части адреса - смещения экземпляра объекта в памяти}
Program ex;
Type TRoom=Object
length:real;
wight:real;
Function getAddr:Word;
end;
Function TRoom.getAddr;
Begin
getAddr:=ofs(Self); {в данном случае без Self обойтись нельзя}
end;
Var a:Troom;
Begin writeln('Смещение = ',a.getAddr); end.
1.3. Инициализация полей объектов.
Для записи исходной информации в поля объекта можно использовать три способа:
а) занести необходимую информацию, используя оператор присваивания в основной программе;
б) написать специальную подпрограмму (метод), которая будет инициализировать поля объекта;
с) использовать типизированные константы.
Продемонстрируем вышесказанное на примере.
Пример 2. Доступ к полям данных из основной программы.
{ Программа определения суммарной площади заданных комнат. Вариант 1.}
Program ex;
Type TRoom=Object
length, wight:real;
function square:real;
end;
function TRoom.square:real;
begin
square:=length*wight;
end;
Var l,w,s:real;
n,i:integer;
rooms:array[1..10] of TRoom;
Begin
writeln('Введите количество комнат не более 10:');
readln(n);
s:=0;
for i:=1 to n do
Begin writeln('Введите параметры ',i,'-ой комнаты:');
readln(l,w);
rooms[i].length:=l; {присвоение значения полю объекта}
rooms[i].wight:=w; {присвоение значения полю объекта}
s:=s+rooms[i].square;
end;
writeln('Площадь=',s:8:2);
end.
Пример 3. Инициализация полей объекта специальным методом.
{ Программа определения суммарной площади заданных комнат. Вариант 2.}
program ex;
Type TRoom=Object
length:real;
wight:real;
function square:real;
procedure Create(l,w:real);
end;
function TRoom.square:real;
begin
square:=length*wight;
end;
procedure TRoom.Create;{метод, инициализирующий поля объекта}
begin length:=l;
wight:=w;
end;
Var l,w,s:real;
n,i:integer;
rooms:array[1..10] of TRoom;
Begin
writeln('Введите количество комнат не более 10:');
readln(n);
s:=0;
for i:=1 to n do
Begin writeln('Введите параметры ',i,'-ой комнаты:');
readln(l,w);
rooms[i].Create(l,w); {вызов метода}
s:=s+rooms[i].square;
end;
writeln('Площадь=',s:8:2);
end.
Пример 4. Использование типизированных констант (аналог записи) для инициализации полей объекта.
{ Программа определения суммарной площади заданных комнат. Вариант 3.}
program ex;
Type TRoom=Object
length:real;
wight:real;
function square:real;
end;
function TRoom.square:real;
begin
square:=length*wight;
end;
Var l,w,s:real;
n,i:integer;
Const rooms:array[1..3] of TRoom=((length:2.5;wight:3.2),
(length:4.15;wight:2.2),
(length:3.1;wight:3.6));
Begin
s:=0;
for i:=1 to 3 do
begin s:=s+rooms[i].square; end;
writeln('Площадь=',s:8:2);
end.
1.4. Наследование.
Любой объект м.б. объявлен потомком ранее описанного объекта. В этом случае он наследует все поля и методы объекта-родителя и может дополнять их своими полями и методами.
По правилам Borland Pascal у объекта может быть только один родитель, но сколько угодно потомков. Таким образом, механизм наследования обеспечивает создание дерева родственных объектов. Дерево может иметь несколько уровней и ветвей, где на каждом уровне добавляются необходимые поля и методы.
Определение объекта-потомка выполняется следующим образом:
Type <имя объекта-потомка>=Object(<имя объекта-родителя>)
<дополнительные поля данных>
<дополнительные методы>
end;
Например:
Type TName=Object {объект-родитель}
family,name:string[22];
procedure Print;
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.