0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
1

В чем смысл интерфейсов?

06.10.2014, 14:01. Показов 5385. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую,
Извините, что опять про интерфейсы.
Полдня курил форумы и статьи про зачем они нужны. С одной стороны, вроде бы понятно: интерфейс - это описание того, что должен уметь делать класс, т.е. если класс имплементирует интерфейс, то это как бы является гарантией, что данный класс будет содержать нужные методы.
Но с другой стороны, никакой гарантии я тут не вижу. Интерфейс гарантирует всего лишь, что класс будет содержать какой-то метод с определенным названием, получающий и возвращающий определенные типы данных, а что он реально делает - никому не известно.
Т.е. даже если я напишу типа
Java
1
2
3
4
5
interface addition {
int sum(int a, int b);
}
 
class c implements addition {}
То это вовсе не означает, что c.sum(int a, int b) даст мне сумму a и b, и все остается на совести разработчика этого класса.
И в чем же тогда профит?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2014, 14:01
Ответы с готовыми решениями:

В чем смысл приватной статической переменной?
Private static int AnyNumber собственно сабж, только что в видео увидел без объяснений. В чем...

Java WebStart в чем смысл?
Вот посидел почитал я про это и чего то не понял предназначение этого вебстарт?Зачем он нужен...

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

В чем суть интерфейсов?
За день я в интернете начиталась столько всего про интерфейсы, что запуталась до нельзя!!! И...

27
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
06.10.2014, 14:08 2
Профит как минимум в наследовании. Extends может быть только один , а implements - сколько угодна.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 14:29  [ТС] 3
Цитата Сообщение от chizz Посмотреть сообщение
Профит как минимум в наследовании. Extends может быть только один , а implements - сколько угодна.
В наследовании чего? Названий методов, которые еще не написаны?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.10.2014, 14:31 4
Severomor1, Гуглите полиморфизм.
0
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
06.10.2014, 14:48 5
Severomor1, приведу примитивный пример. Есть основной класс Животные и класс Волк, Заяц, Медведь. Все эти животные разные. Например класс Волк, Заяц и Медведь наследуют (основные свойства класса Животные, например вес, цвет и тд). А есть еще классы, которые реализуют действия животных, например классы: бегать, прыгать, нападать на людей, есть траву. Так вот, основную информацию с весом, цветом и тд все животные наследуют от основного класса, а вот умение бегать, прыгать и тд, каждое животное реализует отдельно. Тоесть к волку мы подключаем интерфейсы, бегать и нападать на людей, а к зайцу, бегать и есть траву.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 15:09  [ТС] 6
Цитата Сообщение от 1ds Посмотреть сообщение
Severomor1, приведу примитивный пример. Есть основной класс Животные и класс Волк, Заяц, Медведь. Все эти животные разные. Например класс Волк, Заяц и Медведь наследуют (основные свойства класса Животные, например вес, цвет и тд). А есть еще классы, которые реализуют действия животных, например классы: бегать, прыгать, нападать на людей, есть траву. Так вот, основную информацию с весом, цветом и тд все животные наследуют от основного класса, а вот умение бегать, прыгать и тд, каждое животное реализует отдельно. Тоесть к волку мы подключаем интерфейсы, бегать и нападать на людей, а к зайцу, бегать и есть траву.
Спасибо, это понятно. Но интерфейс же не содержит реализации, какой смысл, например, подключать интерфейс бегать, если все равно и у волка и у зайца мы должны написать реализацию методов этого интерфейса?
0
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
06.10.2014, 15:24 7
Severomor1, одно дело расширить класс, от которого объект наследует свойства, а другое допилить еще один лишний интерфейс.

Добавлено через 40 секунд
class c extends A implements addition1,addition2,addition3.... {}

