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

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

Вопрос вот в чем: что мне мешает вообще не использовать интерфейсы? Ведь внешне, в плане вызова метода у объекта класса ничего не меняется?! Что мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39026977
Grunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интерфейсы здорово помогают, если тебе необходимо обеспечить унифицированную обработку объектов, не имеющих общего предка (в котором можно было бы описать соответствующий метод).
Искусственный пример: есть два дерева классов - мебель и ядра ОС. Они никак не пересекаются и вообще совершенно независимы друг от друга. Но тебе надо собирать объекты этих классов. Вводится интерфейс
Код: java
1.
ICompile

, в котором определяется метод
Код: java
1.
void Compile();

Теперь, имея на руках, например,
Код: java
1.
List<ICompile>

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

Да, так было до тех пор пока в Java 8 не добавили методы по-умолчанию.

MAULERПричем внутри класса (использующий интерфейс) через @Override происходит переопределение метода с его реализацией (попросту пишется собственно код метода).

@Override это аннотация помощник компилятору. Если вдруг поменяется только метод интерфейса, но не метод-реализация, то по этой аннотации компилятор может определить что метод класса больше не является переопределением и сгенерировать ошибку.

MAULERВопрос вот в чем: что мне мешает вообще не использовать интерфейсы?
Отсутствие множественного наследования.

MAULERВедь внешне, в плане вызова метода у объекта класса ничего не меняется?!

А если два разных класса реализуют один интерфейс? А если их не два, а много?

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

А если два разных класса реализуют один интерфейс? А если их не два, а много?
Это я как раз понимаю. К примеру объект ob1 класса Rectangle (реализующий интерфейс) пользуется методами calculatePerimeter();
и calculateSquare();

Код: java
1.
2.
	ob1.calculatePerimeter();
	ob1.calculateSquare();



а объект ob2 класса Circle (также реализ. интерфейс) пользуется методами с теми же названиями но уже другой "начинкой" (т.к. площадь и периметр у окружности считаются по другому)

Код: java
1.
2.
	ob2.calculatePerimeter();
	ob2.calculateSquare();



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

В полиморфизме:
Код: 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());
 }
}



Без интерфейса нужна копипаста:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class ShapePrinter{   
  void print(Rectangle r){
    System.out.println("Perimeter " + r.calculatePerimeter());
    System.out.println("Square " + r.calculateSquare());
 }

  void print(Circle c){
    System.out.println("Perimeter " + c.calculatePerimeter());
    System.out.println("Square " + c.calculateSquare());
 }

}
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027018
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERBlazkowicz,
В итоге выгода от использования интерфейса у меня какая? Да, объекты классов разные а методы называются всё также одинаково. Это наверное удобно, но причем здесь интерфейс? Даже если классов не два а много, ведь все равно реализация методов она будет своя внутри каждого класса. В чем бонус то? ))

Бонус в интерфейсах! ;-)

Грубо говоря пусть будет метод который считает по площади и периметру
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class calc {
   public double calc(IFigure figure) {
      double result;
      ...
      // Тут что-то считаем
      ...
      return result;
   }
} 



Т.о. мы можем передавать в метод calc что Rectangle, что Circle посчитает.
По идее это можно сделать ч/з наследование...
Но т.к. в Java явно запрещено множественное наследование, то сделать что-то через интерфейс проще, чем продумывать иерархию наследования.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027019
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
Grunch тебе привёл пример.
Иногда стройная модель ООП не работает. Приходится подгонять сбоку-припёку интерфейсы.
Не используй пока не понадобятся.
Т.е. например, в примере выше надо использовать шаблон Посетитель.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027021
andr_andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
если раньше программировал на С++, то должен был заметить, что "Java не разрешает множественного наследования, но интерфейсы предоставляют альтернативу. В Java класс может наследовать только один класс, но может реализовывать много интерфейсов. Таким образом объекты могут иметь несколько типов: тип их собственного класса и типы всех реализуемых интерфейсов. "

http://easy-code.ru/lesson/java-interfaces
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027024
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё одна аллегория.
Напр. есть куча разных писем в оутлуке (объекты)
Интрефейс сродни пометкой краской данных писем. Чтобы сгруппировать по признаку.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027035
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Интрефейс сродни пометкой краской данных писем. Чтобы сгруппировать по признаку.

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

Интерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования (в отличии от интерфейсов COM).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027046
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominВсякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то
я не понял твою мысль).
"того что не является чем-то"
авторИнтерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования
тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло.
Я страюсь работать без интерфейсов. Пока не припрёт)).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027055
andr_andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло.
Я страюсь работать без интерфейсов. Пока не припрёт)).

Про "Зло" - это всё предрассудки, а идея интерфейсов настолько популярна в библиотеках Java, что должно припирать часто.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027061
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Alexey TominВсякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то
я не понял твою мысль).
"того что не является чем-то"

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


Petro123авторИнтерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования
тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло.
Я страюсь работать без интерфейсов. Пока не припрёт)).

Ты настолько далёк от общепризнанных в java вещей, что я бы советовал всем слушать тебя и делать наоборот :D
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027075
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andr_andreyПро "Зло" - это всё предрассудки, а идея интерфейсов настолько популярна в библиотеках Java, что должно припирать часто.
У меня память хорошая - поиск на слово "множественное".
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027077
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominТы настолько далёк от общепризнанных в java вещей, что я бы советовал всем слушать тебя и делать наоборот :D
И эти люди мешают ковыряться в носу)).
Alexey TominНеверно. Наследование (равно как и реализация интерфейса там, где нет множественного наследования) - это абстракция "является". Не более. Всякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то - приводит к проблемам.

