Объектно-ориентированное программирование



 

Цель работы: Знакомство с объектными типами. Получение первоначальных навыков по объектно-ориентированному программированию (ООП) на языке Паскаль.

 

Основные сведения.

ООП – это новый этап развития современных концепций построения языков и систем программирования. В нем получили дальнейшее развитие принципы структурного программирования: структуризация программ и данных, модульность и пр. Традиционный подход к разработке программ не теряет своего значения, но введение объектных типов достаточно радикально изменяет подход к программированию.

Ключевым понятием в ООП является понятия:

КЛАСС и ОБЪЕКТ

Языки 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!