| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Abstract class vs Interface |
| Автор: Exception 13.6.2006, 18:27 |
| Столкнулся с вопросом при реализации паттерна Abstract Factory на C#. Какую языковую конструкцию предпочтительнее употребить для абстрактной фабрики - абстрактный класс или интерфейс? И вообще - когда что употреблять лучше? Хотелось бы услышать ваши домыслы по этму вопросу. |
| Автор: sammix 13.6.2006, 19:29 |
| Насколько я помню, абстрактные классы были давно, а интерфейсы являются новичками. Даже само слово интерфейс как то больше по юзерски. Допустим юзеру нужно из класса какуюто определённую функциональность, тут интерфейс лучше, потому что юзер приводит класс к нужному ему интерфейсу, и получает список только нужной ему функциональности. Ну а если класс создавался при использовании абстрактных классов, то юзер соответсвенно получит из класса целую кучу функциональности нужной и не нужной. При этом создаётся еффект мусора Да и тем более класс может имплементить кучу интерфейсов, а наследовать только 1 класс. ( ну это я думаю вы знаете ). |
| Автор: Exception 13.6.2006, 20:05 |
| Это понятно. Вопрос - что предпочтительнее именно в данном случае: Добавлено @ 20:16 Глянул сюда: http://rsdn.ru/article/Patterns/AbstractFactory.xml Тут интерфейс оказывается всё-таки удобнее ввиду возможного множественного наследования. |
| Автор: Dark Wanderer 13.6.2006, 22:26 |
| Простите за незнание, но что это за конструкция такая со "<>". Чё это вообще означает? |
| Автор: Void 13.6.2006, 22:29 |
| Dark Wanderer, читать http://msdn.microsoft.com/vcsharp/2005/overview/language/generics/ о дженериках. |
| Автор: Dark Wanderer 13.6.2006, 22:36 |
| Void, спасибо! |
| Автор: VisualProgrammerNET 14.6.2006, 02:24 |
| Никогда бы не подумал, что Exception что-то не знает... |
| Автор: ivashkanet 14.6.2006, 10:02 |
| Пишу чисто мое ИМХО. Не читая никаких умных книжек и совсем не представляя что такое Интерфейсы нужны для добавления некоторому классу функциональности (т.е. он уже есть, но ему чего-то нехватает). А абстактный класс --- это некий каркас, на который потом одевается функциональность. Но родительским типом становится наш абстрактный класс. Со всеми вытекающими последствиями. P.S. А в принципе между ними вообще нет никакой разници (кроме отсутствия множественного наследования от абстрактного класса). |
| Автор: Сарт 15.6.2006, 15:48 |
| Вставлю свои 5 копеек фирмы Philips, продукция-чайник. Насколько я понял --интерфейс предлагает к наследованию ТОЛЬКО методы. абстрактный класс же --не только методы но и другие вкусности. --Интерфейс--наследовать сколько влезет,множественное наследие и прочее Абстрактный класс-не прокатит множественное наследие=) Так что подумай,что те нужнее--методы или методы+еще что то--и на основании этого делай выводы=). |
| Автор: mr.DUDA 15.6.2006, 16:41 |
А как же события и свойства ? |
| Автор: Сарт 15.6.2006, 17:37 |
| Так я ж и сказал ---компания Philips, продукт-чайник=)) Что знал то посоветовал. P.S че за юмор--мессаги пишу,а кроличество этих мессаг не увеличивается?? сення во флейме точно больше 3-ех мессаг писал а как было 48 так и осталось=) |
| Автор: mr.DUDA 15.6.2006, 17:45 |
| Сарт, флеймовые не засчитываются |
| Автор: Сарт 15.6.2006, 19:43 |
| Ясно,сенкс=) |
| Автор: ivashkanet 15.6.2006, 19:44 |
Ты лучше расскажи как ты минус заработал |
| Автор: Сарт 15.6.2006, 21:59 |
| да так,выкинул ссылку на страницу "На йух" . По ходу так=)) А вообще фиг его знает=) |
| Автор: Exception 16.6.2006, 19:52 |
| Модератор: Давайте вернёмся к теме обсуждения. |
| Автор: VisualProgrammerNET 16.6.2006, 22:00 |
| В основном использую абстрактные классы. А интерфейсы - только для того, что объединить некоторые из них в некое соответствие, которое можно было бы потом использовать в виде List<MyInterface> |
| Автор: ivashkanet 16.6.2006, 22:25 |
| Exception, а что ты еще хочешь??? Все кто мог уже свое мнение высказали. В остальном решать тебе. Что лучше использовать. |
| Автор: Сарт 16.6.2006, 22:34 |
| Ты расскажи что ты хочешь сделать тогда может и посоветуем=). Точнее ты хочешь подрубить много функция или подрубать эти функции к разным? |
| Автор: VisualProgrammerNET 17.6.2006, 09:09 |
| Сарт, ты уж извини, но имхо ты навряд ли чем-то можешь помочь Exception'у |
| Автор: ivashkanet 17.6.2006, 10:42 |
| Каждый помогает по мере сил. И если Сарт только начинающий программер, то это все равно ровным счетом ничего не значит. ИХМО, спасибо, Сарт, за попытку помочь |
| Автор: arilou 17.6.2006, 11:54 | ||
Значицца так. Выбор между абстрактным классом и интерфейсом не зависит от того, в каком паттерне ты их хочешь применить, да и вообще речь тут о паттернах не идет. Давайте вспомним, чем они между собой отличаются. Интерфейс отличается от абстрактного класса тем, что не содержит реализации методов, св-в, событий, только их описание. Говоря языком профессионалов ( Абстрактный класс тоже определяет контракт, но может содержать в себе реализацию некоторых методов, а реализацию других возложить на потомков. |
| Автор: ivashkanet 17.6.2006, 13:41 | ||
Чет я запутался ИМХО, абстрактный класс то же не может содержать никаких реализаций методов. |
| Автор: arilou 17.6.2006, 13:45 |
| ivashkanet, ты запутался Добавлено @ 13:46 Тут "ИМХО" не может быть. |
| Автор: Сарт 17.6.2006, 19:50 |
| Может,насколько я помню=)) |
| Автор: ivashkanet 18.6.2006, 14:09 | ||||
| Действительно может Наверное, все отличие интерфейсов от абстрактных классов и кроется тут:
Потому, что у меня прошла даже такая штука (полиморфизмом, вроде, называется)
|
| Автор: Pitc 19.6.2006, 12:25 | ||
А счего она должна не пройти? |
| Автор: ivashkanet 19.6.2006, 12:52 |
| С того, что я в такие дебри никогда не лез. Вот. (Опыт работы с .Net ~6 месяцев) |
| Автор: Pitc 19.6.2006, 13:25 | ||
Название методов в C# пиши с большой буквы.(нас за такое написание в универе драли не по детски) (т.е. public void Write()) arilou, могу добавить что в абстрактном классе могут содержтся не только абстрактные компаненты, а в интерфейсе все компаненты являются неявно абстрактные, модефикатор доступа неявно public. |
| Автор: ivashkanet 19.6.2006, 13:31 | ||||
| Этот пример был написан за 5 минут.
Что добавить??? Это же он сам и написал:
Или обдумывать прочитанное вас в универе не учили |
| Автор: Pitc 19.6.2006, 13:40 | ||
Сморозил. Извиняюсь. |
| Автор: mr.DUDA 19.6.2006, 20:21 | ||
|