Добавлено через 55 секунд
Может быть ситуация, что к классу А у вас нет доступа и вы его физически не можете модифицировать. Но есть выход! Интерфейсы
0
19 / 19 / 5
Регистрация: 26.12.2013
Сообщений: 168
06.10.2014, 15:29 8
Интерфейсы чаще используют как метки классов, что-то вроде шаблонов, для большей понимабельности кода(стандартизации).
0
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
06.10.2014, 15:36 9
Severomor1, хорошо, тогда смотрите так...Если между классами можно поставить отношение "является", то это наследование. Например волк является животным, но не каждое животное является волком. Тут идет наследование. Если класс, что-то реализует, нейкое действие (бегать, летать, плавать), то это является интерфейсами в данном случае. Вы главное поймите, что у вас волк получает интерфейс "охотиться", а заяц "есть траву", вот так описывается разница между объектами.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 15:38  [ТС] 10
Я, конечно, понимаю, что я нуб и опозорился, но профит от интерфейсов все равно пока не понял. )
Вот например с extends все понятно, мы получаем возможность использовать все методы класса, от которого мы наследуем. А implements не дает ничего, кроме требования реализовать в классе все методы интерфейса. Но если они нам нужны, то мы их можем реализовать и без интерфейса. Или он нужен исключительно для того, чтобы мы не забыли это сделать?
0
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
06.10.2014, 15:40 11
Смысл как минимум в том, что интерфейсы позволяют создать легко расширяемую ОО-систему и при разумном проектировании сэкономить на количестве кода(так как вместо того, чтобы всё время использовать конкретный тип и дублировать код, мы можем использовать полиморфизм). Если вам нужно будет поддерживать вашу программу, например надо будет постоянно добавлять новые возможности, без интерфейсов не обойтись. Конечно обойтись без них можно, но со временем вообще нереально будет поддерживать вашу систему. Почитайте о проектировании объектно-ориентированных систем, увидите, без абстракции там никак.
0
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
06.10.2014, 15:41 12
Severomor1, интерфейс может относиться к разным классам. Если класс наследует какой-то интерфейс, то он должен методы этого интерфейса хотя бы опубликовать у себя. Он их не обязан реализовывать. Можно оставить их пустыми и реализовать только нужные методы интерфейса.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 15:41  [ТС] 13
Цитата Сообщение от sashok991 Посмотреть сообщение
Интерфейсы чаще используют как метки классов, что-то вроде шаблонов, для большей понимабельности кода(стандартизации).
Вооот, я примерно так и думал. Что интерфейсы это что то сродни комментариям, типа, не забудьте в этом классе сделать такие то методы. Но это едва ли стоит тех восторгов, которые я читал о пользе интерфейсов.
0
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
06.10.2014, 15:42 14
Цитата Сообщение от Severomor1 Посмотреть сообщение
Что интерфейсы это что то сродни комментариям, типа, не забудьте в этом классе сделать такие то методы.
Это самое худшее, что можно было бы приписать интерфейсу.
0
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
06.10.2014, 15:45 15
Представьте себе USB-разъем на вашем компе. Это класс. А есть переходники с USB на микро-usb, на SD - вот это набор интерфейсов. И они подходят не только для вашего USB-разьема, но и для других USB-разъемов, которые наследуют этот интерфейс.

Добавлено через 1 минуту
Но чтобы ваш USB-разъем начал передавать данные - нужно реализовать метод интерфейса USB-out например. А класс SD например должен будет реализовать метод SD-in Этого интерфейса, чтобы получить данные от вашего USB.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 15:46  [ТС] 16
Цитата Сообщение от chizz Посмотреть сообщение
Severomor1, интерфейс может относиться к разным классам. Если класс наследует какой-то интерфейс, то он должен методы этого интерфейса хотя бы опубликовать у себя. Он их не обязан реализовывать. Можно оставить их пустыми и реализовать только нужные методы интерфейса.
Это понятно. Но ведь мы можем реализовать в классе эти же самые методы и без подключения интерфейса, правда же?
0
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
06.10.2014, 15:47 17
Severomor1, конечно можно. Но это будет не так гибко и модифицируемо. И эти методы будут подходить только к вашему классу и нигде больше (без переписывания кода)
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 15:57  [ТС] 18
Цитата Сообщение от chizz Посмотреть сообщение
Severomor1, конечно можно. Но это будет не так гибко и модифицируемо. И эти методы будут подходить только к вашему классу и нигде больше (без переписывания кода)
Таак, а вот это уже интересно. То есть если я напишу:

interface addition {
int sum(int a, int b);
}

class c implements addition {
int sum(int a, int b) {return a+b;}
}

то я смогу использовать данную реализацию метода sum где то еще, а не писать ее заново?
0
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
06.10.2014, 16:04 19
нет, реализацию нельзя. только объявление.

Т.е. если вы где-то еще напишете class d implements addition, то надо будет заново реализовывать метод sum.

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

Добавлено через 1 минуту
Таким образом, с одной стороны, интерфейс — это «договор», который обязуется выполнить класс, реализующий его, с другой стороны, интерфейс — это тип данных, потому что его описание достаточно чётко определяет свойства объектов, чтобы наравне с классом типизировать переменные. Следует, однако, подчеркнуть, что интерфейс не является полноценным типом данных, так как он задаёт только внешнее поведение объектов. Внутреннюю структуру и реализацию заданного интерфейсом поведения обеспечивает класс, реализующий интерфейс; именно поэтому «экземпляров интерфейса» в чистом виде не бывает, и любая переменная типа «интерфейс» содержит экземпляры конкретных классов.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 16:04  [ТС] 20
Цитата Сообщение от chizz Посмотреть сообщение
Т.е. если вы где-то еще напишете class d implements addition, то надо будет заново реализовывать метод sum.
Ну так все равно же заново реализовывать. В чем же тогда заключается гибкость и модифицируемость? Подключим мы интерфейс или не подключим, все равно в каждом классе надо писать метод sum.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2014, 16:04
Помогаю со студенческими работами здесь

В чем заключается необходимость интерфейсов?
Народ объясните мне новичку в чем заключается необходимость интерфейсов в С# и какую выгоду можно...

В чем смысл this
Доброго время суток...Объяснить пожалуйста в чем смысл this??? Такой вопрос в билете на зачете .......

В чем смысл?
Привет всем! Не могу понять - в чем смысл магазинов электронных книг? Можно ведь скачать абсолютно...

В чем смысл указателей?
Дорогие друзья, не могу понять смысл указателей в С++? Для чего они нужны? Если не трудно на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru