|
Модераторы: LSD, AntonSaburov |
|
_Y_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Здравствуйте, уважаемые!
Давно сюда не заходил, да и на Java не пишу много лет. Но понадобился совет – по старой памяти. Готовлю лекцию, посвящённую интерфейсам (Interface) в объектно-ориентированном программировании. Посоветуйте, пожалуйста, примеры, в которых использование Interface существенно упрощает решение проблемы. Возможно, какие-то удачные паттерны проектирования (Design Patterns)? Нужно просто и убедительно показать достоинства концепции. Лекция адресована тем, кто ООП знает хорошо, но не работает с интерфейсами. Поэтому примеры, в которых вместо интерфейсов можно использовать абстрактные классы, мне, к сожалению, не годятся. Почему спрашиваю в Java форуме? По многим причинам. Во-первых, по старой памяти форум этот очень уважаю. Во-вторых, если придётся разбирать код примеров, что Java вспомнить мне проще, чем вникать в совсем неизвестный язык. В третьих, я попросту не знаю как реализованы Interface в незнакомых мне языках. ЗЫ: А уж UML диаграммы я и сам нарисую Спасибо! Это сообщение отредактировал(а) _Y_ - 26.12.2018, 11:39 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15708 Регистрация: 24.3.2004 Репутация: 209 Всего: 537 |
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 были классами, нам бы пришлось выность его во вспомогательный класс. Если ещё что придумаю, напишу. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
_Y_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
LSD, спасибо, буду разбирать и думать, время есть. Решения специфические для Java вряд ли пойдут, язык-то программирования совсем другой. А вот неспецифичные к языкам - пойдут в первую очередь.
Кстати, мы с вами, LSD, пересекаемся на этом форуме уже лет больше десяка. Пора спрашивать "как дела" Хотя, вы меня вряд ли помните - захожу раз в год, по случаю. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
vvm28 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 30.12.2018 Репутация: нет Всего: нет |
Пример интерфейса игры:
Использование данного интерфейса:
Польза: Мы не загромождаем класс игры объявлениями переменных. Никому не хочется листать огромные простыни класса, классы должны быть маленькими. |
||||
|
|||||
_Y_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
vvm28, интересно, надо подумать. Спасибо!
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |