ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ОРЛОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» УЧЕБНО-НАУЧНО-ИССЛЕДОВАТЕЛЬСКИЙ ИНСТИТУТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Кафедра: «Информационные системы» О.В. Амелина ИНФОРМАЦИОННЫЕ СИСТЕМЫ: ПОДСИСТЕМА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ (объектно-ориентированное программирование) Методические указания по выполнению лабораторных работ Дисциплина - «Объектно-ориентированное программирование» Специальности: - 080801 «Прикладная информатика (в экономике)», - 080800.62 «Прикладная информатика (бакалавры)», - 230105 «Программное обеспечение вычислительной техники и автоматизированных систем», - 230100.62 – «Информатика и вычислительная техника (бакалавры)», - 230201 «Информационные системы и технологии» . Печатается по решению редакционно-издательского совета ОрелГТУ ОРЕЛ 2010 2 Автор: системы» канд. экон. наук, доцент кафедры «Информационные О.В. Амелина Рецензент: системы» канд. техн. наук, доцент кафедры «Информационные А.П. Гордиенко Настоящие методические указания предназначены для выполнения лабораторных работ по дисциплине «Объектноориентированное программирование» студентов очной формы обучения для специальностей: 080801 «Прикладная информатика (в экономике)», 080800.62 «Прикладная информатика (бакалавры)», 230105 «Программное обеспечение вычислительной техники и автоматизированных систем», 230100.62 – «Информатика и вычислительная техника (бакалавры)», 230201 «Информационные системы и технологии». Редактор Технический редактор Орловский государственный технический университет Лицензия ИД 00670 от 5.01.2000 АНО «ОрелГТУ-РЦФИО» Подписано к печати Формат 60 84 1\16 Печать офсетная Усл. печ. л. . Тираж экз. Заказ № Отпечатано с готового оригинал-макета на полиграфической базе ОрелГТУ, 302030, г. Орел, ул. Московская, 65 © ОрелГТУ, 2010 © АНО «ОрелГТУРЦФИО» © Амелина О.В., 2010 3 СОДЕРЖАНИЕ 1 ЦЕЛЬ ПРОВЕДЕНИЯ ЛАБОРАТОРНЫХ РАБОТ ................ 4 2 ПОДГОТОВКА К ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ .................................................................................................... 4 3 НОВЫЕ КОНЦЕПЦИИ ООП В OBJECT PASCAL ................ 5 4 ЗАДАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ .......................... 7 5 КОНТРОЛЬНЫЕ ВОПРОСЫ.................................................... 11 6 СОДЕРЖАНИЕ ОТЧЕТА ........................................................... 12 7 СПИСОК ЛИТЕРАТУРЫ ........................................................... 13 4 1 ЦЕЛЬ ПРОВЕДЕНИЯ ЛАБОРАТОРНЫХ РАБОТ Целью проведения лабораторных работ является овладение практическими навыками использования технологии ООП при разработке программного обеспечения. Основными задачами изучения студентами дисциплины являются: освоение основных понятий и моделей ООП; изучение особенностей реализации принципов ООП в различных языках программирования; ознакомление с языком Object Pascal, а также с механизмами, приемами, методами реализации его объектно-ориентированной модели. 2 РАБОТ ПОДГОТОВКА К ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ Лабораторные работы рассчитаны на студентов, имеющих опыт работы на языке паскаль или на другом языке программирования высокого уровня. Студент должен уметь работать в любом текстовом редакторе и c проводником. Основной же целью выполнения лабораторной работы является приобретение практических навыков программирования на языке Object Pascal. При подготовке к лабораторной работе студент должен повторить лекционный материал, относящийся к изучаемому вопросу, а также ознакомиться с материалом, приведенным в соответствующем разделе данного методического указания. При этом необходимо обращать особое внимание на разобранные примеры и фрагменты программ. Выполнение большинства работ основывается на материале, освоенном в предыдущих работах. Готовность студента к работе определяется преподавателем путем проведения собеседования. Основным материалом для собеседования являются контрольные вопросы, приведенные в разделе 5. Защита лабораторной работы производится после написания студентом программы и оформления отчета. 5 3 НОВЫЕ КОНЦЕПЦИИ ООП В OBJECT PASCAL В языке Object Pascal, используемом в Delphi и Lazarus, произошел ряд изменений, по сравнению с последней версией Borland Pascal. Перечислим основные из них, позволившие назвать объектную модель Object Pascal новой объектной моделью: изменения в синтаксисе объявления и использования объектов введение указателей на методы (function … of object) введение методов классов (class method) введение ссылок на классы изменения в организации определений и вызовов методов введение раздела объявления интерфейса разработчика объектного типа - protected введение раздела объявления design-time интерфейса (интерфейса времени проектирования) объектного типа - published введение механизмов RTTI - информации о типах на этапе выполнения программ введение поддержки процедурных полей введение понятия "свойства" - property В отличие от объявления старых объектных типов, использовавшего ключевое слово object, новые объектные типы определяются с помощью слова class. Термины класс (class) и объект (object) используются достаточно часто, приведем определение этих понятий. Класс — это определенный пользователем тип данных, который обладает состоянием (представление класса) и набором операций (поведение класса). Класс обладает некоторыми внутренними данными и некоторым набором методов. Методы класса реализуются в форме процедур или функций. Данные и методы класса описывают универсальные характеристики и поведение некоторого набора похожих объектов. Объект — это экземпляр класса или, иными словами, переменная, принадлежащая типу данных, являющемуся классом. Любой объект — это фактически существующая в памяти запись. В процессе исполнения программы каждый объект требует для хранения своего внутреннего представления некоторый объем памяти. 6 Объект относится к классу так же, как переменная относится к типу данных. В новой объектной модели программист работает только с динамическими экземплярами классов (то есть с теми, для которых выделяется память в heap-области), в отличие от старой модели, где можно было работать как с динамическими, так и со статическими экземплярами. По этой причине изменен синтаксис обращения к полям и методам объектов. Если раньше для работы с динамическими экземплярами объектов (инициализированными с использованием обращения к конструктору в сочетании с функцией New) программист должен был использовать обращение "по адресу" ( ^ ), то теперь такой доступ подразумевается автоматически. В качестве примера сравним два следующих фрагмента исходного текста: { Старая объектная модель } type PMyObject = ^TMyObject; TMyObject = object (TObject) MyField : TMyType; constructor Init; end; ... var MyObject : PMyObject; begin MyObject:=New(PMyObject,Init); MyObject^.MyField:= ... end; { Новая объектная модель } type TMyObject = class (TObject) MyField : TMyType; constructor Create; end; ... var MyObject : TMyObject; begin MyObject:=TMyObject.Create; MyObject.MyField:= ... end; 7 Как можно заметить, в Object Pascal расширен синтаксис использования “точечной нотации” для доступа к методам объектов. Кроме того, изменено соглашение и об именовании конструкторов и деструкторов. В старой объектной модели вызов New отвечал за распределение памяти, а обращение к конструктору инициализировало выделенную область памяти. В новой модели эти функции выполняет конструктор Create. 4 ЗАДАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ Лабораторная работа №1. Тема – Работа с основными элементами управления Delphi – поля редактирования, кнопки, метки. Написать программу калькулятор. Форма программы содержит 2 поля редактирования для операндов, 4 кнопки для задания арифметических действий, 1 кнопка «сброс», метку для вывода результата. Виды контроля, которые должна обеспечивать программа: 1. В поля для операндов могут попадать только разрешенные символы – цифры, десятичная точка. 2. Кнопки для арифметических действий недоступны, если хотя бы один из операндов не определен. 3. Если результат положительный – цвет шрифта для результата синий, отрицательный – красный. Лабораторная работа №2. Тема – создание компонентов динамически, неявный параметр self. Написать приложение, где на форме есть кнопка «создать форму», которая динамически создает очередную форму. При щелчке на любой из созданных форм создается кнопка именно на этой форме. Обработчик события OnMouseDown (нажатие кнопки мыши) будем использовать вместо события OnClick (щелчок мыши), так как обработчику первого события передаются в качестве параметров координаты точки нажатия кнопки мыши. Нам эта информация нужна, чтобы создать кнопку в данном месте. Лабораторная работа №3. Тема – инкапсуляция, свойства. 8 Реализовать полностью завершенный класс TDate (см. лекции). В классе определить свойства Day, Month, Year, два перегруженных конструктора – они инициализируют экземпляр класса либо текущей датой, либо конкретной (вводятся день месяц и год). Также определить в классе перегруженные методы SetDate, которые соответственно будут устанавливать дату либо в формате день, меся, год, либо задавая значения даты в формате TDateTime. В классе должны иметься методы, позволяющие увеличивать или уменьшать значение даты на определенное число дней, узнавать високосный или нет год, а также выводить дату в виде строки. Приложения, показывающее все эти возможности должно активно пользоваться свойствами, определенными в классе. Лабораторная работа №4. Тема – инкапсуляция, свойства, инкапсуляция изменений. Написать приложение, содержащее 2 формы. Вторая форма передает сообщения первой форме. Сообщения выводятся в строку состояния формы (Status Bar). Затем изменить пользовательский интерфейс первой формы – сообщения выводить не в строку состояния, а, например, в метку, или в поле редактирования, или в заголовок формы. При этом программный код для второй формы не должен измениться. Для этого в первой форме определить свойство StatusText. Лабораторная работа №5. Тема – индексированные свойства. Создать класс, представляющий геометрическую фигуру. В качестве предка взять любой из имеющихся в системе (TImage, TShape). Данный класс имеет индексированные свойства – длина, ширина, цвет. Форма приложения должна содержать экземпляр объекта, а также элементы интерфейса, позволяющие менять значения указанных свойств, например, ColorBox для изменения цвета и TrackBar для изменения длины и ширины фигуры. При воздействии с помощью мыши на указанные элементы интерфейса, меняется вид фигуры. Лабораторная работа №6. Тема – наследование, полиморфизм, механизмы RTTI. 9 Реализовать следующую иерархию классов: базовый ркласс 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 и их значение записывается в 10 ListBox, а также записываются значения поля Position (каждый метод меняет его значение) и описание требуемого перемещения – бежит, прыгает, гуляет. Лабораторная работа №9. Тема – отработка технических приемов, связанных с применением интерфейсов. 1) В программе определить два интерфейса IAdmin и IUser, а также класс, реализующий оба эти интерфейсы напрямую. Информация о работниках фирмы накапливается в экземпляре этого класса в поле типа TList. Пользователям приложения доступна только информация о списочном составе работников, а администратору доступна информация и о заработной плате работников. 2) В приложении показать работу стека. Для этого определить интерфейс IStack, и реализовать его при помощи двух разных классов – с использованием массива и с использованием класса TList. Лабораторная работа №10. Тема – обработка исключений. 1) Создать приложение, на форму которого поместить три кнопки. При нажатии на каждой из них выполняются длительные и ошибочные вычисления. При этом курсор принимает форму песочных часов. При попытке деления на ноль программа прервется. При нажатии на первую кнопку курсор не будет восстановлен, а исключение обработает система. В коде метода OnClick второй кнопки необходимо использовать блок try/finally, в коде метода OnClick третьей кнопки продемонстрировать использование вложенных блоков try/finally-try/except. 2) Создать приложение, форма которого будет содержать две группы кнопок, при нажатии которых генерируются исключения, например, деление на ноль, а также исключение созданное самостоятельно, например, переполнение массива. Первая группа кнопок не содержит обработку исключений, предоставляя это системе, а вторая – обрабатывает их. 3) Создать приложение, демонстрирующее работу с журналом ошибок (см. лекцию). На форме этой программы находится флажок для определения ее поведения (выдавать сообщения об исключениях в журнал, или на экран) и две кнопки, генерирующие исключительные ситуации. 11 Лабораторная работа №11. Тема – ссылки на классы. Реализовать приложение, которое создает компоненты при помощи ссылок на класс (имитация работы Delphi). Форма приложения содержит три переключателя, размещенных на панели в верхней части формы. При выборе одного из них и щелчке на форме создается компонент одного из трех типов в соответствии с заголовками переключателей, например, TButton, TEdit, TRadioButton. Для каждого класса объектов при задании имени по умолчанию вести отдельную нумерацию. Лабораторная работа №12. Тема – методы класса TObject, ссылки на класс. В программе определить массив ссылок на класс. При записке приложения этот массив используется для отображения на форме всех имен классов в списке. При выборе элемента из списка в правой части формы отображается информация о выбранном классе, а также соответствующие этому классу классы-предки. Лабораторная работа №13. Тема – события. Написать приложение, форма которого полностью соответствует форме приложения из лабораторной работы № 6. В класс TAnimal добавить одно событие (свойство типа указатель на метод), которое будет происходить по таймеру, через определенные интервалы времени – животное будет подавать голос (если отсутствует нужное оборудование на компьютере, можно просто в нужные промежутки времени менять цвет шрифта в метке, куда выводится значение метода Voice). 5 КОНТРОЛЬНЫЕ ВОПРОСЫ 1. 2. 3. 4. 5. 6. 7. 8. Новые концепции ООП в языке Oblect Pascal Объектно-ориентированный подход в программировании Понятие класса и объекта Поля, методы и свойства объекта Ключевое слово Self, примеры использования Перегруженные методы Создание и удаление объектов Инкапсуляция 12 9. Инкапсуляция и модули 10. Директивы видимости 11. Инкапсуляция при помощи свойств 12. Свойства-массивы 13. Индексированные свойства 14. Свойства и иерархия классов 15. Конструкторы, перегрузка конструкторов 16. Деструкторы 17. Ссылочная модель объектов Delphi 18. Наследование 19. Совместимость типов 20. Полиморфизм и позднее связывание 21. Виртуальные, динамические методы. 22. Абстрактные методы 23. Бе6зопасное преобразование типов 24. Ссылки на класс 25. Создание компонентов при помощи ссылок на класс 26. Интерфейсы 27. Технические приемы, связанные с использованием интерфейсов (делегирование, использование директивы implements) 28. Исключительные ситуации 29. Порядок выполнения программы и блок finally 30. Классы исключений 31. Исключения и отладка приложений 32. Класс TObject, использование методов класса TObject 33. Понятие события 34. Обработчики событий. Делегирование в Delphi 35. События стандартных визуальных компонент и их использование 36. Создание собственных событий и их обработка 37. Компонентно-ориентированное программирование 6 СОДЕРЖАНИЕ ОТЧЕТА Отчет должен содержать следующую информацию: 1) распечатанную программу на Object Pascal; 2) результат работы программы; 3) теоретические выводы о работе программы. 13 7 СПИСОК ЛИТЕРАТУРЫ 1. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++: Пер. с англ. / Г. Буч. [Текст] – М.: БИНОМ, 1999. – 558 с. 2. Вендров А.М. Проектирование программного обеспечения экономических информационных систем: Учебник / А.М. Вендров. [Текст] – М.: Финансы и статистика, 2000. – 352 с. 3. Иванова Г.С Объектно-ориентированное программирование: Учебник для вузов / Г.С. Иванова, Т.Н. Ничушкина, Е.К. Пугачев; Под ред. Г.С. Ивановой. [Текст] – М.: Изд-во МГТУ им. Н.Э. Баумана, 2001. – 320 с. – (Информатика в техническом университете) 4. Синтес А. Освой самостоятельно объектно-ориентированное программирование за 21 день: Пер. с англ. / А. Синтес. [Текст] – М.: Издательский дом «Вильямс», 2002. – 672 с. 5. Фридман А.Л. Основы объектно-ориентированной разработки программных систем / А.Л. Фридман. [Текст] – М.: Финансы и статистика, 2000. – 192 с. – (Прикладные информационные технологии) (имеется в библиотеке ОрелГТУ) 6. Элиенс А. Принципы объектно-ориентированной разработки программ: Пер. с англ / А. Элиенс – 2-е изд. [Текст] – М.: Издательский дом «Вильямс», 2002. – 496 с.