ООП. Пособие по ООП в С++. Создание сложных программных систем Объектно ориентированная технология
Скачать 2.1 Mb.
|
Оглавление 1 Введение. Создание сложных программных систем .................................... 5 2 Объектно - ориентированная технология ...................................................... 6 2.1 Объекты ....................................................................................................... 6 2.2 Классы ........................................................................................................ 10 3 Объектно – ориентированное проектирование ........................................... 12 3.1 Анализ поставленной задачи (предметной области) и уточнение спецификаций ..................................................................................................... 12 3.1.1 ОО анализ с использованием имитационного моделирования для простых предметных областей ..................................................................... 13 3.1.2 ОО анализ на основе вариантов использования UML .................. 15 3.2 Логическое проектирование .................................................................... 21 3.3 Физическое проектирование ................................................................... 22 3.4 Примеры реализации объектно – ориентированного проектирования 22 4 Реализация системы. ...................................................................................... 31 5 Класс в С++ ..................................................................................................... 32 5.1 Основные принципы объектно – ориентированного программирования ............................................................................................. 33 5.2 Класс в объектно – ориентированных языках программирования ..... 34 5.3 Структура класса ...................................................................................... 35 5.4 Формат определения класса С++ ............................................................ 35 5.5 Реализация инкапсуляции через спецификаторы доступа ................... 36 5.6 Глобальные и локальные классы ............................................................ 38 5.7 Члены данных в классе ............................................................................ 38 5.7.1 Переменные экземпляра .................................................................... 38 5.7.2 Переменные класса – статические переменные .............................. 39 5.8 Функции - члены в классе (методы) ....................................................... 41 5.8.1 Виды функций – членов класса ........................................................ 41 5.8.2 Место реализации функций - членов класса ................................... 42 5.8.3 Функции члены класса inline (подстановки) ................................... 43 5.8.4 Методы (функции – члены) экземпляра .......................................... 44 5.8.5 Методы класса .................................................................................... 52 5.9 Конструкторы класса ............................................................................... 54 5.9.1 Виды конструкторов .......................................................................... 54 5.9.2 Правила по применению конструктора ........................................... 57 5.10 Создание и инициализация объектов (экземпляров класса) ............. 58 5.11 Деструктор класса ................................................................................. 59 5.12 Применение методов к объектам ......................................................... 61 6 Механизм перегрузки операторов ................................................................ 63 6.1 Введение .................................................................................................... 63 6.2 Пример перегрузки оператора ................................................................. 63 6.3 Какие операторы можно перегружать? .................................................. 65 6.4 Пример реализации операций без перегрузки. ...................................... 66 6.5 Способы перегрузки и правила перегрузки операторов ...................... 68 6.6 Перегрузка унарных операторов ............................................................. 69 6.7 Перегрузка бинарных операций .............................................................. 71 7 Методы создания новых классов .................................................................. 76 7.1 Наследование ............................................................................................ 76 7.1.1 Простое наследование ....................................................................... 78 7.1.2 Множественное наследование .......................................................... 94 7.2 Ассоциация ................................................................................................ 95 7.2.1 Бинарная ассоциация ......................................................................... 96 7.3 Агрегация .................................................................................................. 97 7.3.1 Композиция – сильная агрегация ..................................................... 98 7.3.2 Наполнение – слабая агрегация ........................................................ 99 7.4 Зависимость ............................................................................................. 101 8 Полиморфизм ................................................................................................ 102 8.1 Ранний (Простой) полиморфизм ........................................................... 103 8.2 Поздний (Сложный) полиморфизм ...................................................... 106 9 Абстрактные классы..................................................................................... 109 10 Шаблонные классы .................................................................................... 112 11 Контейнерные классы ............................................................................... 118 11.1 Определение ......................................................................................... 118 11.2 Библиотека шаблонов STL ................................................................. 119 11.3 Виды контейнеров ............................................................................... 119 11.4 Алгоритмы............................................................................................ 120 11.5 Итераторы ............................................................................................. 120 11.6 Аллокатор ............................................................................................. 121 11.7 Функциональные объекты .................................................................. 121 11.8 Общая функциональность контейнера .............................................. 121 11.9 Функции последовательных контейнеров: ....................................... 122 11.10 Функции ассоциативных контейнеров .............................................. 122 11.11 Класс string .......................................................................................... 131 11.11.1 Представление в памяти ............................................................ 131 11.11.2 Конструкторы ............................................................................. 131 11.11.3 Ввод ............................................................................................. 132 11.11.4 Вывод .......................................................................................... 132 11.11.5 Перегруженные операции. К string строке можно применять операции 132 11.11.6 Методы ........................................................................................ 135 11.11.7 Функции преобразования из строки в числовой формат Функции преобразования: atoi, atol, atof .................................................... 142 11.11.8 Преобразование числа в строку ................................................ 143 12 Механизм исключений .............................................................................. 143 12.1 Общий механизм обработки исключений ........................................ 144 12.2 Формат механизма перехвата и обработки исключений................. 144 12.1 Класс exception .................................................................................... 147 12.2 Применение try в функции ................................................................. 149 12.3 Типы исключений ................................................................................ 151 12.4 Вложенные исключения ..................................................................... 155 12.5 Исключения в конструкторе и деструкторе. Собственные классы исключений ...................................................................................................... 155 12.6 Создание собственных классов-исключений дочерних классу std::exception ..................................................................................................... 157 13 Потоки ......................................................................................................... 158 13.1 Стандартные потоки ............................................................................ 161 14 Файловые потоки ....................................................................................... 161 14.1 Виды файлов ........................................................................................ 162 14.2 Физический и логический файлы ...................................................... 162 14.3 Классы основных файловых потоков ................................................ 162 14.4 Буферизированный ввод и вывод ...................................................... 163 14.5 Открытие потока (файла) .................................................................... 163 14.6 Закрытие потока (файла) .................................................................... 163 14.7 Управление текстовым файлом ......................................................... 164 14.7.1 Создание потока ............................................................................ 164 14.7.2 Связывание потока с физическим файлом ................................. 164 14.7.3 Закрытие файлового потока ......................................................... 166 14.7.4 Проверка существования файла .................................................. 166 14.7.5 Операция и методы записи данных в текстовый файл ............. 168 14.7.6 Методы для управления ошибками потоков .............................. 169 14.7.7 Функции и методы чтения данных из файла ............................. 170 14.7.8 Использование функций проверки ошибок потоков ................. 171 14.7.9 Чтение данных из текстового файла ........................................... 172 14.7.10 Методы неформатированного вывода класса ofstream .......... 173 14.7.11 Пример. Операции с текстовым файлом. ................................ 176 14.8 Двоичные файлы .................................................................................. 178 14.8.1 Создание потока для двоичного файла ....................................... 179 14.8.2 Организация записи данных в двоичный файл .......................... 179 14.8.3 Чтение данных из двоичного файла ........................................... 185 14.8.4 Закрытие файла ............................................................................. 187 14.8.5 Методы контроля ошибок потока ............................................... 188 14.9 Поток класса fstream ........................................................................... 188 14.9.1 Использование одного потока для чтения и записи данных в файл 188 14.9.2 Организация прямого доступа к записям двоичного файла ..... 190 14.9.3 Пример применение прямого доступа для перемещения по файлу 191 15 Графический интерфейс С++/CLI ............................................................ 193 15.1 Введение в С++/CLI ............................................................................ 193 15.1.1 Управляемые типы, массивы и указатели .................................. 195 15.1.2 Тип String^ ..................................................................................... 199 15.1.3 Указатели С++ и ссылки CLI ....................................................... 201 15.2 Вспомогательная библиотека marshal_as .......................................... 204 15.3 Код на языке IL и неуправляемый код .............................................. 205 15.4 Windows Forms в Visual Studio на C++ ............................................. 206 15.4.1 Создание проекта CLR c Windows Forms ................................... 206 15.4.2 Создание формы приложения CLR ............................................. 208 15.5 Событийное программирование ........................................................ 211 16 Список источников .................................................................................... 212 1 Введение. Создание сложных программных систем Сложность программной системы – это основной критерий в оценке программных продуктов. Сложная техническая система (самолет, ПК) состоит из множества компонент, каждая компонента так же состоит из множества других. Программная система, предназначенная для автоматизации процессов определенной предметной области, так же включает множество других программных подсистем, которые реализуют конкретные вычислительные процессы, обеспечивающие решение множества задач предметной области. Человек будет держать в уме информацию лишь о немногих частях системы, а не обо всех. Значительное упрощение в понимании сложных задач достигается за счет образования из абстракций иерархической структуры. При проектировании сложной системы ее надо разделять на все меньшие и меньшие подсистемы (компоненты), каждую из которых можно совершенствовать независимо. Такой подход в разработке систем, в том числе и программных, называют декомпозицией. В таком случае не будут превышены возможности человеческого мозга. Структурный подход требует представления задачи в виде иерархии подзадач простейшей структуры. Для получения такой иерархии используется метод пошаговой детализации. Полученные таким методом подпрограммы отвечают принципам структурного программирования, и такой процесс получил название структурной (алгоритмической) декомпозиции. Основной принцип - нисходящая разработка программы “сверху вниз”: определить наиболее общие задачи, а затем поэтапно выполнять детализацию (декомпозицию) этих задач (т.е сосредоточиться на разработке уже небольших задач). Алгоритмическая декомпозиция может применяться многократно, а это значит, что каждый алгоритм верхнего уровня будет представлен совокупностью взаимосвязанных в иерархию алгоритмов нижнего уровня. На каждом уровне получается более простой алгоритм. Это позволяет разрабатывать сложные системы по частям. В борьбе с проблемами, определяемыми сложностью программ, дальше всех продвинулась объектно - ориентированная технология, которая и получила наибольшее распространение. При использовании технологи ООП решение задачи представляется в виде результата взаимодействия отдельных функциональных элементов некоторой системы, имитирующей процессы, происходящие в предметной области поставленной задачи. В такой системе, каждый входящий функциональный элемент, получив некоторое входное воздействие (сообщение), выполняет заранее определенное действие. Основными требованиями к методологиям разработки программных систем являются: удобство сопровождения, возможность наращивания уже существующей программы, способность разработанных программных объектов к повторному использованию. Процесс разработки программного обеспечения не завершается первой версией, а предусматривает итеративное расширение предыдущих версий, что, в некоторой степени, способствует решению проблемы сложности. 2 Объектно - ориентированная технология Предусматривает представление программной системы через совокупность взаимодействующих информационных (или функциональных) объектов предметной области, используемых задачами этой предметной области. Объектно - ориентированная технология разработки программ состоит из объектно - ориентированного анализа, объектно - ориентированного проектирования и объектно - ориентированного программирования. 2.1 Объекты При использовании технологи ООП решение задачи представляется в виде результата взаимодействия отдельных функциональных элементов (объектов/экземпляров) некоторой системы, происходящие в предметной области поставленной задачи. В такой системе, каждый входящий функциональный элемент, получив некоторое входное воздействие (сообщение), выполняет заранее определенное действие. Например, он может: опустить монету в автомат по продаже газет; нарисовать круг или квадрат; вычислить их площадь или периметр; т.е. он воздействует на себя или на другой объект, изменяя состояние се или другого элемента. Передавая сообщения, от элемента к элементу, система выполняет определенные действия. Функциональные элементы системы (параметры и поведение которой определяется условием задачи), обладающие самостоятельным поведением (т.е. «умеющие» выполнять некоторые действия, зависящие от состояния и полученных сообщений) называют объектами. Объект представляет собой опознаваемый предмет, единицу или сущность (реальную или абстрактную), имеющую четко определенное функциональное назначение в предметной области. Для определения объектов предметной области требуется рассмотреть понятия, которыми оперируют специалисты автоматизируемой предметной области. Из этих понятий, надо выбрать те, которые претендуют на объекты, а которые просто на свойства (характеристики) объекта. С точки зрения человека, объектом может быть: • Осязаемый и (или) видимый предмет (товар). • Процесс (покупка, продажа) или явление (гроза). • Нечто, на что направлена мысль или действие. Кандидатами на роль программных объектов так же могут быть: • физические и материальные объекты (дом, самолет, мяч); • характеристики объекта (цвет, размер, стиль); • место действия (офис, аэропорт); • роль человека (покупатель, менеджер по продажам); • абстрактные понятия (графический образ); • организация (школа, ВУЗ, поликлиника); • событие (встреча, продажа); • совокупность записей (чек, счет, книга учета и т.д.). После определения совокупности понятий необходимо определить те из них, которые претендуют на объекты предметной области и те, которые будут представлять свойства объектов. В связи с этим, можно расширить неформальное определение объекта - объект моделирует часть окружающей действительности и таким образом существует во времени и пространстве. Объект обладает: состоянием, поведением и идентичностью. Состояние объекта характеризуется перечнем (обычно статическим) всех свойств данного объекта и текущим (обычно динамическим) значением каждого из этих свойств. Так объект Ученик характеризуется свойствами: Фамилия, Имя, Номер класса, Дата рождения, Пол, Адрес. Для каждого объекта определяются значения свойств, например, Иванов – это значение свойства фамилия одного объекта; данные другого ученика определяются в другом объекте, но свойства у объектов одни и те же, а значения свойств разные. К числу свойств объекта относятся присущие ему или приобретенные им характеристики, черты, качества или способности, делающие данный объект самим собой (Товар, Продажа). Все свойства имеют некоторое значение. Значения могут быть простыми количественными характеристиками, а могут ссылаться на другой объект. Поведение – это то, как объект действует и реагирует. Поведение выражается в терминах состояния объекта и передачи сообщения. Объекты в предметной области не живут изолировано, а подвергаются воздействию или сами действуют на другие объекты. • Телевизор включить. • Пульт телевизора - Переключить канал телевизора. • Ребенок играет мячом. • Собака лает. • Автомат продает газеты. • Оценка записывается в журнал. • Определяется средний балл по дисциплине. Поведение объекта определяется выполняемыми над ним операциями и его состоянием, причем некоторые операции имеют побочное действие: они изменяют состояние. Состояние объекта представляет суммарный результат его поведения. Операцией называется определенное воздействие одного объекта на другой, с целью вызвать соответствующую реакцию. Пример, пульт телевизора. Операция – это услуга, которую класс может представить своим клиентам (Клиентом называется любой объект, используемый ресурсы другого объекта (называемого сервером)). В теории объектно – ориентированного проектирования различают: эктор – объект, который инициирует воздействие на другие объекты; Отношения между объектами • Связи. Объекты взаимодействуют друг другом через связи. Связи определяют равноправные отношения между объектами. Объектно – ориентированная программная система реализуется только посредством взаимодействия объектов. Отношение между объектами означает одно из двух: • или у нескольких объектов может быть что-то общее: например, студент, студент-выпускник, студент-дипломник. • или между ними семантическая связь, студент и руководитель курсовой работы: студент пишет КР, а руководитель, руководит работой. Участвуя в связи, объект может играть роль: |