Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 2818b08

Browse files
committedMar 6, 2023
added unit 2
1 parent ba30347 commit 2818b08

File tree

12 files changed

+446
-3
lines changed

12 files changed

+446
-3
lines changed
 

‎HomeWork/src/Work02/MainUnit01.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public static void itemSelect() { // Метод выбора по параме
3636
switch (checkExit) {
3737
case 1 -> {
3838
System.out.println("\nВыполнение Задание №1 ... ");
39-
MainTask();
39+
mainTask();
4040
}
4141
case 2 -> {
4242
System.out.println("\nВыполнение Задание №2 ... ");

‎HomeWork/src/Work02/MainUnit02.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.Unit02.Main.*;
7+
8+
public class MainUnit02 {
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" запускает выполнение Урок 1, задача № 1;
28+
1) Команда - "2" запускает выполнение Урок 2, задача № 2;
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/README.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,54 @@
4949
-> [Research.java](Unit01/Research.java)
5050
-> [Tree.java](Unit01/Tree.java))
5151

52-
---
52+
---
53+
54+
55+
<h2 align="center"><b> Unit02: </b></h2>
56+
57+
Урок 2. Принципы ООП Абстракция и интерфейсы. Пример проектирования.
58+
59+
1. Используйте предыдущие задачи из прошлого домашнего задания.
60+
Необходимо гарантированно продумать иерархию компоненты и взаимодействия их между собой.
61+
Обеспечить переход от использования явных классов в сторону использования абстрактных типов.
62+
63+
Т.е. работаем не с:
64+
- конкретным экземпляром генеалогического древа, а с интерфейсом “генеалогическое древо”
65+
66+
Под исследованием передачу конкретного экземпляра класса узла и отношения
67+
- Передать узел (сына) и найти его отца
68+
- Передать узел (дедушка) и найти его внуков
69+
70+
Продумать возможность ухода от конкретных "котиков", к интерфейсу “котик”, лучше уйти от взаимодействия:
71+
- с конкретными питомцами и повысить уровень абстракции до взаимодействия с котиком,
72+
собачкой или хомяком т.е. с интерфейсом “животное”.
73+
74+
### *Структура и главный исполнительный файл (MainUnit02 - запускаем его и выбираем в меню 2 задаачу):* ###
75+
76+
> MainUnit02.java
77+
>> |__
78+
>> |Unit02
79+
>> |__
80+
>> | Main.java
81+
>> | Call.java
82+
>> | Cat.java
83+
>> | Node.java
84+
>> | Person.java
85+
>> | Relationship.java
86+
>> | Research.java
87+
>> | Tree.java
88+
89+
**Воспользуйтесь этим, для перехода:**
90+
91+
[MainUnit02.java](MainUnit02.java)
92+
||
93+
[Unit02](Unit02) ||->( [Main.java](Unit02/Main.java)
94+
-> [Call.java](Unit02/Call.java)
95+
-> [Cat.java](Unit02/Cat.java)
96+
-> [Node.java](Unit02/Node.java)
97+
-> [Person.java](Unit02/Person.java)
98+
-> [Relationship.java](Unit02/Relationship.java)
99+
-> [Research.java](Unit02/Research.java)
100+
-> [Tree.java](Unit02/Tree.java))
101+
102+
---

‎HomeWork/src/Work02/Unit01/Main.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class Main {
2323
* двоюродные или троюродные, или мы точно знаем как звали прапрабабушку, но совершенно не знаем прабабушку -
2424
* как хранить такие связи или что будет если в компоненту обхода передать ссылку на null-дерево.
2525
**/
26-
public static void MainTask() {
26+
public static void mainTask() {
2727
Person irina = new Person("Ирина", 56);
2828
Person igor = new Person("Игорь", 60);
2929
Person vasya = new Person("Вася", 30);

‎HomeWork/src/Work02/Unit02/Call.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package Work02.Unit02;
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/Unit02/Cat.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package Work02.Unit02;
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/Unit02/Main.java

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

‎HomeWork/src/Work02/Unit02/Node.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package Work02.Unit02;
2+
3+
public class Node {
4+
public Node(Person p1, Relationship re, Person p2) {
5+
this.p1 = p1;
6+
this.re = re;
7+
this.p2 = p2;
8+
}
9+
10+
Person p1;
11+
Relationship re;
12+
Person p2;
13+
14+
@Override
15+
public String toString() {
16+
return String.format("<%s %s %s>", p1, re, p2);
17+
}
18+
19+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package Work02.Unit02;
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: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package Work02.Unit02;
2+
3+
public enum Relationship {
4+
parents,
5+
children,
6+
wife,
7+
husband
8+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package Work02.Unit02;
2+
3+
import java.util.ArrayList;
4+
import java.util.Scanner;
5+
6+
public class Research {
7+
ArrayList<String> result = new ArrayList<>();
8+
ArrayList<Node> tree;
9+
ArrayList<String> resultAge = new ArrayList<>();
10+
11+
public Research(Tree geoTree) {
12+
tree = geoTree.getTree();
13+
}
14+
15+
// метод поиска связи: родитель - ребенок, жена-муж
16+
public ArrayList<String> spend(Person p, Relationship re) {
17+
for (Node t : tree) {
18+
if (t.p1.fullName == p.fullName && t.re == re) {
19+
result.add(t.p2.fullName);
20+
}
21+
}
22+
return result;
23+
}
24+
25+
// метод поиска по возрасту
26+
public ArrayList<String> searchAge() {
27+
System.out.print("Введите ограничение по возрасту: ");
28+
Scanner in = new Scanner(System.in);
29+
int age = in.nextInt();
30+
System.out.println("Люди, младше: " + age + ":");
31+
32+
for (Node t : tree) {
33+
34+
if (t.p1.age <= age && !resultAge.contains(t.p1.fullName)) {
35+
resultAge.add(t.p1.fullName);
36+
}
37+
}
38+
return resultAge;
39+
}
40+
}

‎HomeWork/src/Work02/Unit02/Tree.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package Work02.Unit02;
2+
3+
import java.util.ArrayList;
4+
5+
public class Tree {
6+
7+
private final ArrayList<Node> tree = new ArrayList<>();
8+
9+
public ArrayList<Node> getTree() {
10+
return tree;
11+
}
12+
13+
// связь родитель - ребенок
14+
public void appendPerentsChild(Person parents, Person children) {
15+
tree.add(new Node(parents, Relationship.parents, children));
16+
tree.add(new Node(children, Relationship.children, parents));
17+
}
18+
19+
// связь муж - жена
20+
public void appendWifeHusband(Person wife, Person husband) {
21+
tree.add(new Node(wife, Relationship.wife, husband));
22+
tree.add(new Node(husband, Relationship.husband, wife));
23+
}
24+
25+
}

0 commit comments

Comments
 (0)
Please sign in to comment.