русский язык знаком? Тебя просили просто и доходчиво)).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027078
host.13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов.
Основное назначение интерфейсов - не множественное наследование, а совмещение несовместимого. Чтобы использовать метод с одной и той же сигнатурой у не совместимых между собой объектов. Интересно, здесь хоть один гуру приведет пример задачи, не и имеющей решения без использования интересов?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027081
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
среди всех ответивших, у тебя самый худший ответ. Уж извини.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027082
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Основное назначение интерфейсов
не будь максималистом....
Есть ещё тестирование....подмена поведения...сериализация... и т.д.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027083
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13приведет пример задачи
вот сначала поиск проведи. А потом задачи ставь).
Эта тема изжёвана 100 раз.
Удачи!
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027085
host.13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Есть ещё тестирование....подмена поведения...сериализация... и т.д.

Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то..
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027091
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Petro123Есть ещё тестирование....подмена поведения...сериализация... и т.д.
Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то..
Начинается всё программирование от печки (от Модели).
А не от обслуги (сериализации).
Сама модель и моделирование ООП не менялось вот уже ....десятилетий.
Всё остальное приходящее.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027093
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13,
про сериализацию Grunch сказал. Только другим примером (обход объектов).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027131
andr_andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов.
Основное назначение интерфейсов - не множественное наследование, а совмещение несовместимого. Чтобы использовать метод с одной и той же сигнатурой у не совместимых между собой объектов. Интересно, здесь хоть один гуру приведет пример задачи, не и имеющей решения без использования интересов?

Ввести базовый абстрактный класс можно, только прятать его придётся вверху иерархии, а интерфейсы удобны тем, что их можно ввести много (удобно дробить по библиотекам) и на любом уровне иерархии. По сути, множественное наследование решало бы проблему в рамках абстрактных классов, но его нет в Java - имеем интерфейсы.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027142
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andr_andreyно его нет в Java - имеем интерфейсы.
Справедливости ради, его и в delphi нет. Но там проще - там ОРМ нет\не нужен. Поэтому и надобности нет)).
Везде всё по разному).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027154
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то..
Потому что маркерные интерфейсы это костыль. Они появились до того как в Java добавили аннотации.
...
Рейтинг: 0 / 0
Изучаю 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
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028406
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAlexey TominЭто два костыля, в связи с отсутствием функций, как самостоятельных объектов.
Т.е. грубо- ошибка проектирования языка.
Да-да. Афтару сразу лучше изучать Scala. Правда?

Нет.
Просто эти примеры- не примеры нужности интерфейсов в ООП, а примеры костылей в java.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028420
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Примеров мы походу не дождемся?
Мне запостить полностью пример проекта с использованием интерфейса? Т.е. выложить тексты java-модулей что я навоял? Я Вас правильно понял?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028426
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczMAULERПроблем нет. Т.е. я понимаю код с использованием интерфейсов, но выгода от их применения, для меня, на данный момент, пока сомнительная.
Примеров мы походу не дождемся?
у явы везде интерфейсы,
кодить начнешь, сам столкнешься
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028439
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
кокой непонятливый).
- если сказал, что преимуществ у интерфесов нет, то нужен проект с кодом А и Б, где это видно.
Звёзды с интерфейсами... и без.
Это логично. А если нет логики, нефиг программировать.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028442
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bochkovBlazkowiczПримеров мы походу не дождемся?
у явы везде интерфейсы,
кодить начнешь, сам столкнешься
Спасибо, а то я только начинаю кодить, ещё не разобрался где и как.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028448
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

автор- если сказал, что преимуществ у интерфесов нет
Неправда :) Я такого не говорил :) Я сказал, что на данный момент, преимущества использования интерфейсов для меня пока сомнительны :)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028454
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
OFF ))
в части что нет логики правда) - код то всё одно нужен)))
Сомневаюсь я, жениться или не жениться?
А если жениться, то куда девать нынешнюю жену? ))
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028456
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczbochkovпропущено...

у явы везде интерфейсы,
кодить начнешь, сам столкнешься
Спасибо, а то я только начинаю кодить, ещё не разобрался где и как.
верный признак того, что наступило время применить интерфейс или абстрактный класс,
когда начинаешь код копипастить
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028468
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bochkovверный признак того, что наступило время применить интерфейс или абстрактный класс,
когда начинаешь код копипастить
Хорошо. Буду знать.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028487
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERПонять причины, почему же в конкретном случае применяется интерфейс а не то или это...
Единственной причиной, для которой в Java нужны интерфейсы это, если я чего не забыл, необходимость сделать так, чтобы пару классов A и C можно было использовать как нечто одно и то же и пару классов B и C можно было использовать как одно и то же. При том, что пару A и B использовать как одно и то же не получится. (Лямды оставим за скобками).
Другими словами интерфейс это декларация некой части сущности, которая может быть общей у разных классов в обход линий наследования. На сколько это удобно отдельный вопрос.
Можно ли обойтись без них - да, как впрочем и без ООП в принципе.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028500
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERbooby,


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

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

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

Потребуется посортировать новопридуманную коллекцию по не известному заранее признаку - напишем специфический код
тогда, когда проЯснеет - чо там за коллекция и какова специфика ее ее элементов.
Вариантов кода для сортировки будет столько, сколько типов коллекций есть в системе.
Это "нормальный" вариант развития событий.

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


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

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

