Объектно-ориентированное программирование
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
Издательский Дом НИТУ «МИСиС»
Автор:
Игнаткин Алексей Анатольевич
Год издания: 2005
Кол-во страниц: 149
Дополнительно
В курсе лекций изложены теоретические основы методики объектно-ориентированного подхода, подробно рассмотрены практические вопросы применения объектно-ориентированного программирования. Освещены вопросы создания собственных классов для реализации различных задач хранения и обработки данных, использования стандартных объектно-ориентированных библиотек. Примеры приведены на языке ObjectPascal среды быстрой разработки программ Delphi. Соответствует программе курса «Объектно-ориентированное программирование». Предназначен для студентов специальностей 071900 «Информационные системы (область применения - экономика )» и 220200 «Автоматизированные системы обработки информации и управления».
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
УДК 004.42 И26 Р е ц е н з е н т канд. техн. наук, доц. А.И. Широков Игнаткин А.А. И26 Объектно-ориентированное программирование: Курс лекций. – М.: МИСиС, 2005. – 149 с. В курсе лекций изложены теоретические основы методики объектноориентированного подхода, подробно рассмотрены практические вопросы применения объектно-ориентированного программирования. Освещены вопросы создания собственных классов для реализации различных задач хранения и обработки данных, использования стандартных объектноориентированных библиотек. Примеры приведены на языке ObjectPascal среды быстрой разработки программ Delphi. Соответствует программе курса «Объектно-ориентированное программирование». Предназначен для студентов специальностей 071900 «Информационные системы (область применения – экономика )» и 220200 «Автоматизированные системы обработки информации и управления». © Московский государственный институт стали и сплавов (Технологический университет) (МИСиС), 2005
ОГЛАВЛЕНИЕ 1. Основные понятия и инструменты объектно- ориентированного программирования ...................................................5 1.1. Использование ООП для представления знаний........................5 1.2. Основные принципы объектно-ориентированного подхода.....6 1.3. Основные принципы объектно-ориентированного программирования................................................................................9 1.4. Delphi – интегрированный инструмент разработки объектно-ориентированных программ.............................................12 2. Классы и объекты ...............................................................................15 2.1. Сравнение динамических записей, модулей и классов............15 2.2. Области видимости классов .......................................................18 2.3. Конструкторы и деструкторы.....................................................19 2.4. Методы .........................................................................................21 2.5. Поля процедурного типа и объектные ссылки .........................25 2.6. Свойства .......................................................................................28 3. Структуры данных. Массивы ............................................................32 4. Структуры данных. Списки...............................................................47 5. Моделирование зависимостей и отношений....................................62 6. Сортировки..........................................................................................81 6.1. Многопоточная сортировка........................................................81 6.2. Использование потоков...............................................................82 6.3. Алгоритмы сортировки...............................................................84 6.4. Создание собственых дочерних классов для выполнения мультипоточной сортировки .............................................................86 6.5. Тестовое приложение для реализации сортировок ..................90 7. Cобытия и сообщения ........................................................................97 7.1. События........................................................................................97 7.2. Делегирование событий............................................................103 7.3. Сообщения..................................................................................105 8. Обработка исключительных ситуаций в Delphi ............................113 8.1. Исключительные ситуации.......................................................113 8.2. Классы исключительных ситуаций..........................................114 9. Объектно-ориентированный интерфейс к графической системе Windows ..................................................................................117 9.1. Что такое Win API?....................................................................117 9.2. Графические функции Win API................................................118 9.3. Объекты VCL Delphi для работы с графикой .........................121
9.3.1. Работа с изображениями в Delphi: TImage......................122 9.3.2. Использование класса TBitmap ........................................122 9.4. Использование свойств класса TCanvas..................................123 9.4.1. Использование перьев TPen..............................................124 9.4.2. Использование кисти TBrush............................................125 9.4.3. Использование шрифтов TFont ........................................126 9.5. Режимы отображения................................................................126 10. ООП интерфейс для работы с базами данных.............................130 10.1. Основные принципы ...............................................................130 10.2. Подключение к драйверам ODBC..........................................132 10.3. Набор компонентов .................................................................137 10.4. Связывание компонентов на форме.......................................139 10.5. Навигация по базе данных......................................................144 10.6. Различия в использовании компонентов Ttable и TQuery.............................................................................................145 Библиографический список.................................................................147
1. ОСНОВНЫЕ ПОНЯТИЯ И ИНСТРУМЕНТЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ Объектно-ориентированный подход (ООП) – это методика моделирования сложных проблемных областей с целью создания программного обеспечения. Объектно-ориентированное программирование – это технология, которая представляет собой совокупность соглашений (правил проектирования и создания структур данных), которые позволяют вести языково-независимую и платформеннонезависимую разработку приложений. Объектно-ориентированное программирование представляет собой реализацию объектноориентированного подхода. 1.1. Использование ООП для представления знаний Объектно-ориентированный подход (ООП) основан на использовании предварительно разработанных моделей для языковонезависимой разработки программной системы – целевой модели проблемной области, с помощью которой решается поставленная задача. Объектно-ориентированная модель содержит не все признаки и свойства представляемого ею предмета (понятия), а только те, которые существенны для разрабатываемой программной системы. Объектно-ориентированная модель редко разрабатываться с нуля, а обычно путем усложнения или объединения ранее разработанных моделей. Такой подход существенно отличается от традиционного процедурно-структурированного программирования. Объектно-ориентированный подход заставляет создавать программы в виде набора правил взаимодействия моделей и пользователя. Главное преимущество ООП заключается в том, что этот подход позволяет моделировать сложноструктурируемые, разнотипные, эволюционно меняющиеся данные. Именно это качество данных присуще подавляющему большинству реальных задач, которые должен решать программист. Сегодня существуют мощные объектноориентированные языки программирования: C++, Java, Object Pascal, – которые на практике реализуют данный подход. Объектно-ориентированный подход тесно связан с существующими моделями представления знаний. В основе разных языков программирования (инструментов компьютерной интерпретации зна
ний) используются различные модели представления знаний, например логические и структурно-лингвистические, фреймы и объектноориентированные, декларативные и продукционные, точные и нечеткие. Существуют логико-лингвистические модели для представления нечетких знаний, которые являются синтезом нечетко-множественного и продукционного представления знаний. Для каждой из перечисленных моделей представления знаний разработаны уникальные языки создания таких моделей и управления ими. Большинство этих языков оказались узкоспециальными и не получили широкого распространения. Например, фреймы используются для отображения декларативных и процедурных знаний о каком-либо понятии (объекте, субъекте, операции, явлении, состоянии или событии). Эффективное использование фреймов предполагает уникальность вложенной в слоты информации на всех уровнях вложения. Фреймы очень хорошо позволяют описывать каталоги, архивы и рубрикаторы. Но если информация дублируется на разных уровнях, то принцип включения приводит к неэффективному дублированию информации при фреймовом представлении знаний. Это затрудняет реализацию фреймовой модели в современных вычислительных системах. Объектно-ориентированные структуры похожи на фреймовые структуры, но они широко используются для описания самых разных предметных областей. Объектно-ориентированный подход к структурированию информации, обладая всеми положительными свойствами фреймовой модели, имеет ряд преимуществ. Главное различие между фреймовыми и объектными структурами состоит в том, что для фреймов не определены свойства инкапсуляции (ограничения доступа) и полиморфизма, речь о которых пойдет ниже. Следует заметить, что, несмотря на широкое использование, объекты ООП в отличие от фреймов в теории реляционных баз данных не строго формализованы, а представляют собой набор соглашений и методик использования. Это препятствует доказательству полноты и непротиворечивости объектно-ориентированного подхода. 1.2. Основные принципы объектноориентированного подхода В основу объектно-ориентированого подхода положены следующие принципы: • абстрагирование; • инкапсуляция;
• модульность; • иерархичность; • типизация; • полиморфизм; • параллелизм; • устойчивость. Рассмотрим перечисленные принципы подробнее. Абстрагирование – процесс выделения наиболее существенных свойств объекта из моделируемой предметной области. Применяемая абстракция реального предмета целиком зависит от целей разработчика и решаемой задачи. В одном случае интересует материал, из которого изготовлены предметы, а в другом случае их стоимость. Ограничение доступа означает скрытия детали реализации модели от пользователя. Доступ к данным и процедурам обработки этих данных возможен только через интерфейс. Интерфейс – совокупность доступных для пользователя элементов модели. По принципу модульности классы должны проектироваться как компоненты системы, не зависимые друг от друга. Так что если в дальнейшем меняется что-то в одном компоненте, то не надо модифицировать другие. Иерархичность заключается в том, что все компоненты системы могут быть ранжированы или упорядочены. Метод упорядочивания может быть не один. В ООП используются два вида иерархии. Иерархия «целое/часть» показывает, что некоторые классы включены в другие как части. Например, класс «автомобиль» может включать классы «кузов», «мотор» и др. Иерархия «общее/частное» показывает, что некоторый класс является частным случаем другой абстракции, например частные классы «обеденный стол», «письменный стол» создаются из общего класса «стол» путем добавления новых параметров-свойств и уточнения имеющихся. Типизация – ограничение, накладываемое на свойство объектов разных классов и препятствующее их произвольной взаимозаменяемости. Реализация принципа полиморфизма позволяет снять ограничение типизации и разрешает взаимозаменяемость объектов, но только для классов, связанных в иерархию «общее/частное». Параллелизм – свойство некоторых классов одновременно находиться в активном состоянии, т.е. выполнять некоторые операции. Реальный параллелизм возможен только в системах с несколькими процессорами. Современные операционные системы позволяют эф
фективно эмулировать параллельные операции на системах с единственным процессором. Устойчивость – свойство абстракции существовать во времени независимо от процесса, породившего данный программный объект. Опишем с помощью теоретико-множественного представления те идеи объектно-ориентированного подхода, которые используются при моделировании сложной предметной области. Будем называть структуру, предназначенную для формализации знаний о предметной области, объектно-ориентированной, если: 1) кроме декларативных знаний, которые представляются в виде полей, структура содержит алгоритмы доступа, интерпретации и преобразования этих полей – процедурные знания или методы; 2) эта структура обладает свойствами инкапсуляции, наследования и полиморфизма. Согласно устоявшейся терминологии будем называть данную структуру объектом, а множество объектов, имеющих одинаковую структуру, – классом. Описание класса можно представить в виде ( ) ( ) 0 ,0 , ... , ... , O , , , O , O 1 1 p p ≥ ≥ = = n i P P D D N P D N n i , где N – название класса; Ор – ссылка на родительский класс; Di – поля, может быть, другие объекты; Pi – методы. Оператор < > – означает невозможность получить доступ к полям объекта иначе, как через методы объекта (свойство инкапсуляции). Полем может быть объектная структура. Для пользователя неважно, какой именно алгоритм реализован в том или ином методе. Главное – знать цель, с которой метод был создан. Обычно цель метода декларируется в его имени и уточняется в документации. Связь между объектами задается не только через поля объектного типа, но и с помощью наследования. Наследование позволяет вести синтез структуры путем ее последовательного усложнения, добавляя новые поля и методы. От любого класса, называемого родительским, может быть порождено любое число новых классов, называемых дочерними. Дочерний класс обладает всеми полями и методами родительского объекта и может иметь свои собственные поля и методы: ) ... , ... , ... , ... , O , ( O 1 1 1 1 p k n n k i i P P P P D D D D N + + ′ ′ ′ = ′ , где N' – название дочернего объекта; P' – метод, одноименный методу родительского класса, но может иметь собственный алгоритм функционирования.
Методы и поля одного класса не могут быть названы одинаково. Для обращения к ним используется точечная нотация: О.Pj – читается как метод Pj объекта О. Важнейшее с практической точки зрения свойство объектов – полиморфизм. Это свойство означает возможность присвоения ссылки на объект дочернего класса родительскому объекту (O := O′). После этой операции структура родительского объекта интерпретируется следующим образом: ( ) 0 ,0 , ... , ... , , O 1 1 ≥ ≥ ′ ′ = n i P P D D O N n i p . Это свойство позволяет эволюционно, по мере появления новых знаний, учитывать их в дочерних объектах без реструктуризации более сложных структур, в которых объекты O являются полями. На практике это позволяет избежать полного изменения программы, если возникает необходимость скорректировать цели и (или) методы достижений этих целей. В традиционном функциональном подходе изменение цели приводит к замене старой функции новой реализацией, может быть, с тем же именем. Поэтому, если эволюционное развитие программы приведет к необходимости вернуться к старой цели, то придется снова затратить усилия на создание новой функции. В объектно-ориентированном подходе дочерний объект всегда содержит в себе реализацию родительского, не уничтожает информацию о родительской структуре. Недостаток объектно-ориентированного подхода – «раздувание» двоичного кода программ, но это не является значимым для современных вычислительных систем. Технология полиморфизма дает возможность прикладной программе, «знающей» о структуре родительского объекта, работать с любыми дочерними объектами, т.е. разделять процесс написания кода между многими программистами и свободно обмениваться результатами своей работы. 1.3. Основные принципы объектноориентированного программирования Объектно-ориентированное программирование – это технология, которая представляет собой совокупность соглашений (языков программирования, правил создания структур данных и т.д.), позволяющих вести языково- и платформенно-независимую разработку приложений. Это технология создания программного обеспечения, которая основана на представлении программы в виде совокупности объ
ектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию, связанную отношением наследования. Архитектура типичной объектно-ориентированной программы показана на рисунке. Объект 3 Объект 3 Объект 1 Данные Подпрограммы свойства методы Объект 2 Данные Подпрограммы свойства методы Вызов методов Обращение к свойствам Посылка сообщений Работа с данными Архитектура объектно-ориентированной программы Существует множество объектно-ориентированных языков программирования, использующих эту технологию. Например, Object Pascal и С++. Для того чтобы код, созданный с помощью одного инструмента, мог быть использован другим инструментом программирования, был выработан ряд соглашений об общих свойствах объектных структур: 1. Базовый класс. Для указания наиболее важных свойств, которые должны присутствовать во всех без исключения дочерних структурах, создается базовый класс. Под свойствами объектной структуры подразумеваются и поля и методы. Это свойство гарантирует инвариантность алгоритмов модификации знаний по отношению ко всем дочерним объектам базового класса. 2. Иерархическая структура. Объект обычно представляет собой иерархическую структуру в том смысле, что в качестве его свойств могут выступать другие объекты. Сложность и уровень вложенности объектов не ограничена. Это позволяет систематизировать и группировать схожие понятия, реализовать связь типа «один к одному». 3. Списки ссылок на объекты. Поле объекта может представлять собой не один объект, а множество, мощность которого не определена на этапе создания программы. Для этого достаточно определить
служебный объект, который бы реализовывал функции списка. Способ реализации списка сейчас для нас не важен. Таким образом, с помощью полей-списков создается связь типа «один ко многим». 4. Связи типа «многие ко многим». Если в поле-списке добавляется сам объект, то это ведет к перерасходу памяти и невозможности добавить один и тот же объект в разные списки. Поэтому в список добавляется не сам объект, а ссылка на него. Так как связь между объектами осуществляется по ссылке, то один объект может принадлежать сразу нескольким объектным структурам. В свою очередь объектная структура может содержать список объектов, которым она принадлежит. Реализация связи «многие ко многим» имеет много интересных приложений, например позволяет при анализе базы знаний двигаться не только от посылок к следствиям, но и от следствий к посылкам, т.е. проводить обратные рассуждения. 5. Ссылочная целостность. Ссылочная целостность требует, чтобы при различных структурных преобразованиях (создании/уничтожении) все ссылки оставались корректными, т.е. не указывали на несуществующий объект. Реализация этого свойства обычно связана с подсчетом каждым объектом количества связей «многие ко многим». Объектная структура не может быть уничтожена до тех пор, пока существует хоть одна ссылка на эту структуру. Детально эти и другие соглашения описаны в реализации таких объектно-ориентированных технологий, как COM (Common Object Model), DCOM (Distributed Common Object Model), ActiveX (это не аббревиатура, а обозначение) и др. Основная идея объектно-ориентированного программирования заключается в построении (разработке) программы из классов объектов, которыми она манипулирует, а не из функций, которые над ними (объектами) выполняются. Под классом подразумевается реализованный абстрактный тип данных, а под объектом – конкретные данные, т.е. экземпляр данного типа (класса). Что касается функций, то они определяются свои для каждого типа данных, при этом сами данные (объекты) оказываются доступными только через эти функции (методы), составляющие официальный интерфейс данного класса, другими словами, реализация типа полностью скрыта (инкапсуляция). Объектно-ориентированная программа безотносительно к тому, как и на чем она была написана, должна обладать следующими очевидными качествами: