Skip to content

Latest commit

 

History

History
132 lines (83 loc) · 8.17 KB

oop-principles.adoc

File metadata and controls

132 lines (83 loc) · 8.17 KB

OOP. Principles

Note
Для каждого созданного класса, нужно создать тестовые классы, которые тестирую работу ВСЕХ конструкторов и методов.
Warning
ТОЛЬКО тестовые классы могут содержать вывод в Standard Output (консольный вывод).
Note
В процессе разработки код постоянно модифицируется (удаляется, добавляется, изменяется).
Note
При разработке иерархии держать в уме принцип инкапсуляции, выбирать корректные имена классов и методов, пользоваться преимуществами полиморфизма.
Note
Отдавайте предпочтение интерфейсам, а не абстрактным классам.

Project: 'Cat’s home'

Specification of task 1

  1. Создать класс Cat.

  2. Создать Fields:

    • name – кличка кота

  3. Создать Constructors:

    • Cat(name)

  4. Создать Methods:

    • mew() – кот мяукает (т.е возвращает "текст" мяуканья)

    • purr() – кот мурлычет (т.е возвращает "текст" мурчания)

    • getName() – получить кличку кота

    • setName(name) – задать кличку кота

Specification of task 2

  1. Создать классы Siamese, Persian, Sphynx наследуемые от класса Cat.

  2. Переопределить в них methods:

    • mew() – кот мяукает (каждый по разному)

    • purr() – кот мурлычет (каждый по разному)

Specification of task 3

  1. Создать класс Person.

  2. Создать Fields:

    • happiness - количество счастья у человека (в процентах)

  3. Создать Constructors:

    • Person(happiness) - принимает количество счастья

  4. Создать Methods:

    • changeHappiness(percentHappiness) - изменение счастья на percentHappiness (может быть как положительное, так и отрицательное)

    • getHappiness() - получить количество счастья

    • setHappiness(happiness) - задать количество счастья

Specification of task 4

Перегрузить в классе Cat методы:

  • mew(Person) - кот мяукает для User, вызывает у него метод changeHappiness(percentHappiness), где percentHappiness отрицательное число

  • purr(Person) - кот мурлычет для User, вызывает у него метод changeHappiness(percentHappiness), где percentHappiness положительное число

Specification of task 5

Переопределить в классах Siamese, Persian, Sphynx методы:

  • mew(Person) - каждый кот по разному воздействует на счастье человека мяуканьем

  • purr(Person) - каждый кот по разному воздействует на счастье человека когда мурлыкает

Project: 'Battle Ground'

Specification of task 1

  • Создать класс Hero, представляющий собой героя и содержащий поле name.

  • Добавить конструктор, принимающий name героя и getter для name (setter не нужен).

  • Добавить метод attackEnemy(), выводящий в Standard Output сообщение о том, что герой атакует врага (это временное решение).

Specification of task 2

  • Создать классы Warrior, Mag и Archer, представляющие собой наследников класса Hero.

  • Переопределить в них метод attackEnemy() для вывода специализированного для этого класса сообщения об атаке.

Specification of task 3

  • Создать класс Enemy, представляющий собой врага и содержащий поле health (количество здоровья).

  • Добавить конструктор, принимающий health, а также setter и getter.

  • Добавить метод takeDamage(int damage), который уменьшает health в соответствии с полученным damage.

  • Переписать метод attackEnemy() класса Hero, добавив ему параметр типа Enemy.

  • Метод должен вызывать у врага метод takeDamage() и передавать в него определённое количество damage.

  • Переопределить метод в подклассах Warrior, Mag и Archer так, чтобы наносимый damage был разный.

Specification of task 4

  • Сделать абстрактными класс Hero и его метод attackEnemy().

Specification of task 5

  • Создать интерфейс Mortal, содержащий метод isAlive().

  • Сделать так, чтобы класс Enemy реализовывал интерфейс Mortal.

  • Определить метод isAlive() в классе Enemy, чтобы тот возвращал true, если количество здоровья врага больше 0.

Specification of task 7

  • Добавить герою показатель здоровья и возможность погибнуть.

  • Добавить возможность врагу атаковать героя в ответ.

  • Создать несколько видов врагов (наследников класса Enemy) с разными способностями. Например, Zombie имеет шанс воскреснуть при гибели.

  • Дать героям уникальные способности.

* Project: 'Geometry'

Создать иерархию классов, описывающих геометрические фигуры на плоскости.

Specification of task

  • В иерархии должно быть не менее 10 классов/интерфейсов и хотя бы 2 уровня вложенности.

  • При переопределении методов обязательно использовать аннотацию @Override.

  • Продемонстрировать переопределение методов в иерархии.

  • Продемонстрировать добавление собственных методов в классах-наследниках (можно с помощью интерфейсов). Например, расчёт диагонали в прямоугольнике, расчёт высоты в треугольнике.

  • Не создавать лишних классов в системе (полностью дублирующих или не содержащих назначения).

  • Каждый класс должен выполнять своё назначение.

  • Создать общие методы:

    • Рассчитывающий площадь фигуры.

    • Принимающий в качестве параметра фигуру и определяющий, равны ли площади текущей и полученной фигуры.

  • Создать класс ShapeUtils со статическими методами:

    • Определяющим, является ли фигура прямоугольником.

    • Определяющим, является ли фигура треугольником.

  • Для каждого неабстрактного класса переопределить метод toString() класса для представления информации о классах в строковой форме.