Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
82 / 82 / 12
Регистрация: 12.01.2011
Сообщений: 1,049
1

Интерфейсы - в чем их суть

21.03.2012, 17:19. Просмотров 3832. Ответов 7
Метки нет (Все метки)

В чем суть интерфейсов объясните пожалуйста.

Добавлено через 19 минут
А если быть точнее, то какова их практическая полезность? Приведите примеры если не трудно.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2012, 17:19
Ответы с готовыми решениями:

Интерфейсы и наследование - верно ли понята суть
Почитал про интерфейсы и их наследование, и вычитал что они являются аналогом наследования от...

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

В чём суть сборки?
Здравствуйте. Я верю, что тут действительно есть знатоки компьютерного железа и я обращаюсь к вам....

В чём суть оператора for(;;)
в чём суть оператора for(;;) как он работает?

7
Эксперт .NET
14692 / 11107 / 2918
Регистрация: 17.09.2011
Сообщений: 18,643
21.03.2012, 19:28 2
Лучший ответ Сообщение было отмечено как решение

Решение

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

Из этих понятий вытекает и практическое применение.
Простой пример: вот вы решили написать алгоритм сортировки массивов для любых типов, которые можно отсортировать. Ключевая часть любого сортировочного алгоритма - сравнение объектов.
Как определить, что элементы переданного в ваш метод массива можно сравнивать друг с другом?
Как быть увереным в том, что подсунутые вам элементы вообще подлежат сравнению?
Как быть увереным в том, что ваш алгоритм сможет сортировать объекты типов, которых еще в природе нет?
Ответ: ваш метод должен ставить условие: я сортирую только те объекты, у которых имеется определенный метод, позволяющий их сравнивать с другими объектами. Как "документально" заверить это условие? Путем приема на вход только тех элементов, которые реализуют интерфейс IComparable, в котором имеется метод CompareTo.
То есть ваши условия контракта: я сортирую только те объекты, которые реализуют необходимые для моей работы методы.
Другая сторона может согласиться на ваши условия и реализовать эти методы, тогда экземпляры этих классов можно будет сортировать через ваш алгоритм.
Ну а сам интерфейс, как сказано выше, - это контракт, который гарантирует реализацию конкретным классом конкретных методов.

В качестве другого примера - LINQ, который полностью построен на работе с интерфейсами IEnumerable<T>, гарантирующих, что классы, их реализующие, имеют метод GetEnumerator, который необходим для работы линка.

Именно интерфейсы, кстати, позволяют строить архитектуру плагинов.
11
82 / 82 / 12
Регистрация: 12.01.2011
Сообщений: 1,049
21.03.2012, 19:35  [ТС] 3
1) Что такое архитектура плагинов?

2) Часто ли Вы в своей практике создаете свои интерфейсы?

3) Читал на других форумах об интерфейсах и люди резко делятся на две категории, которые говорят что интерфейсы это не плохо и вторая группа, которая говорит, что интерфейсы это неоправданная фишка ООП и предлагают взамен его использовать что-то вроде наследования (как я понял эти рекомендации), Где правда, в Вашем понимании?
0
Эксперт .NET
14692 / 11107 / 2918
Регистрация: 17.09.2011
Сообщений: 18,643
21.03.2012, 19:53 4
Цитата Сообщение от ayrat_net Посмотреть сообщение
1) Что такое архитектура плагинов?
Файрфоксом пользуетесь? Аддоны всякие ставите туда?
Вот это она и есть.

Цитата Сообщение от ayrat_net Посмотреть сообщение
2) Часто ли Вы в своей практике создаете свои интерфейсы?
Постоянно. Еще не было ни одного проекта, над которым я работал, чтобы в нем не было хотя бы парочки интерфейсов.
И это только в собственных системах, что касается стандартных классов .NET, то там их еще больше напичкано.

