powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
25 сообщений из 123, страница 2 из 5
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027191
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов.

Посмотри на java.util.AbstractQueue и подумай, как ЭТО можно сделать без интерфейсов.
Это так, что под руку попалось :)

Petro123 среди всех ответивших, у тебя самый худший ответ. Уж извини

Да не вопрос :)

Blazkowicz Потому что маркерные интерфейсы это костыль. Они появились до того как в Java добавили аннотации.

Не вижу проблемы в них.
Добавляя "implements Serializable" мы показываем, что объект относится к классу хранимых (сериализуемых).
Вот transient- это да, это мягко говоря костыль, а правильнее сказать можно только нецензурно - лютый этот самый :D
writeReplace/readResolve и serialVersionUID - это, кстати, тоже из серии "автора убивать надо было в детстве"...
То-то у Serializable автор "unascribed" :)

Кстати, в тему- решение в стиле JDK8 это даже не аннотация, а дефолтные методы типа store/load :D
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027201
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027217
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 - это ошибка проектирования.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027464
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер!
Смотрю ветка подросла. Параллельно в интернете нашел кучу примеров с интерфейсами, но все они то ли какие то неудачные, то ли я такой трудный.
Очень понравилось пояснение пользователя Blazkowicz с
Код: java
1.
2.
3.
4.
5.
6.
class ShapePrinter{   
  void print(IShape shape){
    System.out.println("Perimeter " + shape.calculatePerimeter());
    System.out.println("Square " + shape.calculateSquare());
 }
}


Проверил, действительно работает. И это классно. Классно тем, что код становится более изящным и "экономичным" что-ли.
Но всё таки, есть чувство, что тему интерфейсов я понял не до конца, и чтобы развеять свои сомнения, напишу (основываясь на предыдущих ответах) своё понимание темы. Если я буду заблуждаться или пороть чушь - просьба поправить, т.к. для меня это очень и очень важно!

Итак. Рассмотрим ситуацию к реальной жизни не имеющей отношения, но показательную (наверно) в плане понимания темы интерфейсов.

Есть группа разработчиков из Васи, Пети, Вовы и их руководителя (Team lead?)
Собирает он их вместе и говорит: ребята, появилась работа!

Заказчик ОАО "Рога и копыта" хочет от нас три класса "Окружность", "Прямоугольник" и "Треугольник". Ему надо чтобы фигуры рисовались методом рисования Draw и заливались методом заливки Fill.
К тому же, у заказчика есть собственный программист Серёжа, который до кучи сделает класс "Звезда" и так же будет использовать методы Draw и Fill.

А затем Teamlead говорит: Вася, Петя и Вова - мне всё равно как вы будете рисовать и заливать эти фигуры, сделайте только чтобы они правильно рисовались и заливались.
Ок.

Вася подумал и решил, что окружность он будет рисовать и заливать по точкам.
Петя решил, что прямоугольник он будет рисовать линиями, а заливать точками.
а Вова треугольник нарисует извращенским методом деления параллелограмма пополам.

Сказано - сделано.
Получив классы, заказчик попросил дорисовать "Звезду" у Серёжи.

Теперь, благодаря анонсированным "заголовкам" методов "Draw" и "Fill" в интерфейсе, "ОАО Рога и копыта" может рисовать и заливать фигурки двумя методами "Draw" и "Fill" абсолютно не зная особенностей рисования.

Всё ))))))

Если моя мысль верна - подвердите плз. или укажите на ошибки.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027470
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,

Вопрос то в чём?
По ООП без интерфейсов:
- БЛ и предметка - движёк-рендер
- Значит делаем абстрактный базовый класс с методом - Рисуй(canvas)
- Все остальные сидят на этом классе.
- При отрисовке класса Слой, который имеет кучу разных объектов они отрисовываются
все одной командой в цикле по объектам на слое:
объект.Draw(HDC или канва)
То что Draw вызвался у последнего наследника объекта "Звезда" и есть полиморфизм.
Ничего кастомизировать и приводить не надо.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027471
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
сделай полиморфизм на ООП, а потом на интерфейсах.
Это лучше чем про коня в вакууме спорить.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027538
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Приветствую.

