Skip to content

Commit aaf4e65

Browse files
committed
added unit 3
1 parent 7a30117 commit aaf4e65

File tree

10 files changed

+422
-0
lines changed

10 files changed

+422
-0
lines changed

HomeWork/src/Work02/MainUnit03.java

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package Work02;
2+
3+
import java.util.Scanner;
4+
5+
6+
import static Work02.Unit03.Main.*;
7+
8+
public class MainUnit03 {
9+
10+
private static int userIntegerInput(String msg) {
11+
Scanner sc = new Scanner(System.in);
12+
int inputStr;
13+
while (true) {
14+
System.out.print(msg);
15+
try {
16+
inputStr = Integer.parseInt(sc.next());
17+
break;
18+
} catch (NumberFormatException e) {
19+
System.out.println(red + "Неверный ввод! Введите целое число!" + reset);
20+
}
21+
}
22+
return inputStr;
23+
}
24+
25+
public static void itemSelect() { // Метод выбора по параметрам
26+
System.out.println(yellow + """
27+
\n1) Команда - "1" запускает выполнение Урок 3, задача № 1;
28+
1) Команда - "2" запускает выполнение Урок 2, задача № 1;
29+
3) Команда - "0" запускает выхода в предыдущее меню.
30+
31+
Введите выбранную команду:""" + reset);
32+
33+
int checkExit = 3;
34+
while (checkExit != 0) {
35+
checkExit = userIntegerInput("\nВведите номер команды. Для выхода в предыдущее меню нажмите 0.\nВвод: ");
36+
switch (checkExit) {
37+
case 1 -> {
38+
System.out.println("\nВыполнение: Урок 1, Задание №1 ... ");
39+
mainTask01();
40+
}
41+
case 2 -> {
42+
System.out.println("\nВыполнение: Урок 2, Задание №2 ... ");
43+
//System.out.println("\nТут пусто. В уроке было только одна задача");
44+
mainTask02();
45+
}
46+
}
47+
System.out.println(yellow + "\nВыполненеие завершено." + reset);
48+
}
49+
}
50+
51+
public static void getAllItems() { // Выводит текстом какие задачи есть
52+
System.out.println(red + "\n\tUnit 1, Задание 1.\n" + reset);
53+
System.out.println("""
54+
Урок 1. Принципы ООП: Инкапсуляция, наследование, полиморфизм
55+
Реализовать, с учетом ооп подхода, приложение
56+
Для проведения исследований с генеалогическим древом.
57+
Идея: описать некоторое количество компонент, например:
58+
- модель человека
59+
- компонента хранения связей и отношений между людьми: родитель, ребёнок - классика, но можно подумать\s
60+
и про разные отношения
61+
- компонент для проведения исследований
62+
- дополнительные компоненты, например отвечающие за вывод данных в консоль, загрузку и сохранения в файл,
63+
64+
получение/построение отдельных моделей человека.
65+
Под “проведением исследования” можно понимать получение всех детей выбранного человека.
66+
* на первом этапе сложно применять сразу все концепты ООП, упор делается на инкапсуляцию.\s
67+
Если получится продумать иерархию каких-то компонент - здорово. После первой лекции,\s
68+
они не знают про абстракцию и интерфейсы
69+
70+
Продумать какие проблемы могут возникнуть в том, коде, который они написали.
71+
Например, с генеалогическим древом, мы можем знать о двух людях, но не знаем в каких “отношениях” они были -\s
72+
двоюродные или троюродные, или мы точно знаем как звали прапрабабушку, но совершенно не знаем прабабушку -\s
73+
как хранить такие связи или что будет если в компоненту обхода передать ссылку на null-дерево.
74+
""");
75+
System.out.println(red + "\n\tUnit 2, Задание 2.\n" + reset);
76+
System.out.println("""
77+
Урок 2. Принципы ООП Абстракция и интерфейсы. Пример проектирования
78+
Используйте предыдущие задачи из прошлого домашнего задания.
79+
Необходимо гарантированно продумать иерархию компонент\s
80+
и взаимодействия их между собой.
81+
Обеспечить переход от использования явных классов в сторону использования абстрактных типов.
82+
Т.е. работаем не с:
83+
конкретным экземпляром генеалогического древа, а с интерфейсом “ генеалогическое древо”
84+
85+
Под исследованием передачу конкретного экземпляра класса узла и отношения
86+
Передать узел (сына) и найти его отца
87+
Передать узел (дедушка) и найти его внуков
88+
89+
Продумать возможность ухода он конкретных "котиков", к интерфейсу “котик”, лучше уйти от взаимодействия\s
90+
с конкретными питомцами и повысить уровень абстракции до взаимодействия с котиком, собачкой или хомяком т е\s
91+
с интерфейсом “животное”
92+
""");
93+
}
94+
95+
public static void main(String[] args) {
96+
int checkExit = 3;
97+
while (checkExit != 0) {
98+
System.out.println(cyan + """
99+
\n
100+
1) Команда - "1" запускает меню с выбором выполнения задач;
101+
2) Команда - "2" запускает отображение текста задач и их нумерацию;
102+
3) Команда - "0" запускает выход и завершение программы.
103+
""" + reset);
104+
checkExit = userIntegerInput("""
105+
Введите номер действия. Для выхода нажмите 0. \nВвод:\s
106+
""");
107+
switch (checkExit) {
108+
case 1 -> itemSelect();
109+
case 2 -> getAllItems();
110+
}
111+
}
112+
System.out.println("""
113+
1) Команда - "1" запускает меню с выбором выполнения задач;
114+
2) Команда - "2" запускает отображение текста задач и их нумерацию;
115+
3) Команда - "0" запускает выход и завершение программы.
116+
117+
Введите выбранную команду:""");
118+
119+
}
120+
121+
public static final String reset = "\u001B[0m";
122+
public static final String red = "\u001B[31m";
123+
public static final String yellow = "\u001B[33m";
124+
public static final String cyan = "\u001B[36m";
125+
}

