Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Теоретические сведения. Понятие класса и объекта




Понятие класса и объекта

Класс — это структура, включаю­щая в себя описание данных, процедур и функций, которые могут быть выполнены применительно к представителю класса — объекту.

Пример объявления простого класса:

TPerson = class

private

fname: string[15];

faddress: string[35];

public

procedure Show;

end;

Данные класса называют полями, процедуры и функции — методами. В приведенном примере TPerson — это имя класса, fname и faddress — име­на полей, show — имя метода.

В программе помещают описание класса в раздел описания типов (type).

Объекты в программе как представители класса объявляются в разделе var, например:

var

student: TPerson;

professor: TPerson;

Объект — это динамическая структура. Переменная-объект содержит не данные, а ссылку на данные объекта. Поэтому необходимо выделить память для этих данных.

Выделение памяти осуществляется с помощью специального метода клас­са — конструктора, которому обычно присваивают имя Create (создать). Для того, чтобы подчеркнуть особую роль и поведение конструктора, в опи­сании класса вместо слова procedure используется слово constructor.

Например, описание класса TPerson, в состав которого введен конст­руктор, имеет вид

 

TPerson = class

private

fname: string [15];

faddress: string [ 35 ];

constructor Create; // конструктор

public

procedure show; // метод

end;

Помимо выделения памяти конструктор, как правило, решает задачу при­сваивания полям объекта начальных значений, т. е. осуществляет инициали­зацию объекта. Ниже приведен пример реализации конструктора объек­та TPerson:

constructor TPerson.Create;

begin

fname:= '';

faddress:= ' ';

end;

Выделение памяти для данных объекта происходит путем присваивания зна­чения результата применения метода-конструктора к типу (классу) объекта. Например, после выполнения инструкции

professor:= TPerson.Create;

выделяется необходимая память для данных объекта professor.

После объявления и инициализации объект можно использовать, например, установив значение поля объекта. Доступ к полю объекта осуществляется указанием имени объекта и имени поля, которые отделяются друг от друга точкой. Например, для доступа к полю fname объекта professor имеет вид

professor.fname

Для ос­вобождения памяти, занимаемую объектом, используют специальный метод-деструктор Free, который вызывает деструктор. Например, осво­бождение памяти, занимаемую полями объекта professor, имеет вид:

professor.Free;

Метод

Методы класса – это процедуры и функции, объявление которых включено в описание класса. Они выполняют действия с полями класса, для чего указывают имя объекта и имя метода, от­делив одно имя от другого точкой. Например, инструкция professor.Show; вызывает применение метода show к объекту professor. Фактически инст­рукция применения метода к объекту — это специфический способ записи вызова процедуры.

Методы класса определяются в программе аналогично обычным процедурам и функциям, за исключением того, что имя процедуры или функ­ции, являющейся методом, состоит из двух частей: имени класса, к которо­му принадлежит метод, и имени метода. Имя класса от имени метода отде­ляется точкой.

Например, определение метода show класса TPerson имеет вид:

procedure TPerson.Show;

begin

