lab 2
This commit is contained in:
53
ClassDiagram.cd
Normal file
53
ClassDiagram.cd
Normal file
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ClassDiagram MajorVersion="1" MinorVersion="1">
|
||||
<Class Name="Tool" Collapsed="true">
|
||||
<Position X="4.5" Y="0.75" Width="1.5" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AEADIAAAAAAAAAAAAABAAAQAACAAAAAACAAAAAAEAAA=</HashCode>
|
||||
<FileName>src\Tool\Tool.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="ManualTool" Collapsed="true">
|
||||
<Position X="1.75" Y="1.75" Width="1.5" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAIAAAAAAAAAAAAAAEAAAAACAAAAAAAAAAAAAAA=</HashCode>
|
||||
<FileName>src\Tool\ManualTool.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="ElectricTool" Collapsed="true">
|
||||
<Position X="7.25" Y="1.75" Width="1.5" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAACAAAAABAAAAAAAAAAA=</HashCode>
|
||||
<FileName>src\Tool\ElectricTool.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="Trimmer" Collapsed="true">
|
||||
<Position X="8.75" Y="3.25" Width="1.5" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAgAAAAA=</HashCode>
|
||||
<FileName>src\Tool\Trimmer.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="Scythe" Collapsed="true">
|
||||
<Position X="0.5" Y="3.25" Width="1.5" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAABA=</HashCode>
|
||||
<FileName>src\Tool\Scythe.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="Lawnmower" Collapsed="true">
|
||||
<Position X="5.75" Y="3.25" Width="1.5" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAIAAAAQAAAAAAAAAAAAAAAAAAAQBAIAAAAAAAAAAA=</HashCode>
|
||||
<FileName>src\Tool\Lawnmower.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="Scissors" Collapsed="true">
|
||||
<Position X="3" Y="3.25" Width="1.5" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=</HashCode>
|
||||
<FileName>src\Tool\Scissors.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Font Name="Segoe UI" Size="9" />
|
||||
</ClassDiagram>
|
||||
20
src/Tool/BladeType.cs
Normal file
20
src/Tool/BladeType.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
/// <summary>
|
||||
/// Тип лезвия
|
||||
/// </summary>
|
||||
public enum BladeType
|
||||
{
|
||||
/// <summary>
|
||||
/// Изогнутое лезвие
|
||||
/// </summary>
|
||||
Curved,
|
||||
|
||||
/// <summary>
|
||||
/// Прямое лезвие
|
||||
/// </summary>
|
||||
Straight,
|
||||
|
||||
/// <summary>
|
||||
/// Зубчатое лезвие
|
||||
/// </summary>
|
||||
Serrated
|
||||
}
|
||||
39
src/Tool/ElectricTool.cs
Normal file
39
src/Tool/ElectricTool.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
/// <summary>
|
||||
/// Электрический инструмент для косьбы
|
||||
/// </summary>
|
||||
public class ElectricTool : Tool
|
||||
{
|
||||
/// <summary>
|
||||
/// Мощность электроинструмента
|
||||
/// </summary>
|
||||
private uint _power;
|
||||
|
||||
/// <summary>
|
||||
/// Мощность электроинструмента
|
||||
/// </summary>
|
||||
public uint Power => _power;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует новый экземпляр класса <see cref="ElectricTool"/> с указанным именем, материалом, весом и мощностью
|
||||
/// </summary>
|
||||
/// <param name="name">Имя электроинструмента</param>
|
||||
/// <param name="material">Материал электроинструмента</param>
|
||||
/// <param name="weight">Вес электроинструмента. Должен быть больше нуля</param>
|
||||
/// <param name="power">Мощность электроинструмента. Должна быть больше нуля</param>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда мощность равна нулю</exception>
|
||||
public ElectricTool(string name, Material material, double weight, uint power) : base(name, material, weight)
|
||||
{
|
||||
if (power == 0)
|
||||
throw new ArgumentException("Мощность не может быть равна нулю", nameof(weight));
|
||||
|
||||
_power = power;
|
||||
}
|
||||
}
|
||||
|
||||
namespace KPO_Lab
|
||||
{
|
||||
public class Class1
|
||||
{
|
||||
}
|
||||
}
|
||||
50
src/Tool/Lawnmower.cs
Normal file
50
src/Tool/Lawnmower.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
/// <summary>
|
||||
/// Газонокосилка
|
||||
/// </summary>
|
||||
public class Lawnmower : ElectricTool
|
||||
{
|
||||
/// <summary>
|
||||
/// Объем топлива
|
||||
/// </summary>
|
||||
private float _fuelCapacity;
|
||||
/// <summary>
|
||||
/// Текущий уровень топлива
|
||||
/// </summary>
|
||||
private float _fuelLevel;
|
||||
|
||||
/// <summary>
|
||||
/// Объем топлива
|
||||
/// </summary>
|
||||
public float FuelCapacity => _fuelCapacity;
|
||||
/// <summary>
|
||||
/// Текущий уровень топлива
|
||||
/// </summary>
|
||||
public float FuelLevel => _fuelLevel;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует новый экземпляр класса <see cref="Lawnmower"/> с указанным именем, материалом, весом, мощностью и объемом бензина
|
||||
/// </summary>
|
||||
/// <param name="name">Имя электроинструмента</param>
|
||||
/// <param name="material">Материал электроинструмента</param>
|
||||
/// <param name="weight">Вес электроинструмента. Должен быть больше нуля</param>
|
||||
/// <param name="power">Мощность электроинструмента. Должна быть больше нуля</param>
|
||||
/// <param name="fuelCapacity">Объем топлива. Должен быть больше нуля</param>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда мощность равна нулю</exception>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда объем топлива равна нулю</exception>
|
||||
public Lawnmower(string name, Material material, double weight, uint power, float fuelCapacity) : base(name, material, weight, power)
|
||||
{
|
||||
if (fuelCapacity <= 0)
|
||||
throw new ArgumentException("Объем топлива не может быть меньше или равен нулю", nameof(fuelCapacity));
|
||||
|
||||
_fuelCapacity = fuelCapacity;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пополняет запас топлива до максимального уровня.
|
||||
/// </summary>
|
||||
public void Refuel()
|
||||
{
|
||||
_fuelLevel = _fuelCapacity;
|
||||
}
|
||||
}
|
||||
45
src/Tool/ManualTool.cs
Normal file
45
src/Tool/ManualTool.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
/// <summary>
|
||||
/// Ручной инструмент для косьбы
|
||||
/// </summary>
|
||||
public class ManualTool : Tool
|
||||
{
|
||||
/// <summary>
|
||||
/// Длина рукояти ручного инструмента в метрах
|
||||
/// </summary>
|
||||
private float _handleLength;
|
||||
|
||||
/// <summary>
|
||||
/// Длина рукояти ручного инструмента в метрах
|
||||
/// </summary>
|
||||
public float HandleLength => _handleLength;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует новый экземпляр класса <see cref="ManualTool"/> с указанным именем, материалом, весом и мощностью
|
||||
/// </summary>
|
||||
/// <param name="name">Название ручного инструмента</param>
|
||||
/// <param name="material">Материал ручного инструмента</param>
|
||||
/// <param name="weight">Вес ручного инструмента в граммах</param>
|
||||
/// <param name="handleLength">Длина рукояти ручного инструмента в метрах. Должна быть больше нуля</param>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда длина рукояти меньше или равна нулю</exception>
|
||||
public ManualTool(string name, Material material, double weight, float handleLength) : base(name, material, weight)
|
||||
{
|
||||
if (handleLength <= 0)
|
||||
throw new ArgumentException("Длина рукояти не может быть меньше или равна нулю", nameof(handleLength));
|
||||
|
||||
_handleLength = handleLength;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Заменяет рукоять на новую другой длины
|
||||
/// </summary>
|
||||
/// <param name="newHandleLength">Новая длина рукоятки. Должна быть больше нуля</param>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда новая длина рукоятки меньше или равна нулю</exception>
|
||||
public void SwitchHandle(float newHandleLength)
|
||||
{
|
||||
if (newHandleLength <= 0)
|
||||
throw new ArgumentException("Длина рукояти не может быть меньше или равна нулю", nameof(newHandleLength));
|
||||
|
||||
_handleLength = newHandleLength;
|
||||
}
|
||||
}
|
||||
20
src/Tool/Material.cs
Normal file
20
src/Tool/Material.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
/// <summary>
|
||||
/// Материал инструмента
|
||||
/// </summary>
|
||||
public enum Material
|
||||
{
|
||||
/// <summary>
|
||||
/// Пластик
|
||||
/// </summary>
|
||||
Plastic,
|
||||
|
||||
/// <summary>
|
||||
/// Метал
|
||||
/// </summary>
|
||||
Metal,
|
||||
|
||||
/// <summary>
|
||||
/// Дерево
|
||||
/// </summary>
|
||||
Wood,
|
||||
}
|
||||
71
src/Tool/Scissors.cs
Normal file
71
src/Tool/Scissors.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
/// <summary>
|
||||
/// Класс, представляющий ножницы как ручной инструмент.
|
||||
/// </summary>
|
||||
public class Scissors : ManualTool
|
||||
{
|
||||
private double _bladeSize;
|
||||
|
||||
/// <summary>
|
||||
/// Размер лезвия ножниц.
|
||||
/// </summary>
|
||||
public double BladeSize => _bladeSize;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует новый экземпляр класса <see cref="Scissors"/> с указанными параметрами.
|
||||
/// </summary>
|
||||
/// <param name="name">Название ручного инструмента</param>
|
||||
/// <param name="material">Материал ручного инструмента</param>
|
||||
/// <param name="weight">Вес ручного инструмента в граммах</param>
|
||||
/// <param name="handleLength">Длина рукояти ручного инструмента в метрах. Должна быть больше нуля</param>
|
||||
/// <param name="bladeSize">Длина лезвия ножниц в метрах. Должна быть больше нуля</param>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда длина рукояти меньше или равна нулю</exception>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда длина лезвия меньше или равна нулю</exception>
|
||||
public Scissors(string name, Material material, double weight, float handleLength, double bladeSize) : base(name, material, weight, handleLength)
|
||||
{
|
||||
if (bladeSize <= 0)
|
||||
throw new ArgumentException("Длина лезвия не может быть меньше или равна нулю", nameof(bladeSize));
|
||||
|
||||
_bladeSize = bladeSize;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Оценивает точность работы ножниц на основе длины и равномерности лезвия
|
||||
/// </summary>
|
||||
/// <returns>Значение точности работы ножниц (от 0 до 1)</returns>
|
||||
public double MeasureAccuracy()
|
||||
{
|
||||
double cleanlinessFactor = 0.0;
|
||||
double evennessFactor = 0.0;
|
||||
|
||||
if (_bladeSize < 5)
|
||||
{
|
||||
cleanlinessFactor = 0.8;
|
||||
}
|
||||
else if (_bladeSize >= 5 && _bladeSize < 10)
|
||||
{
|
||||
cleanlinessFactor = 0.7;
|
||||
}
|
||||
else
|
||||
{
|
||||
cleanlinessFactor = 0.6;
|
||||
}
|
||||
|
||||
if (_bladeSize < 5)
|
||||
{
|
||||
evennessFactor = 0.9;
|
||||
}
|
||||
else if (_bladeSize >= 5 && _bladeSize < 10)
|
||||
{
|
||||
evennessFactor = 0.8;
|
||||
}
|
||||
else
|
||||
{
|
||||
evennessFactor = 0.7;
|
||||
}
|
||||
|
||||
double accuracy = (cleanlinessFactor + evennessFactor) / 2.0;
|
||||
|
||||
return accuracy;
|
||||
}
|
||||
}
|
||||
39
src/Tool/Scythe.cs
Normal file
39
src/Tool/Scythe.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
/// <summary>
|
||||
/// Коса
|
||||
/// </summary>
|
||||
public class Scythe : ManualTool
|
||||
{
|
||||
/// <summary>
|
||||
/// Тип лезвия
|
||||
/// </summary>
|
||||
private BladeType _bladeType;
|
||||
|
||||
/// <summary>
|
||||
/// Тип лезвия
|
||||
/// </summary>
|
||||
public BladeType BladeType => _bladeType;
|
||||
|
||||
/// <summary>
|
||||
/// Создает новый экземпляр класса <see cref="Scythe"/>
|
||||
/// </summary>
|
||||
/// <param name="name">Название косы</param>
|
||||
/// <param name="material">Материал косы</param>
|
||||
/// <param name="weight">Вес ручного инструмента в граммах</param>
|
||||
/// <param name="handleLength">Длина рукояти ручного инструмента в метрах. Должна быть больше нуля</param>
|
||||
/// <param name="bladeType">Тип лезвия</param>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю.</exception>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда длина рукояти меньше или равна нулю</exception>
|
||||
public Scythe(string name, Material material, double weight, float handleLength, BladeType bladeType) : base(name, material, weight, handleLength)
|
||||
{
|
||||
_bladeType = bladeType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Заменяет лезвие косы на новое
|
||||
/// </summary>
|
||||
/// <param name="newBladeType">Новый тип лезвия</param>
|
||||
public void SwitchBlade(BladeType newBladeType)
|
||||
{
|
||||
_bladeType = newBladeType;
|
||||
}
|
||||
}
|
||||
67
src/Tool/Tool.cs
Normal file
67
src/Tool/Tool.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
/// <summary>
|
||||
/// Инструмент для косьбы
|
||||
/// </summary>
|
||||
public class Tool
|
||||
{
|
||||
/// <summary>
|
||||
/// Уникальный идентификатор инструмента
|
||||
/// </summary>
|
||||
private Guid _id = Guid.NewGuid();
|
||||
/// <summary>
|
||||
/// Название инструмента
|
||||
/// </summary>
|
||||
private string _name;
|
||||
/// <summary>
|
||||
/// Материал инструмента
|
||||
/// </summary>
|
||||
private Material _material;
|
||||
/// <summary>
|
||||
/// Вес инструмента
|
||||
/// </summary>
|
||||
private double _weight;
|
||||
|
||||
/// <summary>
|
||||
/// Уникальный идентификатор инструмента
|
||||
/// </summary>
|
||||
public Guid Id => _id;
|
||||
/// <summary>
|
||||
/// Название инструмента
|
||||
/// </summary>
|
||||
public string Name => _name;
|
||||
/// <summary>
|
||||
/// Материал инструмента
|
||||
/// </summary>
|
||||
public Material Material => _material;
|
||||
/// <summary>
|
||||
/// Вес инструмента
|
||||
/// </summary>
|
||||
public double Weight => _weight;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует новый экземпляр класса <see cref="Tool"/>.
|
||||
/// </summary>
|
||||
/// <param name="name">Название инструмента.</param>
|
||||
/// <param name="material">Материал инструмента.</param>
|
||||
/// <param name="weight">Вес инструмента. Должен быть больше нуля.</param>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю.</exception>
|
||||
public Tool(string name, Material material, double weight)
|
||||
{
|
||||
if (weight <= 0)
|
||||
{
|
||||
throw new ArgumentException("Вес инструмента не может быть меньше или равен нулю", nameof(weight));
|
||||
}
|
||||
|
||||
_name = name;
|
||||
_material = material;
|
||||
_weight = weight;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Печатает детали инструмента, включая его имя, материал и вес.
|
||||
/// </summary>
|
||||
public void Print()
|
||||
{
|
||||
Console.WriteLine($"Инструмент: {Name}, Материал: {Material}, Вес: {Weight}");
|
||||
}
|
||||
}
|
||||
38
src/Tool/Trimmer.cs
Normal file
38
src/Tool/Trimmer.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
/// <summary>
|
||||
/// Триммер
|
||||
/// </summary>
|
||||
public class Trimmer : ElectricTool
|
||||
{
|
||||
/// <summary>
|
||||
/// Режим работы
|
||||
/// </summary>
|
||||
private TrimmerMode _mode;
|
||||
|
||||
/// <summary>
|
||||
/// Режим работы
|
||||
/// </summary>
|
||||
public TrimmerMode Mode => _mode;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует новый экземпляр класса <see cref="Trimmer"/> с указанным именем, материалом, весом и мощностью
|
||||
/// </summary>
|
||||
/// <param name="name">Имя электроинструмента</param>
|
||||
/// <param name="material">Материал электроинструмента</param>
|
||||
/// <param name="weight">Вес электроинструмента. Должен быть больше нуля</param>
|
||||
/// <param name="power">Мощность электроинструмента. Должна быть больше нуля</param>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
|
||||
/// <exception cref="ArgumentException">Выбрасывается, когда мощность равна нулю</exception>
|
||||
public Trimmer(string name, Material material, double weight, uint power) : base(name, material, weight, power)
|
||||
{
|
||||
_mode = TrimmerMode.Normal;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Изменяет режим работы обрезки
|
||||
/// </summary>
|
||||
/// <param name="mode">Новый режим обрезки, который нужно установить</param>
|
||||
public void ChangeMode(TrimmerMode mode)
|
||||
{
|
||||
_mode = mode;
|
||||
}
|
||||
}
|
||||
20
src/Tool/TrimmerMode.cs
Normal file
20
src/Tool/TrimmerMode.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
/// <summary>
|
||||
/// Режим работы триммера
|
||||
/// </summary>
|
||||
public enum TrimmerMode
|
||||
{
|
||||
/// <summary>
|
||||
/// Нормальный
|
||||
/// </summary>
|
||||
Normal,
|
||||
|
||||
/// <summary>
|
||||
/// Турбо
|
||||
/// </summary>
|
||||
Turbo,
|
||||
|
||||
/// <summary>
|
||||
/// Эко
|
||||
/// </summary>
|
||||
Eco
|
||||
}
|
||||
Reference in New Issue
Block a user