|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.08.2009, 09:37 | #21 | |||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
2. Существуют механизмы по приведению к соответствующему типу. Если не удалось привести интерфейс к нужному, значит не то у нас из функции вернулось Цитата:
Цитата:
Множественное наследование трудно реализовывать и оно приводит к некоторым проблемам впоследствии. Поэтому во многих языках отказываются от него и вводят понятие интерфейса. Интерфейс не есть тип, т.е. с абстрактным классом у них ничего общего. Это просто описание методов (аттрибуты никакие в интерфейсах описываться не могут). Нужны интерфейсы для лучшей переносимости кода и снижению взаимозависимостей отдельных компонент посредством абстрагирования. Если я получаю интерфейс IStream, то мне важно, что это поток и он умеет то и это, а какая у него реализация и что он из себя представляет - не важно. Хоть это файловый поток, хоть по ftp там данные гоняются или еще как. Допустим, есть у нас сущности: дом, автомобиль, дом на колёсах вводим интерфейсы: IПомещение, IТранспорт Соответственно дом реализует интерфейс IПомещение, автомобиль - IТранспорт, а дом на колёсах - оба этих интерфейса. Гаишники у нас следят за поведением IТранспорт'а на дорогах, а что это за транспорт - их не волнует. Если вдруг решили добавить мотоцикл, то работу гаишников менять не надо (не надо только сейчас вдаваться в глубь ПДД ), ведь мотоцикл тоже реализует IТранспорт. А служанку наймём для уборки IПомещения, а там хоть гараж это, хоть заводское помещение, хоть дом на колёсах. Гаишники всю нужную информацию получат через интерфейс ITранспорт, а служанка - через IПомещение. В общем случае приводить объект одного интерфейса к другому не требуется и такая необходимость говорит скорее о корявом проектировании. |
|||
12.08.2009, 09:59 | #22 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
12.08.2009, 10:13 | #23 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Использую их редко, можно сказать почти и не использую. Когда читал про них в книге, понял для чего они, но сейчас уже все выветрилось В общем случае они для общения со сторонним софтом, к примеру веб сервисы - там только через интерфейс (смутно припоминаю). Внутри своей программы имхо они не нужны.
Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
|
12.08.2009, 10:27 | #24 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Классный пример.
С этого дня pu4koff мой духовный сенсэй, но как говорил Козьма Прутков - дураком я был, дураком и останусь . И так некая фирма (ну выберем совершенно случайно - Микрософт) решился заюзать интерфейс и создает нам космический челнок (между прочим на дворе 21 век) с интерфейсом IТранспорт. Все восхищены простотой и элегантностью решения. Все, кроме гаишников - IТранспорт? А почему на красный передвигается? Так, космонавты еще и взяток не дают...
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 12.08.2009 в 10:33. Причина: Исправил опечатку |
12.08.2009, 10:41 | #25 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
12.08.2009, 11:07 | #26 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
to Utkin, ну значит наследуем от IТранспорт (интерфейсы тоже прекрасно наследуются) IНаземныйТранспорт, IВодныйТранспорт, IКосмическийТранспорт и т.д. Гаишникам отдаём IНаземныйТранспорт, морской милиции IВодныйТранспорт, а космическим пиратам IКосмическийТранспорт. Только не надо изобретать космический корабль с возможностью езды по земле и посадки на воду, а то опять гаишники обижаться на космонавтов будут
Ну если откинуть COM, то, при наличии множественного наследования, подход с использованием интерфейсов мало нужен, ибо размывается разница между абстрактным классом и интерфейсом. Ну а в C# и Java без интерфейсов никуда. В делфях почему-то и без множественного наследования и интерфейсов я обходился и потому не знаю как там с ними дела обстоят. |
13.08.2009, 12:18 | #27 | ||
Oldschool geek
Форумчанин
Регистрация: 09.03.2009
Сообщений: 611
|
Цитата:
С тем же успехом можно на Питон жаловаться, особенно, когда обильно применяется утиная типизация. Цитата:
GUID — это хорошо. А реестр использовать необязательно. Если все возможности COM не использовать, то можно внутри процесса гонять свои объекты, никак их не регистрируя. |
||
13.08.2009, 12:31 | #28 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Вот например система Компас. Там хоть и есть описание (скудное) но все равно: Функа GetParamStruct возвращает указатель на интерфейс указанного типа. Тип указывается в параметрах, но черт его знает что она вернет если будет ошибка... Я то могу привести типы: Код:
Цитата:
Цитата:
P.S. Я не убеждаю отказываться кого-то от интерфейсов. Я всего лишь говорю что они крайне неудобны мне, ибо допускают ошибки на стадии проектирования.
I'm learning to live...
|
|||
13.08.2009, 14:28 | #29 | ||
Oldschool geek
Форумчанин
Регистрация: 09.03.2009
Сообщений: 611
|
Цитата:
Функа GetParamStruct возвращает указатель на объект указанного класса. Класс указывается в параметрах, но черт его знает что она вернет если будет ошибка... Цитата:
По идее, интерфейсы нужно приводить оператором "as", иначе как бы не получилось так, что указатель переинтерпретируется без проверки на соответствие. |
||
13.08.2009, 15:04 | #30 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Интерфейсы | Maks1978 | Общие вопросы C/C++ | 0 | 29.06.2009 22:11 |
Паскаль ООП. Примеры программ с использованием ООП | SeЯgey | Помощь студентам | 5 | 13.05.2009 21:55 |
Интерфейсы | MaZaHaKa | Общие вопросы Delphi | 1 | 30.11.2008 19:17 |
Философия программинга. | Cezar | Свободное общение | 43 | 15.03.2007 10:49 |