
ЛР 6
.docxМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР) Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
Объектно-ориентированное программирование (ООП)
Отчет по лабораторной работе №6
по дисциплине «Языки программирования»
Студент гр. 723-1
________
__.__.2025
Руководитель
младший научный сотрудник
_______ А.В. Куртукова
__.__.2025
Введение
Цель работы:
Изучение различных видов исключительных ситуаций и методов их
обработки.
Задание:
Ознакомиться с основными концепциями объектноориентированного анализа и проектирования.
Изучить основные приемы объектно-ориентированного программирования, разобраться в технологии их реализации для выбранного языка и среды программирования.
Выбрать предметную область в соответствии с вариантом, составить для неё модель проектирования и модель предметной области, используя UML. 21
Реализовать в программе операции бизнес-логики, соответствующие предметной области варианта задания, с применением наследования и полиморфизма:
Разработать структуру абстрактного класса, который объявляет собой минимально необходимый интерфейс.
Разработать производный класс, осуществив его наследование от разработанного абстрактного класса, с реализацией всех чисто виртуальных функций.
В каждом варианте помимо представленных методов, необходимо определить один дополнительный метод для класса самостоятельно.
Написать отчет и защитить у преподавателя.
ХОД РАБОТЫ
Для данной работы, необходимо было реализовать программу с помощью ООП, одной из составляющих задания является 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