Цитата Сообщение от ayrat_net Посмотреть сообщение
3) Читал на других форумах об интерфейсах и люди резко делятся на две категории, которые говорят что интерфейсы это не плохо и вторая группа, которая говорит, что интерфейсы это неоправданная фишка ООП и предлагают взамен его использовать что-то вроде наследования (как я понял эти рекомендации), Где правда, в Вашем понимании?
Да это из той же серии, что "пользоваться ли goto", "вызывать ли вручную сборщик мусора", "Джава или шарп?!", "Металлика или Моисеев?" и т.д., то есть фанатизм чистой воды.
Фанатизм = узколобие = непрофессионализм.

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

А теперь скажу страшную вещь: правда - это то, что выгодно лично вам.
Лично я считаю интерфейсы жутко удобной штукой, хотя с удовольствием использую и другие инструменты, вроде того же множественного наследования на плюсах.
1
82 / 82 / 12
Регистрация: 12.01.2011
Сообщений: 1,049
22.03.2012, 05:31  [ТС] 5
Благодарю Вас за полный ответ.

Добавлено через 9 часов 32 минуты
Вопрос по практическому применению.

Я делаю классы для таблиц работающих через модель Entities, то есть все эти классы должны иметь методы List<TICKERS_TABLE> Read() {/*TICKERS_TABLE - класс реализующий таблицу */}, void Add() {}, void Update() {}, void Delete() {}.

Вот интерфейс:

C#
1
2
3
4
5
6
7
    public interface ITable
    {
        List<должен быть класс реализующий таблицу> Read() ???????
        void Add();
        void Update();
        void Delete();
    }
List<должен быть класс реализующий таблицу> Read() ??????? - проблема возникает тут, я не знаю как сделать так чтобы в интерфейсе указать, не определенный класс что по умолчанию не правильно, а что-то абстрактное, как бы сказать что там должен быть класс реализующий таблицу.

Я надеюсь понятно объяснил, помогите пожалуйста.

Добавлено через 1 минуту
Вы не спите, о как я удачно попал то
0
Эксперт Java
4069 / 3803 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
22.03.2012, 08:35 6
Цитата Сообщение от ayrat_net Посмотреть сообщение
чтобы в интерфейсе указать, не определенный класс что по умолчанию не правильно, а что-то абстрактное, как бы сказать что там должен быть класс реализующий таблицу.
Вам нужно сделать Generic интерфейс
C#
1
2
3
4
5
6
7
    public interface ITable<T>
    {
        List<T> Read();
        void Add();
        void Update();
        void Delete();
    }
, можно наложить условие на тип T, чтобы он был наследником какого либо класса
2
Эксперт .NET
14692 / 11107 / 2918
Регистрация: 17.09.2011
Сообщений: 18,643
22.03.2012, 13:21 7
А если в будущем планируете использовать этот интерфейс для наследников класса, реализующего таблицу, то в ход вступает вариативность (или вариантность. Скажите уже как правильно по-русски!) интерфейсов, добавленная в четвертой версии фреймворка.
На этом месте у многих сносит крышу
1
82 / 82 / 12
Регистрация: 12.01.2011
Сообщений: 1,049
22.03.2012, 14:24  [ТС] 8
turbanoff,

Цитата Сообщение от turbanoff Посмотреть сообщение
чтобы он был наследником какого либо класса
Суть в том что он будет наследоваться не от одного класса, а от разных классов в зависимости от принадлежности к классу таблицы

kolorotur,
Ни слова не понял, надо почитать об этой мозговыносящей штуки, надеюсь свихнусь
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2012, 14:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

В чем суть continue в if-else
код первый. прата глава 7 упражнение 3. оператор continue отсутствует, все прекрасно работает....

В чем суть операторов << и >>
Здравствуйте. Уважаемые Форумчане, нужна помощь. Имеется следующий код if ((PINB&amp;(1 &lt;&lt;...

В чем суть PHP?
Ребят, подскажите пожалуйста правильно ли я понял суть PHP. Вот лежит на сервере код определенный....

Указатели - в чем суть?
Кто нибидь может мне обястнить укасзатели в С++,ато я некак не врубаюсь.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.