Compare commits
No commits in common. "main" and "homework3" have entirely different histories.
40
.gitignore
vendored
Normal file
40
.gitignore
vendored
Normal file
@ -0,0 +1,40 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
.kotlin
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
/.idea
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
17
pom.xml
Normal file
17
pom.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.example</groupId>
|
||||
<artifactId>PW2</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
123
src/main/java/Zoo.java
Normal file
123
src/main/java/Zoo.java
Normal file
@ -0,0 +1,123 @@
|
||||
import animals.*;
|
||||
import employee.Worker;
|
||||
import food.Grass;
|
||||
import food.Meat;
|
||||
import model.Aviary;
|
||||
import model.Size;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Zoo {
|
||||
|
||||
private static final List<Animal> allAnimals = new ArrayList<>();
|
||||
|
||||
private static final Aviary<Carnivorous> carnivorousAviary = new Aviary<>(Size.LARGE);
|
||||
private static final Aviary<Herbivore> herbivoreAviary = new Aviary<>(Size.MEDIUM);
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
System.out.println("Зоопарк: ");
|
||||
|
||||
Bear bear1 = new Bear("Миша");
|
||||
Kotik kotik1 = new Kotik("Мурка");
|
||||
Fish fish1 = new Fish("Олег");
|
||||
Deer deer1 = new Deer("Бемби");
|
||||
Duck duck1 = new Duck("Кряква");
|
||||
Sheep sheep1 = new Sheep("Долли");
|
||||
|
||||
allAnimals.add(bear1);
|
||||
allAnimals.add(kotik1);
|
||||
allAnimals.add(fish1);
|
||||
allAnimals.add(deer1);
|
||||
allAnimals.add(duck1);
|
||||
allAnimals.add(sheep1);
|
||||
|
||||
Worker worker1 = new Worker("Алина");
|
||||
Worker worker2 = new Worker("Сергей");
|
||||
|
||||
Grass grass = new Grass();
|
||||
Meat meat = new Meat();
|
||||
|
||||
worker1.feed(kotik1, meat);
|
||||
worker2.feed(duck1, grass);
|
||||
//worker2.feed(sheep1, meat);
|
||||
|
||||
Duck duck2 = new Duck();
|
||||
Worker worker3 = new Worker();
|
||||
System.out.println("Кормим уток. Начальная сытость = " + duck2.getSatiety() + ".");
|
||||
worker3.feed(duck2, grass);
|
||||
System.out.println("Конечная сытость = " + duck2.getSatiety() + ".");
|
||||
|
||||
worker1.getVoice(bear1);
|
||||
worker1.getVoice(kotik1);
|
||||
|
||||
Swim[] pond = createPond();
|
||||
|
||||
if (pond.length > 0){
|
||||
|
||||
System.out.println("Пруд: ");
|
||||
|
||||
for (Swim swimmer : pond) {
|
||||
if (swimmer instanceof Animal) {
|
||||
Animal animal = (Animal) swimmer;
|
||||
if (animal.getName() != null) {
|
||||
swimmer.swim();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
System.out.println("В пруду никого нет.");
|
||||
}
|
||||
|
||||
fillCarnivorousAviary();
|
||||
fillHerbivoreAviary();
|
||||
|
||||
if(getCarnivorous("Белла") != null){
|
||||
System.out.println(getCarnivorous("Белла"));
|
||||
}
|
||||
else {
|
||||
System.out.println("Животное с именем 'Белла' не найдено");
|
||||
}
|
||||
|
||||
if(getHerbivore("Бека") != null){
|
||||
System.out.println(getHerbivore("Бека"));
|
||||
}
|
||||
else {
|
||||
System.out.println("Животное с именем 'Белла' не найдено");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Swim[] createPond(){
|
||||
List<Animal> pondList = new ArrayList<>();
|
||||
|
||||
for (Animal animal : allAnimals) {
|
||||
if (animal instanceof Swim) {
|
||||
pondList.add(animal);
|
||||
}
|
||||
}
|
||||
|
||||
return pondList.toArray(new Swim[0]);
|
||||
}
|
||||
|
||||
public static void fillCarnivorousAviary(){
|
||||
carnivorousAviary.addAnimal(new Bear ("Маша"));
|
||||
carnivorousAviary.addAnimal(new Bear("Белла"));
|
||||
}
|
||||
|
||||
public static void fillHerbivoreAviary(){
|
||||
herbivoreAviary.addAnimal(new Deer ("Аня"));
|
||||
herbivoreAviary.addAnimal(new Deer("Олли"));
|
||||
herbivoreAviary.addAnimal(new Sheep("Бека"));
|
||||
}
|
||||
|
||||
public static Carnivorous getCarnivorous(String name){
|
||||
return carnivorousAviary.getAnimal(name);
|
||||
}
|
||||
|
||||
public static Herbivore getHerbivore(String name){
|
||||
return herbivoreAviary.getAnimal(name);
|
||||
}
|
||||
}
|
||||
38
src/main/java/animals/Animal.java
Normal file
38
src/main/java/animals/Animal.java
Normal file
@ -0,0 +1,38 @@
|
||||
package animals;
|
||||
|
||||
import food.WrongFoodException;
|
||||
import model.Size;
|
||||
import food.Food;
|
||||
|
||||
public abstract class Animal {
|
||||
private String name;
|
||||
int satiety;
|
||||
|
||||
public String getName(){
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void setName(String name){
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getSatiety(){
|
||||
return this.satiety;
|
||||
}
|
||||
|
||||
public void setSatiety(int satiety){
|
||||
this.satiety = satiety;
|
||||
}
|
||||
|
||||
public abstract void eat(Food food) throws WrongFoodException;
|
||||
|
||||
public Animal() {
|
||||
}
|
||||
|
||||
public Animal(String name) {
|
||||
this.name = name;
|
||||
this.satiety = 2;
|
||||
}
|
||||
|
||||
public abstract Size getSize();
|
||||
}
|
||||
35
src/main/java/animals/Bear.java
Normal file
35
src/main/java/animals/Bear.java
Normal file
@ -0,0 +1,35 @@
|
||||
package animals;
|
||||
|
||||
import model.Size;
|
||||
|
||||
public class Bear extends Carnivorous implements Run, Voice {
|
||||
|
||||
@Override
|
||||
public Size getSize() {
|
||||
return Size.LARGE;
|
||||
}
|
||||
|
||||
public Bear(String name) {
|
||||
super(name);
|
||||
this.setSatiety(2);
|
||||
}
|
||||
|
||||
public Bear(){
|
||||
this.setSatiety(2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (this.getName() != null){
|
||||
System.out.println("Медведь " + this.getName() + " бегает.");
|
||||
}
|
||||
else {
|
||||
System.out.println("Медведь + бегает.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVoice() {
|
||||
return "гррр";
|
||||
}
|
||||
}
|
||||
26
src/main/java/animals/Carnivorous.java
Normal file
26
src/main/java/animals/Carnivorous.java
Normal file
@ -0,0 +1,26 @@
|
||||
package animals;
|
||||
import food.Food;
|
||||
import food.Meat;
|
||||
import food.WrongFoodException;
|
||||
|
||||
public abstract class Carnivorous extends Animal{
|
||||
|
||||
public Carnivorous() {}
|
||||
|
||||
public Carnivorous(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void eat(Food food) throws WrongFoodException {
|
||||
int satiety = this.getSatiety();
|
||||
if (food instanceof Meat) {
|
||||
satiety += food.getEnergy();
|
||||
this.setSatiety(satiety);
|
||||
System.out.println("Животное ест.");
|
||||
}
|
||||
else {
|
||||
throw new WrongFoodException("Это животное хищник, ест только мясо.");
|
||||
}
|
||||
}
|
||||
}
|
||||
30
src/main/java/animals/Deer.java
Normal file
30
src/main/java/animals/Deer.java
Normal file
@ -0,0 +1,30 @@
|
||||
package animals;
|
||||
|
||||
import model.Size;
|
||||
|
||||
public class Deer extends Herbivore implements Run {
|
||||
|
||||
@Override
|
||||
public Size getSize() {
|
||||
return Size.MEDIUM;
|
||||
}
|
||||
|
||||
public Deer(String name) {
|
||||
super(name);
|
||||
this.setSatiety(2);
|
||||
}
|
||||
|
||||
public Deer(){
|
||||
this.setSatiety(2);}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (this.getName() != null){
|
||||
System.out.println("Олень " + this.getName() + " бегает.");
|
||||
}
|
||||
else {
|
||||
System.out.println("Олень бегает.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
54
src/main/java/animals/Duck.java
Normal file
54
src/main/java/animals/Duck.java
Normal file
@ -0,0 +1,54 @@
|
||||
package animals;
|
||||
|
||||
import model.Size;
|
||||
|
||||
public class Duck extends Herbivore implements Run, Swim, Fly, Voice {
|
||||
|
||||
@Override
|
||||
public Size getSize() {
|
||||
return Size.SMALL;
|
||||
}
|
||||
|
||||
public Duck(String name) {
|
||||
super(name);
|
||||
this.setSatiety(2);
|
||||
}
|
||||
|
||||
public Duck(){
|
||||
this.setSatiety(2);}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (this.getName() != null){
|
||||
System.out.println("Утка " + this.getName() + " бегает.");
|
||||
}
|
||||
else {
|
||||
System.out.println("Утка бегает.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void swim() {
|
||||
if (this.getName() != null){
|
||||
System.out.println("Утка " + this.getName() + " плавает.");
|
||||
}
|
||||
else {
|
||||
System.out.println("Утка плаваеет.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fly() {
|
||||
if (this.getName() != null){
|
||||
System.out.println("Утка " + this.getName() + " летает.");
|
||||
}
|
||||
else {
|
||||
System.out.println("Утка летает.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVoice(){
|
||||
return "кря";
|
||||
}
|
||||
}
|
||||
29
src/main/java/animals/Fish.java
Normal file
29
src/main/java/animals/Fish.java
Normal file
@ -0,0 +1,29 @@
|
||||
package animals;
|
||||
|
||||
import model.Size;
|
||||
|
||||
public class Fish extends Carnivorous implements Swim {
|
||||
|
||||
@Override
|
||||
public Size getSize() {
|
||||
return Size.MEDIUM;
|
||||
}
|
||||
|
||||
public Fish(String name) {
|
||||
super(name);
|
||||
this.setSatiety(2);
|
||||
}
|
||||
|
||||
public Fish (){
|
||||
this.setSatiety(2);}
|
||||
|
||||
@Override
|
||||
public void swim() {
|
||||
if (this.getName() != null){
|
||||
System.out.println("Рыба " + this.getName() + " плавает.");
|
||||
}
|
||||
else {
|
||||
System.out.println("Рыба плавает.");
|
||||
}
|
||||
}
|
||||
}
|
||||
5
src/main/java/animals/Fly.java
Normal file
5
src/main/java/animals/Fly.java
Normal file
@ -0,0 +1,5 @@
|
||||
package animals;
|
||||
|
||||
public interface Fly {
|
||||
void fly();
|
||||
}
|
||||
26
src/main/java/animals/Herbivore.java
Normal file
26
src/main/java/animals/Herbivore.java
Normal file
@ -0,0 +1,26 @@
|
||||
package animals;
|
||||
import food.Food;
|
||||
import food.Grass;
|
||||
import food.WrongFoodException;
|
||||
|
||||
public abstract class Herbivore extends Animal{
|
||||
|
||||
public Herbivore() {}
|
||||
|
||||
public Herbivore(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void eat(Food food) throws WrongFoodException {
|
||||
int satiety = this.getSatiety();
|
||||
if (food instanceof Grass) {
|
||||
satiety += food.getEnergy();
|
||||
this.setSatiety(satiety);
|
||||
System.out.println("Животное ест.");
|
||||
}
|
||||
else {
|
||||
throw new WrongFoodException("Это животное тровоядное, ест только траву.");
|
||||
}
|
||||
}
|
||||
}
|
||||
34
src/main/java/animals/Kotik.java
Normal file
34
src/main/java/animals/Kotik.java
Normal file
@ -0,0 +1,34 @@
|
||||
package animals;
|
||||
|
||||
import model.Size;
|
||||
|
||||
public class Kotik extends Carnivorous implements Run, Voice {
|
||||
|
||||
@Override
|
||||
public Size getSize() {
|
||||
return Size.SMALL;
|
||||
}
|
||||
|
||||
public Kotik(String name) {
|
||||
super(name);
|
||||
this.setSatiety(2);
|
||||
}
|
||||
|
||||
public Kotik(){
|
||||
this.setSatiety(2);}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (this.getName() != null){
|
||||
System.out.println("Котик " + this.getName() + " бегает.");
|
||||
}
|
||||
else {
|
||||
System.out.println("Котик бегает.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVoice(){
|
||||
return "мяу";
|
||||
}
|
||||
}
|
||||
5
src/main/java/animals/Run.java
Normal file
5
src/main/java/animals/Run.java
Normal file
@ -0,0 +1,5 @@
|
||||
package animals;
|
||||
|
||||
public interface Run {
|
||||
void run();
|
||||
}
|
||||
34
src/main/java/animals/Sheep.java
Normal file
34
src/main/java/animals/Sheep.java
Normal file
@ -0,0 +1,34 @@
|
||||
package animals;
|
||||
|
||||
import model.Size;
|
||||
|
||||
public class Sheep extends Herbivore implements Run, Voice {
|
||||
|
||||
@Override
|
||||
public Size getSize() {
|
||||
return Size.MEDIUM;
|
||||
}
|
||||
|
||||
public Sheep(String name) {
|
||||
super(name);
|
||||
this.setSatiety(2);
|
||||
}
|
||||
|
||||
public Sheep (){
|
||||
this.setSatiety(2);}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (this.getName() != null){
|
||||
System.out.println("Овечка " + this.getName() + " бегает.");
|
||||
}
|
||||
else {
|
||||
System.out.println("Овечка бегает.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVoice(){
|
||||
return "бее";
|
||||
}
|
||||
}
|
||||
5
src/main/java/animals/Swim.java
Normal file
5
src/main/java/animals/Swim.java
Normal file
@ -0,0 +1,5 @@
|
||||
package animals;
|
||||
|
||||
public interface Swim {
|
||||
void swim();
|
||||
}
|
||||
5
src/main/java/animals/Voice.java
Normal file
5
src/main/java/animals/Voice.java
Normal file
@ -0,0 +1,5 @@
|
||||
package animals;
|
||||
|
||||
public interface Voice {
|
||||
String getVoice();
|
||||
}
|
||||
62
src/main/java/employee/Worker.java
Normal file
62
src/main/java/employee/Worker.java
Normal file
@ -0,0 +1,62 @@
|
||||
package employee;
|
||||
|
||||
import animals.Animal;
|
||||
import animals.Voice;
|
||||
import food.Food;
|
||||
import food.Grass;
|
||||
import food.Meat;
|
||||
import food.WrongFoodException;
|
||||
|
||||
public class Worker {
|
||||
private String Name;
|
||||
|
||||
public void setName(String name) {
|
||||
Name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return Name;
|
||||
}
|
||||
|
||||
public void feed(Animal animal, Food food){
|
||||
String type = "";
|
||||
|
||||
if (food instanceof Grass) type = " травой. ";
|
||||
if (food instanceof Meat) type = " мясом. ";
|
||||
|
||||
try {
|
||||
if (this.Name != null && animal.getName() != null) {
|
||||
System.out.println(this.getName() + " кормит животное " + animal.getName() + type);
|
||||
animal.eat(food);
|
||||
}
|
||||
else{
|
||||
animal.eat(food);
|
||||
}
|
||||
}
|
||||
catch (WrongFoodException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void getVoice(Voice voiceAnimal) {
|
||||
if (voiceAnimal instanceof Animal) {
|
||||
Animal animal = (Animal) voiceAnimal;
|
||||
if (animal.getName() != null && this.Name != null) {
|
||||
System.out.println(this.getName() + " говорит с животным: " + animal.getName()
|
||||
+ ". Животное отвечает - " + voiceAnimal.getVoice() + ".");
|
||||
}
|
||||
else {
|
||||
System.out.println(this.getName() + " пытается говорить с животным: " + animal.getName() + ". Это животное не умеет издавать звук.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Worker(){}
|
||||
|
||||
public Worker(String name){
|
||||
setName(name);
|
||||
}
|
||||
}
|
||||
5
src/main/java/food/Food.java
Normal file
5
src/main/java/food/Food.java
Normal file
@ -0,0 +1,5 @@
|
||||
package food;
|
||||
|
||||
public abstract class Food {
|
||||
public abstract int getEnergy();
|
||||
}
|
||||
9
src/main/java/food/Grass.java
Normal file
9
src/main/java/food/Grass.java
Normal file
@ -0,0 +1,9 @@
|
||||
package food;
|
||||
|
||||
public class Grass extends Food{
|
||||
|
||||
@Override
|
||||
public int getEnergy() {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
9
src/main/java/food/Meat.java
Normal file
9
src/main/java/food/Meat.java
Normal file
@ -0,0 +1,9 @@
|
||||
package food;
|
||||
|
||||
public class Meat extends Food{
|
||||
|
||||
@Override
|
||||
public int getEnergy() {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
7
src/main/java/food/WrongFoodException.java
Normal file
7
src/main/java/food/WrongFoodException.java
Normal file
@ -0,0 +1,7 @@
|
||||
package food;
|
||||
|
||||
public class WrongFoodException extends Exception {
|
||||
public WrongFoodException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
49
src/main/java/model/Aviary.java
Normal file
49
src/main/java/model/Aviary.java
Normal file
@ -0,0 +1,49 @@
|
||||
package model;
|
||||
|
||||
import animals.Animal;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class Aviary<A extends Animal>{
|
||||
|
||||
private Size size;
|
||||
|
||||
public Aviary(Size size){
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
public Size getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public void setSize(Size size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
private HashMap<String, A> aviaryMap = new HashMap<>();
|
||||
|
||||
public void addAnimal(A animal){
|
||||
if (animal.getSize() != this.size){
|
||||
throw new WrongSizeException("Размер животного - " + animal.getSize() + ", не подходит размеру вальера - " + this.size);
|
||||
}
|
||||
else {
|
||||
aviaryMap.put(animal.getName(), animal);
|
||||
}
|
||||
}
|
||||
|
||||
public A getAnimal(String name){
|
||||
return aviaryMap.get(name);
|
||||
}
|
||||
|
||||
public boolean removeAnimal(String name){
|
||||
return aviaryMap.remove(name, getAnimal(name));
|
||||
}
|
||||
|
||||
public HashMap<String, A> getAviaryMap() {
|
||||
return aviaryMap;
|
||||
}
|
||||
|
||||
public void setAviaryMap(HashMap<String, A> aviaryMap) {
|
||||
this.aviaryMap = aviaryMap;
|
||||
}
|
||||
}
|
||||
5
src/main/java/model/Size.java
Normal file
5
src/main/java/model/Size.java
Normal file
@ -0,0 +1,5 @@
|
||||
package model;
|
||||
|
||||
public enum Size {
|
||||
SMALL, MEDIUM, LARGE
|
||||
}
|
||||
7
src/main/java/model/WrongSizeException.java
Normal file
7
src/main/java/model/WrongSizeException.java
Normal file
@ -0,0 +1,7 @@
|
||||
package model;
|
||||
|
||||
public class WrongSizeException extends RuntimeException {
|
||||
public WrongSizeException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user