writeln('Имя:' + fname + #13 + 'Адрес:' + faddress);

end;

В операторах метода доступ к полям объекта осуществляется без указания имени объекта.

Инкапсуляция и свойства объекта

Под инкапсуляцией понимается скрытие полей объекта в целях обеспечения доступа к ним только посредством методов класса.

Ограничение доступа к полю объекта реализуется с по­мощью свойствобъекта. Свойство объекта характеризуется полем, сохраняю­щим значение свойства, и двумя методами, обеспечивающими доступ к по­лю свойства. Метод установки значения свойства называется методом записи свойства (write), а метод получения значения свойства — методом чтения свойства (read).

В описании класса перед именем свойства записывают зарезервированное слово property (свойство). После имени свойства указывается его тип, затем имена мето­дов, обеспечивающих доступ к значению свойства. После слова read указывается имя метода, обеспечивающего чтение свойства, после слова write — имя метода, отвечающего за запись свойства.

Например, описание класса TPerson, содержащего два свойства: Name и Address, имеет вид

type

TName = string[15];

TAddress = string[35];

TPerson= class // класс

private

FName: TName; // значение свойства Name

FAddress: TAddress; // значение свойства Address

Constructor Create(Name:Tname);

Procedure Show;

Function GetName: TName;

Function GetAddress: TAddress;

Procedure SetAddress(NewAddress:TAddress);

public

Property Name: Tname // свойство Name

read GetName; // доступно только для чтения

Property Address: TAddress // свойство Address

read GetAddress // доступно для чтения

write SetAddress; // и записи

end;

В программе для установки значения свойства записывается оператор присваивания значения свойству. Например, чтобы присвоить значение свойству Address объекта student, достаточно записать

student.Address:= 'С.Петербург, ул.Садовая 21, кв.З';

Компилятор перетранслирует преобразует приведенную инструкцию присваивания зна­чения свойству в инструкцию вызова метода

student.SetAddress('С.Петербург, ул.Садовая 21, кв.З');

Наследование

Механизм получе­ния новых классов посредством добавления полей, свойств и методов к уже существующим классам называется наследованием. При этом новый, порожденный класс (потомок) наследует свойства и методы своего базового, родитель­ского класса.

В объявлении класса-потомка указывается класс родителя. Например, класс TEmployee (сотрудник) может быть порожден от рассмотренного выше класса TPerson путем добавления поля FDepartment (отдел). Объявление класса TEmployee в этом случае может выглядеть так:

TEmployee = class (TPerson)

FDepartment: integer; // номер отдела

constructor Create (Name:TName; Dep:integer);

end;

Класс TEmployee должен иметь свой собственный конструктор, обеспечи­вающий инициализацию класса-родителя и своих полей. Например, реали­зация конструктора класса TEmployee имеет вид

constructor TEmployee.Create(Name:Tname;Dep:integer);

begin

inherited Create(Name);

FDepartment:=Dep;

end;

В приведенном примере директивой inherited вызывается конструктор ро­дительского класса. После этого присваивается значение полю класса-потомка.

Полиморфизм и виртуальные[BP3] методы

Полиморфизм — это возможность использовать одинаковые имена для мето­дов, входящих в различные классы. Концепция полиморфизма обеспечивает в случае применения метода к объекту использование именно того метода, который соответствует классу объекта.

Например, определены три класса, один из которых является базовым для двух других:

Type

// базовый класс

TPerson = class

fname: string; // имя

constructor Create(name:string);

function info: string; virtual;

end;

// производный от TPerson

TStud = class (TPerson)

fgr:integer; // номер учебной группы

constructor Create(name:string;gr:integer);

function info: string; override;

end;

// производный от TPerson

TProf = class (TPerson)

fdep:string; // название кафедры

constructor Create (name:string;dep:string);

function info: string; override;

end;

Var p: TPerson; // Определяем переменную типа TPerson

Begin

p:= TStud.Create(’Иванов’);

Writeln(p.info); // Вызов TPerson.info замещается TStud.info

p.Free;

p:= TProf.Create(’Петров’);

Writeln(p.info); // Вызов TPerson.info замещается TProf.info

end.

В каждом из этих классов определен метод info. В базовом классе с по­мощью директивы virtual метод info объявлен виртуальным, что дает возможность дочернему классу заменить виртуальный метод своим собственным. В каждом дочернем классе опре­делен свой метод info, помеченный директивой override, который замещает соответствующий метод родитель­ского класса.

Директивы, используемые при объявлении класса

Любой создаваемый класс может содержать секции (разделы), характеризуемые зарезервированными словами, определяющими области видимости класса:

· Published (опубликованные)

· Private (закрытые)

· Protected (защищенные)

· Public (открытые)

· Automated (автоматизированные)

Public не накладывает ограничений на область видимости перечисляемых в ней полей, методов и свойств — их можно вызывать в любом другом модуле программы.

Published также не ограничивает область видимости, однако в ней перечисляются свойства, которые должны быть доступны не только на этапе исполнения, но и на этапе конструирования программы (в окне инспектора объектов).

Private сужает область видимости до минимума: элементы описания, указанные в этой секции, доступны только внутри методов данного класса и подпрограмм, находящихся в том же модуле, где описан класс. Элемент, объявленный в private, не доступен даже ближайшим потомкам класса, если они размещаются в других модулях.

Protected доступна только методам самого класса, а также любым его потомкам независимо от того, находятся ли они в том же модуле или нет.

Automated используется только для объявления свойств и методов, которые будут добавлены к так называемому интерфейсу OLE-объектов автоматизации; область видимости членов этой секции не ограничена.

Порядок выполнения работы

1. Создать приложение с использованием наследования, инкапсуляции и полиморфизма которое позволяет:

· создавать динамический список объектов класса согласно варианту;

· просматривать список;

· демонстрировать применение методов к объектам.

2. Разместить описание свойств и методов класса и подклассов в отдельном модуле. Класс должен иметь общие свойства и методы, а подклассы — свои свойства. Класс должен обязательно иметь свойство - указатель на следующий объект для организации динамической структуры.

3. Создать виртуальные методы для формирования строки с описанием объекта и реализации вычислений.

4. Предусмотреть обработку наиболее типичных исключительных ситуаций. При загрузке программы должна появляться заставка с краткой информацией о разработчике программы.

Возможный вид формы показан на рис. 17.1.

 

[BP4]

Рис. 17.1. Вид формы для лабораторной работы №17

Варианты

1. Класс «Плоские фигуры», имеющий свойства (высота, основание) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: треугольник и параллелограмм. Для вычисления площадей воспользоваться формулами

и .

 

2. Класс «Плоские фигуры», имеющий свойства (сторона 1, сторона 2) и методы (формирование строки с описанием объекта и вычисление периметра). Описать классы-потомки: треугольник со свойством сторона 3, и параллелограмм. Для вычисления периметров воспользоваться формулами

и .

 

3. Класс «Параллелограммы», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление периметра). Описать классы-потомки: прямоугольник со свойством сторона 2, и квадрат. Для вычисления периметров воспользоваться формулами

