24 / 24 / 1
Регистрация: 16.05.2012
Сообщений: 285
|
|
1 | |
Интерфейсы и абстрактные классы: каково их назначение12.09.2012, 16:07. Показов 3775. Ответов 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
|
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
|
||||||
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
|
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
|
|
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
Проблема в понимании ООП(абстрактные классы, классы интерфейсы) Абстрактные классы и интерфейсы Абстрактные классы. Интерфейсы Абстрактные классы и интерфейсы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Блоги программистов | |||||
Обновление сайта www.historian.by
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
|
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
|
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list):
s=^y]
p=x and y
for i in range(1,len(x)):
s. append((x^y)^p)
p=(x and y)or(p and (x or y))
return s
x=list()
y=list()
|
Это мы не проходили, это нам не задавали...(асихронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
|
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
|
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения
PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
|
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
|
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
|
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9
Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
|
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev
wget. . .
|
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin.
Есть ещё регистры,. . .
|
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps
Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
|