|
|
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов. Посмотри на java.util.AbstractQueue и подумай, как ЭТО можно сделать без интерфейсов. Это так, что под руку попалось :) Petro123 среди всех ответивших, у тебя самый худший ответ. Уж извини Да не вопрос :) Blazkowicz Потому что маркерные интерфейсы это костыль. Они появились до того как в Java добавили аннотации. Не вижу проблемы в них. Добавляя "implements Serializable" мы показываем, что объект относится к классу хранимых (сериализуемых). Вот transient- это да, это мягко говоря костыль, а правильнее сказать можно только нецензурно - лютый этот самый :D writeReplace/readResolve и serialVersionUID - это, кстати, тоже из серии "автора убивать надо было в детстве"... То-то у Serializable автор "unascribed" :) Кстати, в тему- решение в стиле JDK8 это даже не аннотация, а дефолтные методы типа store/load :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 16:36 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey TominНе вижу проблемы в них. Они, возможно, не очевидны, но они есть http://stackoverflow.com/questions/25850328/marker-interfaces-in-java https://r.je/empty-interfaces-bad-practice.html http://stackoverflow.com/questions/3310936/interface-without-any-members-bad-practice ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 16:42 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlexey TominНе вижу проблемы в них. Они, возможно, не очевидны, но они есть http://stackoverflow.com/questions/25850328/marker-interfaces-in-java https://r.je/empty-interfaces-bad-practice.html http://stackoverflow.com/questions/3310936/interface-without-any-members-bad-practice В целом- да, скорее согласен :) Хотя в теории выглядит нормально, но все реализации в java - это ошибка проектирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 16:53 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Добрый вечер! Смотрю ветка подросла. Параллельно в интернете нашел кучу примеров с интерфейсами, но все они то ли какие то неудачные, то ли я такой трудный. Очень понравилось пояснение пользователя Blazkowicz с Код: java 1. 2. 3. 4. 5. 6. Проверил, действительно работает. И это классно. Классно тем, что код становится более изящным и "экономичным" что-ли. Но всё таки, есть чувство, что тему интерфейсов я понял не до конца, и чтобы развеять свои сомнения, напишу (основываясь на предыдущих ответах) своё понимание темы. Если я буду заблуждаться или пороть чушь - просьба поправить, т.к. для меня это очень и очень важно! Итак. Рассмотрим ситуацию к реальной жизни не имеющей отношения, но показательную (наверно) в плане понимания темы интерфейсов. Есть группа разработчиков из Васи, Пети, Вовы и их руководителя (Team lead?) Собирает он их вместе и говорит: ребята, появилась работа! Заказчик ОАО "Рога и копыта" хочет от нас три класса "Окружность", "Прямоугольник" и "Треугольник". Ему надо чтобы фигуры рисовались методом рисования Draw и заливались методом заливки Fill. К тому же, у заказчика есть собственный программист Серёжа, который до кучи сделает класс "Звезда" и так же будет использовать методы Draw и Fill. А затем Teamlead говорит: Вася, Петя и Вова - мне всё равно как вы будете рисовать и заливать эти фигуры, сделайте только чтобы они правильно рисовались и заливались. Ок. Вася подумал и решил, что окружность он будет рисовать и заливать по точкам. Петя решил, что прямоугольник он будет рисовать линиями, а заливать точками. а Вова треугольник нарисует извращенским методом деления параллелограмма пополам. Сказано - сделано. Получив классы, заказчик попросил дорисовать "Звезду" у Серёжи. Теперь, благодаря анонсированным "заголовкам" методов "Draw" и "Fill" в интерфейсе, "ОАО Рога и копыта" может рисовать и заливать фигурки двумя методами "Draw" и "Fill" абсолютно не зная особенностей рисования. Всё )))))) Если моя мысль верна - подвердите плз. или укажите на ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 21:28 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, Вопрос то в чём? По ООП без интерфейсов: - БЛ и предметка - движёк-рендер - Значит делаем абстрактный базовый класс с методом - Рисуй(canvas) - Все остальные сидят на этом классе. - При отрисовке класса Слой, который имеет кучу разных объектов они отрисовываются все одной командой в цикле по объектам на слое: объект.Draw(HDC или канва) То что Draw вызвался у последнего наследника объекта "Звезда" и есть полиморфизм. Ничего кастомизировать и приводить не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 21:46 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, сделай полиморфизм на ООП, а потом на интерфейсах. Это лучше чем про коня в вакууме спорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 21:48 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123, Приветствую. Полиморфизм как раз в плане понимания достаточно прост: класс В наследует класс А чтобы поиметь доступный функционал класса А. Чтобы не изобретать велосипед с нуля а воспользоваться уже готовыми "наработками" класса А. Плюс ко всему, переопределив в классе В (@Override) нужные методы класса А, реализуя их по своему, мы получаем нечто новое "по старым наработкам". Интерфейс же - это нечто другое. Как я понял - это некий "способ" договориться между разработчиками классов о том, с помощью каких методов будет осуществляться взаимодействие конечного потребителя с этими самыми классами. Некий "регламент" которого следует придерживаться, чтобы было понятно как пользоваться классом другим "потребителям". Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 07:03 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, Не регламент, а контракт. Это 1/100 твоего сабжа. Поиском и перечитав топик найди остальные 99. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 07:48 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERПолиморфизм как раз в плане понимания достаточно прост: класс В наследует класс А чтобы поиметь доступный функционал класса А. Чтобы не изобретать велосипед с нуля а воспользоваться уже готовыми "наработками" класса А. Нет. Это "наследование". "Полиморфизм" про другое. MAULERПлюс ко всему, переопределив в классе В (@Override) нужные методы класса А, реализуя их по своему, мы получаем нечто новое "по старым наработкам". Это как раз, в большинстве случаев, плохой подход - читать Liskov Substitution Principle MAULERИнтерфейс же - это нечто другое. Как я понял - это некий "способ" договориться между разработчиками классов о том, с помощью каких методов будет осуществляться взаимодействие конечного потребителя с этими самыми классами. Некий "регламент" которого следует придерживаться, чтобы было понятно как пользоваться классом другим "потребителям". Так? Да, уже теплее. Но сценариев применения интерфейсов много, это всего лишь один из них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 08:55 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Но сценариев применения интерфейсов много, это всего лишь один из них. Вы мне один из сценариев показали ранее. Какие ещё есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 20:14 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, в данной теме 4 примера. Мало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 21:17 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Если вы пишите маленький скриптик, который сделали - запустили 5..10 раз и выбросили - то как правильно для таких штук интерфейсы ненужны. И проблема в том, что большинство примеров для обучения - это такие маленькие скриптики, и там просто не просматривается зачем надо туда тулить интерфейс. Соответственно, чтобы понять смысл их использования - надо делать что-нибудь побольше. Практический пример интерфейсов, с которыми сталкиваешься сначала - это пожалуй, коллекции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 01:21 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERДобрый день. В принципе с ООП знаком. сорри. это плохо. Худшее, что может произойти с программистом - знакомство с ООП. MAULERПонимаю что интерфейс содержит в себе как бы декларацию методов, а реализация выполняется внутри методов классов "вызывающих" данный интерфейс. Нет . (!!!) вызывающих = использующих. Реализация не как правило не содержится в классах, "вызывающих" интерфейс. Реализация содержится в тех классах, который знают о существовании интерфейса и готовы предоставить поведение, соответствующее спецификации интерфейса. Интерфейс - это театральная маска женщины. Под ней актер-мужчина. MAULERВопрос вот в чем: что мне мешает вообще не использовать интерфейсы? Ведь внешне, в плане вызова метода у объекта класса ничего не меняется?! Что мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его? не в порядке логической логической связи и важности, а в порядке - как подумалось. - желание получать ошибку времени компиляции до ошибки времени выполнения. Вот есть у тебя код, который принимает на вход объект и просит рассказать любимую сказку - пример - собственную добротность объявить. Можно просто попросить объект - есть у тебя добротность - ловить ошибку времени выполнения. А можно потребовать, чтобы на вход поступали только такие, о которых заранее известно, что они способны о добротности рассказать, и если нет - то выбросить ошибку времени компиляции. - желание иметь потенциально независимо компилируемые модули (компоненты) такие, что замена реализующего интерфейс компонента не требует перекомпиляции использующих его компонент. - желание иметь физически единственный экземпляр некоторого утилитарного алгоритма для разнотипных классов (вроде поиска максимального, следующего или иного важного значения в наборе, производства характерного действия - сохранись втудить или расскажи любимую сказку) MAULER Понимаю что есть наследование, Это враки. Было бы понимание - не было бы вопросов про интерфейсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 01:52 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Реализация не как правило не содержится в классах, "вызывающих" интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 01:53 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER Но сценариев применения интерфейсов много, это всего лишь один из них. Ну, на вскидку: Java Proxy, Listener-ы (Observer pattern), маркеры уже обсудили выше, Single Method Interface для лямбд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 08:49 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
booby, - желание иметь физически единственный экземпляр некоторого утилитарного алгоритма для разнотипных классов ... реализующих данный интерфейс? что замена реализующего интерфейс компонента не требует перекомпиляции использующих его компонент. А если бы компонент не реализовывал интерфейс, вернее совсем с интерфейсом не работал. А методы взаимодействия с конечным пользователем "торчали наружу" через public. В этом случае - потребовалась бы перекомпиляция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 08:55 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
P.S. Я заранее прошу прощения за (местами) не точную формулировку некоторых вещей. Я буду стараться выражаться правильно и придерживаться правильных "концепций". Но сейчас у меня задача понять суть. Понять причины, почему же в конкретном случае применяется интерфейс а не то или это... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 09:02 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERP.S. Я заранее прошу прощения за (местами) не точную формулировку некоторых вещей. Я буду стараться выражаться правильно и придерживаться правильных "концепций". Но сейчас у меня задача понять суть. Понять причины, почему же в конкретном случае применяется интерфейс а не то или это... Пишите больше кода, всегда абстрагируйте схожий код для переиспользования и понимание быстро вас настигнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 09:46 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
boobyИнтерфейс - это театральная маска женщины. Под ней актер-мужчина. круто)))) +5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 09:55 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERВ этом случае - потребовалась бы перекомпиляция? тут он преувеличил. Маркетологи говорят, что не нужна. А на практике - глюки и т.д. Т.е. нужна. Т.е. ты не цепляйся у него именно за эту фразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 09:58 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПишите больше кода +1 Аффтар! Хорош теории. Давай код со звёздами, периметрами и площадями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 09:59 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНу, на вскидку: Java Proxy, Это хороший пример, хотя и странный. BlazkowiczListener-ы (Observer pattern), Single Method Interface для лямбд. Это два костыля, в связи с отсутствием функций, как самостоятельных объектов. Т.е. грубо- ошибка проектирования языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 10:09 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey TominЭто два костыля, в связи с отсутствием функций, как самостоятельных объектов. Т.е. грубо- ошибка проектирования языка. Да-да. Афтару сразу лучше изучать Scala. Правда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 10:11 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123, Аффтар! Хорош теории. Давай код со звёздами, периметрами и площадями. - дык код этот давно уже есть. Он работает. Проблем нет. Т.е. я понимаю код с использованием интерфейсов, но выгода от их применения, для меня, на данный момент, пока сомнительная. Я благодарю всех кто мне давал ценные советы и ссылки. Наверное мне нужно тему интерфейсов прочувствовать на бОльшей практике. Если народ не против, я бы появлялся в этой теме и задавал бы вопросы возникающие по мере изучения. Возможно иногда глупые, но куда ж без них )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 10:36 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERПроблем нет. Т.е. я понимаю код с использованием интерфейсов, но выгода от их применения, для меня, на данный момент, пока сомнительная. Примеров мы походу не дождемся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 10:57 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39028235&tid=2125025]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
189ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 496ms |

| 0 / 0 |
