Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР 6

.docx
Скачиваний:
1
Добавлен:
15.03.2025
Размер:
87 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР) Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

Объектно-ориентированное программирование (ООП)

Отчет по лабораторной работе №6

по дисциплине «Языки программирования»

Студент гр. 723-1

________

__.__.2025

Руководитель

младший научный сотрудник

_______ А.В. Куртукова

__.__.2025

Введение

Цель работы:

Изучение различных видов исключительных ситуаций и методов их

обработки.

Задание:

  1. Ознакомиться с основными концепциями объектноориентированного анализа и проектирования.

  2. Изучить основные приемы объектно-ориентированного программирования, разобраться в технологии их реализации для выбранного языка и среды программирования.

  3. Выбрать предметную область в соответствии с вариантом, составить для неё модель проектирования и модель предметной области, используя UML. 21

  4. Реализовать в программе операции бизнес-логики, соответствующие предметной области варианта задания, с применением наследования и полиморфизма:

    1. Разработать структуру абстрактного класса, который объявляет собой минимально необходимый интерфейс.

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

    3. В каждом варианте помимо представленных методов, необходимо определить один дополнительный метод для класса самостоятельно.

  5. Написать отчет и защитить у преподавателя.

ХОД РАБОТЫ

Для данной работы, необходимо было реализовать программу с помощью ООП, одной из составляющих задания является UML-диаграмма (рисунок 1.1).

Рисунок 1.1 - UML-диаграмма

Заключение

В результате работы были получены знания об объектно-ориентированном программировании и его основных концепциях, а также навыки для построения модели предметной области и элементов модели проектирования.

Приложение А

(обязательное)

Листинг программы

using System;

using System.Collections.Generic;

public interface ITrafficDataDisplay

{

void DisplayTrafficData(List<TrafficRecord> records);

}

public class TrafficRecord

{

public DateTime Time { get; set; }

public double Speed { get; set; }

public int VehicleCount { get; set; }

public string Location { get; set; }

public TrafficRecord(DateTime time, double speed, int vehicleCount, string location)

{

Time = time;

Speed = speed;

VehicleCount = vehicleCount;

Location = location;

}

}

public abstract class TrafficDataAnalyzer

{

protected List<TrafficRecord> trafficRecords;

protected ITrafficDataDisplay display;

public TrafficDataAnalyzer(ITrafficDataDisplay dataDisplay)

{

trafficRecords = new List<TrafficRecord>();

display = dataDisplay;

}

public void AddRecord(TrafficRecord record)

{

trafficRecords.Add(record);

}

public abstract double CalculateAverageSpeed();

public abstract double PredictTrafficDensity(DateTime time);

public abstract void ShowPeakHours(); //moved here

public void DisplayData()

{

display.DisplayTrafficData(trafficRecords);

}

}

public class SimpleTrafficAnalyzer : TrafficDataAnalyzer

{

public SimpleTrafficAnalyzer(ITrafficDataDisplay dataDisplay) : base(dataDisplay) { }

public override double CalculateAverageSpeed()

{

if (trafficRecords.Count == 0) return 0;

double totalSpeed = 0;

foreach (var record in trafficRecords)

{

totalSpeed += record.Speed;

}

return totalSpeed / trafficRecords.Count;

}

public override double PredictTrafficDensity(DateTime time)

{

if (trafficRecords.Count == 0) return 0;

double totalVehicles = 0;

foreach (var record in trafficRecords)

{

totalVehicles += record.VehicleCount;

}

return totalVehicles / trafficRecords.Count;

}

public override void ShowPeakHours()

{

Console.WriteLine("Поиск пиковых часов (простая реализация)...");

}

}

public class ConsoleTrafficDisplay : ITrafficDataDisplay

{

public void DisplayTrafficData(List<TrafficRecord> records)

{

Console.WriteLine("Данные о движении транспорта:");

foreach (var record in records)

{

Console.WriteLine($"Время: {record.Time}, Скорость: {record.Speed}, Количество машин: {record.VehicleCount}, Местоположение: {record.Location}");

}

}

}

public class Program

{

public static void Main(string[] args)

{

var consoleDisplay = new ConsoleTrafficDisplay();

var analyzer = new SimpleTrafficAnalyzer(consoleDisplay);

analyzer.AddRecord(new TrafficRecord(DateTime.Now, 60, 100, "Highway 1"));

analyzer.AddRecord(new TrafficRecord(DateTime.Now.AddHours(1), 40, 50, "Highway 1"));

analyzer.AddRecord(new TrafficRecord(DateTime.Now.AddHours(2), 70, 150, "Highway 1"));

analyzer.DisplayData();

Console.WriteLine($"Средняя скорость: {analyzer.CalculateAverageSpeed()}");

Console.WriteLine($"Прогнозируемая плотность трафика в {DateTime.Now.AddHours(3)}: {analyzer.PredictTrafficDensity(DateTime.Now.AddHours(3))}");

analyzer.ShowPeakHours();

}

}

Томск 2025

Соседние файлы в предмете Языки программирования