ТОР 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. Не нашли, что искали? Воспользуйтесь поиском:
|