From 5e53037803ca82ecde090cd9df74fd714bdba8f3 Mon Sep 17 00:00:00 2001 From: Popescu Lucian Date: Sat, 15 Apr 2023 12:03:57 +0300 Subject: [PATCH 1/2] am adaugat prima clasa --- _1_basics/src/main/java/code/_3_in_class/Salut.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 _1_basics/src/main/java/code/_3_in_class/Salut.java diff --git a/_1_basics/src/main/java/code/_3_in_class/Salut.java b/_1_basics/src/main/java/code/_3_in_class/Salut.java new file mode 100644 index 000000000..2d10f3176 --- /dev/null +++ b/_1_basics/src/main/java/code/_3_in_class/Salut.java @@ -0,0 +1,7 @@ +package code._3_in_class; + +public class Salut { + public static void main(String[] args) { + System.out.println("Salut"); + } +} From 54a5905ee3df0b8dff22a3ec7c25559d3ab64c48 Mon Sep 17 00:00:00 2001 From: Popescu Lucian Date: Sat, 20 May 2023 10:55:59 +0300 Subject: [PATCH 2/2] proiect final --- .../java/code/_3_in_class/BoxingFighter.java | 51 ++++++ .../src/main/java/code/_3_in_class/Main.java | 27 ++- .../design_patterns/requirements/Main.java | 168 +++++++++++++++++- 3 files changed, 240 insertions(+), 6 deletions(-) create mode 100644 _2_oo/src/main/java/code/_3_in_class/BoxingFighter.java diff --git a/_2_oo/src/main/java/code/_3_in_class/BoxingFighter.java b/_2_oo/src/main/java/code/_3_in_class/BoxingFighter.java new file mode 100644 index 000000000..adb6146e2 --- /dev/null +++ b/_2_oo/src/main/java/code/_3_in_class/BoxingFighter.java @@ -0,0 +1,51 @@ +package code._3_in_class; + +import java.util.Random; + +public class BoxingFighter { + private String name; + private int health; + private int minDamage; + private int maxDamage; + + public BoxingFighter(String name, int health, int minDamage, int maxDamage) { + this.name = name; + this.health = health; + this.minDamage = minDamage; + this.maxDamage = maxDamage; + } + + public void attack(BoxingFighter opponent) { + int damage = new Random().nextInt(maxDamage - minDamage + 1) + minDamage; + System.out.println(this.name + " attacks " + opponent.getName() + " and deals " + damage + " damage."); + opponent.receiveDamage(damage); + } + + public void receiveDamage(int damage) { + this.health -= damage; + System.out.println(this.name + " receives " + damage + " damage."); + if (this.health <= 0) { + System.out.println(this.name + " has been knocked out!"); + } + } + + public void defend() { + System.out.println(this.name + " defends the opponent's attack."); + } + + public String getName() { + return this.name; + } + + public int getHealth() { + return this.health; + } + + public int getMinDamage() { + return this.minDamage; + } + + public int getMaxDamage() { + return this.maxDamage; + } +} diff --git a/_2_oo/src/main/java/code/_3_in_class/Main.java b/_2_oo/src/main/java/code/_3_in_class/Main.java index 3b87b4563..159ca5aff 100644 --- a/_2_oo/src/main/java/code/_3_in_class/Main.java +++ b/_2_oo/src/main/java/code/_3_in_class/Main.java @@ -1,8 +1,29 @@ package code._3_in_class; -public class Main { +public class Main { public static void main(String[] args) { - //TODO put your code changes in here + BoxingFighter student1 = new BoxingFighter("Luci", 100, 15, 25); + BoxingFighter student2 = new BoxingFighter("Roland", 120, 12, 20); + + while (student1.getHealth() > 0 && student2.getHealth() > 0) { + student1.attack(student2); + if (student2.getHealth() <= 0) { + break; + } + student2.defend(); + + student2.attack(student1); + if (student1.getHealth() <= 0) { + break; + } + student1.defend(); + } + + if (student1.getHealth() > 0) { + System.out.println(student1.getName() + " wins!"); + } else { + System.out.println(student2.getName() + " wins!"); + } } -} \ No newline at end of file +} diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Main.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Main.java index 8a9fccb7b..1a563a3d7 100644 --- a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Main.java +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Main.java @@ -1,8 +1,170 @@ -package clean.code.design_patterns.requirements; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; -public class Main { +// Clasa de bază pentru persoane +class Person { + private String name; + public Person(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} + +// Clasa elevului care moștenește clasa Person +class Student extends Person { + private List grades; + + public Student(String name) { + super(name); + grades = new ArrayList<>(); + } + + public void addGrade(String grade) { + grades.add(grade); + System.out.println("Notă nouă adăugată elevului " + getName() + ": " + grade); + } +} + +// Clasa profesorului care moștenește clasa Person +class Teacher extends Person { + private SchoolCatalog catalog; + private Random random; + + public Teacher(String name) { + super(name); + catalog = SchoolCatalog.getInstance(); + random = new Random(); + } + + public void addGrade(String studentName) { + // Generăm o notă aleatorie între 1 și 10 + String grade = String.valueOf(random.nextInt(10) + 1); + catalog.addGrade(studentName, grade); + } +} + +// Clasa catalogului școlar care utilizează Singleton și Observer +class SchoolCatalog { + private static SchoolCatalog instance; + private List students; + private Map> observers; + + // Constructor privat pentru a preveni crearea directă a instanței + private SchoolCatalog() { + students = new ArrayList<>(); + observers = new HashMap<>(); + } + + // Metoda statică pentru a obține instanța catalogului școlar + public static synchronized SchoolCatalog getInstance() { + if (instance == null) { + instance = new SchoolCatalog(); + } + return instance; + } + + // Metoda pentru adăugarea unui elev în catalog + public void addStudent(Student student) { + students.add(student); + observers.put(student, new ArrayList<>()); + } + + // Metoda pentru adăugarea unui observator pentru un elev + public void addObserver(Student student, NotificationObserver observer) { + List studentObservers = observers.get(student); + studentObservers.add(observer); + } + + // Metoda pentru eliminarea unui observator pentru un elev + public void removeObserver(Student student, NotificationObserver observer) { + List studentObservers = observers.get(student); + studentObservers.remove(observer); + } + + // Metoda pentru adăugarea unei note pentru un elev + public void addGrade(String studentName, String grade) { + for (Student student : students) { + if (student.getName().equals(studentName)) { + student.addGrade(grade); + notifyObservers(student, studentName, grade); + break; + } + } + } + + // Metoda privată pentru notificarea observatorilor + private void notifyObservers(Student student, String studentName, String grade) { + List studentObservers = observers.get(student); + for (NotificationObserver observer : studentObservers) { + observer.update(studentName, grade); + } + } +} + +// Interfața Observer pentru observatorii de notificări +interface NotificationObserver { + void update(String studentName, String grade); +} + +// Clasa Părinte care implementează interfața NotificationObserver +class Parent implements NotificationObserver { + private String name; + private Student child; + + public Parent(String name, Student child) { + this.name = name; + this.child = child; + } + + public void update(String studentName, String grade) { + if (studentName.equals(child.getName())) { + System.out.println("Părintele " + name + " a primit notificare pentru elevul " + studentName + ": Notă nouă: " + grade); + } + } +} + +// Clasa principală care demonstrează utilizarea catalogului școlar +class SchoolCatalogApp { public static void main(String[] args) { - //TODO implement your design patterns in this package + // Cream catalogul școlar folosind Singleton + SchoolCatalog catalog = SchoolCatalog.getInstance(); + + // Adăugăm elevi în catalog + Student student1 = new Student("Ionut"); + Student student2 = new Student("Alice"); + Student student3 = new Student("Maria"); + catalog.addStudent(student1); + catalog.addStudent(student2); + catalog.addStudent(student3); + + // Cream profesor + Teacher teacher = new Teacher("Popescu"); + + // Cream părinți și adăugăm observatori pentru fiecare elev + Parent parent1 = new Parent("Mateescu", student1); + Parent parent2 = new Parent("Anghelescu", student2); + Parent parent3 = new Parent("Ionescu", student3); + catalog.addObserver(student1, parent1); + catalog.addObserver(student2, parent2); + catalog.addObserver(student3, parent3); + + // Profesorul adaugă note pentru elevi + teacher.addGrade("Ionut"); + teacher.addGrade("Alice"); + teacher.addGrade("Maria"); + + // Eliminăm un observator (părinte) de la catalog + catalog.removeObserver(student2, parent2); + + // Profesorul adaugă alte note pentru elevi + teacher.addGrade("Ionut"); + teacher.addGrade("Maria"); } }