Файл: Приложение Конвертер.docx

ВУЗ: Не указан

Категория: Методичка

Дисциплина: Программирование

Добавлен: 21.10.2018

Просмотров: 1207

Скачиваний: 16

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

37


Лабораторные работы



Оглавление



    1. Приложение 1. Практические задания для закрепления. Приложение Конвертор р1_р2.

Цель: Объектно-ориентированный анализ, проектирование и реализация приложения «Конвертор р1_р2» под Windows для преобразования действительных чисел представленных в системе счисления с основанием p1 в действительные числа представленные в системе счисления с основанием p2. В процессе выполнения работы студенты изучают: отношения между классами: ассоциация, агрегация, зависимость, их реализацию средствами языка программирования высокого уровня; этапы разработки приложений в технологии ООП; элементы технологии визуального программирования; диаграммы языка UML для документирования разработки.

Функциональные требования к приложению.

Интерфейс приложения может выглядеть так (рисунок 1):

Рисунок 1 - Главная форма приложения

Приложение должно обеспечивать пользователю:

  1. Преобразование действительного числа представленного в системе счисления с основанием p1 в число, представленное в системе счисления с основанием p2. Основания систем счисления p1, p2 для исходного числа и результата преобразования выбираются пользователем из диапазона от 2..16.

  2. Возможность ввода и редактирования действительного числа представленного в системе счисления с основанием p1 с помощью командных кнопок и мыши, а также с помощью клавиатуры.

  3. Контекстную помощь по элементам интерфейса.

  4. Справку о назначении приложения.

  5. Просмотр истории сеанса (журнала) работы пользователя с приложением – исходные данные, результат преобразования и основания систем счисления, в которых они представлены; дополнительные повышенные требования: автоматический расчёт необходимой точности представления результата.

Функциональные требования представлены диаграммой прецедентов (use-case диаграммой) расположенной на рисунке 2.

Рисунок 2 - Диаграммой прецедентов

Сценарий для прецедента «Преобразовать число»

Основной поток событий

  1. Пользователь выбирает основание системы счисления p1 исходного числа.

  2. Пользователь выбирает основание системы счисления p2 результата.

  3. Пользователь вводит действительное число, представленное в системе счисления с основанием p1.

  4. Пользователь вводит команду «Преобразовать».

  5. Система выводит введённое пользователем число, представленное в системе счисления с основанием p2.

  6. Система сохраняет исходные данные и результат преобразования в Историю.

Альтернативный поток событий 1. Введённое пользователем число выходит за границы допустимого диапазона.

3.1. Пользователь получает окно с сообщением.

3.2. Приложение переходит в режим Ввод и редактирование.


Альтернативный поток событий 2. Количество разрядов в результате превышает размер поля вывода визуального компонента.

4.1. Пользователь получает окно с сообщением.

4.2. Приложение переходит в режим Ввод и редактирование.

Можно осуществить декомпозицию прецедента Преобразовать, в результате мы получим для него следующую диаграмму (рисунок 3):

Рисунок 3 - Декомпозиция прецедента Преобразовать

Сценарий для прецедента «Преобразовать»

Предусловие

Завершён ввод и редактирования исходного числа.

Основной поток событий

  1. Пользователь вводит команду «Преобразовать».

  2. Система выводит введённое пользователем число, представленное в системе счисления с основанием p2.

  3. Система сохраняет исходные данные и результат преобразования в Историю.

Альтернативный поток событий 1. Введённое пользователем число выходит за границы допустимого диапазона.

1.1. Пользователь получает окно с сообщением.

1.2. Приложение переходит в режим Ввод и редактирование.

Альтернативный поток событий 2. Количество разрядов в результате превышает размер поля вывода визуального компонента.

1.1. Пользователь получает окно с сообщением.

1.2. Приложение переходит в режим Ввод и редактирование.

Сценарий для прецедента «Выбрать основание с. сч. p

Предусловие

Прецедент «Преобразовать» завершён.

Основной поток событий

  1. Пользователь изменяет основания систем счисления p2.

  2. Введённое пользователем число отображается в системе счисления с выбранным основанием.

Альтернативный поток событий 1. Количество разрядов в результате превышает размер поля вывода визуального компонента.

3.1. Пользователь получает окно с сообщением.

3.2. Приложение переходит в режим Ввод и редактирование.


Диаграмма классов модели объектно-ориентированного анализа.

Проанализировав прецеденты можно выделить следующие классы анализа приложения. Они представлены на диаграмме классов анализа на рисунке 4.

Рисунок 4 - Диаграмма классов анализа

Обмен сообщениями между объектами. Диаграмма последовательностей.

Давайте спроектируем обмен сообщениями между объектами в процессе выполнения прецедента «Преобразовать». Добавим объект класса Управление для организации обмена сообщениями между объектами в ходе выполнения прецедента. На диаграмме последовательностей приведённой на рисуноке 5 приведёна последовательность сообщений между объектами в основном потоке событий прецедента «Преобразовать».

Рисунок 5 - Диаграмма последовательностей

На диаграмме последовательностей приведённой на рисунке 6 приведёна последовательность сообщений между объектами в процессе реализации прецедента «Ввести число».

Рисунок 6 - Последовательность сообщений в прецеденте «Ввести число».

На диаграмме последовательностей приведённой на рисунке 7 приведёна последовательность сообщений между объектами в процессе реализации прецедента «История».


