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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Abstract class vs Interface, критерии? 
:(
    Опции темы
Exception
  Дата 13.6.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 29
Всего: 186



Столкнулся с вопросом при реализации паттерна Abstract Factory на C#. Какую языковую конструкцию предпочтительнее употребить для абстрактной фабрики - абстрактный класс или интерфейс? И вообще - когда что употреблять лучше? Хотелось бы услышать ваши домыслы по этму вопросу.  

Это сообщение отредактировал(а) Exception - 13.6.2006, 18:28
PM   Вверх
sammix
Дата 13.6.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Насколько я помню, абстрактные классы были давно, а интерфейсы являются новичками.
Даже само слово интерфейс как то больше по юзерски. Допустим юзеру нужно из класса какуюто определённую функциональность, тут интерфейс лучше, потому что юзер приводит класс к нужному ему интерфейсу, и получает список только нужной ему функциональности.
Ну а если класс создавался при использовании абстрактных классов, то юзер соответсвенно получит из класса целую кучу функциональности нужной и не нужной. При этом создаётся еффект мусора  smile 

Да и тем более класс может имплементить кучу интерфейсов, а наследовать только 1 класс. ( ну это я думаю вы знаете ).  

Это сообщение отредактировал(а) sammix - 13.6.2006, 19:45
PM MAIL   Вверх
Exception
Дата 13.6.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 29
Всего: 186



Это понятно. Вопрос - что предпочтительнее именно в данном случае:


Цитата(Exception @  13.6.2006,  19:27 Найти цитируемый пост)
при реализации паттерна Abstract Factory 


Добавлено @ 20:16 
Глянул сюда:
http://rsdn.ru/article/Patterns/AbstractFactory.xml

Тут интерфейс оказывается всё-таки удобнее ввиду возможного множественного наследования. 
PM   Вверх
Dark Wanderer
Дата 13.6.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Простите за незнание, но что это за конструкция такая со "<>". Чё это вообще означает? 
--------------------
  
PM MAIL   Вверх
Void
Дата 13.6.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Dark Wanderer, читать MSDN о дженериках. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Dark Wanderer
Дата 13.6.2006, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Void, спасибо! 
--------------------
  
PM MAIL   Вверх
VisualProgrammerNET
Дата 14.6.2006, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


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

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



Никогда бы не подумал, что Exception что-то не знает...  smile  


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
ivashkanet
Дата 14.6.2006, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Пишу чисто мое ИМХО. Не читая никаких умных книжек и совсем не представляя что такое 
Цитата(Exception @  13.6.2006,  18:27 Найти цитируемый пост)
паттерна Abstract Factory на C#

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

P.S. А в принципе между ними вообще нет никакой разници (кроме отсутствия множественного наследования от абстрактного класса). 
PM MAIL WWW ICQ   Вверх
Сарт
Дата 15.6.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вставлю свои 5 копеек фирмы Philips, продукция-чайник.
Насколько я понял
--интерфейс предлагает к наследованию ТОЛЬКО методы.
абстрактный класс же --не только методы но и другие вкусности.

--Интерфейс--наследовать сколько влезет,множественное наследие и прочее
Абстрактный класс-не прокатит множественное наследие=)

Так что подумай,что те нужнее--методы или методы+еще что то--и на основании этого делай выводы=). 
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
mr.DUDA
Дата 15.6.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Сарт @  15.6.2006,  15:48 Найти цитируемый пост)
--интерфейс предлагает к наследованию ТОЛЬКО методы.

А как же события и свойства ?  smile 

 


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 15.6.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 29
Всего: 186



Цитата(Сарт @  15.6.2006,  16:48 Найти цитируемый пост)
Так что подумай,что те нужнее--методы или методы+еще что то--и на основании этого делай выводы=).  


Только методы. Но, с другой стороны,

Цитата(ivashkanet @  14.6.2006,  11:02 Найти цитируемый пост)
абстактный класс --- это некий каркас, на который потом одевается функциональность


что также присутствует.


Цитата(ivashkanet @  14.6.2006,  11:02 Найти цитируемый пост)
и совсем не представляя что такое 
Цитата(Exception @  13.6.2006,  18:27 )
паттерна Abstract Factory на C#


Учить паттерны, живо smile ! 
PM   Вверх
Сарт
Дата 15.6.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Так я ж и сказал ---компания Philips, продукт-чайник=)) Что знал то посоветовал. 
P.S 
че за юмор--мессаги пишу,а кроличество этих мессаг не увеличивается?? сення во флейме точно больше 3-ех мессаг писал а как было 48 так и осталось=) 
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
mr.DUDA
Дата 15.6.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Сарт, флеймовые не засчитываются

 smile  


--------------------
user posted image
PM MAIL WWW   Вверх
Сарт
Дата 15.6.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ясно,сенкс=) 
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
ivashkanet
Дата 15.6.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Сарт @  15.6.2006,  17:37 Найти цитируемый пост)
 а как было 48 так и осталось=) 

Ты лучше расскажи как ты минус заработал  smile  
PM MAIL WWW ICQ   Вверх
Сарт
Дата 15.6.2006, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



да так,выкинул ссылку на страницу "На йух" . По ходу так=)) А вообще фиг его знает=) 
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Exception
Дата 16.6.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 29
Всего: 186



Модератор: Давайте вернёмся к теме обсуждения. 
PM   Вверх
VisualProgrammerNET
Дата 16.6.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


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

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