MAULER А методы взаимодействия с конечным пользователем "торчали наружу" через public.
В этом случае - потребовалась бы перекомпиляция?

Интерфейс в любом случае public. По крайней мере по отношению к использующему коду.
Вот есть процедура сортировки специфически ночных горшков.
Если писатель класса горшков меняет и реализацию и спецификацию метода сравнения сравнения, добавляя к параметру МестоПроисхожденияГлины параметр ЗаводПроизводитель или НомерСмены, то нет шансов после такого изменения не перекомпилировать и код сортировки вместе с изменениями в классе горшков.

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

Вы РЕАЛЬНО доходчиво объясняете! Спасибо :) За терминологию сильно не пинайте :) Я пока новичок в этих делах :)
Но я наберусь наглости и спрошу, точнее попробую описать Ваш пример несколько по другому:

Вот есть коллекции: зайчиков, мишек, винтажных горшков и код для каждой коллекции (как Вы заметили) специфически разный.
Ещё есть вероятность, что появится новомодная коллекция дамских сумочек и код сортировки для неё пока неизвестен.

И вот наш "чудак", предъявил требование к писателям горшков, мишек, зайчиков и сумочек в виде 4-х "бумажек" на которых карандашом написано название методов, которыми он будет пользоваться в своей работе.

Писатели соответствующих классов, получили соответствующую "бумажку", и в своих классах написали public-методы для нашего чудака. Не привлекая тему интерфейсов. Со стороны чудака что то поменяется? Ведь он как вызывал методы "по бумажке" так и продолжает вызывать их.

Такое В ПРИНЦИПЕ возможно?

Но, наверное (наверное!) писатели горшков могут смухлевать, и не написать метод "на бумажке". Или написать, но оставить его пустым. Тогда наш чудак поимеет проблем, т.к. для экземпляра горшков такого метода существовать не будет. А если бы использовались интерфейсы, то он максимум получил бы "пустышку" не вываливаясь из программы?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028575
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERПисатели соответствующих классов, получили соответствующую "бумажку", и в своих классах написали public-методы
делают ещё хитрее финт ушами - callback соединение и подписку. А реализацию кода сортировки вообще делай сам у себя.
Тут тебе и интерфейс.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028582
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
само слово Коллекция просто по ООП не делается. По определению. Даже без зайчиков и Мишек).
Ну, и коллекции тоже не все сразу используют)) в стадии программиста.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028655
Grunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAULERПисатели соответствующих классов, получили соответствующую "бумажку", и в своих классах написали public-методы для нашего чудака. Не привлекая тему интерфейсов. Со стороны чудака что то поменяется? Ведь он как вызывал методы "по бумажке" так и продолжает вызывать их.

Такое В ПРИНЦИПЕ возможно?

Это называется утиная типизация
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028735
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Я страюсь работать без интерфейсов. Пока не припрёт)).

YouTube Video
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028817
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1в этом видео из двух частей
ты не понял.
Аффтар топика (не я), просил рассказать Доступно и Просто. Без всяких ссылок на статьи\видео\курсы\толмуты.
Тут форум программистов.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028914
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
авторТакое В ПРИНЦИПЕ возможно?

Да. Так делают (пусть это будет утиная типизация в рамках данного разговора).
А в некоторых средах (языках программирования) именно что-то такое либо рекомендуемый,
либо вообще единственный способ реализовать идею интерфейса.
Я думаю, что во внимание следует принимать как минимум следующие два обстоятельства:
а) в какой момент желательно получение ошибки - в момент компиляции кода, или в момент времени выполнения кода.
Закладка на явно объявленные интерфейсы определенно позволят провести кодирование так, чтобы ошибки вроде отсутствия
подходящей реализации выявлялись на этапе компиляции.
Наивная реализация этой идеи в java однозначно ведет к ошибке времени выполнения.
Не наивная может иметь смысл, но не будет бесплатной ни в смысле порождения (нескольких) дополнительных оберток для поддержки не наивности, ни в смысле накладных расходов на вызовы сквозь полученные конструкции.

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

Идея интерфейса в архитектурном плане, с моей точки зрения, вообще один из самых краеугольных камней программирования.
Не владея ею свободно, вы вообще не понимаете, что вы делаете как программист.
Если продолжать строительно-архитектурные сравнения, то получится как-то так: 2 подхода к архитектуре.
1) Пусть дана планировка дома. Размеры помещений и их техническое оборудование заранее известны.
Это подход со статически заявленными интерфейсами. Кухня может быть только в этом помещении, потому что в него подведена вода и сделана вытяжка. А спальню разумно организовать именно в этом, потому что оно самое тихое и дорога именно из этой комнаты в туалет не загорожена несущим столбом, вокруг которого с делан коридор.
Использование статических интерфейсов производится архитекторами и инженерами, заранее планирующими и продумывающими
строительство дома заданных характеристик.


2) вот двор только построенного жилого квартала. Как проложить асфальтовые дорожки - справа налево или сверху вниз?
Ответ утиной типизации - а никак не проложить. Подождать, пока люди тропинки натопчут, посмотреть - что получилось.
А там, может быть и асфальт накатать, если руки дойдут и деньги найдутся.
Т. е. - в ситуации непредсказуемого взаимодействия или когда электропроводка специально сделана
внешней, чтобы при случае ее можно использовать кроме доставки электричества в телевизор еще и для сушки стиранного белья,
так, что можно крючьями зацепиться за нее и пробросить металлические рейки через все комнату для увеличения площади сушки - утиная типизация наше все. То есть, когда дом уже есть, а для чего он строился - еще не выяснилось.