Рисунок 7 - Последовательность сообщений в прецеденте «История»


Диаграмма классов проекта

Проанализировав сообщения, которыми обмениваются классы в процессе выполнения прецедентов можно построить следующую диаграмму классов проекта. Для упрощения взаимодействия между классами в процессе работы приложения добавим класс «Управление». Тогда наша диаграмма примет следующий вид (рисунок 8):

Рисунок 8 - Диаграмма классов проекта

Из диаграммы классов видно, что объект интерфейсного класса «Главное окно» вызывает методы класса «Управление», «История» и «Справка». Объект же класса «Управление» в свою очередь вызывает методы объектов классов «Редактор», «История» и «Конвертор_p1_10», «Конвертор_10_p2». Диаграмма состояний для объекта класса «Управление» представлена (рисунок 9):

Рисунок 9 - Диаграмма состояний для объекта класса «Управление»

Объект класса «Управление» может находиться в двух состояниях: «Редактирование» и «Редактирование завершено».

Порядок выполнения разработки.

Разработка приложения разбита на лабораторные работы, в каждой из которых вы реализуете один или несколько логически связанных классов приложения.



      1. Лабораторная работа №1

        1. Конвертор чисел из десятичной системы счисления в систему счисления с заданным основанием

Цель: Сформировать практические навыки реализации классов на языке C#.

        1. Задание 1

  1. Реализовать преобразователь действительных чисел со знаком из десятичной системы счисления в систему счисления с заданным основанием p, в соответствии с приведенной ниже спецификацией, используя класс. Основание системы счисления p принадлежит диапазону значений от 2 до 16.

  2. Протестировать каждый метод класса.

Спецификация класса «Преобразователь чисел из десятичной системы счисления в систему счисления с заданным основанием 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

Рекомендации к выполнению.

  1. Тип данных реализовать, используя статический класс.

  2. Тип данных сохраните в отдельном файле 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) { }

}

}

        1. Содержание отчета

  1. Задание.

  2. Текст программы.

  3. Тестовые наборы данных для тестирования класса.

        1. Контрольные вопросы

  1. Что такое инкапсуляция?

  2. Как синтаксически представлено поле в описании класса?

  3. Как синтаксически представлен метод в описании класса?

  4. Как синтаксически представлено простое свойство в описании класса?

  5. Особенности описания методов класса?

  6. Видимость идентификаторов в описании класса?

  7. В чём особенности статических методов?

  8. В чём особенности статических классов?

        1. Класс «Конвертер р_10» - преобразователь чисел из системы счисления с основанием р в десятичную систему счисления

Цель: Сформировать практические навыки реализации классов на языке C#.

Задание 2

  1. Реализовать преобразователь действительных (конвертер р_10) чисел из системы счисления с основанием р в десятичную систему счисления в соответствии с приведенной ниже спецификацией, используя класс. Основание системы счисления р принадлежит диапазону значений от 2 до 16.

  2. Протестировать каждый метод класса.

Спецификация класса «Конвертер р_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) { }

}

}

  1. Тип данных реализовать, используя статический класс.

  2. Сохраните класс в отдельном файле Conver_p_10.

        1. Содержание отчета

  1. Задание.

  2. Текст программы.

  3. Тестовые наборы данных для тестирования класса.

        1. Контрольные вопросы

  1. Что такое инкапсуляция?

  2. Как синтаксически представлено поле в описании класса?

  3. Как синтаксически представлен метод в описании класса?

  4. Как синтаксически представлено простое свойство в описании класса?

  5. Особенности описания методов класса?

  6. Видимость идентификаторов в описании класса?

  7. В чём особенности статических методов?

  8. В чём особенности статических классов?

  9. Как вызываются статические методы?



      1. Лабораторная работа №2.

        1. Редактор чисел в системе счисления с основанием р.

Цель: Сформировать практические навыки реализации классов средствами объектно-ориентированного языка программирования C#.

        1. Задание 1

  1. Разработать и реализовать класс Editor «Редактор действительных чисел представленных в системе счисления с основанием р», используя класс языка высокого уровня. Основание системы счисления р принимает значение из диапазона 2..16. Все команды редактора удобно пронумеровать, начиная с команды добавить 0 целыми числами от 0. При реализации интерфейса номера команд удобно хранить в свойстве Tag, которое имеется у визуальных компонентов.

Атрибуты и операции класс представлены на рисунке 10.

Рисунок 10 - Атрибуты и операции класса

  1. Ответственность класса Editor (редактор) – хранение, ввод и редактирование строкового представления числа, представленного в системе счисления с основанием p. Класс должен обеспечивать: добавление символов (AddDigit), соответствующих р-ичным цифрам (р от 2 до 16); добавления нуля (AddZero()); добавление разделителя целой и дробной частей (AddDelim()); забой символа - удаление символа, стоящего справа (BS); очистку - установку нулевого значения числа (Clear); чтение строкового представления р-ичного числа (Number).

  2. Протестировать каждый метод класса.

        1. Рекомендации к выполнению

Описание класса может выглядеть следующим образом:

namespace Конвертор

{

class Editor

{

//Поле для хранения редактируемого числа.

string number = "";

//Разделитель целой и дробной частей.

const string delim = ".";

//Ноль.

const string zero = "0";

//Свойствое для чтения редактируемого числа.

public string Number

{ get { } }

//Добавить цифру.

public string AddDigit(int n) { }

//Точность представления результата.