- •1. Абстрактные типы данных
- •Пример 1
- •1.4. Разработка объектов
- •1.4.1. Объекты и композиция
- •Пример 3
- •1.4.3. Объекты и наследование
- •1.4.4. Наследование в программировании
- •1.4.5. Упорядоченные списки и наследование
- •1.4.6. Повторное использование кода
- •1.4.7. Спецификации класса SeqList и OrderedList
- •1.5. Приложения с наследованием классов
- •1.6. Разработка объектно-ориентированных программ
- •1.6.1. Анализ задачи/определение программы
- •1.6.2. Разработка
- •1.6.3. Кодирование
- •1.6.4. Тестирование
- •1.6.5. Иллюстрация программной разработки: Dice график
- •Замечание
- •Программа 2. Диаграмма бросания костей
- •1.7. Тестирование и сопровождение программы
- •1.7.1. Объектное тестирование
- •1.7.2. Тестирование управляющего модуля
- •1.7.3. Программное сопровождение и документирование
- •1.9. Абстрактные базовые классы и полиморфизм
- •1.9.1. Полиморфизм и динамическое связывание
- •2.1. Пользовательский тип — класс
- •2.1.1. Объявление класса
- •Пример 1.
- •2.1.2. Конструктор
- •2.1.3. Объявление объекта
- •2.1.4. Реализация класса
- •2.1.5. Реализация конструктора
- •2.1.6. Создание объектов
- •Пример 2.
- •2.2. Примеры классов
- •2.2.1. Класс Temperature
- •2.2.2. Реализация класса Temperature
- •2.2.3. Класс случайных чисел
- •Пример 3.
- •2.2.4. Реализация класса RandomNumber
- •2.3. Объекты и передача информации
- •2.3.1. Объект как возвращаемое значение
- •2.3.2. Объект как параметр функции
- •2.4. Массивы объектов
- •2.4.1. Конструктор умолчания
- •2.5. Множественные конструкторы
- •2.5.1. Реализация класса Date
- •2.6. Практическое применение: Треугольные матрицы
- •2.6.1. Свойства верхней треугольной матрицы
- •2.6.2. Хранение треугольной матрицы
- •Пример 4.
- •Пример 5.
- •2.6.3. Класс TriMat
- •2.6.5. Реализация класса TriMat
1.6.1. Анализ задачи/определение программы
Программная разработка начинается, когда клиент обозначит некоторую задачу, которая должна быть решена. Эта задача часто определяется свободно, без ясного понимания, какие именно данные имеются в наличии (вход) и какая новая информация должна быть получена в результате (выход). Программист анализирует задачу вместе с клиентом и определяет, какую форму должны принять вход и выход и алгоритмы, которые используются при выполнении вычислений. Этот анализ формализуется в фазе разработки программы.
1.6.2. Разработка
Программная разработка описывает объекты, которые являются основными строительными блоками программы. Разработка описывает также управляющие модули, руководящие взаимодействием между объектами.
В фазе объектной разработки определяются объекты, которые будут использоваться в программе, и пишется объявление для каждого класса. Класс тестируется путем его использования с какой-либо небольшой программой, тестирующей методы класса при управляемых условиях. Тот факт, что классы могут тестироваться отдельно, вне области большого приложения, является одной из важнейших возможностей объектно-ориентированной разработки.
Фаза разработки управления процессом использует нисходящую разработку путем создания главной программы и подпрограмм для управления взаимодействием между объектами. Главная программа и подпрограммы образуют каркас разработки (design framework).
Главный управляющий модуль соответствует главной функции в программе C++ и отвечает за поток данных программы. При нисходящей программной разработке система делится на последовательность действий, которые выполняются как независимые подпрограммы. Главная программа и ее подпрограммы организуются в нисходящую иерархию модулей, называемую структурным деревом (structure tree). Главный модуль является корнем этого дерева. Каждый модуль заключается в прямоугольник, а каждый класс, который используется модулем, заключается в овал. Мы представляем каждый модуль, указывая имя функции, входные и выходные параметры и краткое описание ее действия.
1.6.3. Кодирование
В фазе кодирования пишутся главная программа и подпрограммы, реализующие каркас программной разработки.
1.6.4. Тестирование
Реализация и тестирование объектов выполняются в течение фазы объектной разработки. Это позволяет нам сосредоточить внимание на разработке управляющего модуля. Мы можем проверять кодирование программы, тестируя взаимодействие каждого объекта с управляющими модулями в каркасе разработки.
1.6.5. Иллюстрация программной разработки: Dice график
Разработку и реализацию объектно-ориентированной программы иллюстрирует использование графика для записи частоты результатов бросания при игре в кости. В последующих разделах описывается каждая фаза в жизненном цикле программы.
Анализ задачи. Предположим, событие – это бросание двух костей. Для каждого бросания сумма лежит в диапазоне от 2 до 12. Используя повторное бросание костей, мы определяем эмпирическую вероятность того, что сумма равна 2, 3 ... , 11 или 12, и строим диаграмму, которая отражает вероятность каждого возможного результата.