и .

 

4. Класс «Параллелограммы», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: прямоугольник со свойством сторона 2, и квадрат. Для вычисления площадей воспользоваться формулами

и .

 

5. Класс «Четырехугольники», имеющий свойства (сторона 1, высота) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: трапеция со свойством сторона 2, и ромб. Для вычисления площадей воспользоваться формулами

и .

 

6. Класс «Круглые тела», имеющий свойство (радиус) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: цилиндр со свойством высота, и сфера. Для вычисления объема воспользоваться формулами

и .

 

7. Класс «Круглые тела», имеющий свойство (радиус) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: цилиндр со свойством высота, и сфера. Для вычисления площади полной поверхности воспользоваться формулами

и .

 

8. Класс «Круглые тела», имеющий свойство (радиус) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: конус со свойством высота, и сфера. Для вычисления площади полной поверхности воспользоваться формулами

и .

 

9. Класс «Круглые тела», имеющий свойство (радиус) и методы: (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: конус со свойством высота, и сфера. Для вычисления объема воспользоваться формулами

и .

 

10. Класс «Круглые тела», имеющий свойства (радиус, высота) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: конус и цилиндр. Для вычисления объема воспользоваться формулами

и .

 

11. Класс «Круглые тела», имеющий свойства (радиус, высота) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: конус и цилиндр. Для вычисления площади полной поверхности воспользоваться формулами

и .

 

12. Класс «Параллелепипед», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: прямоугольный параллелепипед со свойствами сторона 2, сторона 3 и куб. Для вычисления площади полной поверхности воспользоваться формулами

и .

 

13. Класс «Параллелепипед», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: прямоугольный параллелепипед со свойствами сторона 2, сторона 3 и куб. Для вычисления объема воспользоваться формулами

и .

 

14. Класс плоские фигуры, имеющий свойства: сторона и методы: формирование строки с описанием объекта и вычисление площади. Описать классы-потомки: треугольник со свойством высота и квадрат. Для вычисления площадей воспользоваться формулами

и .

 

15. Класс «Плоские фигуры», имеющий свойство (сторона) и методы (формирование строки с описанием объекта и вычисление периметра). Описать классы-потомки: треугольник со свойствами сторона 1 и сторона 2 и квадрат. Для вычисления периметров воспользоваться формулами

и .

 

16. Класс «Плоские фигуры», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: прямоугольник со свойством сторона 2 и параллелограмм со свойством высота. Для вычисления площадей воспользоваться формулами

и .

 

17. Класс «Плоские фигуры», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: трапеция со свойствами сторона 2 и высота, и квадрат. Для вычисления площадей воспользоваться формулами

и .

 

18. Класс «Плоские фигуры», имеющий свойство (сторона 1) и методы: формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: треугольник со свойством высота и прямоугольник со свойством сторона 2. Для вычисления площадей воспользоваться формулами

и .

 

19. Класс «Плоские фигуры», имеющий свойства (сторона 1, сторона 2) и методы (формирование строки с описанием объекта и вычисление периметра). Описать классы-потомки: треугольник со свойством сторона 3 и прямоугольник. Для вычисления периметров воспользоваться формулами

и .

 

20. Класс «Плоские фигуры», имеющий свойства (сторона 1, высота) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: трапеция со свойством сторона 2, и параллелограмм. Для вычисления площадей воспользоваться формулами

и .

 

21. Класс «Объемные тела», имеющий свойство (сторона или высота) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: цилиндр со свойством радиус, и куб. Для вычисления объема воспользоваться формулами

и .

 

22. Класс «Объемные тела», имеющий свойство (сторона или высота) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: цилиндр со свойством радиус, и куб. Для вычисления площади полной поверхности воспользоваться формулами

и .

 

23. Класс «Объемные тела», имеющий свойство (сторона или высота) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: конус со свойством радиус, и куб. Для вычисления объема воспользоваться формулами

и .

 

24. Класс «Плоские фигуры», имеющий свойства (сторона 1, высота) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: треугольник и трапеция со свойством сторона 2. Для вычисления площадей воспользоваться формулами

и .

 

25. Класс «Плоские фигуры», имеющий свойства (сторона 1, сторона 2) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: прямоугольник и трапеция со свойством высота. Для вычисления площадей воспользоваться формулами

и .

Контрольные вопросы

1. Понятие класса, поля и метода.

2. Понятие инкапсуляции.

3. Понятие полиморфизма.

4. Основные принципы наследования.

5. Правила создания виртуальных методов.

6. Назначение директив используемых в описании класса.

Лабораторная работа № 18
Компоненты для работы с файлами и каталогами

Цель работы: получение навыков сохранения информации в файле и считывания из файла с использованием компонентов FileListBox, DirectoryListBox, DriveComboBox, FilterComboBox.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных