|
|
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Добрый день. В принципе с ООП знаком. Понимаю что есть наследование, инкапсуляция и полиморфизм. Столкнулся с такой новой для меня штукой как интерфейсы . Нарыл кучу примеров и пояснений, но до сих пор в голове не могу сформировать устойчивого и ясного понимания. Понимаю что интерфейс содержит в себе как бы декларацию методов, а реализация выполняется внутри методов классов "вызывающих" данный интерфейс. Причем внутри класса (использующий интерфейс) через @Override происходит переопределение метода с его реализацией (попросту пишется собственно код метода). Вопрос вот в чем: что мне мешает вообще не использовать интерфейсы? Ведь внешне, в плане вызова метода у объекта класса ничего не меняется?! Что мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 12:37 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Интерфейсы здорово помогают, если тебе необходимо обеспечить унифицированную обработку объектов, не имеющих общего предка (в котором можно было бы описать соответствующий метод). Искусственный пример: есть два дерева классов - мебель и ядра ОС. Они никак не пересекаются и вообще совершенно независимы друг от друга. Но тебе надо собирать объекты этих классов. Вводится интерфейс Код: java 1. , в котором определяется метод Код: java 1. Теперь, имея на руках, например, Код: java 1. можно собрать все находящиеся в нем объекты не зная по факту с какими именно объектами ты имеешь дело. Это очень вкратце и поверхностно. Пусть меня поправят, если что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 12:50 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERПонимаю что интерфейс содержит в себе как бы декларацию методов, а реализация выполняется внутри методов классов "вызывающих" данный интерфейс. Да, так было до тех пор пока в Java 8 не добавили методы по-умолчанию. MAULERПричем внутри класса (использующий интерфейс) через @Override происходит переопределение метода с его реализацией (попросту пишется собственно код метода). @Override это аннотация помощник компилятору. Если вдруг поменяется только метод интерфейса, но не метод-реализация, то по этой аннотации компилятор может определить что метод класса больше не является переопределением и сгенерировать ошибку. MAULERВопрос вот в чем: что мне мешает вообще не использовать интерфейсы? Отсутствие множественного наследования. MAULERВедь внешне, в плане вызова метода у объекта класса ничего не меняется?! А если два разных класса реализуют один интерфейс? А если их не два, а много? MAULERЧто мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его? Необходимость в полиморфизме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 12:55 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, А если два разных класса реализуют один интерфейс? А если их не два, а много? Это я как раз понимаю. К примеру объект ob1 класса Rectangle (реализующий интерфейс) пользуется методами calculatePerimeter(); и calculateSquare(); Код: java 1. 2. а объект ob2 класса Circle (также реализ. интерфейс) пользуется методами с теми же названиями но уже другой "начинкой" (т.к. площадь и периметр у окружности считаются по другому) Код: java 1. 2. В итоге выгода от использования интерфейса у меня какая? Да, объекты классов разные а методы называются всё также одинаково. Это наверное удобно, но причем здесь интерфейс? Даже если классов не два а много, ведь все равно реализация методов она будет своя внутри каждого класса. В чем бонус то? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:06 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERВ чем бонус то? )) В полиморфизме: Код: java 1. 2. 3. 4. 5. 6. Без интерфейса нужна копипаста: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:38 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERBlazkowicz, В итоге выгода от использования интерфейса у меня какая? Да, объекты классов разные а методы называются всё также одинаково. Это наверное удобно, но причем здесь интерфейс? Даже если классов не два а много, ведь все равно реализация методов она будет своя внутри каждого класса. В чем бонус то? )) Бонус в интерфейсах! ;-) Грубо говоря пусть будет метод который считает по площади и периметру Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Т.о. мы можем передавать в метод calc что Rectangle, что Circle посчитает. По идее это можно сделать ч/з наследование... Но т.к. в Java явно запрещено множественное наследование, то сделать что-то через интерфейс проще, чем продумывать иерархию наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:42 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, Grunch тебе привёл пример. Иногда стройная модель ООП не работает. Приходится подгонять сбоку-припёку интерфейсы. Не используй пока не понадобятся. Т.е. например, в примере выше надо использовать шаблон Посетитель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:43 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, если раньше программировал на С++, то должен был заметить, что "Java не разрешает множественного наследования, но интерфейсы предоставляют альтернативу. В Java класс может наследовать только один класс, но может реализовывать много интерфейсов. Таким образом объекты могут иметь несколько типов: тип их собственного класса и типы всех реализуемых интерфейсов. " http://easy-code.ru/lesson/java-interfaces ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:47 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
ещё одна аллегория. Напр. есть куча разных писем в оутлуке (объекты) Интрефейс сродни пометкой краской данных писем. Чтобы сгруппировать по признаку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:48 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Интрефейс сродни пометкой краской данных писем. Чтобы сгруппировать по признаку. Неверно. Наследование (равно как и реализация интерфейса там, где нет множественного наследования) - это абстракция "является". Не более. Всякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то - приводит к проблемам. Интерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования (в отличии от интерфейсов COM). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:08 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey TominВсякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то я не понял твою мысль). "того что не является чем-то" авторИнтерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло. Я страюсь работать без интерфейсов. Пока не припрёт)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:21 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло. Я страюсь работать без интерфейсов. Пока не припрёт)). Про "Зло" - это всё предрассудки, а идея интерфейсов настолько популярна в библиотеках Java, что должно припирать часто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:30 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Alexey TominВсякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то я не понял твою мысль). "того что не является чем-то" Группировка выделением интерфейса предполагает введение кучи "маркерных" интерфейсов, не имеющих отношения к абстракциям. Petro123авторИнтерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло. Я страюсь работать без интерфейсов. Пока не припрёт)). Ты настолько далёк от общепризнанных в java вещей, что я бы советовал всем слушать тебя и делать наоборот :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:35 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
andr_andreyПро "Зло" - это всё предрассудки, а идея интерфейсов настолько популярна в библиотеках Java, что должно припирать часто. У меня память хорошая - поиск на слово "множественное". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:42 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey TominТы настолько далёк от общепризнанных в java вещей, что я бы советовал всем слушать тебя и делать наоборот :D И эти люди мешают ковыряться в носу)). Alexey TominНеверно. Наследование (равно как и реализация интерфейса там, где нет множественного наследования) - это абстракция "является". Не более. Всякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то - приводит к проблемам. русский язык знаком? Тебя просили просто и доходчиво)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:45 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов. Основное назначение интерфейсов - не множественное наследование, а совмещение несовместимого. Чтобы использовать метод с одной и той же сигнатурой у не совместимых между собой объектов. Интересно, здесь хоть один гуру приведет пример задачи, не и имеющей решения без использования интересов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:46 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, среди всех ответивших, у тебя самый худший ответ. Уж извини. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:48 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13Основное назначение интерфейсов не будь максималистом.... Есть ещё тестирование....подмена поведения...сериализация... и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:49 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13приведет пример задачи вот сначала поиск проведи. А потом задачи ставь). Эта тема изжёвана 100 раз. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:52 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Есть ещё тестирование....подмена поведения...сериализация... и т.д. Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:56 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13Petro123Есть ещё тестирование....подмена поведения...сериализация... и т.д. Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то.. Начинается всё программирование от печки (от Модели). А не от обслуги (сериализации). Сама модель и моделирование ООП не менялось вот уже ....десятилетий. Всё остальное приходящее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:04 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13, про сериализацию Grunch сказал. Только другим примером (обход объектов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:05 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов. Основное назначение интерфейсов - не множественное наследование, а совмещение несовместимого. Чтобы использовать метод с одной и той же сигнатурой у не совместимых между собой объектов. Интересно, здесь хоть один гуру приведет пример задачи, не и имеющей решения без использования интересов? Ввести базовый абстрактный класс можно, только прятать его придётся вверху иерархии, а интерфейсы удобны тем, что их можно ввести много (удобно дробить по библиотекам) и на любом уровне иерархии. По сути, множественное наследование решало бы проблему в рамках абстрактных классов, но его нет в Java - имеем интерфейсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:37 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
andr_andreyно его нет в Java - имеем интерфейсы. Справедливости ради, его и в delphi нет. Но там проще - там ОРМ нет\не нужен. Поэтому и надобности нет)). Везде всё по разному). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:43 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то.. Потому что маркерные интерфейсы это костыль. Они появились до того как в Java добавили аннотации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:55 |
|
||
|
Изучаю 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 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlexey TominЭто два костыля, в связи с отсутствием функций, как самостоятельных объектов. Т.е. грубо- ошибка проектирования языка. Да-да. Афтару сразу лучше изучать Scala. Правда? Нет. Просто эти примеры- не примеры нужности интерфейсов в ООП, а примеры костылей в java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 11:04 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Примеров мы походу не дождемся? Мне запостить полностью пример проекта с использованием интерфейса? Т.е. выложить тексты java-модулей что я навоял? Я Вас правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 11:15 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczMAULERПроблем нет. Т.е. я понимаю код с использованием интерфейсов, но выгода от их применения, для меня, на данный момент, пока сомнительная. Примеров мы походу не дождемся? у явы везде интерфейсы, кодить начнешь, сам столкнешься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 11:18 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, кокой непонятливый). - если сказал, что преимуществ у интерфесов нет, то нужен проект с кодом А и Б, где это видно. Звёзды с интерфейсами... и без. Это логично. А если нет логики, нефиг программировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 11:29 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
bochkovBlazkowiczПримеров мы походу не дождемся? у явы везде интерфейсы, кодить начнешь, сам столкнешься Спасибо, а то я только начинаю кодить, ещё не разобрался где и как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 11:30 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123, автор- если сказал, что преимуществ у интерфесов нет Неправда :) Я такого не говорил :) Я сказал, что на данный момент, преимущества использования интерфейсов для меня пока сомнительны :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 11:37 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, OFF )) в части что нет логики правда) - код то всё одно нужен))) Сомневаюсь я, жениться или не жениться? А если жениться, то куда девать нынешнюю жену? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 11:44 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczbochkovпропущено... у явы везде интерфейсы, кодить начнешь, сам столкнешься Спасибо, а то я только начинаю кодить, ещё не разобрался где и как. верный признак того, что наступило время применить интерфейс или абстрактный класс, когда начинаешь код копипастить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 11:45 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
bochkovверный признак того, что наступило время применить интерфейс или абстрактный класс, когда начинаешь код копипастить Хорошо. Буду знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 11:49 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERПонять причины, почему же в конкретном случае применяется интерфейс а не то или это... Единственной причиной, для которой в Java нужны интерфейсы это, если я чего не забыл, необходимость сделать так, чтобы пару классов A и C можно было использовать как нечто одно и то же и пару классов B и C можно было использовать как одно и то же. При том, что пару A и B использовать как одно и то же не получится. (Лямды оставим за скобками). Другими словами интерфейс это декларация некой части сущности, которая может быть общей у разных классов в обход линий наследования. На сколько это удобно отдельный вопрос. Можно ли обойтись без них - да, как впрочем и без ООП в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 12:05 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERbooby, - желание иметь физически единственный экземпляр некоторого утилитарного алгоритма для разнотипных классов ... реализующих данный интерфейс? Нет . Реализующих - сколько угодно. Использующих - один единственный, только в одном экземпляре на всю систему. Вот есть разнотипные коллекции - коллекции зайчиков, коллекции мишек, коллекции винтажных ночных горшков. Их много - коллекций разных типов. Сами по себе не сравнимы - горшки - это не мишки и не зайчики. Горшки - это горшки. И код для них можно писать специфически разный. Один будет понимать, что коллекцию зайчиков можно сортировать по длине их ушей, другой код будет понимать, что горшки можно сортировать по месту происхождения глины, из которой они сделаны. Потребуется посортировать новопридуманную коллекцию по не известному заранее признаку - напишем специфический код тогда, когда проЯснеет - чо там за коллекция и какова специфика ее ее элементов. Вариантов кода для сортировки будет столько, сколько типов коллекций есть в системе. Это "нормальный" вариант развития событий. Представим теперь чудака, захотевшего иметь один, единственный вариант кода, умеющий сортировать коллекций, составленные из экземпляров произвольных, наперед неизвестных (и даже еще не написанных) классов. Такой чудак предъявит требование к писателям классов горшков. Пусть все вами написанные классы - будь то мишки, будь то зайки - реализуют интерфейс "БытьСравнимым" Тогда, сколько бы стотышьпятьсот классов вы не написали, я сумею сравнить элементы коллекции единственным, универсальным экземпляром утилитарного кода, а умея сравнивать, сумею и и отсортировать произвольную коллекцию единственным, уникальным, общим для всех вариантом кода. MAULER что замена реализующего интерфейс компонента не требует перекомпиляции использующих его компонент. А если бы компонент не реализовывал интерфейс, вернее совсем с интерфейсом не работал. Это лядство какое-то, а не терминология. "Реализовывать" - предоставлять другому для использования. "Работать" - собственно использовать переменные типа известного интерфейса. Реализующий интерфейс код и одновременно работающий с ним код - это электро-вилка и розетка. Вот быть вилкой, вернее розеткой (вилко-розеткой) - несколько шизофренично, глубоко нетрадиционно. Вряд ли найдутся ремесленники, понимающие толк в таком креативе. НО. Вилка предоставляет интерфейс вилки. И может использовать интерфейс розетки. Розетка предоставляет интерфейс розетки и может использовать интерфейс вилки. MAULER А методы взаимодействия с конечным пользователем "торчали наружу" через public. В этом случае - потребовалась бы перекомпиляция? Интерфейс в любом случае public. По крайней мере по отношению к использующему коду. Вот есть процедура сортировки специфически ночных горшков. Если писатель класса горшков меняет и реализацию и спецификацию метода сравнения сравнения, добавляя к параметру МестоПроисхожденияГлины параметр ЗаводПроизводитель или НомерСмены, то нет шансов после такого изменения не перекомпилировать и код сортировки вместе с изменениями в классе горшков. Использование интерфейсов предполагает, что их спецификация стабильна, заявлена навечно и представляет собой элемент такой архитектуры, который, с одной стороны нельзя проигнорировать, а с другой стороны, не требует изменений в использующей стороне (включая пререкомпиляцию в нормальных средах - ну, может быть к java относится - тут я малек не в курсах...). Не нужно менять вилку после замены проводки в стене (кода, подводящего электричество к месту использования), если розетка осталась неизменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 12:15 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
booby, Вы РЕАЛЬНО доходчиво объясняете! Спасибо :) За терминологию сильно не пинайте :) Я пока новичок в этих делах :) Но я наберусь наглости и спрошу, точнее попробую описать Ваш пример несколько по другому: Вот есть коллекции: зайчиков, мишек, винтажных горшков и код для каждой коллекции (как Вы заметили) специфически разный. Ещё есть вероятность, что появится новомодная коллекция дамских сумочек и код сортировки для неё пока неизвестен. И вот наш "чудак", предъявил требование к писателям горшков, мишек, зайчиков и сумочек в виде 4-х "бумажек" на которых карандашом написано название методов, которыми он будет пользоваться в своей работе. Писатели соответствующих классов, получили соответствующую "бумажку", и в своих классах написали public-методы для нашего чудака. Не привлекая тему интерфейсов. Со стороны чудака что то поменяется? Ведь он как вызывал методы "по бумажке" так и продолжает вызывать их. Такое В ПРИНЦИПЕ возможно? Но, наверное (наверное!) писатели горшков могут смухлевать, и не написать метод "на бумажке". Или написать, но оставить его пустым. Тогда наш чудак поимеет проблем, т.к. для экземпляра горшков такого метода существовать не будет. А если бы использовались интерфейсы, то он максимум получил бы "пустышку" не вываливаясь из программы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 12:59 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERПисатели соответствующих классов, получили соответствующую "бумажку", и в своих классах написали public-методы делают ещё хитрее финт ушами - callback соединение и подписку. А реализацию кода сортировки вообще делай сам у себя. Тут тебе и интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 13:06 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, само слово Коллекция просто по ООП не делается. По определению. Даже без зайчиков и Мишек). Ну, и коллекции тоже не все сразу используют)) в стадии программиста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 13:08 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERПисатели соответствующих классов, получили соответствующую "бумажку", и в своих классах написали public-методы для нашего чудака. Не привлекая тему интерфейсов. Со стороны чудака что то поменяется? Ведь он как вызывал методы "по бумажке" так и продолжает вызывать их. Такое В ПРИНЦИПЕ возможно? Это называется утиная типизация ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 14:09 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 15:11 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1в этом видео из двух частей ты не понял. Аффтар топика (не я), просил рассказать Доступно и Просто. Без всяких ссылок на статьи\видео\курсы\толмуты. Тут форум программистов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 15:47 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, авторТакое В ПРИНЦИПЕ возможно? Да. Так делают (пусть это будет утиная типизация в рамках данного разговора). А в некоторых средах (языках программирования) именно что-то такое либо рекомендуемый, либо вообще единственный способ реализовать идею интерфейса. Я думаю, что во внимание следует принимать как минимум следующие два обстоятельства: а) в какой момент желательно получение ошибки - в момент компиляции кода, или в момент времени выполнения кода. Закладка на явно объявленные интерфейсы определенно позволят провести кодирование так, чтобы ошибки вроде отсутствия подходящей реализации выявлялись на этапе компиляции. Наивная реализация этой идеи в java однозначно ведет к ошибке времени выполнения. Не наивная может иметь смысл, но не будет бесплатной ни в смысле порождения (нескольких) дополнительных оберток для поддержки не наивности, ни в смысле накладных расходов на вызовы сквозь полученные конструкции. б) Так или иначе - но раз это другой способ реализации той же идеи - один использующий утилитарный код для классов разного происхождения, то в общем это тоже сорт интерфейса, или способ реализации идеи интерфейса. Идея интерфейса важнее синтаксического конструкта, названного тем же именем. Идея интерфейса в архитектурном плане, с моей точки зрения, вообще один из самых краеугольных камней программирования. Не владея ею свободно, вы вообще не понимаете, что вы делаете как программист. Если продолжать строительно-архитектурные сравнения, то получится как-то так: 2 подхода к архитектуре. 1) Пусть дана планировка дома. Размеры помещений и их техническое оборудование заранее известны. Это подход со статически заявленными интерфейсами. Кухня может быть только в этом помещении, потому что в него подведена вода и сделана вытяжка. А спальню разумно организовать именно в этом, потому что оно самое тихое и дорога именно из этой комнаты в туалет не загорожена несущим столбом, вокруг которого с делан коридор. Использование статических интерфейсов производится архитекторами и инженерами, заранее планирующими и продумывающими строительство дома заданных характеристик. 2) вот двор только построенного жилого квартала. Как проложить асфальтовые дорожки - справа налево или сверху вниз? Ответ утиной типизации - а никак не проложить. Подождать, пока люди тропинки натопчут, посмотреть - что получилось. А там, может быть и асфальт накатать, если руки дойдут и деньги найдутся. Т. е. - в ситуации непредсказуемого взаимодействия или когда электропроводка специально сделана внешней, чтобы при случае ее можно использовать кроме доставки электричества в телевизор еще и для сушки стиранного белья, так, что можно крючьями зацепиться за нее и пробросить металлические рейки через все комнату для увеличения площади сушки - утиная типизация наше все. То есть, когда дом уже есть, а для чего он строился - еще не выяснилось. Так или иначе - сами интерфейсы - это способ разделения мира на набор не пересекающихся областей, способных функционировать автономно с указанием способа взаимодействия между областями. В некотором смысле, интерфейсы - это вообще единственный результат программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 17:00 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
boobyИдея интерфейса в архитектурном плане, с моей точки зрения, вообще один из самых краеугольных камней программирования. Не владея ею свободно, вы вообще не понимаете, что вы делаете как программист. эк вас торкнуло)). Это перебор. Свободно владеть, это значит знать где надо и не надо). Двайте вы перечислите недостатки interface. А то вы разочаруете...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 17:14 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
boobyТак или иначе - сами интерфейсы - это способ разделения мира на набор не пересекающихся областей, способных функционировать автономно с указанием способа взаимодействия между областями. В некотором смысле, интерфейсы - это вообще единственный результат программирования. антипаттерн - лосутное одеяло (если переборщить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 17:16 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
boobyВ некотором смысле, интерфейсы - это вообще единственный результат программирования. Но это уже совсем другие интерфейсы и к ООП они отношения не имеют. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 17:54 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, авторНо это уже совсем другие интерфейсы и к ООП они отношения не имеют. :) это завсегда пожалуйста. само ООП к программированию имеет весьма специфическое отношение. ясно одно - интерфейсы и не виновны в том и сильно им до лампады, что по их поводу представляет себе ООП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 18:42 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123... эк вас торкнуло)). Это перебор. Свободно владеть, это значит знать где надо и не надо). У средневековых ремесленных цехов были правила посвящения кандидата в звание мастера. Кандидат должен был публично представить в специально отведенном месте и в специальное время на суд мастеровой ремесленной общественности, нечто, по отношению к чему общественность должна была вынести вердикт - является ли представленное шедевром . Решение о признании кандидата мастером с выдачей соответствующих бумаг и свидетельств осуществлялось на основании признания явленного шедевром . В связи с вышеизложенным докладываю, что не представляется интересным - как Вы сами себя называете ( даже если Вы называете себя программистом). Интересным представляется вот что - на каком основании Вы ожидаете, что другой программист признает Вас за такового, если Вы даже не претендуете не только на представление шедевра, но и даже на понимание того, где надо применять ту или иную специфическую технику, а где не надо? Petro123Двайте вы перечислите недостатки interface. А то вы разочаруете...) Это вопрос не столько о том, зачем пишутся программы, сколько для кого. В качестве целевых кандидатов можно рассмотреть а) предполагаемых конечных пользователей, б) компьютер на котором она должна выполняться и в) других программистов, которым придется поддерживать и развивать явленный "шедевр". а) Конечным пользователям до интерфейсов - примерно как интерфейсам до ООП - т.е. - до лампады. Если электричество подводится к лампочке без использования интерфейса выключателя - то это совершенно замечательно, до тех пор, пока электричество бесплатно. Как только возникает вопрос цены электричества - ответ прост - хоть и нельзя догадаться об отсутствии интерфейса выключателя, но доступно понять, что программа негодна, т.к. стала слишком дорога, и теперь правильно пользоваться спичками и свечками, а не вашими программами, жгущими в лампочках дорогое электричество. б) Для компьютеров интерфейсы зло безотносительно к java. Даже если правда, что в java использование интерфейсов стоит непропорционально и неприлично дороже, чем в "других языках" - это не шибко принципиально с точки зрения компьютера. Для компьютера концепция интерфейса в любом случае означает сознательное замедление работы программы, что обессмысливает саму идею с этой точки зрения со старта. в) Поэтому единственным получателем возможного профита от интерфейсов является другой программист , которому будет поручено сопровождать и развивать систему, построенному на концепции использования интерфейсов. Здесь мы возвращаемся к первой фазе марлезонского балета: Попытка рассуждать о достоинствах и недостатках интерфейсов находится за рамками добра и зла, если программист, с которым проводится такое обсуждение даже не догадывается - где их следует применять, а где нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 23:19 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
booby, нуууу. Тему можно закрывать). Ничего интересного не будет. Как говорит Жванецкий "вы пересаливаете...". Ода про хвалебные интерфейсы была, а вот столько букв ни о чём в последнем посте...... Ни или типа ...не буду тут бисером метать... А театр одного актёра неинтересен. Будем ждать кода. Занавес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 00:32 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
booby, попытка посчитать "профит" от выбора интерфейс\абстрактный класс\наследование\композиция никак не получится. Особенно в литературном стиле. Хотя занимательно, на первые 5 минут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 00:48 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123booby, попытка посчитать "профит" от выбора интерфейс\абстрактный класс\наследование\композиция никак не получится. Особенно в литературном стиле. Хотя занимательно, на первые 5 минут. Интерфейс работает на несколько тактов медленнее. Абстрактный класс - это класс. Интерфейс - это контракт (св-во объекта). за подробностями 5 доке https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.invokevirtual https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.invokeinterface итд :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 09:42 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1Интерфейс работает на несколько тактов медленнее. Абстрактный класс - это класс. Интерфейс - это контракт (св-во объекта). Ну вот, уже лучше). - медленность, это последний критерий для рассмотрения. Первый критерий - стройная модель. Т.е. строя взаимосвязи класса вы должна вначале пробовать наследование и композицию, и только потом интерфейсы. Т.е. в примере выше (на каждом собеседовании) сначала делают абстрактный класс Фигура. А потом на нём наследников Квадрат, Звезда и т.д. Первый класс, вторая четверть ООП. Тема - зачем нужны интерфейсы? - Нужны, но в последнюю очередь)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 09:49 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1, Аффтар свой пример про звёзды сделал на интерфейсах. Я этот код пока не видел. По постановке задачи, они там не нужны. Либо он что-то умолчал. Удачи аффтару! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 09:52 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123, авторпопытка посчитать "профит" от выбора интерфейс\абстрактный класс\наследование\композиция никак не получится. Не могу удержаться от совета: Вы все-таки давайте себе передышку - не все слова говорите, которые слышали, а пробуйте выбирать подходящие по месту. интерфейс\абстрактный класс\наследование\композиция композиция может рассматриваться как способ реализации наследования, при этом в среднем наиболее дорогой по сравнению наследованием интерфейсов или синтаксическим exteds - вычеркиваем как лишнее слово, не несущее дополнительной информации по отношению к наследованию и лишь в исключительных случаях полезное, там где вообще речь может зайти об идее реализации фиксирующего поведение интерфейса, при качественно лежащее в той же корзине, что и абстрактный класс. интерфейс\абстрактный класс\наследование из этих трех надо выбросить либо наследование либо оба разом интерфейс/абстрактный класс, т.к. технически в java оба они представляют разные виды наследования - одно наследования поведения, другое - наследование реализации. Вычеркиваем наследование как слишком общее. остается интерфейс\абстрактный класс Заход с интерфейсами не требует единственности дерева наследования - профит в гибкости реализации и внесения изменений на длинной дистанции развития системы, которая с самого начала представляется как набор подсистем, от которых не требуется жесткой единственной деревянной связности. Заход с абстрактными классами в java скорее всего будет работать чуть быстрее - профит в критических по производительности случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 12:28 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123, авторТ.е. строя взаимосвязи класса вы должна вначале пробовать наследование и композицию, и только потом интерфейсы. Вот недаром есть мнение, что если вхождение в программирование началось с изучения ООП, то это неисправимая родовая травма навечно. Программы пишут не для того, чтобы в них были звезды, круги и квадраты, а для того, чтобы с этими кругами и квадратами что-то происходило. Заход, который начался со звезд - это вообще не про программирование. Т.е. строя взаимосвязи класса ... - Т.е., планируя алгоритм работы программы вы должна вначале пробовать наследование и композицию - вы должны понять, объекты с каким поведением вам потребуются, и, как Адам давал имена животным и птицам, дать имена найденным вами объектам с необходимым поведением. Эти имена будут именами необходимых вам логических интерфейсов. Получив набор этих имен, далее вы решаете техническую, синтаксическую задачу выбора способа реализации найденных интерфейсов - с помощью interface или с помощью extends. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 12:40 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
booby, Нда....) Ты ты упорно пытаешься подвести базу под своё незнание или нелюбовь ООП. Это было видно в первой фразе Сергею Арсеньеву про то что Интерфейсу плевать на ООП и то что Оно об нём думает. - ты пытаешься бороться с ветряными мельницами вычеркивая слова из Вики)) ... Диаграмма классов https://ru.wikipedia.org/wiki/Диаграмма_классов Уж не заню по какой методологии вы разрабатывате ИС, но диаграмма классов строится безотносительно ЯП. И даже возможно не вами и не вами. Поэтому именно с \абстрактный класс\наследование\композиция мы и начнём стоить. Никак не с _вторичной_ семантической конструкции в ЯП - Interface авторот которых не требуется жесткой единственной деревянной связности. ==== конечно! Никто не требует ВСЮ модель делать на вертикали наследования. Даже в БД есть денормализация против таких фанатиков с идеей "интерфейсы-наше всё!" Или 3-я степень норм-ии наше всё! Фанатики, что с них взять)). авторВот недаром есть мнение, что если вхождение в программирование началось с изучения ООП, то это неисправимая родовая травма навечно. == в первой половине треда я вас и интерфейсы поддерживал. Пока не понял, что вы фанатик ОДНОГО решения. Я лично люблю оба). Только проектирую классы не с Interface. См. тред выше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 13:21 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
boobyПрограммы пишут не для того, чтобы в них были звезды, круги и квадраты, а для того, чтобы с этими кругами и квадратами что-то происходило. однобоко и узко. Открой деление на слои - Модель\Сервисный слой или иди в функциональное программирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 13:23 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
boobyТ.е. строя взаимосвязи класса ... - Т.е., планируя алгоритм работы программы вы должна вначале пробовать наследование и композицию - вы должны понять, объекты с каким поведением вам потребуются, смешалось всё, функциональные требовани, ТЗ, .... Огорчу - всё уже разложено по полочкам и определено: Когда этап поведения, когда диаграмма классов и когда всё остальное. Правда не знаю как вы там живёте, по RUP\водопаду или экстиму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 13:26 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
boobyи, как Адам давал имена животным и птицам, дать имена найденным вами объектам с необходимым поведением. Эти имена будут именами необходимых вам логических интерфейсов. Получив набор этих имен, далее вы решаете техническую, синтаксическую задачу выбора способа реализации найденных интерфейсов - с помощью interface или с помощью extends. это 5 ))))) Запишу в новую методологию проектирования ИС. Красиво ты пишешь))). Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 13:30 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
booby- с помощью interface или с помощью extends. хорош теории из Библии программиста, ждём код аффтара. Сегодня пятница! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 13:33 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1, возвращаю тоже тебе полезную ссылку на Различия в использовании интерфейсов и абстрактных классов http://www.quizful.net/post/razlichie_v_primenenii_interfeysov_i_abstraktnih_klassov ты можешь сказать, что ты в курсе. Ну тогда мы оба с тобой в курсе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 13:43 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123, авторДаже в БД есть денормализация против таких фанатиков с идеей "интерфейсы-наше всё!" Или 3-я степень норм-ии наше всё! Ты все-таки продолжаешь произносить все слова, которые слышал. Это смело, надо признать. В качестве профессионального приема это используется клоунами при составлении реприз, специально для того, чтобы слова вырванные из своего обычного контекста слова стали звучать смешно. Petro123boobyи, как Адам давал имена животным и птицам, дать имена найденным вами объектам с необходимым поведением. ... это 5 ))))) Запишу в новую методологию проектирования ИС. Красиво ты пишешь))). Удачи! Это не я придумал, это у программистов в библии так написано. автор... Ну тогда мы оба с тобой в курсе Прошу прощения, есть подозрение, что ты ошибаешься. Больше похоже на то, что один из нас не в курсе , т.к. заявляется поклонником всех подходов разом, не умея выбрать из слышанных слов подходящее по месту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 13:52 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
boobyПрошу прощения, есть подозрение, что ты ошибаешься. Больше похоже на то, что один из нас не в курсе , т.к. заявляется поклонником всех подходов разом, не умея выбрать из слышанных слов подходящее по месту. я же тебе говорю. У тебя мания преследования). После твоих 2-х литературных спитчей о славных интерфейсах, я тебя спросил: Фанат? Или в курсе про недостатки? Тут тебя понесло. Отсюда диагноз. Тут люди, "опера, котоые на земле работают") так много как ты не пишут. И про ООП не плюются . Ты ещё не знаешь, что MS сказало про свои (твои) интерфейсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 14:07 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Коллеги, не нужно ссориться! :) Своё понимание интерфейсов я для себя "выработал". Верное оно или нет - покажет практика. "Звёзды", наверное, и правда не очень удачный пример, но я "у подножья горы" Так что уж простите мне некоторые "казусы". :) Я здесь время от времени буду появляться (если никто не против). Опыт и советы знающих людей - для меня очень ценны! Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 05:48 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, Такой пример, на мой взгляд, лучше объясняет суть интерфейсов, нежели пример с геометрическими фигурами: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Допустим, в каком-то классе, в каком-то из методов (в данном случае класс Utilizator а метод toBeUtilized) требуется утилизировать объект. Что из себя этот объект представляет мы не знаем, потому вводим специальный интерфейс Utilizable. Теперь мы можем пользоваться ссылкой на объекты, реализующие этот интерфейс, зная наверняка, что любой такой объект может быть утилизирован с помощью метода utilize. А что представляет собой этот самый класс нам уже и не важно, как бы. Теперь мы можем утилизировать и треугольники, и звёздочки, и холодильники какие-нибудь, лишь бы они имплементировали наш интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 21:53 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiver, ты так это описал смачно: .... в каком то классе...в каком то методе.... никто ничего не знает. Кроме того что нужно утилизовать холодильники, прицепы и звёзды (TObject.Free). Что представляют из себя классы и модель - нам не важно. Мы цепляем на всё подряд интерфейсы (утилизатор, сохранятор, плоттер и модификатор). Поперчим интерфейсами Кликатель и Толкатель и вот чудо. ИС готова. Абстрактный Interface в абстрактной задаче - это сила. авторТеперь мы можем утилизировать и треугольники, и звёздочки, и холодильники какие-нибудь, лишь бы они имплементировали наш интерфейс. а имплементацию Пушкин будет писать? Т.е. тебе лишь бы навешать маркеров и вызвать ЛЮБОЙ объект. В _некоторых случаях_ )) это замечательно, но мало. Т.е. есть плюсы и минусы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 00:14 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverТакой пример, на мой взгляд, лучше объясняет суть интерфейсов, нежели пример с геометрическими А ещё лучше, кстати, java.lang.AutoCloseable Добавляем в любой свой класс реализацию этого интерфейса Код: sql 1. И далее пишем Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 09:02 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey TominА ещё лучше, кстати, java.lang.AutoCloseable к задачке автора косвенно. openedDoor "освободится") на скобке } конца блока. А у аффтара пример жизненнее. Время жизни до 8 часов рабочего дня по КЗОТ. (объекты у Слоя, Слои у Документа, Документы у Application) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 10:55 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1, возвращаю тоже тебе полезную ссылку на Различия в использовании интерфейсов и абстрактных классов http://www.quizful.net/post/razlichie_v_primenenii_interfeysov_i_abstraktnih_klassov ты можешь сказать, что ты в курсе. Ну тогда мы оба с тобой в курсе). спасибо :) А для автора могу такой пример привести , жизненный : spring data подробно расписывать не буду и так все понятно ... к примеру у вас есть объектная модель : User *-* Role (@Entity) как мы ведем проектирование : 1) создаем репозитории - это чистые интерфейсы ;) UserRepository RoleRepository 2) понимаем что у них CRUD - очерь похож ...и если у нас в модели классов будет 100500 писать одно и тоже утомительно . делаем AbstractRepository Код: java 1. 2. 3. и Код: java 1. 2. Далее у нас отличная система на interface RoleRepository которые мы внедряем везде ... но тут понимаем что нужно обеспечить например безопасность вызовов - ограничить по ролям итд ... ок 3) на сцену выходит interface UserService RoleService и как следствие AbstractService Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. свои уникальные вызовы ... Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ну и конечно имплементация : с учетом ролей @RolesAllowed({"ROLE_ADMIN"}) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. итд ... далее можно стоить еще и еще слои сервисов - Facade - абстракции для отдачи пользователю json xml итд Таким образом - interface и abstract очень и очень тесно связаны !!! очень наглядно и очень удобно ! Пример номер два для abstract классический ! в класс abstract AbstractServiceImpl - вы добавили метод public abstract boolean isValid(String str); и его вызов будет в каждом из методов вашего абстрактного класса ... @Override public Page<T> findAll(Pageable pgbl) { boolean bool = isValid(String str); return repository.findAll(pgbl ,bool ); } но реализация конкретная будет только в UserServiceImpl @Override public String isValid(String str) { return true; } Таким образом - вы задаете поведение ,но не реализацию ... которая будет разной у всех наследников ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 11:37 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1, 1. Давай без спринга. Автор не о нём и его не знает (предположим). 2. Это пример ущербности Java. - модель из 2-х сущностей Пользователь - Роль, а ты написал РУКАМИ 175 строк кода. - лучше напиши спринг2, или Хибер3 без этой простыни: public interface AbstractService<T, ID> { public long count(); public long count(Specification<T> s); public void delete(T t); public void deleteInBatch(Iterable<T> itrbl); public T findOne(ID id); public Page<T> findAll(Specification<T> s, Pageable pgbl); public List<T> findAll(Specification<T> s, Sort sort); public Page<T> findAll(Pageable pgbl); public List<T> findAll(); public void flush(); public <S extends T> S save (S s); public <S extends T> List<S> save(Iterable<S> itrbl); } public abstract class AbstractServiceImpl<T, ID extends Serializable> implements AbstractService<T, ID>{ private final AbstractRepository<T , ID > repository; protected AbstractServiceImpl(AbstractRepository<T , ID > repository){ this.repository = repository; } @Override public long count() { return repository.count(); } @Override public long count(Specification<T> s) { return repository.count(s); } @Override public void delete(T t) { repository.delete(t); } @Override public void deleteInBatch(Iterable<T> itrbl) { repository.deleteInBatch(itrbl); } @Override public T findOne(ID id) { return repository.findOne(id); } @Override public Page<T> findAll(Specification<T> s, Pageable pgbl) { return repository.findAll(s, pgbl); } @Override public List<T> findAll(Specification<T> s, Sort sort) { return repository.findAll(s, sort); } @Override public List<T> findAll() { return repository.findAll(); } @Override public void flush() { repository.flush(); } @Override public <S extends T> S save(S s) { return repository.saveAndFlush(s); } @Override public <S extends T> List<S> save(Iterable<S> itrbl) { return repository.save(itrbl); } @Override public Page<T> findAll(Pageable pgbl) { return repository.findAll(pgbl); } } почему многим так не нравится задача автора и все придумывают СВОЮ задачу для ПРОГРАММИСТА себя любимого? )) шутка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 12:31 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1, вот тебе без спринга, тоже 200 строк на маппинг ерунды. http://www.sql.ru/forum/925025/ddd-vs-four-tier-layered-architecture?mid=12223783#12223783 Вот если бы как Tomin выше уменьшил бы код интерфейсами до 10 - 20 строк, тогда да)). ______________________________________________ "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 12:43 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1, 1. Давай без спринга. Автор не о нём и его не знает (предположим). 2. Это пример ущербности Java. - модель из 2-х сущностей Пользователь - Роль, а ты написал РУКАМИ 175 строк кода. - лучше напиши спринг2, или Хибер3 без этой простыни: я же сразу показал путь для эволюции... :) (да и писал то я меньше половины - остальное автогенерация ) а так да , достаточно 2х интерфейсов ( пусть кто нибудь попробует написать два абстрактных класса так же в одну строку с тем же функционалом :)? Код: java 1. 2. и для User аналогично ... и для 90% сайтов этого хватит ... до конца жизни ... одна строка - один интерфейс ! сможете создать CRUD - более кратким ?! :) http://docs.spring.io/spring-data/jpa/docs/1.5.x/reference/html/repositories.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 13:46 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1, OFF тут шаблон DAO + генерики + интерфейс. А не чисто сабж). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 14:05 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1.. и для 90% сайтов этого хватит ... до конца жизни ... не зарекайся))) - андроид Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. - Java ResultSet\RowSet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 15:27 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
А вообще, хороший пример есть на сайте оракла, по-моему: https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html For example, imagine a futuristic society where computer-controlled robotic cars transport passengers through city streets without a human operator. Automobile manufacturers write software (Java, of course) that operates the automobile—stop, start, accelerate, turn left, and so forth. Another industrial group, electronic guidance instrument manufacturers, make computer systems that receive GPS (Global Positioning System) position data and wireless transmission of traffic conditions and use that information to drive the car. The auto manufacturers must publish an industry-standard interface that spells out in detail what methods can be invoked to make the car move (any car, from any manufacturer). The guidance manufacturers can then write software that invokes the methods described in the interface to command the car. Neither industrial group needs to know how the other group's software is implemented. In fact, each group considers its software highly proprietary and reserves the right to modify it at any time, as long as it continues to adhere to the published interface. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 17:35 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERДобрый день. В принципе с ООП знаком. Понимаю что есть наследование, инкапсуляция и полиморфизм. Столкнулся с такой новой для меня штукой как интерфейсы . Нарыл кучу примеров и пояснений, но до сих пор в голове не могу сформировать устойчивого и ясного понимания. Понимаю что интерфейс содержит в себе как бы декларацию методов, а реализация выполняется внутри методов классов "вызывающих" данный интерфейс. Причем внутри класса (использующий интерфейс) через @Override происходит переопределение метода с его реализацией (попросту пишется собственно код метода). Вопрос вот в чем: что мне мешает вообще не использовать интерфейсы? Ведь внешне, в плане вызова метода у объекта класса ничего не меняется?! Что мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его? Давай так - просто возьми себе за практику использовать интерфейсы везде . Начинай проектирование любого класса с интерфейса ... если тебе будет нужен в процессе абстрактный класс вводи смело , но от интерфейсов не надо отказаться ... везде в первую очередь создавай интерфейс ... и потом уже по необходимости абстрактный класс , который будет имплементировать этот интерфейс ... просто делай так всегда - и не задавай вопросов ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 17:58 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1, Уверен что ему когда нибудь уже понадобится базовый класс? )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 18:11 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverА вообще, хороший пример есть на сайте оракла, по-моему: он хороший именно в своей области. Не буду говорить узкой)), но на пальцах: - интрефейс это контракт между разрозненными группами или фирмами - т.к. они разрознены _административно_, а не концептуально или по БЛ, то необходимы заглушки-контракты чтобы удобнее писать. Но, если архитектор системы один, то ему не с кем договариваться. Он пойдёт от ООП-UML. При желании, абстрактный базовый класс может выполнить ту же роль контракта. Их даже передают бывает для компиляции программ, чтобы исходники (платные) не передавать)). Есть SOAP, тоже ничего себе контракт на другом уровне. .... Ну а в принципе, пример понятен. Нужно сделать одно поведение для разрозненных объектов и упростить жизнь менеджерам. Главное не натягивать данный пример на всё подряд. Это не Мода-осень 2015. imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 20:37 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1Давай так - просто возьми себе за практику использовать интерфейсы везде . я вижу ты читал ссылку http://www.quizful.net/post/razlichie_v_primenenii_interfeysov_i_abstraktnih_klassov но ничего там не понял. - где будем размещать поле Points - точки фигуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 20:48 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1Давай так - просто возьми себе за практику использовать интерфейсы везде. О, работники сурового интерпрайза подтянулись :) В ООП любой класс должен выполнять какую-то функцию. В т.ч. интерфейс. Класс/интерфейс- абстракция. И он должен не только иметь ОДНУ ответственность, но и ИМЕТЬ ответственность. А подход "всегда делай интерфейс" приводит к созданию кучи интерфейсов, которые не имеют никакой ответственности вообще. При разработке кода "для себя" (т.е. такого, который используется строго внутри проекта) надо следовать принципам "simple code" - т.е. делай как есть, потом отрефакторишь, чтобы было хорошо. Не нужен интерфейс- не делай. Нужен будет- выделишь, благо дело современные IDE это делают сами. Не нужен- проще будет код понять. Создавать же библиотеки "для всех" (пусть даже это в пределах кампании) всё одно не подпустят пока- там да, там надо хорош продумывать всё, чтобы не родить уродцев типа java.awt.Point. Atum1просто делай так всегда - и не задавай вопросов ;) Нет, надо просто понять базовые принципы ООП, тогда SOLID и т.п. будет видится тривиальщиной (хотя нет, буковка D там не следует из принципов ООП). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 08:08 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1Давай так - просто возьми себе за практику использовать интерфейсы везде . я вижу ты читал ссылку http://www.quizful.net/post/razlichie_v_primenenii_interfeysov_i_abstraktnih_klassov но ничего там не понял. - где будем размещать поле Points - точки фигуры? List<Points> getPoints() - в интерфейсе . сами точки в абстрактном классе :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 13:23 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
авторсами точки в абстрактном классе :) === ну вот видишь))))) LOL авторList<Points> getPoints() - в интерфейсе === зачем? 1. Оверхед 2. Точки приватные. Их никто пока не открывал. Т.к. возможно надо будет перекрыть в наследниках. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 13:33 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123авторсами точки в абстрактном классе :) === ну вот видишь))))) LOL авторList<Points> getPoints() - в интерфейсе === зачем? 1. Оверхед 2. Точки приватные. Их никто пока не открывал. Т.к. возможно надо будет перекрыть в наследниках. Удачи ! прям контратака тракслера :) ну придется на каком то этапе для того чтобы скрыть интерфейсы отказаться от тупого линейного наследования и перейти к Композиции . «композиция всегда лучше наследования» (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 15:06 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1прям контратака тракслера :) === ))) ну дак у меня разряд). ну придется на каком то этапе для того чтобы скрыть интерфейсы отказаться от тупого линейного наследования и перейти к Композиции . «композиция всегда лучше наследования» (с) ===== это я уже пас. Есть три кита ООП. Пытаться сказать какой из 3-х тупой, а какой лучше второго без меня)) не будем додумывать. Главное начали от печки - от abstract class. А interface по надобности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 15:16 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123не будем додумывать. Главное начали от печки - от abstract class. А interface по надобности. ну так есть же еще Миксины и трейты че мы только на abstract и interface застряли :)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 15:22 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1, ну дак много есть интересного. Вон доллар за окном дорожает). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 15:29 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1, ну дак много есть интересного. Вон доллар за окном дорожает). ОФФ так это хорошо :) "Путин считает что обесценивание рубля нам выгодно ..." (с) - это не доллар растет , а рубль укрепляется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 15:34 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1, )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 15:37 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Atum1Давай так - просто возьми себе за практику использовать интерфейсы везде . Начинай проектирование любого класса с интерфейса ... если тебе будет нужен в процессе абстрактный класс вводи смело , но от интерфейсов не надо отказаться ... везде в первую очередь создавай интерфейс ... и потом уже по необходимости абстрактный класс , который будет имплементировать этот интерфейс ... просто делай так всегда - и не задавай вопросов ;) Так можно родить новый антипаттерн. Под названьем "засилие интерфейсов". Или Interfaces dominance. И следующие лет 10 бороться с ним вводя новые сущности типа "фасадных" интерфейсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 18:14 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
maytonТак можно родить новый антипаттерн. Под названьем "засилие интерфейсов". Или Interfaces dominance. И следующие лет 10 бороться с ним вводя новые сущности типа "фасадных" интерфейсов. У меня такое подозрение, что интерфейсы в Java ввели, потому что не было header-файлов, как в C/C++. Поэтому писать для каждого класса интерфейс, это стиль написания программ на C/C++. <:o) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2015, 06:20 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
mad_nazgulmaytonТак можно родить новый антипаттерн. Под названьем "засилие интерфейсов". Или Interfaces dominance. И следующие лет 10 бороться с ним вводя новые сущности типа "фасадных" интерфейсов. У меня такое подозрение, что интерфейсы в Java ввели, потому что не было header-файлов, как в C/C++. Чито? header-файл в C это костыль в отсутствии модульности. interface в java - костыль в отсутствии множественного наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2015, 08:33 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
mad_nazgulmaytonТак можно родить новый антипаттерн. Под названьем "засилие интерфейсов". Или Interfaces dominance. И следующие лет 10 бороться с ним вводя новые сущности типа "фасадных" интерфейсов. У меня такое подозрение, что интерфейсы в Java ввели, потому что не было header-файлов, как в C/C++. Поэтому писать для каждого класса интерфейс, это стиль написания программ на C/C++. <:o) Ошибочка вышла. Вввели потому что ООП а не аналогии с С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2015, 09:02 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
maytonОшибочка вышла. Вввели потому что ООП а не аналогии с С++. Если меня память не подводит, то в SmallTalk никаких интерфейсов не было. Да и в самой парадигме ООП нет понятие интерфейсов. А вот в C++ с которых "слизывали" Java. "Java это C++ только лучше" Были заголовки, которые несли смысловую нагрузку такую же как сейчас несут интерфейсы в Java. <:o) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2015, 09:10 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
mad_nazgulmaytonОшибочка вышла. Вввели потому что ООП а не аналогии с С++. Если меня память не подводит, то в SmallTalk никаких интерфейсов не было. Да и в самой парадигме ООП нет понятие интерфейсов. А вот в C++ с которых "слизывали" Java. "Java это C++ только лучше" Были заголовки, которые несли смысловую нагрузку такую же как сейчас несут интерфейсы в Java. <:o) Это передёргивание правды. На Java оказали влияние около 10 языков и парадигм. Не стоит выпячивать или натягивать С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2015, 09:20 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
maytonЭто передёргивание правды. На Java оказали влияние около 10 языков и парадигм. Не стоит выпячивать или натягивать С++. Про header-interface это человек либо не знает C/C++, либо не знает java. Но справедливости ради- у меня чёткое ощущение, что Гослинг действительно ничего, кроме С++, не знал. Потому что он перетащил те баги С++, которые были связаны с бинарной совместимостью С и С++, в java, при том, что был eiffel, который (при всей его неуклюжести) содержал все идеи ООП (кроме метаклассов) в законченном виде (собственно все последующие новшества- только из ФП). Для доказательства достаточно того факта, то для переменной доступ на чтение и запись совпадает... Ну и прочее - return, main, "область видимости пакет"- бр... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2015, 10:07 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey Tomininterface в java - костыль в отсутствии множественного наследования. +1! люто плюсую! все остальное можно сделать абстрактным классом. для примера: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. на абстрактных функцию, переменную и т.д. не реализуешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2015, 10:50 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, я те заголовки никогда не любил...по практичности. Уж слишком они были объёмные и где то там лежали....)) отдельно от кода. Потом на Delphi оооочень понравилась компактность кода ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2015, 10:57 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
am_sasaна абстрактных функцию, переменную и т.д. не реализуешь здесь больше не о к оде компилятора рассуждаем. А о _прикладном_ коде. Т.е. там где БЛ и ближе к пониманию простыми программистами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2015, 11:23 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2125025]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
235ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
225ms |
get tp. blocked users: |
1ms |
| others: | 267ms |
| total: | 765ms |

| 0 / 0 |
