Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2009, 14:41   #1
Arhe
Пользователь
 
Регистрация: 21.02.2008
Сообщений: 28
По умолчанию Интерфейсы. Философия ООП

Сижу и понемногу изучаю ООП. И не могу понять роль интерфейсов в ООП. Дайте, пожалуйста, наглядный пример. Я то понимаю, что интерфейсы созданы для наследования от них, но я не понимаю зачем, если их методы создаются пустыми, а у теле унаследованного класса пересоздаются наново. Не легче просто создать такой метод в классе, без наследования?
Arhe вне форума Ответить с цитированием
Старый 10.08.2009, 15:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но я не понимаю зачем, если их методы создаются пустыми
Я на сколько понял - интерфейс это шаблон. Допустим есть у тебя пабор неких функций, и тебе хочется этот м.м.м "массив" функций обернуть в обертку ООП - ты определяешь для них интерфейс, где каждая функция под определенным номером имеет свое имя.
На самом же деле кода ты в интерфейсе обращаешся к конкретному имени, вызывается функция из массив. под номером, которы приписан к этому имени. Так что интерфейсы (диспатчи) это всего лишь понаименованный массив функционала. Они создаются под уже кем то готовый набор функций.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2009, 15:09   #3
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Многие не понимают роль интерфейсов, я и сам долго также думал, пока не появилась задача, которая решалась очень красиво благодаря интерфейсам. Приведу очень простой пример.

Допустим ты пишешь программу, которая работает с документами собственных форматов. Допустим эти форматы, похожи на Excel, Word и PowerPoint. Что ты делаешь, создаешь какой-то базовый класс (Document). В нем только базовые операции, типа Чтение. Наследуешь 3 класса(на каждый тип) от него. Тут у каждого появляется свои дополнительные методы, уникальные для каждого типа. Написали. Затем стоит задача, добавить печать этих документов, но печатать можно только Excel и Word.
Решение №1. Написать простые методы в каждом классе. А в основной программе, проверять если это тип Excel, то печать, если Ppoint - то нет и т.д.
Решение №2. Написать интерфейс, с пустым методом печать. В основной программе, смотрим если наследуется от нашего интерфейса, то печать, если нет - то не печатай.

Пытался, как можно проще. Здесь пример на 3 типах. А когда я писал решение своей задачи, там было около 20. И представь, если я не использовал интерфейсы, то мне на каждую функцию типа Печать, надо было проверять все 20 типов, вместо 1 проверки.
Hollander вне форума Ответить с цитированием
Старый 10.08.2009, 15:11   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Собственно, ни одного грамотного применения кроме как для работы с Офисом, я и не встречал (и то как пример). И сначала даже думал, что для этого и созданы .
Кстати, интерфейсы вроде как примочка интересная, но напрямую с ООП не связано.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 10.08.2009 в 15:15.
Utkin вне форума Ответить с цитированием
Старый 10.08.2009, 15:16   #5
Arhe
Пользователь
 
Регистрация: 21.02.2008
Сообщений: 28
По умолчанию

Hollander - спасибо, твой пример хороший.

Последний раз редактировалось Arhe; 10.08.2009 в 15:19.
Arhe вне форума Ответить с цитированием
Старый 10.08.2009, 15:22   #6
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Собственно, ни одного грамотного применения кроме как для работы с Офисом, я и не встречал (и то как пример). И сначала даже думал, что для этого и созданы .
Кстати, интерфейсы вроде как примочка интересная, но напрямую с ООП не связано.
Свой пример я просто с ходу придумал, а применял его для работы внутри моей программы и очень удачно.
Hollander вне форума Ответить с цитированием
Старый 10.08.2009, 16:01   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Да, на ум больше ничего и не приходит. В таком ключе - интерфейсы это приросток для работы с Офисом
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 10.08.2009, 16:14   #8
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Да, на ум больше ничего и не приходит. В таком ключе - интерфейсы это приросток для работы с Офисом
Ты не так понял меня. Я работал без использования офиса.
Hollander вне форума Ответить с цитированием
Старый 10.08.2009, 16:21   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я работаю с интерфейсами программируя CAD среду Компас. Так вот с высоты моего Икарства могу сказать что интерфейсы это пародия на нормальное ООП, такие себе а-ля классы, появившиеся (и тут уже скорее ИМХО) в связи с тем что программы написанные на разных языка программирования, которые используют ООП очень непросто связать воедино, потому применяют Диспатчеры, которые можно использовать как классы как в Си так и в Делфи, а тем паче в Ассемблере.

Вот если бы можно было просто написать класс на Делфи и использовать его в полной мере на Си то интерфейсы бы канули в небытие, а так...
Думаю интерфейсы уйдут на пенсию с момента полноценного развития .NET, так как там вроде проблема разных языков с ООП решена.

Цитата:
В таком ключе - интерфейсы это приросток для работы с Офисом
Не скажи. Очень много программ которые используют Dispatch. Я таких штук 18 юзал. Окромя оффиса. Кстати ту же СОМ-технологию тоже можно назвать "интерфейсами"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2009, 06:54   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Тогда другое определение: интерфейсы - это способ обойти те грабли, которые сами же насоздавали, когда рекламировали технологию ООП.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интерфейсы 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