Так или иначе - сами интерфейсы - это способ разделения мира на набор не пересекающихся областей,
способных функционировать автономно с указанием способа взаимодействия между областями.
В некотором смысле, интерфейсы - это вообще единственный результат программирования.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028929
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyИдея интерфейса в архитектурном плане, с моей точки зрения, вообще один из самых краеугольных камней программирования.
Не владея ею свободно, вы вообще не понимаете, что вы делаете как программист.
эк вас торкнуло)). Это перебор.
Свободно владеть, это значит знать где надо и не надо).
Двайте вы перечислите недостатки interface. А то вы разочаруете...)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028933
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyТак или иначе - сами интерфейсы - это способ разделения мира на набор не пересекающихся областей,
способных функционировать автономно с указанием способа взаимодействия между областями.
В некотором смысле, интерфейсы - это вообще единственный результат программирования.
антипаттерн - лосутное одеяло (если переборщить)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39028969
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyВ некотором смысле, интерфейсы - это вообще единственный результат программирования.
Но это уже совсем другие интерфейсы и к ООП они отношения не имеют. :)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029000
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

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

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

В связи с вышеизложенным докладываю, что не представляется интересным - как Вы сами себя называете ( даже если Вы называете себя программистом).

Интересным представляется вот что - на каком основании Вы ожидаете, что другой программист признает Вас за такового,
если Вы даже не претендуете не только на представление шедевра, но и даже на понимание того, где надо применять ту или иную специфическую технику, а где не надо?

Petro123Двайте вы перечислите недостатки interface. А то вы разочаруете...)

Это вопрос не столько о том, зачем пишутся программы, сколько для кого.
В качестве целевых кандидатов можно рассмотреть а) предполагаемых конечных пользователей, б) компьютер на котором она должна выполняться и в) других программистов, которым придется поддерживать и развивать явленный "шедевр".

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

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

в) Поэтому единственным получателем возможного профита от интерфейсов является другой программист , которому будет
поручено сопровождать и развивать систему, построенному на концепции использования интерфейсов.
Здесь мы возвращаемся к первой фазе марлезонского балета:
Попытка рассуждать о достоинствах и недостатках интерфейсов находится за рамками добра и зла, если программист, с которым
проводится такое обсуждение даже не догадывается - где их следует применять, а где нет.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029105
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
нуууу. Тему можно закрывать).
Ничего интересного не будет.
Как говорит Жванецкий "вы пересаливаете...".
Ода про хвалебные интерфейсы была, а вот столько букв ни о чём в последнем посте......
Ни или типа ...не буду тут бисером метать...
А театр одного актёра неинтересен.
Будем ждать кода.
Занавес.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029112
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
попытка посчитать "профит" от выбора интерфейс\абстрактный класс\наследование\композиция никак не получится. Особенно в литературном стиле. Хотя занимательно, на первые 5 минут.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029223
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
итд

:)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029231
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Интерфейс работает на несколько тактов медленнее.
Абстрактный класс - это класс.
Интерфейс - это контракт (св-во объекта).
Ну вот, уже лучше).
- медленность, это последний критерий для рассмотрения.
Первый критерий - стройная модель.
Т.е. строя взаимосвязи класса вы должна вначале пробовать наследование и композицию, и только потом интерфейсы.
Т.е. в примере выше (на каждом собеседовании) сначала делают абстрактный класс Фигура. А потом на нём наследников Квадрат, Звезда и т.д.
Первый класс, вторая четверть ООП.
Тема - зачем нужны интерфейсы?
- Нужны, но в последнюю очередь))
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029236
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
Аффтар свой пример про звёзды сделал на интерфейсах.
Я этот код пока не видел.
По постановке задачи, они там не нужны.
Либо он что-то умолчал.
Удачи аффтару!
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029365
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

авторпопытка посчитать "профит" от выбора интерфейс\абстрактный класс\наследование\композиция никак не получится.

Не могу удержаться от совета: Вы все-таки давайте себе передышку - не все слова говорите, которые слышали, а пробуйте выбирать подходящие по месту.

интерфейс\абстрактный класс\наследование\композиция

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

интерфейс\абстрактный класс\наследование
из этих трех надо выбросить либо наследование либо оба разом интерфейс/абстрактный класс, т.к.
технически в java оба они представляют разные виды наследования - одно наследования поведения, другое - наследование реализации. Вычеркиваем наследование как слишком общее.

остается

интерфейс\абстрактный класс

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

авторТ.е. строя взаимосвязи класса вы должна вначале пробовать наследование и композицию, и только потом интерфейсы.

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

Т.е. строя взаимосвязи класса ... - Т.е., планируя алгоритм работы программы

