![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
VOX |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 21.1.2009 Репутация: нет Всего: 1 |
Доброе утро!
Господа, у меня вопрос, который относится к использованию Интерфейсов. В С++ было множественное наследование, в языке С# его нет. Раньше программируя на С++ Интерфейсы именно мне использовать не приходилось. Я обратил на этот инструмент изучая язык С#. ------------------------------------------------------------------------------------------ Обходя проблему наследования в С# можно создать промежуточный класс, выход сомнительный но всё же. В сети я нашел статью, в которой говорится о том, что благодаря Интерфейсам, можно каким то образом обойти отсутствие множественного наследования. Так же был приведен пример, где один объект(Книга), имеет метод Листать(), я создаю новый объект(Блокнот), его ведь тоже можно листать, тут как раз якобы мне поможет инструмент Интерфейс, но ведь реализация всё равно должна присутствовать, так какой же смысл от этого, я же мог сделать эту реализацию, при этом не используя Интерфейс? ------------------------------------------------------------------------------------------- Вопрос я задал из-за недостатка знаний и частичного ( а возможно и полного) непонимания смысла применения Интерфейсов. Прошу помощи в разъяснении, Спасибо! |
|||
|
||||
RWander |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 4.5.2006 Где: Russia.Udm.Izhevs k Репутация: 1 Всего: 6 |
посмотри в сторону паттернов DI/IoC-контейнер, может станет понятней смысл интерфейсов. Вообще, когда начнешь реально работать с .NET и языком C# в частности, сразу станет все понятно
![]() Это сообщение отредактировал(а) RWander - 3.12.2009, 09:23 -------------------- Microsoft Certified Technology Specialist - ASP.NET Applications |
|||
|
||||
VOX |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 21.1.2009 Репутация: нет Всего: 1 |
как я понимаю речь идет об этом
Но к сожалению прочитав статью, я не смог понять смысл. Может как то кратко на примере могли бы объяснить, спасибо! |
|||
|
||||
mrbrooks |
|
||||||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 17 Всего: 306 |
В С++ как таковых интерфейсов нет. Однако они используется в технологии COM.
Ага. Твой класс может наследовать множество интерфейсов. Только не стоит забывать что интерфейс это по сути абстрактный класс - и следовательно ты должен переопределить все их методы. Надо почитать про парадигмы ООП камрад. В трех словах это - реализация должна быть отделена от интерфейса.
Поймешь когда напишешь свой класс который надо отсортировать, сравнить, перебрать в foreach. Эти вещи придут с опытом и реализацией ряда реальных задач. Их пальца высасывать - не есть айс. |
||||||
|
|||||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Позволю себе процитировать немного из книги "банды четырёх":
"Важно также понимать различие между наследованием класса и наследованием интерфейса. В случае наследования класса реализация объекта определяется в терминах реализации другого объекта. Проще говоря, это механизм разделения кода и представления. Напротив, наследование интерфейса описывает, когда один объект можно использовать вместо другого." Если по C# то ещё хочу добавить, что разберитесь в разнице между интерфейсом и абстрактным классом и к какой разнице приводит наследование одного и другого. Но по моему скромному мнению надо постараться избежать углубления в так называемые паттерны. Я так понимаю вы не профи (я тоже), и я считаю, что паттерны толком не поймёшь пока не встретишь какое-то место однажды, где сильно намучаешься и поймёшь что, что-то тут не так и как это обойти. Мне посоветовали взять книгу "Приёмы объектно-ориентированного проектирования" (очень известная книга), но не имея хорошего опыта за плечами, многое остаётся непонятным, а если точнее, то не непонятным, а понятным поверхностно... Хотя и толковой альтернативы я предложить не могу, кроме как программировать, программировать и ещё раз программировать. -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
ДобренькийПапаша, Сами цитируете "четырех" и тут же
По моему скромному мнению - если стараться избегать анализировать ООП, то нужно также стараться избегать разговоров о нем... Я бы так сказал: интерфейсы - задают поведение объекта, а классы инкапсулируют состояние и реализуют это самое поведение. У самого простого класса тоже есть свой интерфейс - это свойства и методы, за которые можно дергать ) У родственных классов базовый класс задает базовый интерфейс (а производный классы могут конечно его расширить) Но... можно у базового класса выделить весь интерфейс взаимодействия в отдельный тип (абсолютно без состояния). И оперировать этим типом. Этот тип - интерфейс. А базовый класс - его реализует. О интерфейсах (да и обо всем остальном тоже )) ) хорошо написал Рихтер ("CLR via C#") -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
VOX |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 21.1.2009 Репутация: нет Всего: 1 |
Всем спасибо за ответы, согласен, опыта надо больше, к сожалению в программировании
нет такого что книгу прочитал- всё понял( по-моему мнению), хотя думаю так не только в этой науке. Что касается Интерфейсов в С++, то правда, я использовал Iunknown для получения информации от ком сервера, а вот нашел хороший пример использования
Всем спасибо! +++ |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
основное применение интерфейсов - определение контракта, которому должен соответствовать объект (что объект обязуется предоставить)
особенно полезно - при построении любых распределенных приложений вот пример использования интерфейсов в .Net remoting. Независимо от кол-ва клиентов (их могут быть миллионы) каждый из клиентов один раз аплоадит себе сборку с интерфейсом и всю жизнь пользуется сервисами сервера. А реализация сервисов на сервере может меняться хоть каждый день и никто из клиентов никогда об этом не узнает, не потребует перекомпилировать его сборки и т.п. Главное - чтобы не менялся интерфейс сервера, которого ждет и с которым готов работать клиент. Это сообщение отредактировал(а) tol05 - 3.12.2009, 11:53 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |