Добавлен: 21.10.2018
Просмотров: 1300
Скачиваний: 16
Лабораторные работы
Оглавление
Цель: Объектно-ориентированный анализ, проектирование и реализация приложения «Конвертор р1_р2» под Windows для преобразования действительных чисел представленных в системе счисления с основанием p1 в действительные числа представленные в системе счисления с основанием p2. В процессе выполнения работы студенты изучают: отношения между классами: ассоциация, агрегация, зависимость, их реализацию средствами языка программирования высокого уровня; этапы разработки приложений в технологии ООП; элементы технологии визуального программирования; диаграммы языка UML для документирования разработки.
Функциональные требования к приложению.
Интерфейс приложения может выглядеть так (рисунок 1):
Рисунок 1 - Главная форма приложения
Приложение должно обеспечивать пользователю:
-
Преобразование действительного числа представленного в системе счисления с основанием p1 в число, представленное в системе счисления с основанием p2. Основания систем счисления p1, p2 для исходного числа и результата преобразования выбираются пользователем из диапазона от 2..16.
-
Возможность ввода и редактирования действительного числа представленного в системе счисления с основанием p1 с помощью командных кнопок и мыши, а также с помощью клавиатуры.
-
Контекстную помощь по элементам интерфейса.
-
Справку о назначении приложения.
-
Просмотр истории сеанса (журнала) работы пользователя с приложением – исходные данные, результат преобразования и основания систем счисления, в которых они представлены; дополнительные повышенные требования: автоматический расчёт необходимой точности представления результата.
Функциональные требования представлены диаграммой прецедентов (use-case диаграммой) расположенной на рисунке 2.
Рисунок 2 - Диаграммой прецедентов
Сценарий для прецедента «Преобразовать число»
Основной поток событий
-
Пользователь выбирает основание системы счисления p1 исходного числа.
-
Пользователь выбирает основание системы счисления p2 результата.
-
Пользователь вводит действительное число, представленное в системе счисления с основанием p1.
-
Пользователь вводит команду «Преобразовать».
-
Система выводит введённое пользователем число, представленное в системе счисления с основанием p2.
-
Система сохраняет исходные данные и результат преобразования в Историю.
Альтернативный поток событий 1. Введённое пользователем число выходит за границы допустимого диапазона.
3.1. Пользователь получает окно с сообщением.
3.2. Приложение переходит в режим Ввод и редактирование.
Альтернативный поток событий 2. Количество разрядов в результате превышает размер поля вывода визуального компонента.
4.1. Пользователь получает окно с сообщением.
4.2. Приложение переходит в режим Ввод и редактирование.
Можно осуществить декомпозицию прецедента Преобразовать, в результате мы получим для него следующую диаграмму (рисунок 3):
Рисунок 3 - Декомпозиция прецедента Преобразовать
Сценарий для прецедента «Преобразовать»
Предусловие
Завершён ввод и редактирования исходного числа.
Основной поток событий
-
Пользователь вводит команду «Преобразовать».
-
Система выводит введённое пользователем число, представленное в системе счисления с основанием p2.
-
Система сохраняет исходные данные и результат преобразования в Историю.
Альтернативный поток событий 1. Введённое пользователем число выходит за границы допустимого диапазона.
1.1. Пользователь получает окно с сообщением.
1.2. Приложение переходит в режим Ввод и редактирование.
Альтернативный поток событий 2. Количество разрядов в результате превышает размер поля вывода визуального компонента.
1.1. Пользователь получает окно с сообщением.
1.2. Приложение переходит в режим Ввод и редактирование.
Сценарий для прецедента «Выбрать основание с. сч. p2»
Предусловие
Прецедент «Преобразовать» завершён.
Основной поток событий
-
Пользователь изменяет основания систем счисления p2.
-
Введённое пользователем число отображается в системе счисления с выбранным основанием.
Альтернативный поток событий 1. Количество разрядов в результате превышает размер поля вывода визуального компонента.
3.1. Пользователь получает окно с сообщением.
3.2. Приложение переходит в режим Ввод и редактирование.
Диаграмма классов модели объектно-ориентированного анализа.
Проанализировав прецеденты можно выделить следующие классы анализа приложения. Они представлены на диаграмме классов анализа на рисунке 4.
Рисунок 4 - Диаграмма классов анализа
Обмен сообщениями между объектами. Диаграмма последовательностей.
Давайте спроектируем обмен сообщениями между объектами в процессе выполнения прецедента «Преобразовать». Добавим объект класса Управление для организации обмена сообщениями между объектами в ходе выполнения прецедента. На диаграмме последовательностей приведённой на рисуноке 5 приведёна последовательность сообщений между объектами в основном потоке событий прецедента «Преобразовать».
Рисунок 5 - Диаграмма последовательностей
На диаграмме последовательностей приведённой на рисунке 6 приведёна последовательность сообщений между объектами в процессе реализации прецедента «Ввести число».
Рисунок 6 - Последовательность сообщений в прецеденте «Ввести число».
На диаграмме последовательностей приведённой на рисунке 7 приведёна последовательность сообщений между объектами в процессе реализации прецедента «История».
Рисунок 7 - Последовательность сообщений в прецеденте «История»
Диаграмма классов проекта
Проанализировав сообщения, которыми обмениваются классы в процессе выполнения прецедентов можно построить следующую диаграмму классов проекта. Для упрощения взаимодействия между классами в процессе работы приложения добавим класс «Управление». Тогда наша диаграмма примет следующий вид (рисунок 8):
Рисунок 8 - Диаграмма классов проекта
Из диаграммы классов видно, что объект интерфейсного класса «Главное окно» вызывает методы класса «Управление», «История» и «Справка». Объект же класса «Управление» в свою очередь вызывает методы объектов классов «Редактор», «История» и «Конвертор_p1_10», «Конвертор_10_p2». Диаграмма состояний для объекта класса «Управление» представлена (рисунок 9):
Рисунок 9 - Диаграмма состояний для объекта класса «Управление»
Объект класса «Управление» может находиться в двух состояниях: «Редактирование» и «Редактирование завершено».
Порядок выполнения разработки.
Разработка приложения разбита на лабораторные работы, в каждой из которых вы реализуете один или несколько логически связанных классов приложения.
Цель: Сформировать практические навыки реализации классов на языке C#.
-
Реализовать преобразователь действительных чисел со знаком из десятичной системы счисления в систему счисления с заданным основанием p, в соответствии с приведенной ниже спецификацией, используя класс. Основание системы счисления p принадлежит диапазону значений от 2 до 16.
-
Протестировать каждый метод класса.
Спецификация класса «Преобразователь чисел из десятичной системы счисления в систему счисления с заданным основанием p».
ADT Conver_10_p
Данные
Преобразователь действительных чисел из десятичной системы счисления в систему счисления с заданным основанием (тип Conver_10_p). Основание системы счисления p - это целое число, со значением, принадлежащим диапазону от 2 до 16 и целое число c, определяющее точность представления результата, выраженную в количестве разрядов.
Операции. Операции представлены в таблице 1.
Таблица 1 - Операции
Do(double n, int p, int c) |
Выполнить преобразование |
Вход: |
Десятичное действительное число n. Основание системы счисления p. Точность преобразования дроби, заданная числом разрядов дробной части результата c. Например: Do(-17.875,16,3) = “-А1.Е” . |
Процесс: |
Выполняет преобразование десятичного действительного числа n, в систему счисления с основанием р и точностью c. Например: Do (”-17.875”,16,3) = “-А1.Е”. |
Выход: |
Строка результата. Например: Do(”-17.875”) = “-А1.Е”. |
int_to_Char(int d) |
Преобразовать целое значение в цифру системы счисления с основанием р. |
Вход: |
d – значение типа int – целое, соответствующее цифре в системе счисления с основанием р. |
Предусловия: |
Нет. |
Процесс: |
Преобразует целое d в соответствующую ему цифру в системе счисления с основанием р, значение типа Char. Например: int_to_Char (14) = “E”. |
Выход: |
Значение типа char. |
Постусловия: |
Нет. |
int_to_P(int n, int p) |
Преобразовать целое в строку. |
Вход: |
n – целое число в системе счисления с основанием 10. p – основание системы счисления результата. |
Предусловия: |
Нет. |
Процесс: |
Преобразует целое n в строку, содержащую целое число в системе счисления с основанием p. Например: int_to_P(161, 16) = “A1” |
Выход: |
Строка. |
Постусловия: |
Нет. |
flt_to_P(double n, int p, int c) |
Преобразовать дробь в строку. |
Вход: |
n – дробь в системе счисления с основанием 10, p – основание системы счисления, c – точность представления дроби. |
Предусловия: |
Нет. |
Процесс: |
Преобразует дробь n в строку, содержащую дробь в системе счисления с основанием p с точностью с. Например: flt_to_P(0.9375, 2, 4) «1111» |
Выход: |
Строка. |
Постусловия: |
Нет. |
end Conver_10_p
Рекомендации к выполнению.
-
Тип данных реализовать, используя статический класс.
-
Тип данных сохраните в отдельном файле Conver_10_p.
Ниже представлена заготовка описания класса Conver_10_p. Вам необходимо написать код методов и протестировать методы.
namespace Конвертор
{
class Conver_10_P
{
//Преобразовать целое в символ.
public static char int_to_Char(int n) { }
//Преобразовать десятичное целое в с.сч. с основанием р.
public static string int_to_P(int n, int p) { }
//Преобразовать десятичную дробь в с.сч. с основанием р.
public static string flt_to_P(double n, int p, int c) { }
//Преобразовать десятичное
//действительное число в с.сч. с осн. р.
public static string Do(double n, int p, int c) { }
}
}
-
Содержание отчета
-
Задание.
-
Текст программы.
-
Тестовые наборы данных для тестирования класса.
-
Контрольные вопросы
-
Что такое инкапсуляция?
-
Как синтаксически представлено поле в описании класса?
-
Как синтаксически представлен метод в описании класса?
-
Как синтаксически представлено простое свойство в описании класса?
-
Особенности описания методов класса?
-
Видимость идентификаторов в описании класса?
-
В чём особенности статических методов?
-
В чём особенности статических классов?
Цель: Сформировать практические навыки реализации классов на языке C#.
Задание 2
-
Реализовать преобразователь действительных (конвертер р_10) чисел из системы счисления с основанием р в десятичную систему счисления в соответствии с приведенной ниже спецификацией, используя класс. Основание системы счисления р принадлежит диапазону значений от 2 до 16.
-
Протестировать каждый метод класса.
Спецификация класса «Конвертер р_10» - преобразователь действительных чисел со знаком из системы счисления с основанием р в десятичную систему счисления.
ADT Conver_p_10
Данные
Преобразователь действительных чисел из заданной системы счисления с основанием p в десятичную систему счисления (тип Conver_p_10). Основание системы счисления со значением, принадлежащим диапазону от 2 до 16.
Операции
Операции приведены в таблице 2.
Таблица 2 - Операции
dval(string P_num, int P) |
Выполнить преобразование |
Вход: |
P_num - строковое представление действительного числа в системе счисления с основанием р. Например: dval(“A5.E”, 16) |
Процесс: |
Выполняет преобразование действительного числа, представленного строкой в числовое представление. Например: dval(“A5.E”, 16) = -165.875. |
Выход: |
Вещественное число. |
Постусловия: |
Нет. |
char_To_num(char ch) |
Преобразовать символ в целое |
Вход: |
ch – значение типа char – символ, изображающий цифру системы счисления с основанием p. |
Предусловия: |
Нет. |
Процесс: |
Преобразует символ ch в значение целого типа. Например: PCharToInt(‘A’) = 10. |
Выход: |
Вещественное число. |
Постусловия: |
Нет. |
convert(string P_num, int P, double weight) |
Преобразовать строку в вещественное число. |
Вход: |
P_num – строка, изображающая цифры целой и дробной частей вещественного числа в системе счисления с основанием p без разделителя. weight – вес единицы старшего разряда целой части числа. |
Предусловия: |
Нет. |
Процесс: |
Преобразует строку P_num, содержащую цифры целой и дробной частей вещественного числа в системе счисления с основанием p без разделителя в вещественное число. Например: convert (“A5E1”, 16, 16) |
Выход: |
Вещественное число. |
Постусловия: |
Нет. |
end Conver_p_10
Рекомендации к выполнению.
Описание класса может выглядеть следующим образом:
namespace Конвертор
{
public class Conver_P_10
{
//Преобразовать цифру в число.
static double char_To_num(char ch) { }
//Преобразовать строку в число
private static double convert(string P_num, int P, double weight) { }
//Преобразовать из с.сч. с основанием р
//в с.сч. с основанием 10.
public static double dval(string P_num, int P) { }
}
}
-
Тип данных реализовать, используя статический класс.
-
Сохраните класс в отдельном файле Conver_p_10.
-
Содержание отчета
-
Задание.
-
Текст программы.
-
Тестовые наборы данных для тестирования класса.
-
Контрольные вопросы
-
Что такое инкапсуляция?
-
Как синтаксически представлено поле в описании класса?
-
Как синтаксически представлен метод в описании класса?
-
Как синтаксически представлено простое свойство в описании класса?
-
Особенности описания методов класса?
-
Видимость идентификаторов в описании класса?
-
В чём особенности статических методов?
-
В чём особенности статических классов?
-
Как вызываются статические методы?
Цель: Сформировать практические навыки реализации классов средствами объектно-ориентированного языка программирования C#.
-
Задание 1
-
Разработать и реализовать класс Editor «Редактор действительных чисел представленных в системе счисления с основанием р», используя класс языка высокого уровня. Основание системы счисления р принимает значение из диапазона 2..16. Все команды редактора удобно пронумеровать, начиная с команды добавить 0 целыми числами от 0. При реализации интерфейса номера команд удобно хранить в свойстве Tag, которое имеется у визуальных компонентов.
Атрибуты и операции класс представлены на рисунке 10.
Рисунок 10 - Атрибуты и операции класса
-
Ответственность класса Editor (редактор) – хранение, ввод и редактирование строкового представления числа, представленного в системе счисления с основанием p. Класс должен обеспечивать: добавление символов (AddDigit), соответствующих р-ичным цифрам (р от 2 до 16); добавления нуля (AddZero()); добавление разделителя целой и дробной частей (AddDelim()); забой символа - удаление символа, стоящего справа (BS); очистку - установку нулевого значения числа (Clear); чтение строкового представления р-ичного числа (Number).
-
Протестировать каждый метод класса.
-
Рекомендации к выполнению
Описание класса может выглядеть следующим образом:
namespace Конвертор
{
class Editor
{
//Поле для хранения редактируемого числа.
string number = "";
//Разделитель целой и дробной частей.
const string delim = ".";
//Ноль.
const string zero = "0";
//Свойствое для чтения редактируемого числа.
public string Number
{ get { } }
//Добавить цифру.
public string AddDigit(int n) { }
//Точность представления результата.