вы должна вначале пробовать наследование и композицию - вы должны понять, объекты с каким поведением вам потребуются,
и, как Адам давал имена животным и птицам, дать имена найденным вами объектам с необходимым поведением.
Эти имена будут именами необходимых вам логических интерфейсов.
Получив набор этих имен, далее вы решаете техническую, синтаксическую задачу выбора способа реализации найденных интерфейсов
- с помощью interface или с помощью extends.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029411
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
Нда....)
Ты ты упорно пытаешься подвести базу под своё незнание или нелюбовь ООП.
Это было видно в первой фразе Сергею Арсеньеву про то что Интерфейсу плевать на ООП и то что Оно об нём думает.
- ты пытаешься бороться с ветряными мельницами вычеркивая слова из Вики))
...
Диаграмма классов
https://ru.wikipedia.org/wiki/Диаграмма_классов
Уж не заню по какой методологии вы разрабатывате ИС, но
диаграмма классов строится безотносительно ЯП.
И даже возможно не вами и не вами.
Поэтому именно с \абстрактный класс\наследование\композиция
мы и начнём стоить.
Никак не с _вторичной_ семантической конструкции в ЯП - Interface

авторот которых не требуется жесткой единственной деревянной связности.
==== конечно! Никто не требует ВСЮ модель делать на вертикали наследования.
Даже в БД есть денормализация против таких фанатиков с идеей "интерфейсы-наше всё!" Или 3-я степень норм-ии наше всё!
Фанатики, что с них взять)).

авторВот недаром есть мнение, что если вхождение в программирование началось с изучения ООП, то это неисправимая родовая травма навечно.
== в первой половине треда я вас и интерфейсы поддерживал. Пока не понял, что вы фанатик ОДНОГО решения.
Я лично люблю оба). Только проектирую классы не с Interface. См. тред выше...
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029413
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyПрограммы пишут не для того, чтобы в них были звезды, круги и квадраты, а для того, чтобы с этими кругами и квадратами что-то происходило.
однобоко и узко.
Открой деление на слои - Модель\Сервисный слой или иди в функциональное программирование.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029418
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyТ.е. строя взаимосвязи класса ... - Т.е., планируя алгоритм работы программы
вы должна вначале пробовать наследование и композицию - вы должны понять, объекты с каким поведением вам потребуются,
смешалось всё, функциональные требовани, ТЗ, ....
Огорчу - всё уже разложено по полочкам и определено:
Когда этап поведения, когда диаграмма классов и когда всё остальное.
Правда не знаю как вы там живёте, по RUP\водопаду или экстиму.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029424
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyи, как Адам давал имена животным и птицам, дать имена найденным вами объектам с необходимым поведением.
Эти имена будут именами необходимых вам логических интерфейсов.
Получив набор этих имен, далее вы решаете техническую, синтаксическую задачу выбора способа реализации найденных интерфейсов
- с помощью interface или с помощью extends.
это 5 )))))
Запишу в новую методологию проектирования ИС.
Красиво ты пишешь))).
Удачи!
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029431
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby- с помощью interface или с помощью extends.
хорош теории из Библии программиста, ждём код аффтара. Сегодня пятница!
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029436
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
возвращаю тоже тебе полезную ссылку на
Различия в использовании интерфейсов и абстрактных классов
http://www.quizful.net/post/razlichie_v_primenenii_interfeysov_i_abstraktnih_klassov
ты можешь сказать, что ты в курсе. Ну тогда мы оба с тобой в курсе).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029446
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
авторДаже в БД есть денормализация против таких фанатиков с идеей "интерфейсы-наше всё!" Или 3-я степень норм-ии наше всё!

Ты все-таки продолжаешь произносить все слова, которые слышал.
Это смело, надо признать. В качестве профессионального приема это используется клоунами при составлении реприз, специально для того, чтобы слова вырванные из своего обычного контекста слова стали звучать смешно.

Petro123boobyи, как Адам давал имена животным и птицам, дать имена найденным вами объектам с необходимым поведением.
...
это 5 )))))
Запишу в новую методологию проектирования ИС.
Красиво ты пишешь))).
Удачи!

Это не я придумал, это у программистов в библии так написано.

автор... Ну тогда мы оба с тобой в курсе
Прошу прощения, есть подозрение, что ты ошибаешься.
Больше похоже на то, что один из нас не в курсе , т.к. заявляется поклонником всех подходов разом, не умея выбрать из слышанных слов подходящее по месту.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39029467
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyПрошу прощения, есть подозрение, что ты ошибаешься.
Больше похоже на то, что один из нас не в курсе , т.к. заявляется поклонником всех подходов разом, не умея выбрать из слышанных слов подходящее по месту.
я же тебе говорю.
У тебя мания преследования).
После твоих 2-х литературных спитчей о славных интерфейсах, я тебя спросил: Фанат? Или в курсе про недостатки?
Тут тебя понесло. Отсюда диагноз.
Тут люди, "опера, котоые на земле работают") так много как ты не пишут. И про ООП не плюются .
Ты ещё не знаешь, что MS сказало про свои (твои) интерфейсы.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39030489
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, не нужно ссориться! :)
Своё понимание интерфейсов я для себя "выработал". Верное оно или нет - покажет практика. "Звёзды", наверное, и правда не очень удачный пример, но я "у подножья горы" Так что уж простите мне некоторые "казусы". :)

Я здесь время от времени буду появляться (если никто не против). Опыт и советы знающих людей - для меня очень ценны! Спасибо!
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031149
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,

Такой пример, на мой взгляд, лучше объясняет суть интерфейсов, нежели пример с геометрическими фигурами:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
interface Utilizable {
	public void utilize();
}

class Utilizator {
	
	public void toBeUtilized(Utilizable arg) {
		
		//some code
		...
		
		arg.utilize();
	}
}



