24 / 24 / 1
Регистрация: 16.05.2012
Сообщений: 285
|
|
1 | |
Интерфейсы и абстрактные классы: каково их назначение12.09.2012, 16:07. Показов 3759. Ответов 14
Метки нет (Все метки)
Прошу объяснить: зачем нужны эти объекты? Неужели нет таких ситуаций, где без них не обойтись? Вот например: интерфейсы могут быть использованы, чтобы занести объекты в массив неродственных классов на основе реализации этого интерфейса, но что мешает создать для них родителя? Или вот: абстрактные классы используются тогда, когда базовый класс вообще не нужен, а важны только его "родственники". Но ведь можно опять же, создать неабстрактного родителя... неужто дело только в экономии памяти?
Ах да, извиняюсь, не в том разделе создал! Надеюсь, перенесут!
0
|
12.09.2012, 16:07 | |
Ответы с готовыми решениями:
14
Интерфейсы и абстрактные классы Абстрактные классы и интерфейсы Абстрактные классы и интерфейсы. Разница Интерфейсы и абстрактные классы: обеспечить работу методов в конечном классе |
24 / 24 / 1
Регистрация: 16.05.2012
Сообщений: 285
|
|
12.09.2012, 16:15 [ТС] | 3 |
Да мне не нужно их сравнение, мне нужно пояснение, зачем делать с их помощью, если можно обойтись стандартными способами!
0
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
|||||||||||
12.09.2012, 16:38 | 4 | ||||||||||
в общем фишка такая, рассмотрю на примере:
мне нужно установить связь компьютера с неким устройством, причем устройство может быть связанно как по СОМ порту, так и по Езернету. при этом необходимо как минимум выполнения двух действий: посылки данных и их принятия. а теперь фишка: как в дальнейшем будет соединено устройство я не знаю, это зависит от конечного пользователя. а он соединит тем, что найдёт первым, но варианта предусмотреть нужно два. А реализация отправки данных по СОМ порту и по Езернету отличаются разительно. Выход - разработать интерфейс (какойнибудь IChannel), и объявить в нём методы (какиенибудь WriteData и ReadData). дальше разрабатываю 2 класса: ComChannel и EthernetChannel. выставляю поддержку интерфеса у обоих, и в каждом реализую методы приёма-передачи данных согласно их типу. т.е. методы имеют одно название, одни и те же входные параметры, одинаковые выходные параметры, но работают совершенно разным образом. Дальше - ещё проще: добавляю в класс устройства поле с типом интерфейса
а потом, в зависимости от того, что указал пользователь программе (т.е. то через что он соединил комп с устройством) создаю новый объект канала
2
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
12.09.2012, 16:46 | 5 |
WWWinplex,
Классы не поддерживают множественное наследование,это уже плюс к интерфейсам) + модификаторы доступа. +конструкторы\деструкторы,модификаторы доступа +ссылки на интерфейс и много много другого Примеры которые вы привели не определяют роль интерфейсов и абстр.классов,они как минимум не только для этого были созданы.
1
|
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
||||||
12.09.2012, 16:50 | 6 | |||||
Разумеется есть:
Нет, существуют ситуации, в которой просто не может быть дефолтной реализации некого метода или свойства, а может быть только абстракция. Ну а наличие хотя бы одного абстрактного свойства или метода автоматически делает весь класс абстрактным, что вполне разумно. Например, класс "Дверь", описывающий само понятие сабжа. Любую дверь можно закрыть или открыть - отсюда два метода Open и Close. Какая здесь может быть реализация по умолчанию? Есть двери обычные, раздвижные, автоматические и т.д., то есть способ закрытия и открытия зависит от конкретного типа двери. Для разных дверей нельзя описать некую общую процедуру закрытия или открытия, потому класс "Дверь" - это абстракция, общее понятие.
2
|
Администратор
|
|
12.09.2012, 16:51 | 7 |
И ещё одна вещь - интерфейсы помогают упростить стандартизацию кода. Как сделать, чтобы ваш класс мог быть перечисляемым в foreach? Реализуйте в нём методы интерфейса IEnumerable! Как сделать, чтобы можно было сравнивать (по типу больше/меньше) два экземпляра класса? Реализуйте в нём методы интерфейса IComparable! Так вы можете придумать какое-нибудь действие, и реализовать для всех классов вашего кода интерфейс, который вы соотносите с этим действием.
1
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
|
12.09.2012, 17:06 | 8 |
а вот и нетушки) класс Console содержит свойство TextWriter, которое поддерживает интерфейс IDisposable.
Но это я так, от безделья написал и из вредности нашел))
1
|
kolorotur
|
12.09.2012, 17:22
#9
|
0
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
12.09.2012, 17:38 | 10 |
0
|
24 / 24 / 1
Регистрация: 16.05.2012
Сообщений: 285
|
|
12.09.2012, 17:43 [ТС] | 11 |
Я вроде написал : неужто нет ситуаций, где без них не обойтись. Т.е. в любой ЛИ ситуации можно без них обойтись. Т.е. есть ли ситуации, где они незаменимы - вот что я хотел сказать. Спасибо всем за ответы, подожду, может еще кто-что напишет.
0
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
12.09.2012, 17:51 | 12 |
Конечно можно.Я вот каждый день обхожусь уже 2 месяца как,а то и больше
(не считая стандартов уже реализованных типа выше сказанного Console) Просто нужно ли копать лопатой,когда есть бульдозер?
0
|
Spectral-Owl
|
12.09.2012, 17:52
#13
|
Не по теме: вах, дорогой, по что обижаешься?) да и подумай, ЧЕМ мне может не нравится интерфейс, отвечающий за освобождение ресурсов? Я лишь тактично намекнул что в С# не использовать интерфейсы нельзя. Вообще. Пусть и косвенно, но они задействованы.
1
|
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
12.09.2012, 17:54 | 14 |
1
|
Администратор
|
|
12.09.2012, 18:15 | 15 |
При разработке приложения, которое поддерживает плагины (дополнения). Но возможно,kolorotur это подразумевал под словом "модули". В таком случае, прошу не судить за плагиат
0
|
12.09.2012, 18:15 | |
12.09.2012, 18:15 | |
Помогаю со студенческими работами здесь
15
Проблема в понимании ООП(абстрактные классы, классы интерфейсы) Абстрактные классы и интерфейсы Абстрактные классы. Интерфейсы Абстрактные классы и интерфейсы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |