эх
This commit is contained in:
parent
d10a98650d
commit
237a890a7b
405
Report/report.md
405
Report/report.md
@ -1,109 +1,144 @@
|
|||||||
# Лабораторная работа 1
|
# Лабораторная работа 1
|
||||||
## Компоненты:
|
## Компоненты:
|
||||||
|
|
||||||
### CustomDataTable:
|
|
||||||
Визуальный компонент вывода таблицы значений
|
|
||||||
|
|
||||||
__Публичные Методы__:
|
|
||||||
- Определить структуру таблицы
|
|
||||||
```c#
|
|
||||||
void ConfigureColumns(params CustomDataTableColumnParameter[] columnParameters)
|
|
||||||
```
|
|
||||||
CustomDataTableColumnParameter
|
|
||||||
```c#
|
|
||||||
/// <summary>
|
|
||||||
/// Параметры столбца таблицы
|
|
||||||
/// </summary>
|
|
||||||
public record CustomDataTableColumnParameter
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Заголовок
|
|
||||||
/// </summary>
|
|
||||||
public string HeaderName { get; init; } = string.Empty;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Ширина
|
|
||||||
/// </summary>
|
|
||||||
public int Width { get; init; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Видимость
|
|
||||||
/// </summary>
|
|
||||||
public bool Visible { get; init; } = true;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Название свойства
|
|
||||||
/// </summary>
|
|
||||||
public string PropertyName { get; init; } = string.Empty;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
- Отчистить таблицу
|
|
||||||
```c#
|
|
||||||
public void Clear()
|
|
||||||
```
|
|
||||||
- Заполнить таблицу
|
|
||||||
```c#
|
|
||||||
public void Fill<TType>(IList<TType> insertValues)
|
|
||||||
```
|
|
||||||
|
|
||||||
__Публичные Функции__:
|
|
||||||
- Получить стоку таблицы в виде объекта
|
|
||||||
```c#
|
|
||||||
public TType? GetRow<TType>(int rowIndex) where TType : new()
|
|
||||||
```
|
|
||||||
|
|
||||||
__Свойства__:
|
|
||||||
- Индекс выбранной строки
|
|
||||||
```c#
|
|
||||||
public int SelectedRow
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### CustomListBox
|
### CustomListBox
|
||||||
Визуальный компонент выбора из списка значений
|
|
||||||
|
|
||||||
__Публичные Методы__:
|
Пользовательский визуальный компонент, который наследуется от UserControl.
|
||||||
- Заполнить список значениями
|
Этот компонент является оберткой вокруг стандартного ListBox и предоставляет функционал для выбора значений из списка.
|
||||||
```c#
|
Класс поддерживает заполнение списка значениями, очистку списка,
|
||||||
public void FillValues(IEnumerable<string> strings)
|
обработку выбора элемента и уведомление об ошибках.
|
||||||
```
|
|
||||||
- Очистить список
|
|
||||||
```c#
|
|
||||||
public void Clear()
|
|
||||||
```
|
|
||||||
|
|
||||||
__Свойства__:
|
---
|
||||||
- Событие возникающие при изменении списка
|
|
||||||
```c#
|
|
||||||
public event EventHandler ValueChanged
|
|
||||||
```
|
|
||||||
- Обработка ошибок
|
|
||||||
```c#
|
|
||||||
public event Action<Exception> AnErrorOccurred
|
|
||||||
```
|
|
||||||
- Выбранное значение
|
|
||||||
```c#
|
|
||||||
public string Selected
|
|
||||||
```
|
|
||||||
|
|
||||||
|
### Свойства:
|
||||||
|
|
||||||
|
1. Selected (тип: `string`)
|
||||||
|
- Функция: Возвращает или устанавливает выбранное значение в списке.
|
||||||
|
- get: Возвращает выбранный элемент списка или пустую строку, если элемент не выбран.
|
||||||
|
- set: Устанавливает выбранный элемент списка, если он существует.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Методы:
|
||||||
|
|
||||||
|
1. FillValues(IEnumerable<string> strings)
|
||||||
|
- Функция: Заполняет список значениями из переданной коллекции строк.
|
||||||
|
|
||||||
|
2. Clear()
|
||||||
|
- Функция: Очищает список, сбрасывает выбор и обновляет отображение.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Поля:
|
||||||
|
|
||||||
|
1. _selectedChanged (тип: `EventHandler?`)
|
||||||
|
- Функция: Хранит подписчиков на событие изменения выбранного элемента.
|
||||||
|
|
||||||
|
2. _errorOccured (тип: `Action<Exception>?`)
|
||||||
|
- Функция: Хранит подписчиков на событие возникновения ошибки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### События:
|
||||||
|
|
||||||
|
1. ValueChanged (тип: `EventHandler`)
|
||||||
|
- Функция: Событие, возникающее при изменении выбранного элемента в списке.
|
||||||
|
|
||||||
|
2. AnErrorOccurred (тип: `Action<Exception>`)
|
||||||
|
- Функция: Событие, возникающее при возникновении ошибки в процессе обработки выбранного элемента.
|
||||||
|
|
||||||
|
### CustomDataTable
|
||||||
|
|
||||||
|
CustomDataTable представляет собой пользовательский визуальный компонент, который наследуется от UserControl.
|
||||||
|
Этот компонент является оберткой вокруг стандартного DataGridView
|
||||||
|
и предоставляет функционал для отображения и управления таблицей данных. Класс поддерживает настройку столбцов,
|
||||||
|
заполнение таблицы данными, очистку таблицы, выбор строки и получение данных из строки в виде объекта.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Свойства:
|
||||||
|
|
||||||
|
1. SelectedRow (тип: `int`)
|
||||||
|
- Функция: Возвращает или устанавливает индекс выбранной строки в таблице.
|
||||||
|
- get: Возвращает индекс текущей выбранной строки.
|
||||||
|
- set: Устанавливает выбранную строку по индексу.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Методы:
|
||||||
|
|
||||||
|
1. ConfigureColumns(params CustomDataTableColumnParameter[] columnParameters)
|
||||||
|
- Функция: Настраивает столбцы таблицы на основе переданных параметров.
|
||||||
|
|
||||||
|
2. Clear()
|
||||||
|
- Функция: Очищает таблицу, удаляя все строки.
|
||||||
|
|
||||||
|
3. GetRow<TType>(int rowIndex)
|
||||||
|
- Функция: Возвращает данные из указанной строки таблицы в виде объекта типа TType.
|
||||||
|
|
||||||
|
4. Fill<TType>(IList<TType> insertValues)
|
||||||
|
- Функция: Заполняет таблицу данными из переданного списка объектов.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Поля:
|
||||||
|
|
||||||
|
- outDataGridView (тип: `DataGridView`)
|
||||||
|
- Функция: Внутренний элемент управления DataGridView, используемый для отображения таблицы.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### CustomNumericInputField
|
### CustomNumericInputField
|
||||||
Визуальный компонент ввода целочисленного значения допускающего null
|
|
||||||
|
|
||||||
__Свойства__:
|
CustomNumericInputField представляет собой пользовательский визуальный компонент,
|
||||||
- Событие возникающие при изменении поля ввода
|
который наследуется от UserControl.
|
||||||
```c#
|
Этот компонент предназначен для ввода целочисленных значений, которые могут быть null.
|
||||||
public event EventHandler NumericInputChanged
|
Он включает текстовое поле для ввода числа и флажок (чекбокс) для указания,
|
||||||
```
|
что значение должно быть null. Компонент также поддерживает события для обработки изменений ввода и ошибок.
|
||||||
- Обработка ошибок
|
|
||||||
```c#
|
---
|
||||||
public event Action<Exception> AnErrorOccurred
|
|
||||||
```
|
### Свойства:
|
||||||
- Значения поля ввода
|
|
||||||
```c#
|
1. Value (тип: `int?`)
|
||||||
public int? Value
|
- Функция: Возвращает или устанавливает значение поля ввода.
|
||||||
```
|
- get: Возвращает введенное целое число или null, если флажок "null" активен.
|
||||||
_Возможно исключение ```InvalidNumericInputValueException```_
|
Если введенное значение не является числом, выбрасывает исключение InvalidNumericInputValueException.
|
||||||
|
- set: Устанавливает значение поля ввода. Если значение null, активирует флажок "null" и очищает текстовое поле.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Методы:
|
||||||
|
|
||||||
|
1. Приватный: IsNullcheckBox_CheckedChanged(object sender, EventArgs e)
|
||||||
|
- Функция: Обрабатывает изменение состояния флажка "null". Если флажок активен,
|
||||||
|
отключает текстовое поле и очищает его. Вызывает событие _numericInputChanged или _errorOccurred в случае ошибки.
|
||||||
|
|
||||||
|
2. Приватный: InputField_TextChanged(object sender, EventArgs e)
|
||||||
|
- Функция: Обрабатывает изменение текста в поле ввода.
|
||||||
|
Вызывает событие _numericInputChanged или _errorOccurred в случае ошибки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Поля:
|
||||||
|
|
||||||
|
1. _numericInputChanged (тип: `EventHandler?`)
|
||||||
|
- Функция: Хранит подписчиков на событие изменения значения в поле ввода.
|
||||||
|
|
||||||
|
2. _errorOccured (тип: `Action<Exception>?`)
|
||||||
|
- Функция: Хранит подписчиков на событие возникновения ошибки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### События:
|
||||||
|
|
||||||
|
1. NumericInputChanged (тип: `EventHandler`)
|
||||||
|
- Функция: Событие, возникающее при изменении значения в поле ввода (включая активацию флажка "null").
|
||||||
|
|
||||||
|
2. AnErrorOccurred (тип: `Action<Exception>`)
|
||||||
|
- Функция: Событие, возникающее при возникновении ошибки в процессе обработки ввода.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
# Лабораторная работа 2
|
# Лабораторная работа 2
|
||||||
@ -111,131 +146,92 @@ __Свойства__:
|
|||||||
|
|
||||||
### CustomPdfTable
|
### CustomPdfTable
|
||||||
|
|
||||||
Компонент для сохранения таблицы в пдф
|
Класс CustomPdfTable представляет собой компонент, который сохраняет данные в виде таблицы в PDF-документ.
|
||||||
|
Этот компонент использует библиотеку PdfSharp.MigraDoc для создания и форматирования PDF-документов.
|
||||||
|
Класс поддерживает добавление заголовка документа,
|
||||||
|
создание таблиц на основе двумерных массивов строк и сохранение документа по указанному пути.
|
||||||
|
|
||||||
__Публичные Методы__:
|
---
|
||||||
- Определить структуру таблицы
|
|
||||||
```c#
|
|
||||||
public void SaveToPdf(PdfTableInfo tableInfo)
|
|
||||||
```
|
|
||||||
PdfTableInfo
|
|
||||||
```c#
|
|
||||||
/// <summary>
|
|
||||||
/// Параметры для создания таблиц в пдф
|
|
||||||
/// </summary>
|
|
||||||
public record PdfTableInfo
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// имя файла (включая путь до файла)
|
|
||||||
/// </summary>
|
|
||||||
public string FilePath { get; init; } = @"C:\pdfTable.pdf";
|
|
||||||
|
|
||||||
/// <summary>
|
### Методы:
|
||||||
/// название документа(заголовок в документе)
|
|
||||||
/// </summary>
|
|
||||||
public string Title { get; init; } = "Таблица";
|
|
||||||
|
|
||||||
/// <summary>
|
1. SaveToPdf(PdfTableInfo tableInfo)
|
||||||
/// Список таблиц
|
- Функция: Сохраняет данные в PDF-документ с таблицами.
|
||||||
/// </summary>
|
- Параметры:
|
||||||
public IEnumerable<string[,]> Tables { get; init; } = [];
|
- tableInfo: Объект типа PdfTableInfo,
|
||||||
}
|
- содержащий информацию о пути сохранения файла, заголовке документа и таблицах.
|
||||||
```
|
- Логика:
|
||||||
|
- Проверяет, что таблицы не пусты.
|
||||||
|
- Создает PDF-документ с помощью PdfCreator.
|
||||||
|
- Добавляет заголовок документа.
|
||||||
|
- Для каждой таблицы создает строки и столбцы на основе двумерного массива строк.
|
||||||
|
- Сохраняет документ по указанному пути.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### CustomPdfTableWithGrouping
|
### CustomPdfTableWithGrouping
|
||||||
|
|
||||||
Компонент создающий таблицу и группирует элементы по 1 столбцу
|
CustomPdfTableWithGrouping создает PDF-документ с таблицей,
|
||||||
__Публичные Методы__:
|
группируя данные по первому столбцу.
|
||||||
- Сохранить в пдф
|
Использует библиотеку PdfSharp.MigraDoc для создания и форматирования PDF-документов.
|
||||||
```c#
|
Класс поддерживает настройку заголовка таблицы, столбцов, строк и группировку данных.
|
||||||
public void SaveToPdf<TType>(PdfTableWithGroupingInfo<TType> tableInfo) where TType : class
|
|
||||||
```
|
|
||||||
PdfTableWithGroupingInfo
|
|
||||||
```c#
|
|
||||||
/// <summary>
|
|
||||||
/// Параметры для создания таблицы в пдф с группировкой по 1 столбцу
|
|
||||||
/// </summary>
|
|
||||||
public class PdfTableWithGroupingInfo<TType> where TType : class
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// имя файла (включая путь до файла)
|
|
||||||
/// </summary>
|
|
||||||
public string FilePath { get; init; } = @"C:\pdfTable.pdf";
|
|
||||||
|
|
||||||
/// <summary>
|
---
|
||||||
/// название документа(заголовок в документе)
|
|
||||||
/// </summary>
|
|
||||||
public string Title { get; init; } = "Таблица";
|
|
||||||
|
|
||||||
/// <summary>
|
### Методы:
|
||||||
/// Высота заголовков
|
|
||||||
/// </summary>
|
|
||||||
public float HeaderHeight { get; init; } = 0.5f;
|
|
||||||
|
|
||||||
/// <summary>
|
1. SaveToPdf<TType>(PdfTableWithGroupingInfo<TType> tableInfo)
|
||||||
/// Параметры столбцов
|
- Функция: Сохраняет данные в PDF-документ с таблицей, группируя строки по первому столбцу.
|
||||||
/// </summary>
|
- Параметры:
|
||||||
public IEnumerable<ColumnInfo> Columns { get; init; } = [];
|
- tableInfo: Объект типа PdfTableWithGroupingInfo<TType>,
|
||||||
|
содержащий информацию о пути сохранения файла, заголовке таблицы, столбцах и строках.
|
||||||
|
- Логика:
|
||||||
|
- Проверяет, что столбцы и строки не пусты.
|
||||||
|
- Создает PDF-документ с помощью PdfCreator.
|
||||||
|
- Добавляет заголовок таблицы в документ.
|
||||||
|
- Создает таблицу с указанными столбцами и строками, группируя данные по первому столбцу.
|
||||||
|
- Сохраняет документ по указанному пути.
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Список таблиц
|
---
|
||||||
/// </summary>
|
|
||||||
public IEnumerable<RowInfo<TType>> Rows { get; init; } = [];
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### CustomPdfHistogram
|
### CustomPdfHistogram
|
||||||
|
|
||||||
Компонент создающий линейную диаграмму
|
CustomPdfHistogram представляет собой компонент, который сохраняет гистограмму в PDF-документ.
|
||||||
__Публичные Методы__:
|
Этот компонент использует библиотеку PdfSharp.MigraDoc для создания и форматирования PDF-документов.
|
||||||
- Сохранить гистограмму в пдф
|
Класс поддерживает добавление заголовка документа,
|
||||||
```c#
|
создание гистограммы на основе переданных данных и сохранение документа по указанному пути.
|
||||||
public void SaveToPdf(PdfHistigramInfo histogramInfo)
|
|
||||||
```
|
|
||||||
PdfHistigramInfo
|
|
||||||
```c#
|
|
||||||
/// <summary>
|
|
||||||
/// Параметры для создания линейной диаграммы
|
|
||||||
/// </summary>
|
|
||||||
public record PdfHistigramInfo
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Имя файла (включая путь до файла)
|
|
||||||
/// </summary>
|
|
||||||
public string FilePath { get; init; } = @"C:\pdfTable.pdf";
|
|
||||||
|
|
||||||
/// <summary>
|
---
|
||||||
/// Заголовок документа
|
|
||||||
/// </summary>
|
|
||||||
public string DocumentTitle { get; init; } = "Гистограмма";
|
|
||||||
|
|
||||||
/// <summary>
|
### Методы:
|
||||||
/// Заголовок диаграммы
|
|
||||||
/// </summary>
|
|
||||||
public string HistogramTitle { get; init; } = "Гистограмма";
|
|
||||||
|
|
||||||
/// <summary>
|
1. SaveToPdf(PdfHistigramInfo histogramInfo)
|
||||||
/// Расположение легенды
|
- Функция: Сохраняет гистограмму в PDF-документ.
|
||||||
/// </summary>
|
- Параметры:
|
||||||
public PdfLegendPosition LegendPosition { get; init; } = PdfLegendPosition.Bottom;
|
- histogramInfo: Объект типа PdfHistigramInfo, содержащий информацию о пути сохранения файла, заголовке документа,
|
||||||
|
заголовке диаграммы, данных и положении легенды.
|
||||||
/// <summary>
|
- Логика:
|
||||||
/// Значения
|
- Проверяет корректность входных данных (путь к файлу, заголовки, данные).
|
||||||
/// </summary>
|
- Создает PDF-документ с помощью PdfCreator.
|
||||||
public required IEnumerable<PdfHistogramLineInfo> Values { get; init; }
|
- Добавляет заголовок документа.
|
||||||
}
|
- Создает линейную диаграмму на основе переданных данных.
|
||||||
```
|
- Сохраняет документ по указанному пути.
|
||||||
|
- Исключения:
|
||||||
|
- ArgumentException: Если входные данные некорректны (например, отсутствует путь к файлу, заголовок или данные).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
# Лабораторная работа 3
|
# Лабораторная работа 3
|
||||||
|
|
||||||
Программный продукт предназначен для учета успеваемости студентов и управления их данными.
|
Программный продукт предназначен для учета успеваемости студентов и управления их данными.
|
||||||
Он позволяет хранить информацию о каждом студенте,
|
Он позволяет хранить информацию о каждом студенте,
|
||||||
формировать отчеты в различных форматах (Word, PDF, Excel)
|
формировать отчеты в различных форматах (Word, PDF, Excel)
|
||||||
и визуализировать данные с помощью круговой диаграммы.
|
и визуализировать данные с помощью линейной диаграммы.
|
||||||
|
|
||||||
### Цель программы
|
### Цель программы
|
||||||
Цель программы — автоматизация процесса учета успеваемости студентов, упрощение работы с данными и формирование отчетов для анализа успеваемости и стипендиальных выплат.
|
Цель программы — автоматизация процесса учета успеваемости студентов,
|
||||||
|
упрощение работы с данными и формирование отчетов для анализа успеваемости студентов.
|
||||||
|
|
||||||
### Функционал программы
|
### Функционал программы
|
||||||
- Хранение данных о студентах:
|
- Хранение данных о студентах:
|
||||||
@ -285,14 +281,17 @@ __Публичные Методы__:
|
|||||||
бы в приложении потребовала применения паттерна.
|
бы в приложении потребовала применения паттерна.
|
||||||
### Ограничения:
|
### Ограничения:
|
||||||
- На каждый паттерн свои сущности
|
- На каждый паттерн свои сущности
|
||||||
- В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается).
|
- В качестве источника сущностей использовать предметную область задания 3 лабораторной работы,
|
||||||
|
а не элементы разработки (что-то типа «У меня паттерн Singleton,
|
||||||
|
укажу ка я класс-подключение к БД через него», не принимается).
|
||||||
3) Создать диаграммы классов, отражающие взаимодействие новых
|
3) Создать диаграммы классов, отражающие взаимодействие новых
|
||||||
сущностей (а также используемый паттерн) с классами,
|
сущностей (а также используемый паттерн) с классами,
|
||||||
созданными в рамках 3 лабораторной работы. Отдельно отметить
|
созданными в рамках 3 лабораторной работы. Отдельно отметить
|
||||||
классы, которые являются участниками паттерна
|
классы, которые являются участниками паттерна
|
||||||
|
|
||||||
## Вариант 3: _Adapter, Composite, Proxy_
|
## Вариант 3: _Adapter, Composite, Proxy_
|
||||||
### Паттерн Adapter
|
### Паттерн Adapter
|
||||||
|
|
||||||
Паттерн Адаптер используется для того,
|
Паттерн Адаптер используется для того,
|
||||||
чтобы объекты с несовместимыми интерфейсами могли работать вместе.
|
чтобы объекты с несовместимыми интерфейсами могли работать вместе.
|
||||||
Он оборачивает один интерфейс в другой,
|
Он оборачивает один интерфейс в другой,
|
||||||
@ -419,7 +418,7 @@ __Публичные Методы__:
|
|||||||
- FivePointLaggingStudentsReport и HundredPointLaggingStudentsReport (Concrete Products) отчеты по отстающим студентам для 5- и 10-балльной систем.
|
- FivePointLaggingStudentsReport и HundredPointLaggingStudentsReport (Concrete Products) отчеты по отстающим студентам для 5- и 10-балльной систем.
|
||||||
- ReportManager (Client) класс, который обрабатывает отчеты
|
- ReportManager (Client) класс, который обрабатывает отчеты
|
||||||
|
|
||||||
![img_4.png](https://git.is.ulstu.ru/bekodeg/Cop.Borovkov.Var3/raw/branch/dev/Lab5-6/img_4.png)
|
![img_4.png](https://i.pinimg.com/originals/43/89/ed/4389ed56415070fc606be04621db69cc.jpg)
|
||||||
|
|
||||||
### Паттерн FactoryMethod
|
### Паттерн FactoryMethod
|
||||||
|
|
||||||
@ -506,7 +505,7 @@ Object Pool (пул объектов) — это поведенческий па
|
|||||||
- Student ConcreteColleague2 - Студент
|
- Student ConcreteColleague2 - Студент
|
||||||
- Dean`s Office ConcreteMediator - Деканат
|
- Dean`s Office ConcreteMediator - Деканат
|
||||||
|
|
||||||
![img_8.png](https://git.is.ulstu.ru/bekodeg/Cop.Borovkov.Var3/raw/branch/dev/Lab5-6/img_8.png)
|
![img_8.png](https://i.pinimg.com/originals/7f/c3/40/7fc340de38957f5c29de3a6a6689a252.png)
|
||||||
|
|
||||||
- ILms Mediator - Сайт лмс
|
- ILms Mediator - Сайт лмс
|
||||||
- User Colleague - Пользователь лмс
|
- User Colleague - Пользователь лмс
|
||||||
@ -514,7 +513,7 @@ Object Pool (пул объектов) — это поведенческий па
|
|||||||
- Student ConcreteColleague2 - Студент
|
- Student ConcreteColleague2 - Студент
|
||||||
- Lms ConcreteMediator - Логика сайта лмс
|
- Lms ConcreteMediator - Логика сайта лмс
|
||||||
|
|
||||||
![img_7.png](https://git.is.ulstu.ru/bekodeg/Cop.Borovkov.Var3/raw/branch/dev/Lab5-6/img_7.png)
|
![img_7.png](https://i.pinimg.com/originals/ac/c5/67/acc567be76d33349c35fd5fc10f84b9f.jpg)
|
||||||
|
|
||||||
### Паттерн Strategy
|
### Паттерн Strategy
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user