Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C# | Interface (теоретический вопрос) 
V
    Опции темы
VOX
Дата 3.12.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: нет
Всего: 1



   Доброе утро!
   Господа, у меня вопрос, который относится к использованию Интерфейсов.
В С++ было множественное наследование, в языке С# его нет.
Раньше программируя на С++ Интерфейсы именно мне использовать не
приходилось. Я обратил на этот инструмент изучая язык С#.
------------------------------------------------------------------------------------------
   Обходя проблему наследования в С# можно создать промежуточный класс,
выход сомнительный но всё же. В сети я нашел статью, в которой говорится о том,
что благодаря Интерфейсам, можно каким то образом обойти отсутствие множественного
наследования. Так же был приведен пример, где один объект(Книга), имеет метод Листать(),
я создаю новый объект(Блокнот), его ведь тоже можно листать, тут как раз якобы мне поможет
инструмент Интерфейс, но ведь реализация всё равно должна присутствовать, так какой же смысл
от этого, я же мог сделать эту реализацию, при этом не используя Интерфейс?
-------------------------------------------------------------------------------------------  
   Вопрос я задал из-за недостатка знаний и частичного ( а возможно и полного) непонимания
смысла применения Интерфейсов. Прошу помощи в разъяснении, Спасибо!
PM MAIL   Вверх
RWander
Дата 3.12.2009, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: 1
Всего: 6



посмотри в сторону паттернов DI/IoC-контейнер, может станет понятней смысл интерфейсов. Вообще, когда начнешь реально работать с .NET и языком C# в частности, сразу станет все понятно  smile 


Это сообщение отредактировал(а) RWander - 3.12.2009, 09:23


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
VOX
Дата 3.12.2009, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: нет
Всего: 1



как я понимаю речь идет об этом
Но к сожалению прочитав статью, я не смог понять смысл.
Может как то кратко на примере могли бы объяснить, спасибо!

PM MAIL   Вверх
mrbrooks
Дата 3.12.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Цитата(VOX @  3.12.2009,  09:05 Найти цитируемый пост)
Раньше программируя на С++ Интерфейсы именно мне использовать не
приходилось.

В С++ как таковых интерфейсов нет. Однако они используется в технологии COM.

Цитата(VOX @  3.12.2009,  09:05 Найти цитируемый пост)
В сети я нашел статью, в которой говорится о том,
что благодаря Интерфейсам, можно каким то образом обойти отсутствие множественного
наследования.

Ага. Твой класс может наследовать множество интерфейсов. Только не стоит забывать что интерфейс это по сути абстрактный класс - и следовательно ты должен переопределить все их методы.

Цитата(VOX @  3.12.2009,  09:05 Найти цитируемый пост)
Так же был приведен пример, где один объект(Книга), имеет метод Листать(),
я создаю новый объект(Блокнот), его ведь тоже можно листать, тут как раз якобы мне поможет
инструмент Интерфейс, но ведь реализация всё равно должна присутствовать, так какой же смысл
от этого, я же мог сделать эту реализацию, при этом не используя Интерфейс?

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

Цитата(VOX @  3.12.2009,  09:05 Найти цитируемый пост)
   Вопрос я задал из-за недостатка знаний и частичного ( а возможно и полного) непонимания
смысла применения Интерфейсов. 

Поймешь когда напишешь свой класс который надо отсортировать, сравнить, перебрать в foreach. Эти вещи придут с опытом и реализацией ряда реальных задач. Их пальца высасывать - не есть айс.
PM MAIL   Вверх
ДобренькийПапаша
Дата 3.12.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Позволю себе процитировать немного из книги "банды четырёх":
"Важно также понимать различие между наследованием класса и наследованием интерфейса. В случае наследования класса реализация объекта определяется в терминах реализации другого объекта. Проще говоря, это механизм разделения кода и представления. Напротив, наследование интерфейса описывает, когда один объект можно использовать вместо другого."

Если по C# то ещё хочу добавить, что разберитесь в разнице между интерфейсом и абстрактным классом и к какой разнице приводит наследование одного и другого.

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


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
tol05
Дата 3.12.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 36
Всего: 170



ДобренькийПапаша, Сами цитируете "четырех" и тут же 
Цитата(ДобренькийПапаша @  3.12.2009,  08:58 Найти цитируемый пост)
надо постараться избежать углубления в так называемые паттерны
непонятно... И почему "так называемые"? А как их еще можно назвать?
По моему скромному мнению - если стараться избегать анализировать ООП, то нужно также стараться избегать разговоров о нем...

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

О интерфейсах (да и обо всем остальном тоже )) ) хорошо написал Рихтер ("CLR via C#")




--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
VOX
Дата 3.12.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: нет
Всего: 1



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

using System;
using System.Collections;

class MainClass
{
    public static void Main(string[] args)
    {
        ArrayString ar = new ArrayString();
        foreach (string s in ar)
        {
            Console.WriteLine(s); 
        }
    }
}

class ArrayString : IEnumerator
{
public IEnumerator GetEnumerator()
{
 return  new ArrayString();
}
public bool MoveNext()
{
    i++;
    if (i==3) return false;
    else return true;
}
public void Reset()
{
i=-1;
}
public object Current
{
get
{
return arstring[i];
}
}
private int i=-1;
private string[] arstring = new string[3] {"hello","collection","class"};
}




Всем спасибо! +++
PM MAIL   Вверх
tol05
Дата 3.12.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 36
Всего: 170



основное применение интерфейсов - определение контракта, которому должен соответствовать объект (что объект обязуется предоставить)

особенно полезно - при построении любых распределенных приложений

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

Это сообщение отредактировал(а) tol05 - 3.12.2009, 11:53


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1042 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.