Полиморфизм как раз в плане понимания достаточно прост: класс В наследует класс А чтобы поиметь доступный функционал класса А. Чтобы не изобретать велосипед с нуля а воспользоваться уже готовыми "наработками" класса А.

Плюс ко всему, переопределив в классе В (@Override) нужные методы класса А, реализуя их по своему, мы получаем нечто новое "по старым наработкам".

Интерфейс же - это нечто другое.
Как я понял - это некий "способ" договориться между разработчиками классов о том, с помощью каких методов будет осуществляться взаимодействие конечного потребителя с этими самыми классами. Некий "регламент" которого следует придерживаться, чтобы было понятно как пользоваться классом другим "потребителям".

Так?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027546
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
Не регламент, а контракт.
Это 1/100 твоего сабжа.
Поиском и перечитав топик найди остальные 99.
Удачи!
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027566
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERПолиморфизм как раз в плане понимания достаточно прост: класс В наследует класс А чтобы поиметь доступный функционал класса А. Чтобы не изобретать велосипед с нуля а воспользоваться уже готовыми "наработками" класса А.

Нет. Это "наследование". "Полиморфизм" про другое.

MAULERПлюс ко всему, переопределив в классе В (@Override) нужные методы класса А, реализуя их по своему, мы получаем нечто новое "по старым наработкам".

Это как раз, в большинстве случаев, плохой подход - читать Liskov Substitution Principle

MAULERИнтерфейс же - это нечто другое.
Как я понял - это некий "способ" договориться между разработчиками классов о том, с помощью каких методов будет осуществляться взаимодействие конечного потребителя с этими самыми классами. Некий "регламент" которого следует придерживаться, чтобы было понятно как пользоваться классом другим "потребителям".
Так?
Да, уже теплее. Но сценариев применения интерфейсов много, это всего лишь один из них.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028153
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Но сценариев применения интерфейсов много, это всего лишь один из них.
Вы мне один из сценариев показали ранее. Какие ещё есть?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028171
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
в данной теме 4 примера. Мало?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028235
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы пишите маленький скриптик, который сделали - запустили 5..10 раз и выбросили - то как правильно для таких штук интерфейсы ненужны. И проблема в том, что большинство примеров для обучения - это такие маленькие скриптики, и там просто не просматривается зачем надо туда тулить интерфейс.

Соответственно, чтобы понять смысл их использования - надо делать что-нибудь побольше.

Практический пример интерфейсов, с которыми сталкиваешься сначала - это пожалуй, коллекции.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028237
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERДобрый день.
В принципе с ООП знаком.

сорри. это плохо. Худшее, что может произойти с программистом - знакомство с ООП.

MAULERПонимаю что интерфейс содержит в себе как бы декларацию методов, а реализация выполняется внутри методов классов "вызывающих" данный интерфейс.

Нет . (!!!)
вызывающих = использующих.
Реализация не как правило не содержится в классах, "вызывающих" интерфейс.
Реализация содержится в тех классах, который знают о существовании интерфейса и готовы предоставить поведение, соответствующее спецификации интерфейса.
Интерфейс - это театральная маска женщины. Под ней актер-мужчина.

MAULERВопрос вот в чем: что мне мешает вообще не использовать интерфейсы? Ведь внешне, в плане вызова метода у объекта класса ничего не меняется?! Что мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его?

не в порядке логической логической связи и важности, а в порядке - как подумалось.

- желание получать ошибку времени компиляции до ошибки времени выполнения.
Вот есть у тебя код, который принимает на вход объект и просит рассказать любимую сказку - пример - собственную добротность объявить. Можно просто попросить объект - есть у тебя добротность - ловить ошибку времени выполнения. А можно потребовать, чтобы на вход поступали только такие, о которых заранее известно, что они способны о добротности рассказать, и если нет - то выбросить ошибку времени компиляции.