В основном использую абстрактные классы. А интерфейсы - только для того, что объединить некоторые из них в некое соответствие, которое можно было бы потом использовать в виде List<MyInterface> 


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
ivashkanet
Дата 16.6.2006, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Exception, а что ты еще хочешь???
Все кто мог уже свое мнение высказали. В остальном решать тебе. Что лучше использовать. 
PM MAIL WWW ICQ   Вверх
Сарт
Дата 16.6.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ты расскажи что ты хочешь сделать тогда может и посоветуем=). Точнее ты хочешь подрубить много функция или подрубать эти функции к разным? 
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
VisualProgrammerNET
Дата 17.6.2006, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


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

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



 smile 
Сарт, ты уж извини, но имхо ты навряд ли чем-то можешь помочь Exception'у  smile  


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
ivashkanet
Дата 17.6.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



 smile VisualProgrammerNET, извини, но это не наше дело кто как и чем пытается помочь.
Каждый помогает по мере сил. И если Сарт только начинающий программер, то это все равно ровным счетом ничего не значит.
ИХМО, спасибо, Сарт, за попытку помочь smile 
 
PM MAIL WWW ICQ   Вверх
arilou
Дата 17.6.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Exception @  13.6.2006,  18:27 Найти цитируемый пост)
Столкнулся с вопросом при реализации паттерна Abstract Factory на C#. Какую языковую конструкцию предпочтительнее употребить для абстрактной фабрики - абстрактный класс или интерфейс? И вообще - когда что употреблять лучше? Хотелось бы услышать ваши домыслы по этму вопросу.  

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

Интерфейс отличается от абстрактного класса тем, что не содержит реализации методов, св-в, событий, только их описание. Говоря языком профессионалов ( smile шутка), интерфейс определяет контракт, по которому может работать какой-то класс.

Абстрактный класс тоже определяет контракт, но может содержать в себе реализацию некоторых методов, а реализацию других возложить на потомков.

smile  Не надо путать наследование и реализацию интерфейса. От интерфейсов не наследуются, их реализуют!  


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
ivashkanet
Дата 17.6.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(arilou @  17.6.2006,  11:54 Найти цитируемый пост)
Интерфейс отличается от абстрактного класса тем, что не содержит реализации методов, св-в, событий, только их описание.

Чет я запутался  smile 
ИМХО, абстрактный класс то же не может содержать никаких реализаций методов.  smile  
PM MAIL WWW ICQ   Вверх
arilou
Дата 17.6.2006, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



ivashkanet, ты запутался  smile

Добавлено @ 13:46 
Тут "ИМХО" не может быть. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Сарт
Дата 17.6.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Может,насколько я помню=))

 
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
ivashkanet
Дата 18.6.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(arilou @  17.6.2006,  13:45 Найти цитируемый пост)
ivashkanet, ты запутался
Цитата(Сарт @  17.6.2006,  19:50 Найти цитируемый пост)
Может,насколько я помню
 Действительно может  smile 

Наверное, все отличие интерфейсов от абстрактных классов и кроется тут:
Цитата(arilou @  17.6.2006,  11:54 Найти цитируемый пост)
Интерфейс отличается от абстрактного класса тем, что не содержит реализации методов, св-в, событий, только их описание.

Потому, что у меня прошла даже такая штука (полиморфизмом, вроде,  называется)
Код

class Program
    {
        static void Main(string[] args)
        {
            IMyWriteble[] mass = new IMyWriteble[2];
            mass[0] = new MyClass();
            mass[1] = new MyClass1();
            foreach (IMyWriteble i in mass) { i.write(); }
            Console.ReadKey();
        }
    }
    interface IMyWriteble { void write(); }
    class MyClass : IMyWriteble
    {
        public void write() { Console.WriteLine("It is a MyClass"); }
    }
    class MyClass1 : IMyWriteble
    {
        public void write() { Console.WriteLine("It is a MyClass1"); }
    }




 
PM MAIL WWW ICQ   Вверх
Pitc
Дата 19.6.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Потому, что у меня прошла даже такая штука

А счего она должна не пройти? 
PM MAIL ICQ   Вверх
ivashkanet
Дата 19.6.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



С того, что я в такие дебри никогда не лез. Вот. (Опыт работы с .Net ~6 месяцев) 
PM MAIL WWW ICQ   Вверх
Pitc
Дата 19.6.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

 void write();
  
  i.write()

 public void write() { Console.WriteLine("It is a MyClass1"); }



Название методов в C# пиши с большой буквы.(нас за такое написание в универе драли не по детски) (т.е. public void Write())


arilou, могу добавить что в абстрактном классе могут содержтся не только абстрактные компаненты,  а в интерфейсе все компаненты являются неявно абстрактные, модефикатор доступа неявно public. 
PM MAIL ICQ   Вверх
ivashkanet
Дата 19.6.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



 smile Pitcеще раз наедешь, отдеру тебя  smile 
Этот пример был написан за 5 минут. 
Цитата(Pitc @  19.6.2006,  13:25 Найти цитируемый пост)
arilou, могу добавить что в абстрактном классе могут содержтся не только абстрактные компаненты,  а в интерфейсе все компаненты являются неявно абстрактные, модефикатор доступа неявно public. 

Что добавить??? Это же он сам и написал: 
Цитата(arilou @  17.6.2006,  11:54 Найти цитируемый пост)
Интерфейс отличается от абстрактного класса тем, что не содержит реализации методов, св-в, событий, только их описание

Или обдумывать прочитанное вас в универе не учили  
PM MAIL WWW ICQ   Вверх
Pitc
Дата 19.6.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Что добавить??? Это же он сам и написал: 

Сморозил. Извиняюсь.  
PM MAIL ICQ   Вверх
mr.DUDA
Дата 19.6.2006, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232




 ! 
mr.DUDA
Не ссоримся, конструктивно дискутируем, излучаем позитивные эмоции :)
 


--------------------
user posted image
PM MAIL WWW   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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