diff --git a/README.md b/README.md index ecb67bc..5ef5c79 100644 --- a/README.md +++ b/README.md @@ -34,4 +34,123 @@ graph TD; ``` Главный абстрактный класс - Entity, который имеет только имя. От него наследуются предметы и персонажи. Персонажи могут чувствовать *(IFeelabe)*, двигаться *(IMovable)* и брать вещи *(ITakeable)*. Также персонажи имеют гендер *(enum Feels)*. -За историю отвечает класс *StoryTeller*. Он меняет состояние персонажей и отображает их состояние. \ No newline at end of file +За историю отвечает класс *StoryTeller*. Он меняет состояние персонажей и отображает их состояние. + +## UML Диаграмма +```mermaid +classDiagram +class Entity { + # String name + + getName() String +} +class Character { + # Item itemInHand + # Feels feel + - String currentState + - Gender gender + - Entity position + + setFeel(Feels)* void + + moveTo(Entity)* void + + grab(Item)* void + + getItemInHand() Item + + getPosition() Entity + + getGender() String + + getState() String + # setState(String) void + # setPosition(Entity) void +} +class FrenBok { + - IGrabbable characterInHand + + grabCharacter(IGrabbable) void + + setFeel(Feels) void + + moveTo(Entity) void + + grab(Item) void + + pushCharacterBehindItem(Item) void +} +class Karlson { + + grab(Item) void + + setFeel(Feels) void + + moveTo(Entity) void + + grabFrom(Container) void + + getGrabbablePart() String +} + +class Item { + - Character owner + + getOwner() Character + + setOwner(Character) void +} +class Container { + - Item innerItem + + getInnerItem() Item +} + +class Feels { +<> + + SAD + + ANGRY + + SCARY + + RAGE + + NORMAL + - String feel + + values() Feels[] + + toString() String + + valueOf(String) Feels +} + +class Gender { +<> + - String gender + + MAN + + WOMAN + + valueOf(String) Gender + + toString() String + + values() Gender[] +} + +class StoryTeller { + - Item door + - Item meatball + - Container fryingPan + - FrenBok frenBok + - Karlson karlson + - Item kitchenHob + + play() void +} + +class ICanTake { + <> + + grab(Item) void +} + +class IMovable { + <> + + moveTo(Entity) void +} + +class IFeelable { + <> + + setFeel(Feels) void +} + +class IGrabbable { + <> + + getGrabbablePart() String +} + +IGrabbable --|> IMovable + +Character --|> Entity +Container --|> Item +FrenBok --|> Character +Item --|> Entity +Karlson --|> Character + +Character ..|> IFeelable +Character ..|> IMovable +Character ..|> ICanTake +Karlson ..|> IGrabbable + +Character --> Feels +Character --> Gender +``` \ No newline at end of file