Допустим, в каком-то классе, в каком-то из методов (в данном случае класс Utilizator а метод toBeUtilized) требуется утилизировать объект. Что из себя этот объект представляет мы не знаем, потому вводим специальный интерфейс Utilizable. Теперь мы можем пользоваться ссылкой на объекты, реализующие этот интерфейс, зная наверняка, что любой такой объект может быть утилизирован с помощью метода utilize. А что представляет собой этот самый класс нам уже и не важно, как бы. Теперь мы можем утилизировать и треугольники, и звёздочки, и холодильники какие-нибудь, лишь бы они имплементировали наш интерфейс.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031180
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,
ты так это описал смачно:
.... в каком то классе...в каком то методе.... никто ничего не знает. Кроме того что нужно утилизовать холодильники, прицепы и звёзды (TObject.Free). Что представляют из себя классы и модель - нам не важно.
Мы цепляем на всё подряд интерфейсы (утилизатор, сохранятор, плоттер и модификатор).
Поперчим интерфейсами Кликатель и Толкатель и вот чудо.
ИС готова.
Абстрактный Interface в абстрактной задаче - это сила.
авторТеперь мы можем утилизировать и треугольники, и звёздочки, и холодильники какие-нибудь, лишь бы они имплементировали наш интерфейс.
а имплементацию Пушкин будет писать? Т.е. тебе лишь бы навешать маркеров и вызвать ЛЮБОЙ объект.
В _некоторых случаях_ )) это замечательно, но мало.
Т.е. есть плюсы и минусы.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031265
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverТакой пример, на мой взгляд, лучше объясняет суть интерфейсов, нежели пример с геометрическими

А ещё лучше, кстати, java.lang.AutoCloseable
Добавляем в любой свой класс реализацию этого интерфейса

Код: sql
1.
    public class Door implements AutoCloseable { ...



И далее пишем
Код: sql
1.
2.
3.
   try (Door openedDoor = new Door()) {
       moveFurnitureThrough(openedDoor);
   }
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031397
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominА ещё лучше, кстати, java.lang.AutoCloseable
к задачке автора косвенно.
openedDoor "освободится") на скобке } конца блока.
А у аффтара пример жизненнее. Время жизни до 8 часов рабочего дня по КЗОТ.
(объекты у Слоя, Слои у Документа, Документы у Application)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031439
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
@NoRepositoryBean
public interface AbstractRepository<T , ID extends Serializable>  extends JpaRepository<T, ID>,JpaSpecificationExecutor<T>{
}


и

Код: java
1.
2.
public interface RoleRepository extends AbstractRepository<Role, Long>{
}



Далее у нас отличная система на 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.
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);

}




Код: 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.
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);
    }


    
}



свои уникальные вызовы ...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public interface UserRepository extends AbstractRepository<User, Long>{
    
    User findOneByLogin(String login);
}


public interface UserService extends AbstractService<User,Long> {
    
     User findOneByLogin(String login);
}



ну и конечно имплементация : с учетом ролей @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.
@Transactional
@Service("userService")
public class UserServiceImpl extends AbstractServiceImpl<User, Long> implements UserService {

    
   protected final UserRepository repository;

    @Autowired
    public UserServiceImpl(UserRepository repository) {
        super(repository);
        this.repository = repository;
        
    }

    @Override
    @RolesAllowed({"ROLE_ADMIN"})
    public User findOne(Long id) {
        return super.findOne(id); 
    }
    

    
    @Override
    public User findOneByLogin(String login) {
        return repository.findOneByLogin(login);

    }

}



итд ... далее можно стоить еще и еще слои сервисов - 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;
}

Таким образом - вы задаете поведение ,но не реализацию ... которая будет разной у всех наследников
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031499
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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);
}



}

почему многим так не нравится задача автора и все придумывают СВОЮ задачу для ПРОГРАММИСТА себя любимого? )) шутка
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031514
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
вот тебе без спринга, тоже 200 строк на маппинг ерунды.
http://www.sql.ru/forum/925025/ddd-vs-four-tier-layered-architecture?mid=12223783#12223783
Вот если бы как Tomin выше уменьшил бы код интерфейсами до 10 - 20 строк, тогда да)).
______________________________________________
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031576
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1,
1. Давай без спринга. Автор не о нём и его не знает (предположим).
2. Это пример ущербности Java.
- модель из 2-х сущностей Пользователь - Роль, а ты написал РУКАМИ 175 строк кода.
- лучше напиши спринг2, или Хибер3 без этой простыни:


я же сразу показал путь для эволюции... :)

(да и писал то я меньше половины - остальное автогенерация )


а так да , достаточно 2х интерфейсов
( пусть кто нибудь попробует написать два абстрактных класса так же в одну строку с тем же функционалом :)?


Код: java
1.
2.
public interface RoleRepository  extends JpaRepository<Role, Long>,JpaSpecificationExecutor<Role>{
}


и для User аналогично ... и для 90% сайтов этого хватит ... до конца жизни ...

одна строка - один интерфейс ! сможете создать CRUD - более кратким ?! :)

http://docs.spring.io/spring-data/jpa/docs/1.5.x/reference/html/repositories.html
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031603
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
OFF
тут шаблон DAO + генерики + интерфейс. А не чисто сабж).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39031719
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
public class RestaurantContentProvider extends ContentProvider {
	private RestaurantDatabase restaurantDb;

	@Override
	public boolean onCreate() {
		Context ctx = getContext();
		restaurantDb = new RestaurantDatabase(ctx);
		return true;
	}