HomeWork/src/Work02/Unit03/Call.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package Work02.Unit03;
2+
3+
public class Call {
4+
Person p;
5+
Cat cat;
6+
7+
public Call(Person p, Cat cat) {
8+
this.p = p;
9+
this.cat = cat;
10+
}
11+
12+
public void call() {
13+
if (p.getStatus() == "owner") {
14+
p.kisKis(p.getName());
15+
cat.catComeIn(cat.getName());
16+
} else {
17+
p.kisKis(p.getName());
18+
cat.catComeOut(cat.getName());
19+
}
20+
}
21+
}

HomeWork/src/Work02/Unit03/Cat.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package Work02.Unit03;
2+
3+
public class Cat {
4+
private String name;
5+
6+
public Cat(String name) {
7+
this.name = name;
8+
}
9+
10+
public void catComeIn(String name){
11+
System.out.println("кошка " + name + " подходит и говорит: 'мяу'");
12+
}
13+
14+
public void catComeOut(String name){
15+
System.out.println("кошка " + name + " не отозвалась");
16+
}
17+
18+
public String getName() {
19+
return name;
20+
}
21+
22+
public void setName(String name) {
23+
this.name = name;
24+
}
25+
}

HomeWork/src/Work02/Unit03/Main.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package Work02.Unit03;
2+
3+
import java.util.ArrayList;
4+
5+
import static Work02.Unit03.Printer.*;
6+
7+
public class Main {
8+
/**
9+
* Задание 2
10+
* Используйте предыдущие задачи из прошлого домашнего задания. Необходимо гарантированно продумать иерархию компонент
11+
* и взаимодействия их между собой.
12+
* Обеспечить переход от использования явных классов в сторону использования абстрактных типов. Т е работаем не с:
13+
* конкретным экземпляром генеалогического древа, а с интерфейсом “генеалогическое древо”
14+
* <p>
15+
* Продумать возможность ухода от конкретных "котиков", к интерфейсу “котик”, лучше уйти от взаимодействия
16+
* с конкретными питомцами и повысить уровень абстракции до взаимодействия с котиком, собачкой или хомяком т е
17+
* с интерфейсом “животное”
18+
**/
19+
20+
public static void mainTask02(){ // для удобства выведенно отдельно
21+
System.out.print("\n");
22+
System.out.print("\n");
23+
Person person = new Person("Андрей", 18,"Андрей","owner");
24+
Person person2 = new Person("Петр", 20, "Пётр","no owner");
25+
Cat cat = new Cat("Мурзик");
26+
Call call = new Call(person, cat);
27+
call.call();
28+
29+
System.out.print("\n");
30+
Call call2 = new Call(person2, cat);
31+
call2.call();
32+
}
33+
public static void mainTask01() {
34+
Person irina = new Person("Ирина", 56, "Ирина", "parents");
35+
Person igor = new Person("Игорь", 60, "Игорь", "parents");
36+
Person viktor = new Person("Виктор", 26, "Виктор", "parents");
37+
Person tatyana = new Person("Татьяна", 27, "Татьяна", "parents");
38+
Person vasya = new Person("Вася", 30, "Вася", "parents");
39+
Person masha = new Person("Маша", 27, "Маша", "child");
40+
Person jane = new Person("Женя", 10, "Женя", "child");
41+
Person ivan = new Person("Ваня", 8, "Ваня", "child");
42+
Person sasha = new Person("Саша", 3, "Саша", "child");
43+
Tree gt = new Tree();
44+
gt.appendPerentsChild(irina, vasya); // Ирина родитель Васи
45+
gt.appendPerentsChild(irina, masha); // Ирина родитель Маши
46+
gt.appendPerentsChild(vasya, jane); // Вася родитель Жени
47+
gt.appendPerentsChild(vasya, ivan); // Вася родитель Ивана
48+
gt.appendWifeHusband(irina, igor); // Ирина жена Игоря
49+
gt.appendPerentsChild(igor, vasya); // Игорь родитель Васи
50+
gt.appendPerentsChild(igor, masha); // Игорь родитель Маши
51+
gt.appendWifeHusband(tatyana, viktor); // Татьяна жена Виктора
52+
gt.appendPerentsChild(viktor, sasha); // Виктор родитель Саши
53+
gt.appendPerentsChild(tatyana,sasha); // Татьяна родитель Саши
54+
55+
56+
// Поиск детей Ирины
57+
System.out.println("Дети Ирины: ");
58+
ArrayList<String> childIrina = new Research(gt).spend(irina, Relationship.parents);
59+
printchildsRelInfo(String.valueOf(childIrina));
60+
// Поиск детей Игоря
61+
System.out.println("Дети Игоря: ");
62+
ArrayList<String> childIgor = new Research(gt).spend(igor, Relationship.parents);
63+
printchildsRelInfo(String.valueOf(childIgor));
64+
// Поиск мужа Ирины
65+
System.out.println("Муж Ирины: ");
66+
ArrayList<String> husbandIrina = new Research(gt).spend(irina, Relationship.wife);
67+
printGetPopulationInfo(String.valueOf(husbandIrina));
68+
System.out.println("Дети Татьяны: ");
69+
ArrayList<String> childTatina = new Research(gt).spend(tatyana, Relationship.parents);
70+
printchildsRelInfo(String.valueOf(childTatina));
71+
System.out.println("Дети Виктора: ");
72+
ArrayList<String> childViktor = new Research(gt).spend(viktor, Relationship.parents);
73+
printchildsRelInfo(String.valueOf(childViktor));
74+
75+
System.out.println("Муж Татьяны: ");
76+
ArrayList<String> husbandTatina = new Research(gt).spend(tatyana, Relationship.wife);
77+
printGetPopulationInfo(String.valueOf(husbandTatina));
78+
// Поиск определенного возраста
79+
System.out.println(new Research(gt).searchAge());
80+
81+
}
82+
}

