Вопросы на собеседовании PHP-разработчика

fixxxer

К.О.
Партнер клуба
> 3 постулата ооп

а вот особенно хорошо, если собеседуемый аргументированно ответит, что это не постулаты, а фигня =)

хотя таких сразу в архитекторы надо, хе-хе
 

zerkms

TDD infected
Команда форума
а вот особенно хорошо, если собеседуемый аргументированно ответит, что это не постулаты, а фигня =)
ээээээээээ......
т.е. 3 формальных определения, которые объясняют, что такое и как готовить ООП это фигня? :)
 

dark-demon

d(^-^)b
это не определения, а свойства. при этом "наследование", например, не является обязательным.
 

zerkms

TDD infected
Команда форума
dark-demon
вообще-то это как раз постулаты ООП. и для того, чтобы язык мог называться ОО - он должен удовлетворять всем трём.

ps: авторитетный пруфлинк на "не обязательным" в студию?
 

dr-sm

Новичок
ну по поводу инкапсуляции есть небольшие сомнения, что должен.
 

zerkms

TDD infected
Команда форума
dr-sm
у языка должны быть средства, чтобы скрывать реализацию за интерфейсом, иначе мы теряем контроль над объектами.
 

dr-sm

Новичок
zerkms, с моей точки зрения, это скорее фича,
которая делает разработку более удобной и безопасной,
но ее отсутствие вполне позволяет писать OO код.
 

AmdY

Пью пиво
Команда форума
dr-sm
можно, как например в js. но затем окажется, что упомянутая брюнетка с красивыми большими глазами, длинными ногами и огромной грудью - корова дающая молоко.
 

Krishna

Продался Java
ну по поводу инкапсуляции есть небольшие сомнения, что должен.
Есть небольшие сомнения, что ты точно знаешь, что подразумевается под инкапсуляцией. Это не только private, но и прежде всего способность объекта хранить данные и обрабатывающие их алгоритмы в единой сущности.

В общем, на этот раз fixxxer чёта не то ляпнул ;)
 

fixxxer

К.О.
Партнер клуба
1) инкапсуляция

берем гипотетический язык, в котором переменных нет как таковых, но есть замыкания и классы. где она тут?

2) наследование

если задуматься, ООП тут вообще ни при чем. Выбрасываем наследование, заменяем делегированием, менее объектным ничего не стало.

3) полиморфизм

ну разве что с этим сложно не согласиться, ага, хотя и это следствие/признак скорее.

dark-demon очень правильную ссылку дал.
 

whirlwind

TDD infected, paranoid
fixxxer Ты щас только что сказал, что писать программу можно процедурным методом. Правда про язык без переменных я вообще не понял. Но в общем ты не сказал ничего нового.

Про инкапсуляцию то же самое что и с сингельтоном: все видят :: для статического доступа к этому экземпляру, а единственный экземпляр в определении какбе не замечают. Инкапсуляция - видят что защищает и т. д., но в упор не видят что способ объединения. Все смешалось: первичное, вторичное...
 

Krishna

Продался Java
берем гипотетический язык, в котором переменных нет как таковых, но есть замыкания и классы.
Что значит нет переменных. Нет данных - нет алгоритмов, нет языков.

-~{}~ 22.09.09 01:27:

Еще раз, современная классическая ООП парадигма - это три признака - инкапсуляция, наследование и полиморфизм. Это кагбе аксиоматика. В "очень правильной ссылке", кстати об этом тоже упоминается, надо читать внимательно уметь :)

Дальше можно придумать любые другие прадигмы, которые тоже будут работать, но они не будут классическим ООП при этом, вот и всё.
 

fixxxer

К.О.
Партнер клуба
>fixxxer Ты щас только что сказал, что писать программу можно процедурным методом.

где я это сказал?

а если уж так хочется назвать три критерия (хотя почему три?) то это (очень грубо, формалировки заведомо кривые)

1) программа оперирует объектами
2) то, что умеет объект - определяется его интерфейсом
3) все взаимодействия между объектами - это отпарвка сообщений (оно же вызов методов) в соответствии с интерфейсом

все остальное - частные случаи. те самые "И./Н./П." это всего навсего критерии, которыми руководствовался Страуструп при разработке С++ (тоже мне идеальный язык нашли бугагагагага)

кстати даже понятие класса совершенно не обязательно. см например javascript.

хотя я прекрасно понимаю что "И/Н/П" гораздо проще для понимания, чем "объекты, интерфейсы и сообщения", фигли тут.
 

whirlwind

TDD infected, paranoid
fixxxer ты говоришь об одном и том же. Просто и+н+п это тот условный минимум, без которого ооп превращается в кошмар. Ну кого можно обвинить в том, что на практике вырисовалось более подходящее и конкретное определение ? Какие тебе доказательства нужны: сколько народу программит на смолтоке, а сколько на цпп.
 

fixxxer

К.О.
Партнер клуба
в том то и дело что вовсе нет.

наследование например элементарно заменяется делегированием с mixin-ами ;)
 

whirlwind

TDD infected, paranoid
fixxxer ты пойми, что спорить на эту тему, не юзая ооп каждый день не получится.

mixin - это путь к множественному наследованию. Оно нарушает инкапсуляцию. А если исключить наследование, то чревато декомпозицией по атомам.
 

dr-sm

Новичок
Автор оригинала: Krishna
Есть небольшие сомнения, что ты точно знаешь, что подразумевается под инкапсуляцией. Это не только private, но и прежде всего способность объекта хранить данные и обрабатывающие их алгоритмы в единой сущности.
спасибо за ликбез, туплю
 
Сверху