🔹 Что делает этот код? Класс PigMoneyBox представляет копилку, куда можно добавлять деньги, но забрать можно только один раз (разбив копилку). Конструкторы позволяют создать копилку с нулевым балансом или задать начальную сумму. Метод add(int currency) проверяет сумму на корректность перед добавлением. Метод get() позволяет забрать деньги, но только один раз (копилка "разбивается" после вызова).
В данном примере абстрактный тип данных (ADT) реализуется через интерфейс MoneyBox, который не указан в коде, но явно подразумевается.
📌 Что такое абстрактный тип данных (ADT)? Абстрактный тип данных — это логическое описание структуры данных и операций над ней, независимое от конкретной реализации.
🔹 Где в коде проявляется ADT? Определение интерфейса (MoneyBox)
PigMoneyBox реализует MoneyBox, который задаёт абстрактные операции (например, add(int currency) и get()), но не описывает их реализацию. Любой другой класс может реализовать MoneyBox по-своему. Например, можно создать DigitalMoneyBox, который будет работать с электронными деньгами. Скрытие деталей реализации
В PigMoneyBox мы не знаем, как именно устроен MoneyBox — мы просто определяем его логику. Внутреннее состояние (sum, IsBroken) инкапсулировано, и доступ к нему возможен только через методы (add() и get()). Принцип "что делает, а не как делает"
Пользователь класса работает с MoneyBox, не задумываясь, как именно устроена копилка. Если интерфейс MoneyBox определён так: java Копировать Редактировать public interface MoneyBox { void add(int currency); int get(); } То любой объект MoneyBox можно использовать без знания его внутреннего устройства. 🔥 Вывод Абстрактный тип данных в этом коде — это MoneyBox, а PigMoneyBox — его конкретная реализация. Если завтра нужно будет сделать виртуальную копилку или банковский счёт, мы просто создадим другой класс, реализующий тот же интерфейс, и заменим его в коде без изменения логики работы.
💡 ADT позволяет отделить абстракцию (что делает) от реализации (как делает), что делает код гибким и расширяемым.