Файл: Лабораторная работа 1. Основы объектноориентированного моделирования структуры системы цель и задачи работы.docx

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

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.11.2023

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

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

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


Для работы с классом создадим проект консольного приложения ConsoleApplication в составе решения ManeuverableLocomotive. Это приложение будет выводить в окно консоли данные об объектах класса Маневровый локомотив.

class ManeuverableLocomotive

{

private int railsNumber;

private int currentPath;

private int maxDistance;

private int currentDistance;

private int maxWagonsNumber;

private int currentWagonsNumber;

private double averageSpeed;

}

Для создания экземпляра класса принтер переопределим конструктор по умолчанию public ManeuverableLocomotive ().

public ManeuverableLocomotive()

{

railsNumber = 1;

currentPath = 1;

maxDistance = 1000;

currentDistance = 0;

maxWagonsNumber = 10;

currentWagonsNumber = 0;

averageSpeed = 50.0;

}
Переопределим конструктор по умолчанию:

public ManeuverableLocomotive(int rails, int path, int distance, int wagons, double speed)

{

railsNumber = rails;

currentPath = path;

maxDistance = distance;

currentDistance = 0;

maxWagonsNumber = wagons;

currentWagonsNumber = 0;

averageSpeed = speed;

}
public ManeuverableLocomotive(int rails, int path, int distance, double speed)

{

railsNumber = rails;

currentPath = path;

maxDistance = distance;

currentDistance = 0;

maxWagonsNumber = 10;

currentWagonsNumber = 0;

averageSpeed = speed;

}

Метод для вывода данных класса, выводит значения атрибутов класса.

public void DisplayData()

{

Console.WriteLine("Количество путей: {0}", railsNumber);

Console.WriteLine("Текущий пуь: {0}", currentPath);

Console.WriteLine("наибольшее перемещение от станции: {0}", maxDistance);

Console.WriteLine("Текущее перемщение от станции: {0}", currentDistance);

Console.WriteLine("Максимальное число вагонов: {0}", maxWagonsNumber);

Console.WriteLine("Текущее число вагоном: {0}", currentWagonsNumber);

Console.WriteLine("Средняя скорость: {0}", averageSpeed);

}

Выполним вызов этого метода для одного из созданных экземпляров в методе Main.

static void Main(string[] args)

{

ManeuverableLocomotive locomotive1 = new ManeuverableLocomotive();

locomotive1.DisplayData();

}

Результат работы консольного приложения с экземплярами класса ManeuverableLocomotive показан на рисунке 4.



Рисунок 4 – Данные о локомотиве

Метод «Переместить в заданное место», изменяет значение атрибута currentPath

public void MoveTo(int path, int distance)

{

if (path != currentPath)

{

Console.WriteLine("Переключение на путь {0}", path);

currentPath = path;

}

Console.WriteLine("Переход к {0} км", distance);

currentDistance = distance;

}

Метод «Переместить в заданное место», отображает на каком пути находится локомотив.

public void DetermineLocation()

{

Console.WriteLine("Локомотив находится на пути {0}", currentPath);

}

Метод «Присоединить вагоны». Увеличивает атрибут currentWagonsNumber
public void AttachWagons(int wagons)

{

if (currentWagonsNumber + wagons > maxWagonsNumber)

{

Console.WriteLine("Не удается присоединить {0} вагонов, достигнуто максимальное количество вагонов", wagons);


return;

}

currentWagonsNumber += wagons;

Console.WriteLine("{0} прицепленных вагоны", wagons);

}

Метод «Отсоединить вагоны». Уменьшает атрибут currentWagonsNumber public void DetachWagons(int wagons)

{

if (currentWagonsNumber - wagons < 0)

{

Console.WriteLine("Не удается отсоединить {0} вагонов, текущее количество вагонов равно {1}", wagons, currentWagonsNumber);

return;

}

currentWagonsNumber -= wagons;

Console.WriteLine("{0} отсоединенные вагоны", wagons);

}

}

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

static void Main(string[] args)