	@Override
	public String getType(Uri uri) {
		final int match = ContentDescriptor.URI_MATCHER.match(uri);
		switch(match){
		case ContentDescriptor.Restaurant.PATH_TOKEN:
			return ContentDescriptor.Restaurant.CONTENT_TYPE_DIR;
		case ContentDescriptor.Restaurant.PATH_FOR_ID_TOKEN:
			return ContentDescriptor.Restaurant.CONTENT_ITEM_TYPE;
        default:
            throw new UnsupportedOperationException ("URI " + uri + " is not supported.");
		}
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		SQLiteDatabase db = restaurantDb.getWritableDatabase();
		int token = ContentDescriptor.URI_MATCHER.match(uri);
		switch(token){
			case ContentDescriptor.Restaurant.PATH_TOKEN:{
				long id = db.insert(ContentDescriptor.Restaurant.NAME, null, values);
				getContext().getContentResolver().notifyChange(uri, null);
				return ContentDescriptor.Restaurant.CONTENT_URI.buildUpon().appendPath(String.valueOf(id)).build();
			}
            default: {
                throw new UnsupportedOperationException("URI: " + uri + " not supported.");
            }
		}
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		SQLiteDatabase db = restaurantDb.getReadableDatabase();
		final int match = ContentDescriptor.URI_MATCHER.match(uri);
		switch(match){
			// retrieve restaurant list
			case ContentDescriptor.Restaurant.PATH_TOKEN:{
				SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
				builder.setTables(ContentDescriptor.Restaurant.NAME);
				return builder.query(db, null, null, null, null, null, null);
			}
			default: return null;
		}
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		return 0;
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		return 0;
	}
}


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

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.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39032675
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERДобрый день.
В принципе с ООП знаком. Понимаю что есть наследование, инкапсуляция и полиморфизм.
Столкнулся с такой новой для меня штукой как интерфейсы . Нарыл кучу примеров и пояснений, но до сих пор в голове не могу сформировать устойчивого и ясного понимания.

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

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

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

просто делай так всегда - и не задавай вопросов ;)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39032691
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
Уверен что ему когда нибудь уже понадобится базовый класс? ))))
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39032745
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverА вообще, хороший пример есть на сайте оракла, по-моему:
он хороший именно в своей области. Не буду говорить узкой)), но на пальцах:
- интрефейс это контракт между разрозненными группами или фирмами
- т.к. они разрознены _административно_, а не концептуально или по БЛ, то необходимы заглушки-контракты чтобы удобнее писать.
Но, если архитектор системы один, то ему не с кем договариваться. Он пойдёт от ООП-UML.
При желании, абстрактный базовый класс может выполнить ту же роль контракта. Их даже передают бывает для компиляции программ, чтобы исходники (платные) не передавать)).
Есть SOAP, тоже ничего себе контракт на другом уровне.
....
Ну а в принципе, пример понятен. Нужно сделать одно поведение для разрозненных объектов и упростить жизнь менеджерам. Главное не натягивать данный пример на всё подряд. Это не Мода-осень 2015. imho
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39032748
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Давай так - просто возьми себе за практику использовать интерфейсы везде .
я вижу ты читал ссылку
http://www.quizful.net/post/razlichie_v_primenenii_interfeysov_i_abstraktnih_klassov
но ничего там не понял.
- где будем размещать поле
Points - точки фигуры?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39032839
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Давай так - просто возьми себе за практику использовать интерфейсы везде.

О, работники сурового интерпрайза подтянулись :)

В ООП любой класс должен выполнять какую-то функцию. В т.ч. интерфейс.
Класс/интерфейс- абстракция. И он должен не только иметь ОДНУ ответственность, но и ИМЕТЬ ответственность.
А подход "всегда делай интерфейс" приводит к созданию кучи интерфейсов, которые не имеют никакой ответственности вообще.

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

Создавать же библиотеки "для всех" (пусть даже это в пределах кампании) всё одно не подпустят пока- там да, там надо хорош продумывать всё, чтобы не родить уродцев типа java.awt.Point.

Atum1просто делай так всегда - и не задавай вопросов ;)

Нет, надо просто понять базовые принципы ООП, тогда SOLID и т.п. будет видится тривиальщиной (хотя нет, буковка D там не следует из принципов ООП).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033118
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1Давай так - просто возьми себе за практику использовать интерфейсы везде .
я вижу ты читал ссылку
http://www.quizful.net/post/razlichie_v_primenenii_interfeysov_i_abstraktnih_klassov
но ничего там не понял.
- где будем размещать поле
Points - точки фигуры?

List<Points> getPoints() - в интерфейсе .

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

авторList<Points> getPoints() - в интерфейсе
=== зачем?
1. Оверхед
2. Точки приватные. Их никто пока не открывал.
Т.к. возможно надо будет перекрыть в наследниках.
Удачи!
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033228
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123авторсами точки в абстрактном классе :)
=== ну вот видишь))))) LOL

авторList<Points> getPoints() - в интерфейсе
=== зачем?
1. Оверхед
2. Точки приватные. Их никто пока не открывал.
Т.к. возможно надо будет перекрыть в наследниках.
Удачи
!

прям контратака тракслера :)

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

«композиция всегда лучше наследования» (с)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033246
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1прям контратака тракслера :)
=== ))) ну дак у меня разряд).
ну придется на каком то этапе для того чтобы скрыть интерфейсы
отказаться от тупого линейного наследования и перейти к Композиции .
«композиция всегда лучше наследования» (с)
===== это я уже пас. Есть три кита ООП. Пытаться сказать какой из 3-х тупой, а какой лучше второго без меня))

