Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Примеры использования Interface, посоветуйте примеры-иллюстрации 
:(
    Опции темы
_Y_
Дата 26.12.2018, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Здравствуйте, уважаемые!

Давно сюда не заходил, да и на Java не пишу много лет. Но понадобился совет – по старой памяти.

Готовлю лекцию, посвящённую интерфейсам (Interface) в объектно-ориентированном программировании. Посоветуйте, пожалуйста, примеры, в которых использование Interface существенно упрощает решение проблемы. Возможно, какие-то удачные паттерны проектирования (Design Patterns)? Нужно просто и убедительно показать достоинства концепции.

Лекция адресована тем, кто ООП знает хорошо, но не работает с интерфейсами. Поэтому примеры, в которых вместо интерфейсов можно использовать абстрактные классы, мне, к сожалению, не годятся.

Почему спрашиваю в Java форуме? По многим причинам. Во-первых, по старой памяти форум этот очень уважаю. Во-вторых,  если придётся разбирать код примеров, что Java вспомнить мне проще, чем вникать в совсем неизвестный язык. В третьих, я попросту не знаю как реализованы Interface в незнакомых мне языках. ЗЫ: А уж UML диаграммы я и сам нарисую  smile 

Спасибо!


Это сообщение отредактировал(а) _Y_ - 26.12.2018, 11:39


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
LSD
Дата 27.12.2018, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
_Y_
Дата 29.12.2018, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



LSD, спасибо, буду разбирать и думать, время есть. Решения специфические для Java вряд ли пойдут, язык-то программирования совсем другой. А вот неспецифичные к языкам - пойдут в первую очередь.

Кстати, мы с вами, LSD, пересекаемся на этом форуме уже лет больше десяка. Пора спрашивать "как дела" smile  Хотя, вы меня вряд ли помните - захожу раз в год, по случаю.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
vvm28
Дата 30.12.2018, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 30.12.2018

Репутация: нет
Всего: нет



Пример интерфейса  игры:
Код

/*файл GameConstants.java*/
public interface GameConstants {

    public final int DEFAULT_WIDTH = 600;//Ширина игрового поля
    public final int DEFAULT_HEIGHT = 300; //Высота игрового поля
     /*Далее пишем константы которые будут использоваться в игре */
}


Использование данного интерфейса:
Код

/*файл MyGameFrame */
public class MyGameFrame extends JFrame implements GameConstants{/*пишем код игры где используем константы*/}


Польза: Мы не загромождаем класс игры объявлениями переменных. Никому не хочется листать огромные простыни класса, классы должны быть маленькими.
PM MAIL   Вверх
_Y_
Дата 30.12.2018, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



vvm28, интересно, надо подумать. Спасибо!


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1177 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.