{

ManeuverableLocomotive locomotive1 = new ManeuverableLocomotive();

locomotive1.DisplayData();

locomotive1.DetermineLocation();

locomotive1.MoveTo(2, 500);

locomotive1.AttachWagons(5);

locomotive1.DetachWagons(2);

locomotive1.DisplayData();

ManeuverableLocomotive locomotive2 = new ManeuverableLocomotive(2, 1, 2000, 15, 70.0);

locomotive2.DisplayData();

locomotive2.DetermineLocation();

locomotive2.MoveTo(3, 1000);

locomotive2.AttachWagons(10);

locomotive2.DetachWagons(5);

locomotive2.DisplayData();
ManeuverableLocomotive locomotive3 = new ManeuverableLocomotive(3, 2, 1500, 60.0);

locomotive3.DisplayData();

locomotive3.DetermineLocation();

locomotive3.MoveTo(1, 300);

locomotive3.AttachWagons(8);

locomotive3.DetachWagons(4);

locomotive3.DisplayData();

}


Результат работы приведен на рисунке 5.



Рисунок 5 – результат работы
Полный исходный код программы:

using System;

class ManeuverableLocomotive

{

private int railsNumber;

private int currentPath;

private int maxDistance;

private int currentDistance;

private int maxWagonsNumber;

private int currentWagonsNumber;

private double averageSpeed;
public ManeuverableLocomotive()

{

railsNumber = 1;

currentPath = 1;

maxDistance = 1000;

currentDistance = 0;

maxWagonsNumber = 10;

currentWagonsNumber = 0;

averageSpeed = 50.0;

}
public ManeuverableLocomotive(int rails, int path, int distance, int wagons, double speed)

{

railsNumber = rails;

currentPath = path;

maxDistance = distance;

currentDistance = 0;

maxWagonsNumber = wagons;

currentWagonsNumber = 0;

averageSpeed = speed;

}
public ManeuverableLocomotive(int rails, int path, int distance, double speed)

{

railsNumber = rails;

currentPath = path;

maxDistance = distance;

currentDistance = 0;

maxWagonsNumber = 10;

currentWagonsNumber = 0;

averageSpeed = speed;

}
public void DisplayData()

{

Console.WriteLine("Количество путей: {0}", railsNumber);

Console.WriteLine("Текущий путь: {0}", currentPath);

Console.WriteLine("Максимальное перемещение от станции: {0}", maxDistance);

Console.WriteLine("Текущее перемщение от станции: {0}", currentDistance);

Console.WriteLine("Максимальное число вагонов: {0}", maxWagonsNumber);

Console.WriteLine("Текущее число вагоном: {0}", currentWagonsNumber);

Console.WriteLine("Средняя скорость: {0}", averageSpeed);

Console.WriteLine();

}
public void DetermineLocation()

{

Console.WriteLine("Локомотив находится на пути {0}", currentPath);

}
public void MoveTo(int path, int distance)

{

if (path != currentPath)

{

Console.WriteLine("Переключение на путь {0}", path);

currentPath = path;

}

Console.WriteLine("Переход к {0} км", distance);



currentDistance = distance;

}
public void AttachWagons(int wagons)

{

if (currentWagonsNumber + wagons > maxWagonsNumber)

{

Console.WriteLine("Не удается присоединить {0} вагонов, достигнуто максимальное количество вагонов", wagons);

return;

}

currentWagonsNumber += wagons;

Console.WriteLine("{0} прицепленных вагоны", wagons);

}
public void DetachWagons(int wagons)

{

if (currentWagonsNumber - wagons < 0)

{

Console.WriteLine("Не удается отсоединить {0} вагонов, текущее количество вагонов равно {1}", wagons, currentWagonsNumber);

return;

}

currentWagonsNumber -= wagons;

Console.WriteLine("{0} отсоединенные вагоны", wagons);

}

}
class Program