не будем додумывать. Главное начали от печки - от abstract class. А interface по надобности.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033258
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123не будем додумывать. Главное начали от печки - от abstract class. А interface по надобности.

ну так есть же еще Миксины и трейты че мы только на abstract и interface застряли :)?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033268
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1, ну дак много есть интересного. Вон доллар за окном дорожает).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033274
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1, ну дак много есть интересного. Вон доллар за окном дорожает).

ОФФ

так это хорошо :)

"Путин считает что обесценивание рубля нам выгодно ..." (с) - это не доллар растет , а рубль укрепляется :)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033282
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
))
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033458
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Давай так - просто возьми себе за практику использовать интерфейсы везде .
Начинай проектирование любого класса с интерфейса ...
если тебе будет нужен в процессе абстрактный класс вводи смело , но от интерфейсов не надо отказаться ... везде в первую очередь создавай интерфейс ... и потом уже по необходимости абстрактный класс , который будет имплементировать этот интерфейс ...

просто делай так всегда - и не задавай вопросов ;)
Так можно родить новый антипаттерн. Под названьем "засилие интерфейсов". Или Interfaces dominance.
И следующие лет 10 бороться с ним вводя новые сущности типа "фасадных" интерфейсов.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033611
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТак можно родить новый антипаттерн. Под названьем "засилие интерфейсов". Или Interfaces dominance.
И следующие лет 10 бороться с ним вводя новые сущности типа "фасадных" интерфейсов.

У меня такое подозрение, что интерфейсы в Java ввели, потому что не было header-файлов, как в C/C++.
Поэтому писать для каждого класса интерфейс, это стиль написания программ на C/C++.
<:o)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033639
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulmaytonТак можно родить новый антипаттерн. Под названьем "засилие интерфейсов". Или Interfaces dominance.
И следующие лет 10 бороться с ним вводя новые сущности типа "фасадных" интерфейсов.

У меня такое подозрение, что интерфейсы в Java ввели, потому что не было header-файлов, как в C/C++.


Чито?
header-файл в C это костыль в отсутствии модульности.
interface в java - костыль в отсутствии множественного наследования.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033652
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulmaytonТак можно родить новый антипаттерн. Под названьем "засилие интерфейсов". Или Interfaces dominance.
И следующие лет 10 бороться с ним вводя новые сущности типа "фасадных" интерфейсов.

У меня такое подозрение, что интерфейсы в Java ввели, потому что не было header-файлов, как в C/C++.
Поэтому писать для каждого класса интерфейс, это стиль написания программ на C/C++.
<:o)
Ошибочка вышла. Вввели потому что ООП а не аналогии с С++.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033660
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОшибочка вышла. Вввели потому что ООП а не аналогии с С++.

Если меня память не подводит, то в SmallTalk никаких интерфейсов не было.
Да и в самой парадигме ООП нет понятие интерфейсов.

А вот в C++ с которых "слизывали" Java.
"Java это C++ только лучше"
Были заголовки, которые несли смысловую нагрузку такую же как сейчас несут интерфейсы в Java.

<:o)
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033664
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulmaytonОшибочка вышла. Вввели потому что ООП а не аналогии с С++.

Если меня память не подводит, то в SmallTalk никаких интерфейсов не было.
Да и в самой парадигме ООП нет понятие интерфейсов.

А вот в C++ с которых "слизывали" Java.
"Java это C++ только лучше"
Были заголовки, которые несли смысловую нагрузку такую же как сейчас несут интерфейсы в Java.

<:o)
Это передёргивание правды. На Java оказали влияние около 10 языков и парадигм. Не стоит
выпячивать или натягивать С++.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033695
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто передёргивание правды. На Java оказали влияние около 10 языков и парадигм. Не стоит
выпячивать или натягивать С++.

Про header-interface это человек либо не знает C/C++, либо не знает java.

Но справедливости ради- у меня чёткое ощущение, что Гослинг действительно ничего, кроме С++, не знал.
Потому что он перетащил те баги С++, которые были связаны с бинарной совместимостью С и С++, в java, при том, что был eiffel, который (при всей его неуклюжести) содержал все идеи ООП (кроме метаклассов) в законченном виде (собственно все последующие новшества- только из ФП).
Для доказательства достаточно того факта, то для переменной доступ на чтение и запись совпадает...
Ну и прочее - return, main, "область видимости пакет"- бр...
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033721
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
    interface IValue {
        Object getValue();
    }
    interface IName {
        String getName();
    }
    class Procedure implements IName {
        @Override
        public String getName() {
            return "setProperty";
        }
    }
    class Function implements IName, IValue {
        @Override
        public String getName() {
            return "getProperty";
        }
        @Override
        public Object getValue() {
            return null;
        }
    }



на абстрактных функцию, переменную и т.д. не реализуешь
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033735
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,
я те заголовки никогда не любил...по практичности.
Уж слишком они были объёмные и где то там лежали....)) отдельно от кода.
Потом на Delphi оооочень понравилась компактность кода )))
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39033777
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
am_sasaна абстрактных функцию, переменную и т.д. не реализуешь
здесь больше не о к оде компилятора рассуждаем. А о _прикладном_ коде. Т.е. там где БЛ и ближе к пониманию простыми программистами.
...
Рейтинг: 0 / 0
123 сообщений из 123, показаны все 5 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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