Создание класса в отдельном модуле проекта



Лабораторная № 4 Вспомогательные алгоритмы

Процесс решения сложной задачи часть сводится к решению нескольких более простых подзадач. Соответственно процесс разработки сложного алгоритма разбивается на этапы составления отдельных алгоритмов, которые называются вспомогательными. Каждый вспомогательный алгоритм описывает решение какой-либо подзадачи.

При разработке сложных алгоритмов используется метод последовательной детализации, который состоит в следующем.Сначала алгоритм формулируется в крупных блоках, которые еще нельзя перевести на язык операторов и записываются как вызовы вспомогательных алгоритмов. Затем происходит детализации, и все вспомогательные алгоритмы подробно расписываются для перевода на язык команд. Вспомогательные алгоритмы на языке программирования реализуются через подпрограммы.

Программы, которые неразделимы на отдельные структурные элементы, называются монолитными. Большие монолитные программы сложны для разработки, отладки и сопровождения. Минимальным автономным элементом монолитной программы является оператор.

Естественно стремление разбить программу на более крупные, чем оператор, компоненты. Роль таких компонентов выполняют подпрограммы. Программы, содержащие подпрограммы, называются модульными. Подпрограммы, в свою очередь, могут вызывать подпрограммы более низкого уровня и т.д. Таким образом, каждая модульная программа имеет иерархическую структуру.

Использование аппарата подпрограмм позволяет сократить объем и улучшить структуру программы с точки зрения наглядности и читаемости, уменьшить вероятность ошибок и облегчить процесс отладки программы. Разложение программы на взаимосвязанные, но замкнутые и логически завершенные компоненты дает возможность выполнять разработку отдельных подпрограмм разным программистам и более или менее независимо друг от друга. Кроме того, подпрограмма может быть рассмотрена как отдельная единица (со своими входными и выходными данными), что позволяет использовать ее в общем иерархическом подходе при конструировании алгоритма и программы по принципам нисходящего проектирования.

В языке C# подпрограммы реализуются в виде методов, являющимися членами классов. Существуют стандартных классов, которые являются частью языка и могут вызываться по имени без предварительного описания.

Программист имеет возможность определять свои собственные методы.

Эти методы являются членами классов, которые могут располагаться:

· В библиотеке DLL

· В классе, описанном в отдельном модуле проекта, где этот метод вызывается.

· Непосредственно в классе, где находится точка входа (метод Main), в консольном приложении - это класс Program

Создание библиотеки DLL

Задача 1. Реализация примера нахождения площади треугольника, заданного координатами вершин

Процесс реализации будет состоять из двух этапов: создания библиотеки DLL, включающей класс CalcTools (Инструменты_вычисления), содержащий метод Length (длина), который возвращает значение длины отрезка, заданного координатами концов.

Запустим Visual Studio, со стартовой страницы перейдем к созданию проекта и в качестве типа проекта укажем тип "Библиотека классов". В открывшемся окне создания DLL, показанном на рис. 1, зададим имя строящейся DLL, в нашем случае – CalcTools (Инструменты_вычисления). Имя всего решения укажем: MyDLL.

Рис.1Вид начальной страницы при выборе шаблона проекта

Поскольку всякая DLL содержит один или несколько классов, то для одного класса, которому по умолчанию дано имя "Class1", заготовка построена. Класс этот, показанный в окне кода, пока что пуст – не содержит никаких элементов.

Построенный автоматически класс вложен в пространство имен, которое по умолчанию получило имя, совпадающее с именем проекта – MathTools. Перед именем пространства заданы четыре предложения using, играющие роль инструкций для компилятора. В этих предложениях указываются имена пространств имен, присоединенных к проекту.

Работа над библиотекой начнется с переименовывания класса Class1. В профессионально написанном коде каждый класс хранится в отдельном файле, имена этих файлов должны совпадать. Классу дадим имя CalcTools. Так как все объекты, участвующие в проекте, взаимосвязаны, то процесс переименовывания надо проводить корректно. Для этого в Обозревателе решений надо воспользоваться контекстным меню для изменяемого объекта. Вид обозревателя решений в процессе вызова меню представлен на рис. 2.

Рис. 2. Контекстное меню в процессе переименовывания объекта

Следующий шаг продиктован крайне важным правилом профессионального стиля написания кода: каждый класс должен иметь заголовочный комментарий. Для добавления документируемого комментария достаточно в строке, предшествующей заголовку класса, набрать три идущих подряд слеша (три косых черты). В результате перед заголовком класса появится заголовочный комментарий – тэг "summary", в который и следует добавить краткое, но содержательное описание сути класса. Тэги "summary", которыми следует сопровождать классы, играют важную роль. При создании объектов класса будет выводиться интеллектуальная подсказка, поясняющая суть того, что можно делать с объектами. В нашем случае комментарий к классу CalcTools может быть достаточно простым – «Формулы для вычисления геометрических величин». На данном этапе код библиотечного файла имеет следующий вид:

namespace CalcTools

{

/// <summary>

/// Формулы для вычисления геометрических величин

/// </summary>

