Объектно-ориентированное программирование
Цель работы: Знакомство с объектными типами. Получение первоначальных навыков по объектно-ориентированному программированию (ООП) на языке Паскаль.
Основные сведения.
ООП – это новый этап развития современных концепций построения языков и систем программирования. В нем получили дальнейшее развитие принципы структурного программирования: структуризация программ и данных, модульность и пр. Традиционный подход к разработке программ не теряет своего значения, но введение объектных типов достаточно радикально изменяет подход к программированию.
Ключевым понятием в ООП является понятия:
КЛАСС и ОБЪЕКТ
Языки Pascal ABC (и Object Pascal начиная с 8 версии) поддерживают концепцию объектно-ориентированного программирования, так же как и Язык Delphi и дает возможность определять классы .
Класс представляет собой составной тип, состоящий из полей (переменных), методов (процедур и функций) и свойств.
Класс — это сложный тип данных схожий с комбинированным типом (records) , но включающий в себя, помимо описания полей данных, еще описание процедур и функций, которые могут быть выполнены над переменной этого типа данных (класса) и для обработки ее полей.
В терминологии ООП данные класса называются полями ( или свойствами) и служат для хранения информации об объекте. , а процедуры и функции — называются методами. предназначенные для обработки полей.
|
|
Описание класса имеет вид:
type
имя класса=class
описания полей
объявления или описания методов и описания свойств
end;
Пример объявления простого класса:
type TPerson = class
Private
f_name: string[15]; //поле
f_address: string[35];//поле
f_age: integer;
Public
procedure Show; // объявление (декларация) метода
end;
Поля и методы образуют интерфейс класса
Еще пример объявления класса:
type
ТStudent=class
name: string;
course, group: integer;
constructor {procedure} Create(nm: string; c,gr: integer);
procedure Print;
begin
writeln('Имя:',name,' курс:',course,' группа:',group);
end;
procedure NextCourse;
begin
Inc(course);
end;
end;
constructor {procedure} ТStudent.Create(nm: string; c,gr: integer);
begin
name:=nm;
course:=c;
group:=g;
end;
Объект - представитель классаили другими словами – переменная этого типа (класса) и объявляется в программе в разделе var
Например :
Var
stud1, stud2 : Т student ;
professor: TPerson;
Объект в целом предназначен для решения какой-либо конкретной задачи и воспринимается в программе как неделимое целое (т.е. нельзя из объекта «выдернуть» отдельное поле или метод).
КОНСТРУКТОР И ДЕСТРУКТОР
Объект — это динамическая структура. Переменная-объект содержит не данные, а ссылку на данные объекта. Поэтому программист должен позаботиться о выделении памяти для этих данных.
Выделение памяти осуществляется при помощи специального метода класса (процедуры) — конструктора, которому обычно присваивают имя Create (создать). Для того чтобы подчеркнуть особую роль и поведение конструктора, в описании класса вместо слова procedure используется слово constructor.( по синтаксису языка Pascal ABC и Object Pascal и Delphi)
|
|
Инициализаторы полей
При создании объекта его поля инициализируются автоматически нулевыми значениями если они не инициализированы явно. Их инициализация может проводиться как в конструкторе, так и непосредственно при описании. Инициализация поля при описании приводит к тому, что код инициализации вставляется в начало ВСЕХ конструкторов.
Объекты создаются с помощью специальных методов, называемых конструкторами.
Конструктор представляет собой функцию, создающую объект в динамической памяти, инициализирующую его поля и возвращающую указатель на созданный объект. Этот указатель обычно сразу присваивается переменной типа класс. При описании конструктора вместо служебного слова function используется служебное слово constructor. Кроме того, для конструктора не указывается тип возвращаемого значения.
Например:
type
Person = class
private
nm: string;
ag: integer;
public
constructor Create(name: string; age: integer);
end;
...
constructor Person.Create(name: string; age: integer);
begin
nm := name;
ag := age;
end;
|
|
В PascalABC.NET конструктор всегда должен иметь имя Create. При описании конструктора внутри класса можно опускать его имя:
type
Person = class
constructor (name: string; age: integer);
begin
nm := name;
ag := age;
end;
end;
Для вызова конструктора можно использовать два способа.
1 способ. В стиле Object Pascal.
Для вызова конструктора следует указать имя класса, за которым следует точка-разделитель, имя конструктора и список параметров. Например:
var p: Person;
p := Person.Create('Иванов',20);
2 способ. С помощью операции new - в стиле C# (предпочтительный).
var p: Person;
p := new Person('Иванов',20);
Деструктор в Object Pascal - специальная процедура, уничтожающая объект и освобождающая динамическую память, которую этот объект занимал. При описании деструктора вместо служебного слова procedure используется служебное слово destructor.
Например:
destructor Destroy;
begin
...
end;
Поскольку в PascalABC.NET память управляется сборщиком мусора, деструктор в PascalABC.NET не играет никакой роли и представляет собой обычную процедуру-метод. Можно эту процедуру не создавать.
Методы класса – это процедуры и функции, объявление которых включено в описание класса. Они выполняют действия над объектами класса.
Для того чтобы метод был выполнен (вызвать процедуру), необходимо указать имя объекта и имя метода, отделив одно имя от другого точкой. Например, инструкция
|
|
Var
stud1, stud2 : Т student ;
professor: TPerson;
…
professor. Show;
- вызывает применение метода show к объекту professor.
Пример 2,
Stud2.print;
stud2.nextCourse;
Методы класса объявляются в программе точно так же, как и обычные процедуры и функции, за исключением того, что имя процедуры или функции, являющейся методом, состоит из двух частей: имени класса, к которому принадлежит метод, и имени метода. Имя класса от имени метода отделяется точкой.
Ниже приведен пример определения метода show класса TPerson
// метод Show класса TPerson
procedure TPerson.Show;
Begin
ShowMessage( 'Имя:' + fname + #13
+ 'Адрес:' + faddress +#13+’возраст:’ + f_age);
end;
или Пример 2,
procedure TStudent.Print;
Begin
writeln('Имя:',name,' курс:',course,' группа:',group);
end;
procedure TStudent.NextCourse;
Begin
Inc(course);
end;
Примечание: В инструкциях метода ( в описании процедуры) доступ к полям объекта осуществляется без указания имени объекта.
Пример 1. Вычислить площадь и объем шара. Программу составить используя ООП.
TyPe Tshar=class
r: real;
Procedure INPUT;
Function v:real;
Function s:real;
Procedure Print;
end;
Procedure Tshar.INPUT;
Begin
Writeln('Введите радиус шара');
Readln (r);
End;
Function Tshar.v:real;
Begin
V:=4/3*Pi*Power(r,3);
end;
Function Tshar.s:real;
Begin
S:=4*Pi*Power(r,2);
end;
Procedure Tshar.Print;
Begin
Writeln('Объём шара ',v:1:2);
Writeln('Площадь поверхности шара ',s:1:2);
End;
// Тело основной программы
Var shar:Tshar;
Begin
shar:=new TShar;
shar.input;
shar.Print;
End.
Пример 2: Распечатать список студентов с указанием средних баллов
type
TStudent=Class
Name:string[30];
Group:string[10];
Birthday:string[10];
Marks:array [1..5] of integer;
procedure Input;
procedure Print;
function AverageMark:integer;
end;
procedure TStudent.Input;
var i:integer;
begin
writeln;
write('ВВедите ФИО студента ');readln(Name);
write('ВВедите группу студента ');readln(Group);
write('ВВедите дату рождения ');readln(Birthday);
for i:=1 to 5 do
begin
write('Введите ',i,' оценку студента ');readln(Marks[i]);
end;
end;
procedure TStudent.Print;
var i:integer;
begin
writeln;
writeln('ФИО студента: ',Name);
writeln('Группа студента: ',Group);
writeln('День рождения студента (дд.мм.гггг): ',Birthday);
for i:=1 to 5 do
begin
writeln(i,' оценка студента: ',Marks[i]);
end;
writeln('Средняя оценка: ',AverageMark);
end;
function TStudent.AverageMark:integer;
var i,AvMark:integer;
begin
AvMark:=0;
for i:=1 to 5 do
inc(AvMark,Marks[i]);
AvMark:=AvMark div 5;
AverageMarK:=AvMark;
end;
var Students:array [1..30] of TStudent;
StudentCount:1..30;
i:integer;
Begin
write('ВВедите количество студентов ');readln(StudentCount);
writeln('ВВедите данные о студентах');
for i:=1 to StudentCount do
Students[i]:= new TStudent;
for i:=1 to StudentCount do
Students[i].Input;
writeln;
writeln('Данные о студентах');
for i:=1 to StudentCount do
Students[i].Print;
End.
3.Задание. Составить программу с использованием ООП для решения задач, приведенных в лабораторной работе №8. Свойства и методы объекта студент выбирает исходя из варианта задания.
Контрольные вопросы.
1) Что такое ООП?
2) Как объявить класс?
3) Что включает объект?
4) Как получить доступ к свойствам и методам объекта?
Приложение
Основные принципы ООП
Три основополагающих принципа объектно-ориентированного программирования (ООП): инкапсуляция, наследование, , полиморфизм
Дата добавления: 2018-11-24; просмотров: 361; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!