
- •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
Программа 2. Диаграмма бросания костей
Главная программа запрашивает пользователя ввести количество бросаний костей для моделирования. Наш запуск программы тестирует случай 500 000 бросаний костей. В конце выполнения задачи система ожидает нажатия клавиши или щелчка кнопкой мыши для завершения работы. Классы Line и Rectangle содержатся в файле figures.h, а класс Dice содержится в файле dice.h. Подпрограммы рисования графических примитивов находятся в graphlib.h.
#include <iostream.h>
#include "figures.h"
#include "dice.h"
#include "graphlib.h"
// Бросание двух костей tossCount раз.
// Запись числа выпавших "двоек" в tossTotal[2],
// "троек" – в tossTotal [3] и так далее
void SimulateDieToss( long tossTotal[], long tossCount )
{
long tossEvent;
int i;
Dice D;
// очистить каждый элемент массива tossTotal
for (i=2; i 12; i++)
tossTotal[i] = 0;
// Бросание костей tossCount раз
for (tossEvent = 1; tossEvent tossCount; tossEvent++ )
{
D.Toss();// бросание костей
tossTotal[D.Total()]++; // увеличение счетчика
}
}
// Нахождение максимального значения в массиве их n элементов
long Max(long а[ ] , int n)
{
long Imax = a[0] ;
int i;
for (i=l; i n; i++)
if (a[i] Imax)
Imax = a [ i ];
return Imax;
}
// Рисование двух осей void DrawAxes (void)
{
const float vertspan = 3.0;
Line VerticalAxis (Point(1.0, vertspan+0.25),
Point(1.0, 0.25) );
VerticalAxis . Draw ( );
Line HorizontalAxis(Point(0.75,vertspan),Point(0.75,vertspan));
HorizontalAxis . Draw ( );
}
// Рисование графического столбца
void Plot (long tqssTotal [] )
{
const float vertspan =3.0, scaleHeight = 2 .75;
float x, rectHeight, dx;
long maxTotal;
int i;
// Нахождение максимального значения в массиве tossTotal.
// Поиск для индексов в диапазоне 2-12
maxTotal = Max (stossTotal [2] , 11);
// теперь создаем прямоугольники
dx = 6.0/23.0; х= 1.0 +dx;
// Цикл- 11 раз.
// В цикле :
//определяется высота столбца для рисования в текущем положении;
//создается объект Rectangle для соответствующего
//положения, высота и ширина;
//рисуется столбец и происходит переход к следующему столбцу
for (i=2; i 12; I++)
rectHeight = (float (tossTotal [i] ) /maxTotal) *scaleHeight;
Rectangle CurrRect(Point(x,vertspan-rectHeight), Point(x+dx,
vertspan);
CurrRect . Draw ( );
x += 2.0*dx;
void main (void)
{
long numTosses;
long tossTotal [13] ;
// запрос числа моделирования бросаний
cout << "Введите число бросаний: ";
cin >> numTosses;
SimulateDieToss(tossTotal, numTosses); //бросание
InitGraphics();// инициализация графической системы
DrawAxes();// рисование осей
Plot(tossTotal); // построение графика
ViewPause();// ожидание нажатия клавиши или щечка мышью
ShutdownGraphics (); // закрытие графической системы
1.7. Тестирование и сопровождение программы
Использование объектно-ориентированного программирования способствует созданию систем, позволяющих выполнять независимое тестирование объектов и повторно использовать написанные ранее классы. Эти преимущества уменьшают риск появления ошибок при создании сложных программных систем, поскольку они развиваются, расширяясь из меньших систем, в которых вы уверены. Тестирование выполняется в процессе разработки программной системы.