82 / 82 / 12
Регистрация: 12.01.2011
Сообщений: 1,049
|
|
1 | |
Интерфейсы - в чем их суть21.03.2012, 17:19. Просмотров 3832. Ответов 7
Метки нет Все метки)
(
В чем суть интерфейсов объясните пожалуйста.
Добавлено через 19 минут А если быть точнее, то какова их практическая полезность? Приведите примеры если не трудно.
0
|
|
21.03.2012, 17:19 | |
Интерфейсы и наследование - верно ли понята суть
В чём суть сборки? В чём суть оператора for(;;) |
|
![]() 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
|
![]() 14692 / 11107 / 2918
Регистрация: 17.09.2011
Сообщений: 18,643
|
|
21.03.2012, 19:53 | 4 |
Файрфоксом пользуетесь? Аддоны всякие ставите туда?
Вот это она и есть. Постоянно. Еще не было ни одного проекта, над которым я работал, чтобы в нем не было хотя бы парочки интерфейсов. И это только в собственных системах, что касается стандартных классов .NET, то там их еще больше напичкано. Да это из той же серии, что "пользоваться ли 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() {}. Вот интерфейс:
Я надеюсь понятно объяснил, помогите пожалуйста. Добавлено через 1 минуту Вы не спите, о как я удачно попал то ![]()
0
|
![]() |
||||||
22.03.2012, 08:35 | 6 | |||||
Вам нужно сделать Generic интерфейс
2
|
![]() 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,
Суть в том что он будет наследоваться не от одного класса, а от разных классов в зависимости от принадлежности к классу таблицы ![]() kolorotur, Ни слова не понял, надо почитать об этой мозговыносящей штуки, надеюсь свихнусь ![]()
0
|
22.03.2012, 14:24 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. В чем суть continue в if-else
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |