
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР) Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
Объектно-ориентированное программирование (ООП)
Отчет по лабораторной работе №6
по дисциплине «Языки программирования»
Студент гр. 723-1
________
__.__.2025
Руководитель
младший научный сотрудник
_______ А.В. Куртукова
__.__.2025
Введение
Цель работы:
Изучение различных видов исключительных ситуаций и методов их
обработки.
Задание:
Ознакомиться с основными концепциями объектноориентированного анализа и проектирования.
Изучить основные приемы объектно-ориентированного программирования, разобраться в технологии их реализации для выбранного языка и среды программирования.
Выбрать предметную область в соответствии с вариантом, составить для неё модель проектирования и модель предметной области, используя UML. 21
Реализовать в программе операции бизнес-логики, соответствующие предметной области варианта задания, с применением наследования и полиморфизма:
Разработать структуру абстрактного класса, который объявляет собой минимально необходимый интерфейс.
Разработать производный класс, осуществив его наследование от разработанного абстрактного класса, с реализацией всех чисто виртуальных функций.
В каждом варианте помимо представленных методов, необходимо определить один дополнительный метод для класса самостоятельно.
Написать отчет и защитить у преподавателя.
Ход работы
Для данной работы, необходимо было реализовать программу с помощью ООП, одной из составляющих задания является UML-диаграмма (рисунок 1.1).
Рисунок 1.1 - UML-диаграмма
Заключение
В результате работы были получены знания об объектно-ориентированном программировании и его основных концепциях, а также навыки для построения модели предметной области и элементов модели проектирования.
Приложение а
(обязательное)
Листинг программы
using System.Collections.Generic;
using System;
using System.Xml;
using System.Linq.Expressions;
public abstract class TrendAnalyzer : IAnalysisOptions
{
public abstract void AnalyzeTrends();
public void DisplayData(List<string> data)
{
foreach (var item in data)
{
Console.WriteLine(item);
}
}
public void ShowAnalysisOptions()
{
Console.WriteLine("Пожалуйста, выберите тип анализа:");
Console.WriteLine("1. Циклический анализ");
Console.WriteLine("2. Линейный анализ");
Console.WriteLine("3. Сетевой анализ");
}
//полиморфизм
public void RunAnalysis()
{
ShowAnalysisOptions();
int analysisChoice = Convert.ToInt32(Console.ReadLine());
TrendAnalyzer analyzer;
if (analysisChoice == 1)
{
analyzer = new CyclicalTrendAnalyzer();
}
else if (analysisChoice == 2)
{
analyzer = new LinearTrendAnalyzer();
}
else if (analysisChoice == 3)
{
analyzer = new NetworkTrendAnalyzer();
}
else
{
Console.WriteLine("Неверный выбор. Выход из программы.");
Console.ReadLine();
return;
}
Console.WriteLine();
analyzer.AnalyzeTrends();
Console.WriteLine();
}
public void EndMessage()
{
throw new NotImplementedException();
}
}
public abstract class ChangePredictor : IAnalysisOptions
{
public abstract void PredictChanges();
public void DisplayData(List<string> data)
{
foreach (var item in data)
{
Console.WriteLine(item);
}
}
public void ShowAnalysisOptions()
{
Console.WriteLine("Пожалуйста, выберите тип анализа:");
Console.WriteLine("1. Циклический прогноз");
Console.WriteLine("2. Линейный прогноз");
Console.WriteLine("3. Сетевой прогноз");
}
public void RunPrediction()
{
ShowAnalysisOptions();
int predictionChoice = Convert.ToInt32(Console.ReadLine());
ChangePredictor predictor;
if (predictionChoice == 1)
{
predictor = new CyclicalChangePredictor();
}
else if (predictionChoice == 2)
{
predictor = new LinearChangePredictor();
}
else if (predictionChoice == 3)
{
predictor = new NetworkChangePredictor();
}
else
{
Console.WriteLine("Неверный выбор. Выход из программы.");
Console.ReadLine();
return;
}
Console.WriteLine();
predictor.PredictChanges();
Console.WriteLine();
}
public void EndMessage()
{
throw new NotImplementedException();
}
}
public class CyclicalTrendAnalyzer : TrendAnalyzer
{
public override void AnalyzeTrends()
{
List<string> trends = new List<string> { "Циклическая социологическая динамика — это повторяющийся процесс изменений в обществе. Она характеризуется периодическими колебаниями или циклами, которые могут быть связаны с экономическими, политическими или культурными факторами. Например, это может быть чередование периодов экономического подъема и спада или смена политических режимов.\r\n" };
Console.WriteLine("Анализ текущих трендов циклической динамики:");
DisplayData(trends);
}
}
public class LinearTrendAnalyzer : TrendAnalyzer
{
public override void AnalyzeTrends()
{
List<string> trends = new List<string> { "Линейная социологическая динамика предполагает постепенное, последовательное развитие общества.Эта динамика характеризуется изменениями и сдвигами, происходящими линейно во времени.Например, это может быть постепенное развитие технологий или изменение социальных норм с течением времени. "};
Console.WriteLine("Анализ текущих трендов линейной динамики:");
DisplayData(trends);
}
}
public class NetworkTrendAnalyzer : TrendAnalyzer
{
public override void AnalyzeTrends()
{
List<string> trends = new List<string> { "Сетевая социологическая динамика основана на концепции ризомы — сети, состоящей из взаимосвязанных элементов без иерархической структуры. Такая динамика характеризуется нелинейными и неоднородными изменениями, где влияние одного элемента может распространяться по всей сети. Например, это может быть распространение идеи или тренда через социальные сети или формирование городской субкультуры." };
Console.WriteLine("Анализ текущих сетевых трендов.:");
DisplayData(trends);
}
}
public class CyclicalChangePredictor : ChangePredictor
{
public override void PredictChanges()
{
List<string> predictions = new List<string> { "В ближайшем будущем ожидается изменение экономической ситуации, сопровождающееся периодом снижения инвестиций и роста безработицы. Однако после этого периода начнется новый этап экономического развития и роста." };
Console.WriteLine("Прогноз для циклической динамики.:");
DisplayData(predictions);
}
}
public class LinearChangePredictor : ChangePredictor
{
public override void PredictChanges()
{
List<string> predictions = new List<string> { "В ближайшие несколько лет будет наблюдаться устойчивый технологический прогресс, внедрение новых инноваций и модернизация производственных процессов. Это приведет к повышению эффективности и качества жизни в обществе." };
Console.WriteLine("Прогноз для линейной динамики.:");
DisplayData(predictions);
}
}
public class NetworkChangePredictor : ChangePredictor
{
public override void PredictChanges()
{
List<string> predictions = new List<string> { "В ближайшем будущем сетевое взаимодействие между людьми будет продолжать набирать обороты, что приведет к усилению влияния социальных сетей на формирование общественного мнения и поведения. Этот процесс будет усиливаться и оказывать всё большее воздействие на различные сферы жизни людей, включая политику и экономику." };
Console.WriteLine("Прогноз для сетевой динамики:");
DisplayData(predictions);
}
}
class Program
{
static void Main()
{
var socialAnalyst = new SocialAnalyst(); // Переименовано для ясности
socialAnalyst.ShowAnalysisOptions();
socialAnalyst.RunAnalysis();
}
}
interface IAnalysisOptions
{
public void ShowAnalysisOptions();
void EndMessage();
}
interface IAnalyzer
{
public void RunAnalysis();
void EndMessage();
}
public abstract class AnalysisBase
{
public void EndMessage()
{
Console.WriteLine("Конец:");
}
}
public class SocialAnalyst : AnalysisBase, IAnalysisOptions, IAnalyzer
{
public void ShowAnalysisOptions()
{
Console.WriteLine("Выберете:");
Console.WriteLine("1. Социальный анализ");
Console.WriteLine("2. Социальный прогноз");
}
public void RunAnalysis()
{
int analysisChoice = Convert.ToInt32(Console.ReadLine());
TrendAnalyzer analyzer;
ChangePredictor analysis2;
if (analysisChoice == 1)
{
analyzer = new CyclicalTrendAnalyzer();
analyzer.RunAnalysis();
}
else if (analysisChoice == 2)
{
analysis2 = new CyclicalChangePredictor();
analysis2.RunPrediction();
}
else
{
Console.WriteLine("Неверный выбор. Завершение программы.");
Console.ReadLine();
return;
}
EndMessage();
}
public new void EndMessage()
{
Console.WriteLine("Конец.");
}
}
Томск 2025