HomeWork/src/Work02/Unit03/Node.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package Work02.Unit03;
2+
3+
import static Work02.Unit03.Relationship.parents;
4+
5+
public class Node {
6+
public Node(Person p1, Relationship re, Person p2) {
7+
this.p1 = p1;
8+
this.re = re;
9+
this.p2 = p2;
10+
}
11+
12+
Person p1;
13+
Relationship re;
14+
Person p2;
15+
16+
@Override
17+
public String toString() {
18+
return String.format("<%s %s %s>", p1, re, p2);
19+
}
20+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package Work02.Unit03;
2+
3+
public class Person {
4+
public String fullName;
5+
public int age;
6+
private String name;
7+
private String status;
8+
9+
public Person(String fullName, int age, String name, String status) {
10+
this.fullName = fullName;
11+
this.age = age;
12+
this.name = name;
13+
this.status = status;
14+
}
15+
16+
public String getFullName() {
17+
return fullName;
18+
}
19+
20+
public void setFullName(String fullName) {
21+
22+
this.fullName = fullName;
23+
}
24+
25+
public int getAge() {
26+
return age;
27+
}
28+
29+
public void setAge(int age) {
30+
this.age = age;
31+
}
32+
33+
public void kisKis(String name) {
34+
System.out.println(name + " зовет кошку: кис-кис");
35+
}
36+
37+
public String getName() {
38+
return name;
39+
}
40+
41+
public void setName(String name) {
42+
this.name = name;
43+
}
44+
45+
public String getStatus() {
46+
return status;
47+
}
48+
49+
public void setStatus(String status) {
50+
this.status = status;
51+
}
52+
53+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package Work02.Unit03;
2+
3+
public class Printer {
4+
static void printGetPopulationInfo(String txt) {
5+
System.out.println(txt);
6+
}
7+
8+
static void printgenerationInfo(String txt) {
9+
System.out.println(txt);
10+
}
11+
12+
static void printdirRelInfo(String txt) {
13+
System.out.println(txt);
14+
}
15+
16+
static void printchildsRelInfo(String txt) {
17+
System.out.println(txt);
18+
}
19+
20+
static void printsposesRelInfo(String txt) {
21+
System.out.println(txt);
22+
}
23+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package Work02.Unit03;
2+
3+
public enum Relationship {
4+
parents,
5+
children,
6+
wife,
7+
husband
8+
}

0 commit comments

Comments
 (0)