# itmo-prog-lab-4 ## Class Description ### Package: `characters` - **Character.java**: An abstract class representing a character in the story. Implements `Listenable` and `Conversable` interfaces. - **Connections**: Inherits from `StoryElement` in `model` package. Used by `Child` and `Traveler`. - **Child.java**: Represents child characters in the story, capable of thinking and conversing about story elements. - **Connections**: Inherits from `Character`. - **Traveler.java**: Represents traveler characters in the story, who can tell stories about their adventures. - **Connections**: Inherits from `Character`. Interacts with `Adventure` in `story` package. - **Znayka.java**: A specific implementation of `Traveler`, representing the character Znayka. - **Connections**: Inherits from `Traveler`. ### Package: `enums` - **CharacterType.java**: Defines character types (TRAVELER, CHILD). - **AdventureType.java**: Defines types of adventures (FAMOUS, UNKNOWN). - **LifeType.java**: Defines types of life (NOT_AS_USUAL, AS_USUAL). ### Package: `exceptions` - **StoryEventException.java**: Custom exception to handle specific story-related errors. - **StoryLogicException.java**: Custom runtime exception for handling logic errors in the story. ### Package: `interfaces` - **Interactable.java**: Interface for story elements that can interact. - **Conversable.java**: Interface for characters that can converse. - **Listenable.java**: Interface for characters that can listen. ### Package: `model` - **StoryElement.java**: An abstract class representing a story element with a description and metadata. - **Connections**: Parent class for `Location`. - **City.java**: Represents a city in the story, managing travelers, children, and houses. - **Connections**: Inherits from `Location`. Aggregates `Traveler`, `Child`, and `House` from `characters` package. - **House.java**: Represents a house in the city, hosting residents and stories. - **Connections**: Inherits from `Location`. Contains `Character` from `characters` package. - **Location.java**: An abstract class representing a location in the story. - **Connections**: Parent class for `City` and `House`. ### Package: `story` - **StoryEvent.java**: Represents an event in the story. - **Connections**: Used in `City` from `model` package. - **StoryContext.java**: Provides context for the story elements. - **Connections**: Used in `Adventure` and `House` from `model` package. - **Adventure.java**: Represents an adventure in the story, involving travelers and locations. - **Connections**: Uses `Traveler` from `characters` package, `City` and `House` from `model` package. ### Main Class - **StoryTeller.java**: Main class orchestrating the storytelling process. Initializes the story's setting, characters, and events. - **Connections**: Uses instances of `City`, `Traveler`, `House`, `Child`, `Adventure` from the respective packages, and handles exceptions. ## Query ``` На этом знаменитое путешествие Знайки и его товарищей окончилось. Жизнь в Цветочном городе потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому. С тех пор как наши отважные путешественники вернулись домой, в городе только и говорили о них. Все жители, и малыши и малышки, приходили по вечерам к домику Знайки и слушали рассказы путешественников об их жизни в Зеленом городе. ``` ## Output ``` На этом знаменитое путешествие Знайка закончилось. Жители Цветочный город собрались вместе, чтобы отпраздновать возвращение путешественников. Путешественники столкнулись с проблемой Путешественники вспомнили о путешествие в Зеленый город Жизнь в Цветочный город потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому. С тех пор как наши отважные путешественники Знайка вернулись домой, в городе только и говорили о них. Жители собираются в Дом Знайки чтобы рассказать истории Все жители слушают историю о путешествии в путешествие в Зеленый город в Цветочный город И вот, когда все собрались в доме Знайка, Знайка рассказал историю о том, как он путешествие в Зеленый город в Цветочный город Малыш слушает: Малыш слушает историю о путешествие в Зеленый город и спрашивает вопросы о путешествие в Зеленый город Малышка слушает: Малышка слушает историю о путешествие в Зеленый город и спрашивает вопросы о путешествие в Зеленый город Знайка рассказывает: Знайка умно рассказывает историю о путешествие в Зеленый город и думает: Немного я знаю о городах, но история о путешествие в Зеленый город мне очень понравилась Истории захватывали дух, и каждый вечер собирались всё больше жителей, чтобы слушать новые приключения. ``` ## UML Diagram ![UML Diagram](https://new.akarpov.ru/media/files/sanspie/eNCBb/bebra2.svg "https://new.akarpov.ru/files/GKoEHHkHACqWRrehyNZe") ## Вывод В ходе выполнения данной лабораторной работы я научился работать с интерфейсами, абстрактными классами, исключениями, локальными классами, анонимными классами.