-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Lesson_1 #36
Open
SevenMax777
wants to merge
6
commits into
Liberate520:master
Choose a base branch
from
SevenMax777:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Lesson_1 #36
Changes from 2 commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<module type="JAVA_MODULE" version="4"> | ||
<component name="NewModuleRootManager" inherit-compiler-output="true"> | ||
<exclude-output /> | ||
<content url="file://$MODULE_DIR$"> | ||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> | ||
</content> | ||
<orderEntry type="inheritedJdk" /> | ||
<orderEntry type="sourceFolder" forTests="false" /> | ||
</component> | ||
</module> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
# Урок 1. Принципы ООП: Инкапсуляция, наследование, полиморфизм | ||
|
||
|
||
**Реализовать, с учетом ооп подхода, приложение. | ||
Для проведения исследований с генеалогическим древом. | ||
Идея: описать некоторое количество компонент, например: | ||
модель человека и дерева | ||
Под “проведением исследования” можно понимать например получение всех детей выбранного человека.** | ||
|
||
|
||
|
||
## Группа: Программист - 21.05.2024 | ||
|
||
## Студент: Овчинников Максим Сергеевич |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# Урок 2. Принципы ООП Абстракция и интерфейсы. Пример проектирования | ||
|
||
**Дополнить проект методами записи в файл и чтения из файла. Для этого создать отдельный класс и реализовать в нем нужные методы. Для данного класса сделайте интерфейс, который и используйте в своей программе. Пример работы с интерфейсом Serialazable можно найти в материалах к уроку. | ||
Поправить замечания к первому уроку** | ||
|
||
|
||
|
||
## Группа: Программист - 21.05.2024 | ||
|
||
## Студент: Овчинников Максим Сергеевич |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
import java.io.Serializable; | ||
import java.time.LocalDate; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public abstract class AbstractPerson implements Serializable { | ||
protected String name; | ||
protected AbstractPerson father; | ||
protected AbstractPerson mother; | ||
protected List<AbstractPerson> children; | ||
protected String gender; | ||
protected LocalDate dateOfBirth; | ||
|
||
public AbstractPerson(String name, String gender, LocalDate dateOfBirth) { | ||
this.name = name; | ||
this.gender = gender; | ||
this.dateOfBirth = dateOfBirth; | ||
this.children = new ArrayList<>(); | ||
} | ||
|
||
public String getName() { | ||
return name; | ||
} | ||
|
||
public AbstractPerson getFather() { | ||
return father; | ||
} | ||
|
||
public void setFather(AbstractPerson father) { | ||
this.father = father; | ||
} | ||
|
||
public AbstractPerson getMother() { | ||
return mother; | ||
} | ||
|
||
public void setMother(AbstractPerson mother) { | ||
this.mother = mother; | ||
} | ||
|
||
public List<AbstractPerson> getChildren() { | ||
return children; | ||
} | ||
|
||
public void addChild(AbstractPerson child) { | ||
this.children.add(child); | ||
} | ||
|
||
public String getGender() { | ||
return gender; | ||
} | ||
|
||
public LocalDate getDateOfBirth() { | ||
return dateOfBirth; | ||
} | ||
|
||
public abstract String getFullInfo(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
public class FamilyResearch implements IFamilyResearch { | ||
private FamilyTree familyTree; | ||
|
||
public FamilyResearch(FamilyTree familyTree) { | ||
this.familyTree = familyTree; | ||
} | ||
|
||
@Override | ||
public List<Person> getChildren(String name) { | ||
AbstractPerson person = familyTree.findPerson(name); | ||
if (person != null) { | ||
return person.getChildren().stream() | ||
.map(child -> (Person) child) | ||
.collect(Collectors.toList()); | ||
} | ||
return null; | ||
} | ||
|
||
@Override | ||
public Person[] getParents(String name) { | ||
AbstractPerson person = familyTree.findPerson(name); | ||
if (person != null) { | ||
return new Person[]{(Person) person.getFather(), (Person) person.getMother()}; | ||
} | ||
return null; | ||
} | ||
|
||
@Override | ||
public List<Person> getSiblings(String name) { | ||
AbstractPerson person = familyTree.findPerson(name); | ||
if (person != null) { | ||
AbstractPerson father = person.getFather(); | ||
AbstractPerson mother = person.getMother(); | ||
if (father != null) { | ||
return father.getChildren().stream() | ||
.filter(child -> !child.equals(person)) | ||
.map(child -> (Person) child) | ||
.collect(Collectors.toList()); | ||
} else if (mother != null) { | ||
return mother.getChildren().stream() | ||
.filter(child -> !child.equals(person)) | ||
.map(child -> (Person) child) | ||
.collect(Collectors.toList()); | ||
} | ||
} | ||
return null; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
import java.io.Serializable; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public class FamilyTree implements Serializable { | ||
private static final long serialVersionUID = 1L; | ||
private List<AbstractPerson> people; | ||
|
||
public FamilyTree() { | ||
this.people = new ArrayList<>(); | ||
} | ||
|
||
public void addPerson(AbstractPerson person) { | ||
people.add(person); | ||
} | ||
|
||
public List<AbstractPerson> getPeople() { | ||
return people; | ||
} | ||
|
||
public AbstractPerson findPerson(String name) { | ||
for (AbstractPerson person : people) { | ||
if (person.getName().equals(name)) { | ||
return person; | ||
} | ||
} | ||
return null; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
StringBuilder sb = new StringBuilder(); | ||
for (AbstractPerson person : people) { | ||
sb.append(person.getFullInfo()).append("\n"); | ||
} | ||
return sb.toString(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import java.io.*; | ||
|
||
public class FileOperations implements IFileOperations { | ||
private FamilyTree familyTree; | ||
|
||
public FileOperations(FamilyTree familyTree) { | ||
this.familyTree = familyTree; | ||
} | ||
|
||
@Override | ||
public void saveToFile(String fileName) throws IOException { | ||
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName))) { | ||
oos.writeObject(familyTree); | ||
} | ||
} | ||
|
||
@Override | ||
public void loadFromFile(String fileName) throws IOException, ClassNotFoundException { | ||
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName))) { | ||
this.familyTree = (FamilyTree) ois.readObject(); | ||
} | ||
} | ||
|
||
public FamilyTree getFamilyTree() { | ||
return familyTree; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import java.util.List; | ||
|
||
public interface IFamilyResearch { | ||
List<Person> getChildren(String name); | ||
Person[] getParents(String name); | ||
List<Person> getSiblings(String name); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
public class IFileOperations { | ||
|
||
} | ||
import java.io.IOException; | ||
|
||
public interface IFileOperations { | ||
void saveToFile(String fileName) throws IOException; | ||
void loadFromFile(String fileName) throws IOException, ClassNotFoundException; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
import java.time.LocalDate; | ||
import java.time.Period; | ||
import java.io.IOException; | ||
|
||
public class Main { | ||
public static void main(String[] args) { | ||
FamilyTree familyTree = new FamilyTree(); | ||
|
||
Person ivan = new Person("Иван", "Мужской", LocalDate.of(1980, 6, 15)); | ||
Person maria = new Person("Мария", "Женский", LocalDate.of(1982, 3, 20)); | ||
Person anna = new Person("Анна", "Женский", LocalDate.of(2005, 11, 10)); | ||
Person boris = new Person("Борис", "Мужской", LocalDate.of(2007, 7, 5)); | ||
Person sergey = new Person("Сергей", "Мужской", LocalDate.of(2009, 9, 1)); | ||
|
||
ivan.setMother(maria); | ||
anna.setFather(ivan); | ||
anna.setMother(maria); | ||
boris.setFather(ivan); | ||
boris.setMother(maria); | ||
sergey.setFather(ivan); | ||
sergey.setMother(maria); | ||
|
||
ivan.addChild(anna); | ||
ivan.addChild(boris); | ||
ivan.addChild(sergey); | ||
maria.addChild(anna); | ||
maria.addChild(boris); | ||
maria.addChild(sergey); | ||
|
||
familyTree.addPerson(ivan); | ||
familyTree.addPerson(maria); | ||
familyTree.addPerson(anna); | ||
familyTree.addPerson(boris); | ||
familyTree.addPerson(sergey); | ||
|
||
IFamilyResearch research = new FamilyResearch(familyTree); | ||
|
||
System.out.println("Дети Ивана: " + research.getChildren("Иван")); | ||
System.out.println("Родители Анны: " + java.util.Arrays.toString(research.getParents("Анна"))); | ||
System.out.println("Братья и сестры Бориса: " + research.getSiblings("Борис")); | ||
System.out.println("Информация об Иване: " + ivan); | ||
System.out.println("Информация о Марии: " + maria); | ||
System.out.println("Возраст Ивана: " + calculateAge(ivan.getDateOfBirth()) + " лет"); | ||
System.out.println("Возраст Марии: " + calculateAge(maria.getDateOfBirth()) + " лет"); | ||
|
||
IFileOperations fileOps = new FileOperations(familyTree); | ||
|
||
try { | ||
fileOps.saveToFile("family_tree.ser"); | ||
System.out.println("Семейное дерево сохранено в файл."); | ||
|
||
fileOps.loadFromFile("family_tree.ser"); | ||
System.out.println("Семейное дерево загружено из файла."); | ||
|
||
FamilyTree loadedTree = ((FileOperations) fileOps).getFamilyTree(); | ||
IFamilyResearch loadedResearch = new FamilyResearch(loadedTree); | ||
|
||
System.out.println("Проверка загруженных данных:"); | ||
System.out.println("Дети Ивана: " + loadedResearch.getChildren("Иван")); | ||
System.out.println("Родители Анны: " + java.util.Arrays.toString(loadedResearch.getParents("Анна"))); | ||
System.out.println("Братья и сестры Бориса: " + loadedResearch.getSiblings("Борис")); | ||
|
||
} catch (IOException | ClassNotFoundException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
|
||
private static int calculateAge(LocalDate birthDate) { | ||
return Period.between(birthDate, LocalDate.now()).getYears(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
public class Man extends Person { | ||
public Man(String name) { | ||
super(name); | ||
} | ||
|
||
@Override | ||
public String getGender() { | ||
return "Мужской"; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import java.time.LocalDate; | ||
|
||
public class Person extends AbstractPerson { | ||
public Person(String name, String gender, LocalDate dateOfBirth) { | ||
super(name, gender, dateOfBirth); | ||
} | ||
|
||
@Override | ||
public String getFullInfo() { | ||
return name + " (Пол: " + gender + ", Дата рождения: " + dateOfBirth + ")"; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return getFullInfo(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
import java.util.List; | ||
|
||
public class Research implements FamilyResearch { | ||
private FamilyTree familyTree; | ||
|
||
public Research(FamilyTree familyTree) { | ||
this.familyTree = familyTree; | ||
} | ||
|
||
@Override | ||
public List<Person> getChildren(String name) { | ||
Person person = familyTree.findPerson(name); | ||
if (person != null) { | ||
return person.getChildren(); | ||
} | ||
return null; | ||
} | ||
|
||
@Override | ||
public Person[] getParents(String name) { | ||
Person person = familyTree.findPerson(name); | ||
if (person != null) { | ||
return new Person[]{person.getFather(), person.getMother()}; | ||
} | ||
return null; | ||
} | ||
|
||
@Override | ||
public List<Person> getSiblings(String name) { | ||
Person person = familyTree.findPerson(name); | ||
if (person != null) { | ||
Person father = person.getFather(); | ||
Person mother = person.getMother(); | ||
if (father != null) { | ||
return father.getChildren().stream() | ||
.filter(child -> !child.equals(person)) | ||
.toList(); | ||
} else if (mother != null) { | ||
return mother.getChildren().stream() | ||
.filter(child -> !child.equals(person)) | ||
.toList(); | ||
} | ||
} | ||
return null; | ||
} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Метод сохранения должен принимать объект, который надо сохранить, в аргументах метода, а метод загрузки должен возвращать этот объект