|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.08.2009, 14:41 | #1 |
Пользователь
Регистрация: 21.02.2008
Сообщений: 28
|
Интерфейсы. Философия ООП
Сижу и понемногу изучаю ООП. И не могу понять роль интерфейсов в ООП. Дайте, пожалуйста, наглядный пример. Я то понимаю, что интерфейсы созданы для наследования от них, но я не понимаю зачем, если их методы создаются пустыми, а у теле унаследованного класса пересоздаются наново. Не легче просто создать такой метод в классе, без наследования?
|
10.08.2009, 15:08 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
На самом же деле кода ты в интерфейсе обращаешся к конкретному имени, вызывается функция из массив. под номером, которы приписан к этому имени. Так что интерфейсы (диспатчи) это всего лишь понаименованный массив функционала. Они создаются под уже кем то готовый набор функций.
I'm learning to live...
|
|
10.08.2009, 15:09 | #3 |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
Многие не понимают роль интерфейсов, я и сам долго также думал, пока не появилась задача, которая решалась очень красиво благодаря интерфейсам. Приведу очень простой пример.
Допустим ты пишешь программу, которая работает с документами собственных форматов. Допустим эти форматы, похожи на Excel, Word и PowerPoint. Что ты делаешь, создаешь какой-то базовый класс (Document). В нем только базовые операции, типа Чтение. Наследуешь 3 класса(на каждый тип) от него. Тут у каждого появляется свои дополнительные методы, уникальные для каждого типа. Написали. Затем стоит задача, добавить печать этих документов, но печатать можно только Excel и Word. Решение №1. Написать простые методы в каждом классе. А в основной программе, проверять если это тип Excel, то печать, если Ppoint - то нет и т.д. Решение №2. Написать интерфейс, с пустым методом печать. В основной программе, смотрим если наследуется от нашего интерфейса, то печать, если нет - то не печатай. Пытался, как можно проще. Здесь пример на 3 типах. А когда я писал решение своей задачи, там было около 20. И представь, если я не использовал интерфейсы, то мне на каждую функцию типа Печать, надо было проверять все 20 типов, вместо 1 проверки. |
10.08.2009, 15:11 | #4 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Собственно, ни одного грамотного применения кроме как для работы с Офисом, я и не встречал (и то как пример). И сначала даже думал, что для этого и созданы .
Кстати, интерфейсы вроде как примочка интересная, но напрямую с ООП не связано.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 10.08.2009 в 15:15. |
10.08.2009, 15:16 | #5 |
Пользователь
Регистрация: 21.02.2008
Сообщений: 28
|
Hollander - спасибо, твой пример хороший.
Последний раз редактировалось Arhe; 10.08.2009 в 15:19. |
10.08.2009, 15:22 | #6 |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
Свой пример я просто с ходу придумал, а применял его для работы внутри моей программы и очень удачно.
|
10.08.2009, 16:01 | #7 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Да, на ум больше ничего и не приходит. В таком ключе - интерфейсы это приросток для работы с Офисом
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
10.08.2009, 16:14 | #8 |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
|
10.08.2009, 16:21 | #9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Я работаю с интерфейсами программируя CAD среду Компас. Так вот с высоты моего Икарства могу сказать что интерфейсы это пародия на нормальное ООП, такие себе а-ля классы, появившиеся (и тут уже скорее ИМХО) в связи с тем что программы написанные на разных языка программирования, которые используют ООП очень непросто связать воедино, потому применяют Диспатчеры, которые можно использовать как классы как в Си так и в Делфи, а тем паче в Ассемблере.
Вот если бы можно было просто написать класс на Делфи и использовать его в полной мере на Си то интерфейсы бы канули в небытие, а так... Думаю интерфейсы уйдут на пенсию с момента полноценного развития .NET, так как там вроде проблема разных языков с ООП решена. Цитата:
I'm learning to live...
|
|
11.08.2009, 06:54 | #10 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Тогда другое определение: интерфейсы - это способ обойти те грабли, которые сами же насоздавали, когда рекламировали технологию ООП.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Интерфейсы | 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 |