Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Интерфейсы и абстрактные классы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
garvey
Отправлено: 22 Августа, 2010 - 12:52:03
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




Ходил на несколько собеседований, везде задавали вопрос, чем отличается абстрактный класс от интерфейса. К сожалению, не мог ответить. На одну работу все таки взяли. Почитал про эти классы. Вроде понял. Но есть некоторые вопросы, на которые не нашел ответов:

1) Для чего на практике используются интерфейсы и абстрактные классы? Ведь если делаем implement интерфейса, нужно определять все методы, описанные в этом интерфейсе.

2) Когда нужно использовать абстрактный класс, а когда интерфейс?
 
 Top
movEAX
Отправлено: 22 Августа, 2010 - 13:09:44
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Тоже задавался этим вопросом когда-то. Донимал народ в ирке - расспрашивал по этому поводу. Внятного ответа так и не получил, зато узнал что некоторые используют интерфейс в качестве флагов Улыбка

Вообще у меня существует предположение, что интерфейсы являются гарантом реализации определенного API в архитектуре. Но по сути это можно реализовать теми же абстрактными классами, так что необходимость в интерфейсах для меня тоже пока остается загадкой.

(Отредактировано автором: 22 Августа, 2010 - 13:12:27)



-----
армия.. самое убогое место
 
 Top
alexspb
Отправлено: 22 Августа, 2010 - 13:34:22
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




интерфейс определяет функциональность, но не реализует ее

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


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
Champion Супермодератор
Отправлено: 22 Августа, 2010 - 13:45:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Абстрактным класс будет уже если в нём хотя бы один абстрактный метод. При этом в нём могут быть и реализованные методы и разные свойства.
В интерфейсе нет свойств, а все методы абстрактные. Кроме этого implements можно сделать от нескольких интерфейсов. А наследовать (extends) только от одного класса.
Вот этим они отличаются и отсюда вроде вылазит ответ на второй вопрос.

garvey пишет:
Ведь если делаем implement интерфейса, нужно определять все методы, описанные в этом интерфейсе.
Но если не сделать implement интерфейса, то ты будешь обязан написать реализацию методов. Можно сначала спроектировать функционал интерфейса, а когда дело дойдет до реализации, нужно будет реализовать уже спректированный набор методов.... Не, че-то не четко я написал. Ща кто-нибудь получше скажет про это.
 
 Top
movEAX
Отправлено: 22 Августа, 2010 - 14:38:18
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Champion пишет:
Ща кто-нибудь получше скажет про это.

JustUserR точно должен об этом что-нибудь рассказать, ждем-с. Улыбка

(Отредактировано автором: 22 Августа, 2010 - 14:39:13)



-----
армия.. самое убогое место
 
 Top
garvey
Отправлено: 22 Августа, 2010 - 16:22:41
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




Только что изучал движок Zend Framework, так как знал, что там есть и интерфейсы и абстрактные классы. Да, интерфейсы отображают только структуру(общее API, скорее всего предназначен для нормализации проекта). Но вот нашел абстрактный класс, в котором не было ни одного абстрактного метода. И к чему, спрашиваеься, он абстрактный? Можно было и простой написать.
 
 Top
valenok Модератор
Отправлено: 22 Августа, 2010 - 22:57:31
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Если провести аналогию с языком,
то класс это существительное, а интерфейс это прилагательное.

Существительное может быть абстрактным (зверь) или конкретным (собака)
в то время как и то и другое могут иметь те-же прилагательные.

http://drenganathan[dot]wordpress[dot]co[dot][dot][dot]nterface-in-php/


-----
Truly yours, Sasha.
 
My status
 Top
garvey
Отправлено: 23 Августа, 2010 - 07:43:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




Да. разницу в них я уже понял. Только для чего их использовать? И в каком случае будет правильно обойтись без них, и в каком без них не обойтись?
 
 Top
alexspb
Отправлено: 23 Августа, 2010 - 11:39:35
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




garvey, во многом это задает стиль программирования
абстрактные классы - принуждают создавать процедуры в классах

интерфейс - функциональность


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
JustUserR
Отправлено: 23 Августа, 2010 - 15:03:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




movEAX пишет:
JustUserR точно должен об этом что-нибудь рассказать, ждем-с.
Использование абстрактных классов и интерфейсов является вопросом технологии программирования и в частности ООП-методик - дело в том в принципе на практике возможно использовать все эти объекты исключительно с семантическо-синтаксической точки зрения без реализации их истинной цели - как правило это происходит в небольших программах и проектах где вопрос об архитектуре не стоит - но зато применяется множество различных библиотек и участников кода взятых из сторонних источников для реализации некоторых задач - и если в оригинале использовать тех или иных шаблонов программирования было оправдано то в копии оно может быть и лишено первоначального предназначения В динамических языках программирования типа PHP все парадигмы очень простой обойти - в частности за счет возможности runtime-модификации все функций и классов и текущего исполняемого кода - и если что-то с точки зрения исходной парадигмы было запрещено по архитектурным соображениям то это легко разрешить здесь - мощным средством в PHP для этого является расширение runkit а в Perl это уже и так встроено в язык
Таким образом если рассматривать понятия абстрактных классов и интерфейсов в идеализированном виде на без приложения к определенному языку программирования - то разницу можно определить примерно так В случае использования интерфейса конкретные реализации методов и значений свойств могут определяться только в порожденным им обычных классах без элементов меньшего порядка абстракции - в то время как абстрактный класс может содержать некоторые реализации методов и значения свойств по умолчанию "Интерфейс определяет границу взаимодействия между классами или компонентами, специфицируя определенную абстракцию, которую осуществляет реализующая сторона" - в то время как абстрактный класс является по сути шаблоном для наследуемых от него классов с указанием основных содержащих элементов и их взаимодействием


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
EuGen Администратор
Отправлено: 23 Августа, 2010 - 15:20:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Есть такие вещи - общепринятые и уже являющиеся стандартными - как design patterns, uml , {...} (шаблоны проектирования, язык описания структур и прочее)
К таким же стандартам стоит отнести и приемы проектирования/программирования с использованием ООП.
Интерфейс, в частности, реализует один из постулатов ООП - а именно инкапсуляцию - когда реализация скрыта от пользователя.
Как пример можно привести паттерн проектирования Adapter (Адаптер) - и пример реализации этого паттерна для БД - когда мы имеем только API для обращения к БД, абстрагируясь от самой СУБД - нам не важно что там физически - MySQL или Oracle или что-либо другое - у нас есть только набор предоставляемых интерфейсом методов для работы с БД, не более. И этого будет вполне достаточно.
Сказать кратко здесь сложно, но, надеюсь, идея понятна.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
garvey
Отправлено: 23 Августа, 2010 - 15:41:36
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




JustUserR,EuGen, большое спасибо. Понял. Правильно, рассуждаете.
 
 Top
JustUserR
Отправлено: 23 Августа, 2010 - 15:44:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




EuGen пишет:
Сказать кратко здесь сложно, но, надеюсь, идея понятна.
В таком случае более подробную информацию по исходному вопросу про различие абстрактных классов и интерфейсов можно получить здесь [url]http://ru.wikipedia.org/wiki/Интерфейс_(объектно-ориентированное_программирование)[/url] и здесь http://ru[dot]wikipedia[dot]org/wiki/Абстрактный_класс - а посмотреть сведения о шаблонах и парадигмах программирования можно посмотреть здесь http://ru[dot]wikipedia[dot]org/wiki/Шаб[dot][dot][dot]н_проектирования


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB