Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Примеры использования Interface |
Автор: _Y_ 26.12.2018, 10:15 |
Здравствуйте, уважаемые! Давно сюда не заходил, да и на Java не пишу много лет. Но понадобился совет – по старой памяти. Готовлю лекцию, посвящённую интерфейсам (Interface) в объектно-ориентированном программировании. Посоветуйте, пожалуйста, примеры, в которых использование Interface существенно упрощает решение проблемы. Возможно, какие-то удачные паттерны проектирования (Design Patterns)? Нужно просто и убедительно показать достоинства концепции. Лекция адресована тем, кто ООП знает хорошо, но не работает с интерфейсами. Поэтому примеры, в которых вместо интерфейсов можно использовать абстрактные классы, мне, к сожалению, не годятся. Почему спрашиваю в Java форуме? По многим причинам. Во-первых, по старой памяти форум этот очень уважаю. Во-вторых, если придётся разбирать код примеров, что Java вспомнить мне проще, чем вникать в совсем неизвестный язык. В третьих, я попросту не знаю как реализованы Interface в незнакомых мне языках. ЗЫ: А уж UML диаграммы я и сам нарисую ![]() Спасибо! |
Автор: LSD 27.12.2018, 13:23 |
0. При наличии множественного наследования: можно обойтись и без интерфейсов. Поэтому дальше все примеры при их отсутвии. 1. Из совсем незаменимых это маркерные интерфейсы: Cloneable, Serializable. Тут альтернативы им нет. 2. Интерфейсы некого поведения, например: AutoCloseable, Iterable, всевозможные listener-ы. Т.е. в принципе базовый класс AutoCloseable можно встроить в иерархию, но это сложно и самое главное, если ты уже наследуешься от какого-то класса, то добавить поведение невозможно. Например Спринг когда видит что класс реализует интерфейс listener-а, автоматом подписывает бин на события. 3. Специфичная для Java вещь: enum не может наследоваться ни от каких классов, а реализовывать интерфейс может. 4. Опять же специфичный дла Java случай: функциональные интерфейсы. Если бы это были классы, то лямбды и method reference не работали бы, приходилось бы каждый раз создавать инстанс класса. 5. Реализация некого объекта через интерфейс: например List. В целом можно и обойтись без интерфейса, но с ним удобнее. В целом если базовый класс не содержит никакой логики и данных, то лучше сделать его интерфейсом, так у разработчика будет больше возможностей для реализации. Например есть у нас ORM (типа хибернейта). И нам надо сделать свою персистентную реализацию коллекций. С учетом того что Set, List, Map это интерфейсы мы можем создать базовый класс реализующий общую логику работы с БД, и унаследовать от него наши ORM-реализации коллекций. Если бы Set, List, Map были классами, нам бы пришлось выность его во вспомогательный класс. Если ещё что придумаю, напишу. |
Автор: _Y_ 29.12.2018, 18:15 |
LSD, спасибо, буду разбирать и думать, время есть. Решения специфические для Java вряд ли пойдут, язык-то программирования совсем другой. А вот неспецифичные к языкам - пойдут в первую очередь. Кстати, мы с вами, LSD, пересекаемся на этом форуме уже лет больше десяка. Пора спрашивать "как дела" ![]() |
Автор: vvm28 30.12.2018, 01:23 | ||||
Пример интерфейса игры:
Использование данного интерфейса:
Польза: Мы не загромождаем класс игры объявлениями переменных. Никому не хочется листать огромные простыни класса, классы должны быть маленькими. |
Автор: _Y_ 30.12.2018, 20:35 |
vvm28, интересно, надо подумать. Спасибо! |