
Класс Квадрат / Класс_квадрат
.docПостановка задачи:
Разработать класс Квадрат. При этом состояние экземпляра это декартовые координаты точки (левого нижнего угла) и длина стороны. Состояние задаваемое пользователем – так же полярные координаты. Требуется реализовать проблемные действия: его смещение на задаваемые величины и вычисление площади. При этом сдвиг производится на величины, заданные в декартовых координатах.
Так же требуется реализовать селекторы относительно полярных координат. Конструкторы: без параметров и с параметрами в полярных координатах.
Анализ задачи:
Задача реализуется с использованием типа данных класс на языке С++. В роли входных данных выступает пара координат точки в полярной системе и длина стороны, а также величины смещения точки в декартовой системе в процессе тестирования класса. В роли выходных данных выступает пара координат точки и длина стороны после каждой операции над экземпляром в процессе тестирования.
Формальная постановка задачи:
-
Исходные данные: Так как в роли входных данных выступает пара координат и длина. В описании класса присутствует 2 атрибута класса –представитель класса точки, и параметр длины. Доступ к членам-данным класса выбран как “private”, что объясняется стремлением обезопасить класс от неконтролируемого метода доступа.
-
Ограничения на исходные данные: Ограничения на данные определяются диапазоном применяемого в классе типа для вещественных чисел, в данном случае типом “double”. В данной программе применены ограничения (-10000..10000). Ограничения на количество экземпляров класса определяется наличием свободной памяти. Ограничения на входные денные в программе определяют входные условия, а так же инвариант класса.
-
Выходные данные: В роли выходных данных служит пара координат точки и длины после каждой операции над экземпляром в процессе тестирования. Ограничения на выходные данные такие же как и на исходные, вследствие тех же причин.
-
Связь выходных данных с исходными данными: Связь выходных данных с исходными определяется действиями, которые выполнялись при тестировании класса. Собственно связь входных с выходными данными определяет постусловия метода.
-
Размещение
Как было сказано доступ к членам- данным класса выбран как “Private”. Доступ к членам- функциям класса выбран как “public”, чтобы обеспечить доступ к членам- функциям из вызывающей программы.
Определение методов:
-
Конструктор “Csqr(point, double)” с параметрами, использует метод класса точки.
-
Функция “Area()” производит вычисление площади квадрата.
-
Селекторы “getR()” , “getFi()” и “getA()” возвращают значения угла и радиуса в полярных координатах, а также длину стороны.
-
Операция (корректор) “Move(double, double )”, производит сдвиг на вектор.
Все перечисленные методы объявлены в разделе “public”.
Таблица функций:
Название |
Назначение |
Параметры |
Предусловия |
Постусловия |
Csqr(point,a) |
Создание представителя класса |
Типа точка, Типа double, входные |
X0,Y0,A0:[-10000..10000] |
X=POINT.X Y=POINT.Y A=A0 |
getR() |
Возврат радиуса в полярных координатах |
Нет |
|
|
getFi() |
Возврат угла в полярных координатах |
Нет |
|
|
getA() |
Возврат длины стороны |
Нет |
|
|
Move(dx,dy) |
Сдвиг на вектор |
Типа double, не изменяются, входные |
DX,DY:[-10000..10000] |
X1=X0+DX Y1=Y0+DY |
Area() |
Нахождение площади |
нет |
A:[-10000..10000] |
S=A*A |
Определение инварианта класса:
Инвариант определяется попаданием параметров точки в допустимый диапазон.
В нашем случае: x:[-10000..10000].
Также на длину стороны квадрата накладываются ограничения а:[-10000..10000]
Проверка инварианта производится в ходе выполнения программы, между вызовами членов- функций.
Тестирование:
Начальные значения |
Сдвиговые значения |
Конечные значения |
Схема сдвига |
R=5.83 Fi=0.54 A=2 |
Dx=1 Dy=3
|
R=8.84 FI=0.78 A=2 |
|
R=2 FI= -1.57 A=2 |
Dx=0 Dy=4 |
R=2 FI=1.57 A=2 |
|
R=2 FI=1.57 A=2 |
Dx=-2 Dy=0 |
R=2.82 FI= -0.785 A=2 |
|
R=2.23 FI=0.46 A=2 |
Dx=-6 Dy=-4 |
R=5 FI=0.64 A=2 |
|
Вывод:
Данный класс может быть использован при создании других приложений.
Также достоинством является простота работы с классом.
Недостатки: - Малый набор функций класса, не позволяющий работать с классом с должной легкостью.
- Отсутствие проверки вводимых значений.
Работоспособность класса подтверждается тестированием
Министерство образования РФ
СПбГЭТУ «ЛЭТИ»
МО-ЭВМ
Практическая работа №3
«Разработка класса «Квадрат»»
Студент: Митягин Сергей
Преподаватель: Казаков Борис
С.-Петербург
2005