{

static void Main(string[] args)

{

ManeuverableLocomotive locomotive1 = new ManeuverableLocomotive();

locomotive1.DisplayData();

locomotive1.DetermineLocation();

locomotive1.MoveTo(2, 500);

locomotive1.AttachWagons(5);

locomotive1.DetachWagons(2);

locomotive1.DisplayData();
ManeuverableLocomotive locomotive2 = new ManeuverableLocomotive(2, 1, 2000, 15, 70.0);

locomotive2.DisplayData();

locomotive2.DetermineLocation();

locomotive2.MoveTo(3, 1000);

locomotive2.AttachWagons(10);

locomotive2.DetachWagons(5);

locomotive2.DisplayData();
ManeuverableLocomotive locomotive3 = new ManeuverableLocomotive(3, 2, 1500, 60.0);

locomotive3.DisplayData();

locomotive3.DetermineLocation();

locomotive3.MoveTo(1, 300);

locomotive3.AttachWagons(8);

locomotive3.DetachWagons(4);

locomotive3.DisplayData();

}

}

ЛАБОРАТОРНАЯ РАБОТА №6.

СТАТИЧЕСКИЕ КЛАССЫ

  1. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

Данная практическая работа предполагает выполнение следующих этапов:

  1. Разработать заданный статический класс. Изобразить заданный класс на диаграмме классов UML. Разместить код статического класса в библиотеке классов.

  2. Добавить в решение с библиотекой классов консольное приложение, демонстрирующее работу с полученными классами.

  3. Оформить и защитить отчет по лабораторной работе.




  1. ВЫПОЛНЕНИЕ

Требуется разработать статический класс StatCalculator, который по значению вероятностей определяет математическое ожидание, дисперсию и стандартное отклонение. Функциональность данного класса будет использоваться в классе Program консольного приложения.

Program:

Main(): метод, который запускает приложение и вызывает методы из класса StatCalculator.

TimeCalculator:

+ Метод CalculateExpectedValue() принимает два параметра: список значений (values) и список вероятностей (probabilities). Он вычисляет математическое ожидание (expected value) для данного распределения
, используя формулу ∑(x * p), где x - значение, а p - соответствующая вероятность. Метод возвращает полученное математическое ожидание.

+ Метод CalculateVariance() принимает три параметра: список значений (values), список вероятностей (probabilities) и математическое ожидание (expectedValue). Он вычисляет дисперсию (variance) для данного распределения, используя формулу ∑(p * (x - E(x))^2), где x - значение, p - соответствующая вероятность, а E(x) - математическое ожидание. Метод возвращает полученную дисперсию.

+ Метод CalculateStandardDeviation() принимает один параметр: дисперсию (variance). Он вычисляет стандартное отклонение (standard deviation) для данного распределения, используя формулу sqrt(variance), где sqrt - квадратный корень. Метод возвращает полученное стандартное отклонение.

Диаграмма классов представлена на рисунке 6.



Рисунок 6 – Диаграмма классов
Исходный код программы приведён в листинге:

public static class StatCalculator

{

public static double CalculateExpectedValue(List values, List probabilities)

{

double expectedValue = 0;

for (int i = 0; i < values.Count; i++)

{

expectedValue += values[i] * probabilities[i];

}

return expectedValue;

}
public static double CalculateVariance(List values, List probabilities, double expectedValue)

{

double variance = 0;

for (int i = 0; i < values.Count; i++)

{

variance += probabilities[i] * Math.Pow(values[i] - expectedValue, 2);

}

return variance;

}
public static double CalculateStandardDeviation(double variance)

{

return Math.Sqrt(variance);

}

}

class Program

{

static void Main(string[] args)

{

List values = new List() { 1, 2, 3, 4, 5 };

List probabilities = new List() { 0.1, 0.2, 0.3, 0.2, 0.2 };
double expectedValue = StatCalculator.CalculateExpectedValue(values, probabilities);

double variance = StatCalculator.CalculateVariance(values, probabilities, expectedValue);

double standardDeviation = StatCalculator.CalculateStandardDeviation(variance);
Console.WriteLine("Математическое ожидание: " + expectedValue);

Console.WriteLine("Дисперсия: " + variance);

Console.WriteLine("Стандартное отклонение: " + standardDeviation);

}

}

Результат работы консольного приложения показан на рисунке 7.




Рисунок 7 – Результат консольного приложения