Файл: Лабораторная работа 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.
СТАТИЧЕСКИЕ КЛАССЫ
-
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Данная практическая работа предполагает выполнение следующих этапов:
-
Разработать заданный статический класс. Изобразить заданный класс на диаграмме классов UML. Разместить код статического класса в библиотеке классов. -
Добавить в решение с библиотекой классов консольное приложение, демонстрирующее работу с полученными классами. -
Оформить и защитить отчет по лабораторной работе.
-
ВЫПОЛНЕНИЕ
Требуется разработать статический класс 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
{
double expectedValue = 0;
for (int i = 0; i < values.Count; i++)
{
expectedValue += values[i] * probabilities[i];
}
return expectedValue;
}
public static double CalculateVariance(List
{
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
List
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 – Результат консольного приложения