From 4b3ef4d1f8bbeaa1bcaf2e2c91019674cb537d42 Mon Sep 17 00:00:00 2001 From: Aynur Shamsullin Date: Thu, 12 Oct 2023 20:16:10 +0400 Subject: [PATCH] sem6 hw solved --- .idea/vcs.xml | 6 ++++++ src/DIP/Car.java | 3 +++ src/DIP/DieselPetrol.java | 3 +++ src/DIP/Engine.java | 8 +++++++- src/DIP/PetrolEngine.java | 4 +++- src/DIP/Test.java | 4 ++++ src/ISP/Circle.java | 8 +++++++- src/ISP/Cube.java | 3 +++ src/ISP/Shape.java | 3 +++ src/ISP/Shape3D.java | 4 ++++ src/LSP/Test.java | 7 +++++++ src/OCP/Bus.java | 4 +++- src/OCP/Car.java | 3 +++ src/OCP/Vehicle.java | 4 ++++ src/SRP/Employee.java | 3 +++ src/SRP/EmployeeSalaryCalculate.java | 4 ++++ 16 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 .idea/vcs.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/DIP/Car.java b/src/DIP/Car.java index 544bb5d..42b6642 100644 --- a/src/DIP/Car.java +++ b/src/DIP/Car.java @@ -1,5 +1,8 @@ package DIP; +/** + * Класс Car - модуль верхнего уровня. Он зависит от абстракции Engine. + */ public class Car { public Engine engine; diff --git a/src/DIP/DieselPetrol.java b/src/DIP/DieselPetrol.java index e3ff666..28c54c3 100644 --- a/src/DIP/DieselPetrol.java +++ b/src/DIP/DieselPetrol.java @@ -1,5 +1,8 @@ package DIP; +/** + * Класс DieselPetrol модуль нижнего класса. Он зависит от абстракции Engine. + */ public class DieselPetrol implements Engine { @Override public void start() { diff --git a/src/DIP/Engine.java b/src/DIP/Engine.java index a710bbe..c3395c8 100644 --- a/src/DIP/Engine.java +++ b/src/DIP/Engine.java @@ -1,5 +1,11 @@ package DIP; +/** + * Интерфейс Engine. От него зависят все модули в нашем примере: + * верхний модуль - использует в конструкторе объект типа Engine, + * нижний модуль - реализует методы интерфейса. + * Но сам Engine про них ничего не знает(и знать не хочет) + */ public interface Engine { - public void start(); + void start(); } diff --git a/src/DIP/PetrolEngine.java b/src/DIP/PetrolEngine.java index 5e7b64c..5ae74aa 100644 --- a/src/DIP/PetrolEngine.java +++ b/src/DIP/PetrolEngine.java @@ -1,5 +1,7 @@ package DIP; - +/** + * Класс PetrolEngine модуль нижнего класса. Он зависит от абстракции Engine. + */ public class PetrolEngine implements Engine { @Override public void start(){ diff --git a/src/DIP/Test.java b/src/DIP/Test.java index 592c3e2..d2b490d 100644 --- a/src/DIP/Test.java +++ b/src/DIP/Test.java @@ -1,5 +1,9 @@ package DIP; +/** + * Объекту типа Car всё равно какой у него будет двигатель. Главное чтобы он + * был в зависимости от абстракции Engine. + */ public class Test { public static void main(String[] args) { Car car = new Car(new PetrolEngine()); diff --git a/src/ISP/Circle.java b/src/ISP/Circle.java index 31ef0eb..e0529e2 100644 --- a/src/ISP/Circle.java +++ b/src/ISP/Circle.java @@ -1,5 +1,11 @@ package ISP; +/** + * Класс Circle имплементирует интерфейс Shape. Для 2D фигуры мы можем найти площадь. + * Если бы мы сделали один интерфейс с методами для площади и объема, то нам бы пришлось реализовать методы этого интерфейса. + * НО! мы не можем найти объем у круга. Объем характерен только для трехмерных фигур. Поэтому мы разделяем интерфейсы + * Shape & Shape3D. + */ public class Circle implements Shape { private int radius; @@ -18,6 +24,6 @@ public void setRadius(int radius) { @Override public double area() { - return 2 * 3.14 * radius; + return 2 * Math.PI * radius; } } diff --git a/src/ISP/Cube.java b/src/ISP/Cube.java index cb02923..56ae81a 100644 --- a/src/ISP/Cube.java +++ b/src/ISP/Cube.java @@ -1,5 +1,8 @@ package ISP; +/** + * Класс Cube реализует интерфейс Shape3D. Для него характерен поиск площади сторон и объема фигруы. + */ public class Cube implements Shape3D { private int length; diff --git a/src/ISP/Shape.java b/src/ISP/Shape.java index c19da35..4042ac3 100644 --- a/src/ISP/Shape.java +++ b/src/ISP/Shape.java @@ -1,5 +1,8 @@ package ISP; +/** + * Для двумерных фигур можно найти площадь. + */ public interface Shape { public double area(); diff --git a/src/ISP/Shape3D.java b/src/ISP/Shape3D.java index 7bbde88..c5fc1bc 100644 --- a/src/ISP/Shape3D.java +++ b/src/ISP/Shape3D.java @@ -1,5 +1,9 @@ package ISP; +/** + * Для трехмерных фигур можно найти площадь сторон и ОБЪЕМ фигуры. + * Здесь мы наследуемся от интерфейса Shape, потому что для трехмерных фигур справедлив подсчёт площади(но нужно учитывать все стороны). + */ public interface Shape3D extends Shape{ public double volume(); } diff --git a/src/LSP/Test.java b/src/LSP/Test.java index 8c22ad8..2b7062f 100644 --- a/src/LSP/Test.java +++ b/src/LSP/Test.java @@ -1,5 +1,12 @@ package LSP; +/** + * Rectangle & Square являются наследниками класса QuadRangle. + * Еслм создать объект класса QuadRangle и подставить туда объект, который наследуется(имплементируется для интерфейсов) от QuadRangle, + * то программа не поломается и его функции будут работать правильно. + * Метод area() будет в любом случае искать площадь фигуры, независимо от того Rectangle это или Square, но будет делать это для разных фигур. + * НО БУДЕТ! + */ public class Test { public static void main(String[] args) { QuadRangle quadRangle = new Rectangle(5, 3); diff --git a/src/OCP/Bus.java b/src/OCP/Bus.java index 6312267..dea2501 100644 --- a/src/OCP/Bus.java +++ b/src/OCP/Bus.java @@ -1,5 +1,7 @@ package OCP; - +/** + * Класс Bus расширяет класс Vehicle. + */ public class Bus extends Vehicle{ @Override public double calculateAllowedSpeed() { diff --git a/src/OCP/Car.java b/src/OCP/Car.java index 97dc816..24acd8e 100644 --- a/src/OCP/Car.java +++ b/src/OCP/Car.java @@ -1,5 +1,8 @@ package OCP; +/** + * Класс Car расширяет класс Vehicle. + */ public class Car extends Vehicle{ public Car(int maxSpeed) { super(maxSpeed, "Car"); diff --git a/src/OCP/Vehicle.java b/src/OCP/Vehicle.java index d04297d..f71924b 100644 --- a/src/OCP/Vehicle.java +++ b/src/OCP/Vehicle.java @@ -1,5 +1,9 @@ package OCP; +/** + * Классы Car & Bus наследуются от класса Vehicle. Он остается неизменным, то есть закрытым для модификации, + * но доступен для расширения(что и делают его дочерние классы). + */ public class Vehicle { private int maxSpeed; private String type; diff --git a/src/SRP/Employee.java b/src/SRP/Employee.java index 5bea82f..16b8649 100644 --- a/src/SRP/Employee.java +++ b/src/SRP/Employee.java @@ -1,5 +1,8 @@ package SRP; +/** + * Класс Работник со своими полями и гет/сет методами. + */ public class Employee { private String name; private String dol; diff --git a/src/SRP/EmployeeSalaryCalculate.java b/src/SRP/EmployeeSalaryCalculate.java index 5824204..288c427 100644 --- a/src/SRP/EmployeeSalaryCalculate.java +++ b/src/SRP/EmployeeSalaryCalculate.java @@ -1,5 +1,9 @@ package SRP; +/** + * Отделяем логику вычисления ЗП, чтобы не менять класс Employee в будущем при изменении правил вычисления зарплаты. + * Single response для класса EmployeeSalaryCalculate - это вычислять ЗП. + */ public class EmployeeSalaryCalculate { private int baseSalary;