Лабораторная работа №4
Управление калькулятором
Цель
Сформировать практические навыки реализации классов средствами объектно-ориентированного программирования С++.
Задание
1. Разработать и реализовать класс «Управление калькулятором чисел» тип TCtrl, используя класс С++. Тип чисел, которые обрабатывает калькулятор, зависит от варианта.
На Унифицированном языке моделирования UML (Unified Modeling Language) наш класс можно обозначить следующим образом:
УправлениеКалькуляторомПростыхДробей (тип TCtrl) |
состояниеКалькулятора: TCtrlState |
редактор: TEditor |
процессор: TProc |
память: TMemory |
число: TFrac |
выполнитьКомандуКалькулятора(a: Integer; var b, MState: String): String |
выполнитьКомандуРедактора(a: Integer): String |
выполнитьОперацию(a: Integer): String |
выполнитьФункцию(a: Integer): String |
вычислитьВыражение(a: Integer): String |
установитьНачальноеСостояниеКалькулятора(a: Integer): String |
выполнитьКомандуюПамяти(a: Integer; var MState: String): String |
читатьПисатьСостояниеКалькулятора: TCtrlState |
выполнитьКомандуБуфераОбмена(a: Integer; var b: String): String |
конструктор |
деструктор |
Обязанность: управление выполнением команд калькулятора |
2. Класс должен отвечать за управление выполнением команд калькулятора. Он распределяет команды калькулятора между объектами («редактор», «процессор», «память», «буфер обмена»), которые должны эти команды выполнять.
3. Протестировать каждый метод класса.
Рекомендации к выполнению
1. Класс TCtrl реализуйте в отдельном модуле UControl.
2. В модуле опишите перечисляемый тип TCtrlState = (cStart, cEditing, FunDone, cValDone, cExpDone, cOpChange, cError) для обозначения состояний калькулятора: cStart (Начальное), cEditing (Ввод и редактирование), cExpDone (Выражение вычислено), cOpDone (Операция выполнена), cValDone (Значение введено), cOpChange (Операция изменена),. cError (Ошибка).
3. В классе опишите следующие атрибуты:
«редактор» - объект типа TEditior;
«процессор» - объект типа TProc (TCalc в предыдущей редакции);
«память» - объект типа TMemory;
«состояние калькулятора» - тип TCtrlState;
«число» - объект типа TFrac (результат выполнения последней команды).
4. Набор основных операций класса определяется набором команд калькулятора, заданных пользователем. Кроме того, в классе будут определены вспомогательные операции, обеспечивающие реализацию основных операций. В классе опишите следующие операции:
«выполнитьКомандуКалькулятора» (управляет вызовом операций по работе с объектами: редактор (поле TEditor), процессор (поле TProc), память (поле TMemory), буфер обмена (глобальный объект ClipBoard)), операция получает целое число (номер команды пользователя), строку для буфера обмена, строку со значением состояния памяти и возвращает строку для буфера обмена, строку состояния памяти и строку результата;
«выполнитьКомандуРедактора» (управляет вызовом методов объекта редактор (тип TEditor)), операция получает целое число (номер команды пользователя и возвращает строку результата;
«выполнитьОперацию» (управляет вызовом методов объекта процессор (поле TProc)), операция получает целое число (номер команды пользователя и возвращает строку результата;
«выполнитьФункцию» (управляет вызовом методов объекта процессор (поле TProc)), операция получает целое число (номер команды пользователя и возвращает строку результата;
«вычислитьВыражение» (управляет вызовом методов объекта процессор (поле TProc)), операция получает целое число (номер команды пользователя и возвращает строку результата;
«установитьНачальноеСостояниеКалькулятора» (управляет вызовом методов для перевода объекта типа TCalc в состояние Start (см. ниже), операция получает целое число (номер команды пользователя и возвращает строку результата;
«выполнитьКомандуПамяти» (управляет вызовом методов объекта типа TCtrl, обеспечивающих выполнение команд памяти), операция получает целое число (номер команды пользователя), строку со значением состояния памяти и возвращает строку состояния памяти и строку результата;
«выполнитьКомандуБуфераОбмена» (управляет вызовом методов объекта типа TClipBoard, обеспечивающих выполнение команд буфера обмена), операция получает целое число (номер команды пользователя), строку со значением буфера обмена и возвращает строку со значением буфера обмена и строку результата;
«читать | писать состояние калькулятора», возвращает значение типа TCtrlState (свойство, опирающееся на поле);
«конструктор», осуществляет создание объектов и инициализацию полей класса;
«деструктор», осуществляет освобождение памяти, занимаемой объектом класса и объектами, указатели на которые хранятся в полях объекта: «Редактор», «Процессор», «Память», «Число».
5. Логика работы объекта «управление калькулятором» класс TCtrl может быть описана с помощью таблицы переходов, которая отражает изменение состояния калькулятора и результат работы объекта под действием команд пользователя. Таблица переходов строится на основе анализа прецедентов (вариантов использования), приведённых в спецификации. Для построения таблицы переходов необходимо:
6. проанализировать спецификацию, приведённую в задании для калькулятора простых дробей и выделить состояния калькулятора, например: Start (Начальное), Editing (Ввод и редактирование), ExpDone (Выражение вычислено), FunDone (Функция выполнена), ValDone (Значение введено), OpChange (смена операрации), Error (ошибка);
7. построить диаграмму состояний.
Диаграмма классов для Управления калькулятором простых дробей представлено на рисунке ниже.
Содержание отчета
Задание.
Текст программы.
Тестовые наборы данных для тестирования класса.
Контрольные вопросы
В чём сущность отношения ассоциации между классами?
Как изображается отношение ассоциации между классами на языке UML?
В чём сущность отношения агрегации между классами?
Как изображается отношение агрегации между классами на языке UML?
В чём сущность отношения композиции между классами?
Как изображается отношение композиции между классами на языке UML?
