Общие принципы дизайна в объектно

advertisement
Общие принципы дизайна в объектно-ориентированном
проектировании
Задание: Разработка и использование объектов платформы .NET.
FRAMEWORK
Для заданной прикладной области реализовать класс математической
абстракции. Описать его с помощью встроенной документации XML. Поместить данный класс в библиотеку для повторного использования.
Модернизировать сервис вычислений из лабораторной работы №1.
Сервис вычислений должен получать данные для вычисления по заданной формуле и отправлять результат клиенту. Сервис вычислений должен
вычислять значения по четырем предопределенным формулам:
LineVector, Vector, Complex
Matrix
result  a  b  c,
result  a  b  c,
result   a  b   c   a  d   b  d   c,
result   a  b   c   a  d ,0  b  d ,0  c,
result  e / f  d  ,
result  e / f  0, d  ,
result  new Type   double[] a .
result  new Type   double[,] a  .
Замечание. Аргумент d является скалярным целым числом.
Варианты классов математических абстракций
Матрица double – Matrix.
Вектор линейного пространства double – LineVector.
Вектор double – Vector.
Комплекс double – Complex.
1
Методические указания
Последовательность шагов при выполнении лабораторной работы
Создать три проекта в одном решении. Проект, который будет содержать класс математической абстракции должен быть – Class Library.
Общая библиотека должна содержать разрабатываемый класс. Этот
класс будет использоваться двумя приложениями клиентом и сервером.
Включить генерацию документации для общей библиотеки.
В проектах клиента и сервера добавить ссылку на проект общей библиотеки.
Реализовать класс прикладной области, включая документацию.
Получить ключ для подписи библиотеки и подписать общую сборку.
Включить статический анализатор кода и исправить ошибки.
Сгенерировать документацию, используя один из генераторов документации NDoc или Sandcastle.
Реализовать клиентское приложение для ввода данных, отправки их по
сети сервису вычислений и печати полученного результата.
Реализовать сервис вычислений для четырех формул.
Информация к выполнению лабораторной работы
Сериализация представляет собой процесс преобразования состояния
объекта в форму, пригодную для передачи или сохранения. Процесс обратный по отношению к сериализации называется десериализацией, в результате
которой поток преобразуется в объект. Двумя наиболее важными причинами
использования сериализации являются необходимость сохранения состояния
объекта на носителе для воссоздания точной копии объекта в дальнейшем, а
также возможность отправки объекта по значению из одного домена приложения в другой.
Пример: Пусть необходимо вычислить значение суммы элементов массива деленной на число К.
Массив заполним случайными значениями:
int n = 100;
//Количество элементов в массиве.
double[] array = new double[n]; //Объявление массива.
Random random = new Random();
//Создание объекта генератора случайных
чисел.
for (int i = 0; i < n; i++)
//Цикл для всех элементов.
{
array[i] = 1000 * random.NextDouble(); //Заполнение элементов массива.
}
Передачу данных можно было бы организовать так:
BinaryWriter writer = new BinaryWriter(networkStream);
writer.Write(1);
//Начало передачи данных.
writer.Write(n);
//Передача количества элементов в массиве.
for (int i = 0; i < n; i++)
{
writer.Write(array[i]);
//Передача элементов массива.
}
writer.Write(k);
//Передача значения к.
2
Другим способом передачи большого пакета данных является создание
класса (например, с именем Data) и передача класса по сети. Такой класс
должен быть доступен в двух приложениях: и в Client, и в Server. Поэтому
его необходимо разместить в отдельной библиотеке dll, к которой будут обращаться указанные приложения.
Так как расчет должен осуществляться по заданным формулам с разными аргументами, то необходимо использовать четыре разных класса. В файле
ShareData.cs, прилагаемом к лабораторной работе, содержатся классы, необходимые для передачи аргументов и кода операции. Предлагается рассмотреть эти классы самостоятельно.
Общий класс, который отвечает за передачу всех возможных данных,
называется Data. Он содержит только код операции. Остальные классы содержат поля для хранения данных для каждой операции. Эти классы объединены в иерархию таким образом, чтобы свести к минимуму повторное объявление передаваемых аргументов. Например, первая и вторая формула отличается тем, что во вторую формулу передается дополнительный аргумент d,
поэтому класс TwoData наследует поля a, b и c от класса OneData (см. диаграмму рис. 1).
3
Рис. 1
4
Download