
- •Федеральное агентство по образованию
- •Государственное образовательное учреждение высшего профессионального образования
- •«Орловский государственный технический
- •Университет»
- •Учебно-научно-исследовательский институт информационных технологий
- •Печатается по решению редакционно-издательского совета ОрелГту орел 2010
- •302030, Г. Орел, ул. Московская, 65
- •3 Новые концепции ооп в object pascal
- •4 Задания к лабораторным работам
- •5 Контрольные вопросы
- •6 Содержание отчета
- •7 Список литературы
4 Задания к лабораторным работам
Лабораторная работа №1. Тема – Работа с основными элементами управления Delphi – поля редактирования, кнопки, метки.
Написать программу калькулятор. Форма программы содержит 2 поля редактирования для операндов, 4 кнопки для задания арифметических действий, 1 кнопка «сброс», метку для вывода результата. Виды контроля, которые должна обеспечивать программа:
В поля для операндов могут попадать только разрешенные символы – цифры, десятичная точка.
Кнопки для арифметических действий недоступны, если хотя бы один из операндов не определен.
Если результат положительный – цвет шрифта для результата синий, отрицательный – красный.
Лабораторная работа №2. Тема – создание компонентов динамически, неявный параметр self.
Написать приложение, где на форме есть кнопка «создать форму», которая динамически создает очередную форму. При щелчке на любой из созданных форм создается кнопка именно на этой форме. Обработчик события OnMouseDown (нажатие кнопки мыши) будем использовать вместо события OnClick (щелчок мыши), так как обработчику первого события передаются в качестве параметров координаты точки нажатия кнопки мыши. Нам эта информация нужна, чтобы создать кнопку в данном месте.
Лабораторная работа №3. Тема – инкапсуляция, свойства.
Реализовать полностью завершенный класс TDate (см. лекции). В классе определить свойства Day, Month, Year, два перегруженных конструктора – они инициализируют экземпляр класса либо текущей датой, либо конкретной (вводятся день месяц и год). Также определить в классе перегруженные методы SetDate, которые соответственно будут устанавливать дату либо в формате день, меся, год, либо задавая значения даты в формате TDateTime. В классе должны иметься методы, позволяющие увеличивать или уменьшать значение даты на определенное число дней, узнавать високосный или нет год, а также выводить дату в виде строки. Приложения, показывающее все эти возможности должно активно пользоваться свойствами, определенными в классе.
Лабораторная работа №4. Тема – инкапсуляция, свойства, инкапсуляция изменений.
Написать приложение, содержащее 2 формы. Вторая форма передает сообщения первой форме. Сообщения выводятся в строку состояния формы (Status Bar). Затем изменить пользовательский интерфейс первой формы – сообщения выводить не в строку состояния, а, например, в метку, или в поле редактирования, или в заголовок формы. При этом программный код для второй формы не должен измениться. Для этого в первой форме определить свойство StatusText.
Лабораторная работа №5. Тема – индексированные свойства.
Создать класс, представляющий геометрическую фигуру. В качестве предка взять любой из имеющихся в системе (TImage, TShape). Данный класс имеет индексированные свойства – длина, ширина, цвет. Форма приложения должна содержать экземпляр объекта, а также элементы интерфейса, позволяющие менять значения указанных свойств, например, ColorBox для изменения цвета и TrackBar для изменения длины и ширины фигуры. При воздействии с помощью мыши на указанные элементы интерфейса, меняется вид фигуры.
Лабораторная работа №6. Тема – наследование, полиморфизм, механизмы RTTI.
Реализовать следующую иерархию классов: базовый ркласс TAnimal и два его потомка – TDog и TCat (см. лекции). В этих классах определен один и тот же метод, предполагающий позднее связывание (Voice). В потомках также определить метод, отсутствующий в предке (Eat). Виртуальный метод Voice можно применить к универсальной переменной, например, MyAnimal, имеющей тип TAnimal, но во время работы приложения она может ссылаться либо на экземпляр класса TDog, либо на экземпляр класса TCat (на форму поместить переключатель). Метод, который будет реально вызываться по нажатию по кнопке, будет определяться во время выполнения программы и зависит от класса текущего объекта.
Для метода Eat этот подход не работает, так как он не содержится в классе TAnimal. Для того, чтобы по нажатию другой кнопки срабатывал метод Eat, необходимо использовать механизмы RTTI (см. лекцию).
Результаты работы методов Eat и Voice выводить в метки.
Лабораторная работа №7. Тема – свойства-массивы.
Создать класс TZoo, содержащий информацию о животных зоопарка. В классе определить свойство-массив Zoo, элементами которого будут являться экземпляры классов-потомков класса TAnimal (для этого создать такую иерархию классов). Реализовать указанное свойство-массив на база объекта класса TList. Приложение должно позволять выполнять следующие действия – добавлять животных в зоопарк, просматривать питомцев зоопарка, удалять их из зоопарка (передавать в другой или отпускать на свободу).
Лабораторная работа №8. Тема – отработка технических приемов, связанных с применением интерфейсов.
Реализовать приложение с классами TJumper, TWalker, TAthlet (см. лекцию), реализующими интерфейсы IWalkerи IJumper.
На форму поместить три кнопки, соответствующие указанным классам. По нажатию каждой кнопки должно происходить следующее:
1) создается экземпляр соответствующего класса;
2) в ListBox записывается строка, говорящая, что он создан;
3) по очереди вызываются методы данного класса, которые являются функциями типа string и их значение записывается в ListBox, а также записываются значения поля Position (каждый метод меняет его значение) и описание требуемого перемещения – бежит, прыгает, гуляет.
Лабораторная работа №9. Тема – отработка технических приемов, связанных с применением интерфейсов.
В программе определить два интерфейса IAdmin и IUser, а также класс, реализующий оба эти интерфейсы напрямую. Информация о работниках фирмы накапливается в экземпляре этого класса в поле типа TList. Пользователям приложения доступна только информация о списочном составе работников, а администратору доступна информация и о заработной плате работников.
В приложении показать работу стека. Для этого определить интерфейс IStack, и реализовать его при помощи двух разных классов – с использованием массива и с использованием класса TList.
Лабораторная работа №10. Тема – обработка исключений.
Создать приложение, на форму которого поместить три кнопки. При нажатии на каждой из них выполняются длительные и ошибочные вычисления. При этом курсор принимает форму песочных часов. При попытке деления на ноль программа прервется. При нажатии на первую кнопку курсор не будет восстановлен, а исключение обработает система. В коде метода OnClick второй кнопки необходимо использовать блок try/finally, в коде метода OnClick третьей кнопки продемонстрировать использование вложенных блоков try/finally-try/except.
Создать приложение, форма которого будет содержать две группы кнопок, при нажатии которых генерируются исключения, например, деление на ноль, а также исключение созданное самостоятельно, например, переполнение массива. Первая группа кнопок не содержит обработку исключений, предоставляя это системе, а вторая – обрабатывает их.
Создать приложение, демонстрирующее работу с журналом ошибок (см. лекцию). На форме этой программы находится флажок для определения ее поведения (выдавать сообщения об исключениях в журнал, или на экран) и две кнопки, генерирующие исключительные ситуации.
Лабораторная работа №11. Тема – ссылки на классы.
Реализовать приложение, которое создает компоненты при помощи ссылок на класс (имитация работы Delphi). Форма приложения содержит три переключателя, размещенных на панели в верхней части формы. При выборе одного из них и щелчке на форме создается компонент одного из трех типов в соответствии с заголовками переключателей, например, TButton, TEdit, TRadioButton. Для каждого класса объектов при задании имени по умолчанию вести отдельную нумерацию.
Лабораторная работа №12. Тема – методы класса TObject, ссылки на класс.
В программе определить массив ссылок на класс. При записке приложения этот массив используется для отображения на форме всех имен классов в списке. При выборе элемента из списка в правой части формы отображается информация о выбранном классе, а также соответствующие этому классу классы-предки.
Лабораторная работа №13. Тема – события.
Написать приложение, форма которого полностью соответствует форме приложения из лабораторной работы № 6. В класс TAnimal добавить одно событие (свойство типа указатель на метод), которое будет происходить по таймеру, через определенные интервалы времени – животное будет подавать голос (если отсутствует нужное оборудование на компьютере, можно просто в нужные промежутки времени менять цвет шрифта в метке, куда выводится значение метода Voice).