- •Государственное бюджетное образовательное учреждение среднего профессионального образования Самарский техникум авиационного и промышленного машиностроения им. Д.И. Козлова.
- •Введение
- •Лабораторная работа №1
- •Цель работы
- •Программное обеспечение
- •Среда программирования Borland Delphi
- •Проект Delphi
- •Структура среды программирования
- •Инструментальные средства
- •Стандартные компоненты
- •Практическое задание
- •М етодические указания по выполнению
- •Методические указания
- •Общие рекомендации
- •Визуальные компоненты, используемые при разработке программы для лабораторной работы
- •Методические рекомендации
- •Методические рекомендации
- •Работа с кнопками.
- •Методические рекомендации
- •Иерархия библиотечных классов в Borland Delphi
- •Создание компонентов в среде Delphi
- •Способы создания компонентов
- •Процесс создания компонентов
- •Создание модуля
- •Создание описания и реализации класса для компонента
- •Тестирование не установленного компонента
- •Создание графического изображения для компонента
- •Инсталляция и деинсталляция компонента
- •Создание свойств, событий и методов компонентов
- •Работа со свойствами
- •События
- •Библиографический список
Методические рекомендации
TPerson – инкапсулирует данные об одном человеке
Интерфейс класса:
TPerson = class
public
//свойство фамилия – при записи буквы заменяются на заглавные
property fam:string read Fam_ write SetFam;
//свойство имя – при записи буквы заменяются на строчные
property name:string read Name_ write SetName;
//свойство отчество – при записи буквы заменяются на строчные
property otch:string read Otch_ write SetOtch;
//свойство возвращающее ФИО как одну строку
property FullData:string read GetFullData;
//конструктор инициализирующий объект данными из файла
constructor Create(FileHandle:integer);overload;
//конструктор инициализирующий объект значениями переменной
constructor Create(f,n,o:string);overload;
//процедура записи данных в файл
procedure WriteData(FileHandle:integer);
end;
Особенности реализации класса определяются разработчиком.
Для работы с файлами рекомендуется использовать функции: FileCreate, FileOpen, FileClose, FileRead, FileWrite.
TSpisok – инкапсулирует список людей
Интерфейс класса
TSpisok = class
public
//Конструктор по умолчанию инициализирует данные из файла по умолчанию
constructor Create; overload;
//Конструктор инициализации инициализирует данные из заданного файла
constructor Create(s:string); overload;
//Деструктор –записывает данные в файл и освобождает ресурсы!!!
destructor Destroy; override;
//Добавляет данные о человеке в конец списка
procedure AddPerson(Value:TPerson);
//Возвращает количество людей в списке
property kw_pers:integer read kw;
//Возвращает ФИО i-го человека как строку
property PersonListS[i:integer]:string read GetStringData;
//Возвращает ссылку на данные I-го человека
property PersonListP[i:integer]:TPerson read GetData;
end;
Других опубликованных интерфейсных методов свойств и тем более полей у классов быть не должно. За исключением случая добавления функциональности удаления записи.
разработка и использование иерархии классов
Цель работы
Получение навыков разработки иерархии классов, разработки виртуальных и динамических методов, скалярных и векторных свойств. Применение механизма областей видимости.
Программное обеспечение
Borland Delphi, C++ Builder.
Практическое задание
Модифицировать программу из лабораторной работы №3 для работы с анкетными данными людей трех категорий:
студентов;
сотрудников института;
людей, не являющихся ни студентами, ни сотрудниками.
Анкетные данные их всех включают фамилию, имя и отчество. Кроме этого для сотрудников хранится табельный номер, а для студентов имя группы и номер курс.
Чтение данных из файла производится при запуске программы, запись – при выходе из программы. Имя файла вводится при запуске программы, если оно не введено – берется имя по умолчанию temp.dat. Можно добавлять новых людей и редактировать данные уже имеющихся. При желании можно добавить в программу функцию удаления записи.
Методические рекомендации
Описание интерфейсов классов.
TPerson – инкапсулирует данные об одном человеке
Интерфейс класса:
TPerson = class
public
//свойство фамилия – при записи буквы заменяются на заглавные
property fam:string read Fam_ write SetFam;
//свойство имя – при записи буквы заменяются на строчные
property name:string read Name_ write SetName;
//свойство отчество – при записи буквы заменяются на строчные
property otch:string read Otch_ write SetOtch;
//свойство возвращающее ФИО как одну строку
//метод чтения - виртуальный
property FullData:string read GetFullData;
//конструктор инициализирующий объект данными из файла
constructor Create(FileHandle:integer);overload;
//конструктор инициализирующий объект значениями параметров
constructor Create(f,n,o:string);overload;
//процедура записи данных в файл
procedure WriteData(FileHandle:integer); virtual;
end;
Особенности реализации класса определяются разработчиком.
TStudent – инкапсулирует данные о студенте
Интерфейс класса:
TStudent = class(TPerson)
public
//конструктор инициализирующий объект данными из файла
constructor Create(F:integer);overload;
//конструктор инициализирующий объект значениями параметров
constructor Create(f,n,o,g,k:string);overload;
//свойство возвращающее ФИО, группу и курс как одну строку
//метод чтения перекрывается как виртуальный
//property FullData:string read GetFullData; само свойство не перекрывается
//свойство группа – при записи буквы заменяются на заглавные
property group:string read group_ write SetGroup;
//свойство курс – при записи анализируется, что курс может быть 1..5
property kurs:string read kurs_ write SetKurs;
//процедура записи данных в файл
procedure WriteData(f:integer); override;
end;
Интерфейс класса TSotrudnik разрабатывается аналогично.
TSpisok – инкапсулирует список людей
Интерфейс класса
TSpisok = class
public
//Конструктор по умолчанию инициализирует данные из файла по умолчанию
constructor Create; overload;
//Конструктор инициализации инициализирует данные из заданного файла
//Выполняет анализ типа записи (человек/студент/сотрудник)
constructor Create(s:string); overload;
//Деструктор – записывает данные в файл и освобождает ресурсы
//Выполняет анализа типа объекта (человек/студент/сотрудник) – использовать оператор is
destructor Destroy; override;
//Добавляет данные о человеке в конец списка
procedure AddPerson(Value:TPerson);
//Возвращает количество людей в списке
property kw_pers:integer read kw;
//Возвращает все сведения об i-ом человеке как строку
property PersonListS[i:integer]:string read GetStringData;
//Возвращает ссылку на данные i-го человека
property PersonListP[i:integer]:TPerson read GetData;
end;
Других опубликованных интерфейсных методов, свойств и тем более полей у классов быть не должно. За исключением добавления функциональности удаления записи.
Разработка иерархии классов – хранилищ данных
Цель работы
Получение навыков разработки собственных классов. Получение знаний о практическом использовании основных принципов объектно-ориентированной модели: инкапсуляции, наследования, полиморфизма. Освоение способов разработки конструкторов и деструкторов, скалярных и векторных свойств. Применение механизма областей видимости.
Программное обеспечение
Borland Delphi, C++ Builder.
Практическое задание
Разработать два варианта иерархии классов, хранилищ данных – с использованием векторных свойств и без их использования. Разработанные два варианта иерархии классов должны быть оформлены как модули.
Разработать программу, использующую разработанные классы
методические рекомендации
Функциональные возможности всех классов иерархии:
добавить точку данных (x, f(x));
удалить все точки данных;
вернуть значение функции f(x) для заданного x в интервале от
до
,
и
либо задаются, либо определяются как
наименьшее и наибольшее значение x,
для которого задано значение функции
(
и
могут изменяться при добавлении точек);установить, будут ли и задаваться или рассчитываться;
устанавливать/возвращать значения свойств и ;
возвращать наименьшее и наибольшее значения функции (определить как свойства, которые можно только возвращать, определяются автоматически, могут изменяться при добавлении точек).
Иерархия классов представлена на рисунке 3.1.
Основное отличие классов иерархии в том, каким образом они рассчитывают значение функции в заданной точке:
TDat – возвращает точное значение для тех точек, в которых значение функции определено и 0 в для других x;
TDatLinInt – возвращает точное значение для тех точек, в которых значение определено и производит линейную интерполяцию для точек, значение функции в которых не определено (см. рисунок 3.2);
TDatSplInt– возвращает точное значение для тех точек, в которых значение определено и производит сплайн интерполяцию для точек, значение функции в которых не определено (см. рисунок 3.3).
Для
,
коэффициенты
рассчитываются путем решения относительно
них системы линейных уравнений (3.1):
(3.1)
Коэффициенты полинома рассчитываются по четырем точкам данных для интервала данных, лежащими между двумя средними точками. Для двух крайних интервалов таких четырех точек нет, поэтому используются коэффициенты, рассчитанные для соседних полиномов.
TDatLinIntZ и TDatSplIntZ помимо соответствующего способа интерполяции осуществляют цензурирование данных. При цензурировании из рассмотрения исключаются точки данных, содержащие «выбросы», т.е. точки, в которых значение функции много больше или много меньше, чем в двух соседних точках одновременно. Условия «выбросов»:
- выброс вверх (3.2)
и
(3.2)
выброс вниз (3.3)
и
(3.3)
Разработанные два варианта иерархии классов должны быть оформлены как модули.
Также
должен быть разработана программа,
которая будет служить для тестирования
разработанных классов. Она должна
содержать два независимых интерфейсных
элемента для тестирования двух иерархий
классов. Каждый из них должен создавать
по одному объекту каждого класса
соответствующей иерархии, предоставлять
пользователю возможности: добавлять
заданную точку данных или заданное
число случайных точек данных к объекту
каждого из классов данных каждой иерархии
одновременно, настраивать xmin
и xmax
или режим их автоматического расчета,
удалять все точки данных. А также
отображать на пяти соответствующих
графиках точки данных, полученные от
объектов хранилищ данных в интервале
от
до
,
с шагом
и записывать эти данные в текстовый
файл.
события и делегирование
Цель работы
Получение навыков работы с событиями, изучение вариантов приведения объектных типов, приобретение навыков разработки обработчиков событий, получение представления об указателе на метод, указателе на объект.
Программное обеспечение
Borland Delphi, C++ Builder.
Практическое задание
Разработать программу в соответствии с описанием:
на главной форме расположены 10 кнопок;
при нажатии на одну из них она «запрыгает» - то есть многократно сместится вверх-вниз;
при нажатии на любую из них (в том числе и прыгающую) номер «прыгающей» кнопки изменяется случайным образом.
методические рекомендации
Обработчики событий.
Требуется разработать два обработчика события – нажатие на кнопку. Первый – «прыгающий», второй – нет. В период разработки не стоит назначать эти обработчики конкретным кнопкам. Рекомендуется организовать две переменные – указатели на метод (например как поля объекта форма).
При создании формы следует разыграть случайным образом номер «прыгающей» кнопки (random) и, в соответствии с этим, установить обработчики событий OnClick всех 10 кнопок: 9 «не прыгающих» и одной «прыгающей».