- желание иметь потенциально независимо компилируемые модули (компоненты) такие,
что замена реализующего интерфейс компонента не требует перекомпиляции использующих его компонент.

- желание иметь физически единственный экземпляр некоторого утилитарного алгоритма для разнотипных классов
(вроде поиска максимального, следующего или иного важного значения в наборе, производства характерного действия - сохранись втудить или расскажи любимую сказку)

MAULER Понимаю что есть наследование,

Это враки. Было бы понимание - не было бы вопросов про интерфейсы.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028238
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализация не как правило не содержится в классах, "вызывающих" интерфейс.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028285
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER Но сценариев применения интерфейсов много, это всего лишь один из них.

Ну, на вскидку: Java Proxy, Listener-ы (Observer pattern), маркеры уже обсудили выше, Single Method Interface для лямбд.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028291
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,


- желание иметь физически единственный экземпляр некоторого утилитарного алгоритма для разнотипных классов
... реализующих данный интерфейс?

что замена реализующего интерфейс компонента не требует перекомпиляции использующих его компонент. А если бы
компонент не реализовывал интерфейс, вернее совсем с интерфейсом не работал. А методы взаимодействия с конечным пользователем "торчали наружу" через public. В этом случае - потребовалась бы перекомпиляция?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028295
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Я заранее прошу прощения за (местами) не точную формулировку некоторых вещей. Я буду стараться выражаться правильно и придерживаться правильных "концепций". Но сейчас у меня задача понять суть. Понять причины, почему же в конкретном случае применяется интерфейс а не то или это...
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028327
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERP.S. Я заранее прошу прощения за (местами) не точную формулировку некоторых вещей. Я буду стараться выражаться правильно и придерживаться правильных "концепций". Но сейчас у меня задача понять суть. Понять причины, почему же в конкретном случае применяется интерфейс а не то или это...
Пишите больше кода, всегда абстрагируйте схожий код для переиспользования и понимание быстро вас настигнет.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028339
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyИнтерфейс - это театральная маска женщины. Под ней актер-мужчина.
круто)))) +5
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028342
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERВ этом случае - потребовалась бы перекомпиляция?
тут он преувеличил.
Маркетологи говорят, что не нужна. А на практике - глюки и т.д. Т.е. нужна.
Т.е. ты не цепляйся у него именно за эту фразу.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028344
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПишите больше кода
+1
Аффтар! Хорош теории. Давай код со звёздами, периметрами и площадями.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028355
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНу, на вскидку: Java Proxy,

Это хороший пример, хотя и странный.

BlazkowiczListener-ы (Observer pattern), Single Method Interface для лямбд.

Это два костыля, в связи с отсутствием функций, как самостоятельных объектов.
Т.е. грубо- ошибка проектирования языка.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028356
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominЭто два костыля, в связи с отсутствием функций, как самостоятельных объектов.
Т.е. грубо- ошибка проектирования языка.
Да-да. Афтару сразу лучше изучать Scala. Правда?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028375
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Аффтар! Хорош теории. Давай код со звёздами, периметрами и площадями. - дык код этот давно уже есть. Он работает. Проблем нет. Т.е. я понимаю код с использованием интерфейсов, но выгода от их применения, для меня, на данный момент, пока сомнительная.

Я благодарю всех кто мне давал ценные советы и ссылки. Наверное мне нужно тему интерфейсов прочувствовать на бОльшей практике. Если народ не против, я бы появлялся в этой теме и задавал бы вопросы возникающие по мере изучения. Возможно иногда глупые, но куда ж без них ))
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028395
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERПроблем нет. Т.е. я понимаю код с использованием интерфейсов, но выгода от их применения, для меня, на данный момент, пока сомнительная.
Примеров мы походу не дождемся?
...
Рейтинг: 0 / 0
25 сообщений из 123, страница 2 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]