  public class CalcTools

{

}

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

Метод Line опишем в общем виде, как метод, вычисляющий длину отрезка, заданного координатами x1, y1 – координаты одного конца отрезка, и x2, y2 – координаты другого конца. Переменные, которые необходимо задать, прежде чем приступить к вычислению, называют входными параметрами. В общем случае координаты отрезка могут быть вещественными, поэтому тип входных параметров будет double. Перед именем метода, описываемого в библиотечном классе, указывается модификатор public (открытый, доступный), который позволит обращаться к методу не только из данного проекта. Следующий модификатор, static, позволит нам обращаться к методу, указав только имя класса, без создания экземпляров объектов (об экземплярах класса более подробно будет рассказано в следующей части пособия). Метод Line в результате своей работы должен рассчитать («вернуть») некоторое значение вещественного типа. Указание на тип возвращаемого значение также следует поместить перед именем метода.

Полный листинг класса CalcTools:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace CalcTools

{

/// <summary>

/// Формулы для вычисления геометрических величин

/// </summary>

public class CalcTools

{

///<summary>

/// метод, вычисляющий длину отрезка, заданного координатами:

/// x1, y1 – координаты одного конца отрезка,

/// x2, y2 – координаты другого конца отрезка

/// </summary>

public static double Line(double x1, double y1, double x2, double y2)

{

double res = 0;

res = Math.Sqrt(Math.Pow((x1 - x2), 2) + Math.Pow((y1 - y2), 2));

return res;

}

} }

 

Поставленная цель достигнута – построена DLL, содержащая класс, метод которого позволяет вычислять длину отрезка по заданным аргументам. Построим Решение, содержащее проект, для чего в Главном меню среды выберем пункт Построение|Построить решение. В результате успешной компиляции будет построен файл с расширением .dll. Поскольку построенная сборка не содержит исполняемого файла, то непосредственно запустить наш проект на выполнение не удастся.

Приступим к решению задачи вычисления периметра треугольника, заданного координатами вершин. Построим консольный проект, к которому присоединим нашу DLL, и протестируем, насколько корректно работают созданные нами методы.

Подсоединение библиотеки классов

Использовать библиотечные методы можно, только обратившись к ним из проекта. Создадим консольное приложение Triangle (Треугольник) и запишем код, позволяющий пользователю вводить значения координат вершин треугольника.

Первым делом свяжем два построенных проекта, для чего в консольный проект добавим ссылку на проект с DLL CalcTools. В окне Обозревателя решений подведем указатель мыши к имени консольного проекта и из контекстного меню, появляющегося при щелчке правой кнопки, выберем пункт меню Добавить ссылку. В открывшемся окне добавления ссылок выберем вкладку Проекты. Поскольку проект CalcTools включен в Решение, то он автоматически появится в открывшемся окне. Если ссылку нужно установить на проект, не включенный в Решение, то в окне добавления ссылок нужно задать путь к проекту. Нам проще, путь указывать не нужно, достаточно щелкнуть по появившемуся в окне имени MathTools. Ссылка на DLL появится в папке Ссылки консольного проекта. Теперь проекты связаны, и из консольного проекта доступны сервисы, предоставляемые DLL.

Рис. 3. Добавленная ссылка на библиотеку DLL в окне Обозревателя решений

Обращение к методу Line класса CalcTools в коде программы будет следующим: CalcTools.CalcTools.Line(параметры);

В процессе ввода система интеллектуальных подсказок заботливо будет выводить сообщения подсказки вида, представленного на рис. 4.

Рис. 4. Вывод сообщения в IntelliSense

Листинг программы для решения Задачи 1:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Triangle_1

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Вычисление периметра треугольника");

Console.WriteLine("Введите абсциссу (координату X) вершины 1");

double x1 = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Введите ординату (координату Y) вершины 1");

double y1 = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Введите абсциссу (координату X) вершины 2");

double x2 = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Введите ординату (координату Y) вершины 2");

double y2 = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Введите абсциссу (координату X) вершины 3");

double x3 = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Введите ординату (координату Y) вершины 3");

double y3 = Convert.ToDouble(Console.ReadLine());

double p = CalcTools.CalcTools.Line(x1, y1, x2, y2)+ CalcTools.CalcTools.Line(x2, y2, x3, y3)+ CalcTools.CalcTools.Line(x1, y1, x3, y3)+;

Console.WriteLine("Периметр треугольника, заданного координатами вершин, равен {0:F3}",p);

Console.ReadKey();

}

}}

Вид окна выполнения программы представлен на рис. 5.

Рис. 5. Вид окна выполнения программы для решения задачи 8.1

Создание класса в отдельном модуле проекта

Задача 2. В сферической капле воды радиусом R1 заключены 3 пузырька воздуха. Радиусы пузырьков известны. Вычислить объем воды.

 

В случае, когда файл класса включен в состав проекта, он добавляется к проекту стандартным способом, используя команду Добавить контекстного меню, как это показано на рис. 6.

Рис. 6. Добавление класса к проекту

Класс с методом, вычисляющим объем будет иметь вид:

 

Основная программа в этом случае будет иметь вид:


Дата добавления: 2019-11-16; просмотров: 184; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!