|
|
|
| Купил книгу Максима Кузнецова и Игоря Симдянова "Самоучитель PHP5".
В ней описываются интерфейсы, абстрактные классы и полиморфизм. У меня есть вопрос, какое существует реальное применение для этих компонентов ООП. По книге я так и не понял для чего они нужны... Ведь проще создавать отдельные классы и в них описывать все что надо... (это упрощает работу транслятору и упрощает понимание кода ) | |
|
|
|
|
|
|
|
для: kaoz
(06.08.2005 в 19:20)
| | ООП применяется для организации очень сложных проектов - если его применять к простым поектам (это подавляющее большинство Web-проектов) ничего, кроме того, что простой проект превратиться в сложный не произойдёт. Применяются эти конструкции в очень сложных проектах, когда от базового класса до конечного - 10 иерархий наследования, т.е. 10 уровней абстракций
кварк
ядро
атом
молекула
супермолекула
фермент
клетка
орган
организм
социальная группа
|
При моделировании такой системы очень велик соблазн в целях производительности конечной системы срезать углы. Т.е для управления социальной группой не человека управленца вывести, а орган, который не будет являться организмом, но зато его создать проще и он впрыскивает нужные ферменты непосредственно в мозг индивидумов. Да быстрее, да эффективнее - но ошибок при такой архитектуре будет больше, а масшатбируемости меньше. Для того, чтобы снизить соблазн вводятся интерфейсы, абстрактные классы и полиморфизм (последний преследуем немного другие цели).
ООП в PHP - это копия объектно-ориентированной модели Java, он просто скопирован и всё, а сам язык во многом копирует Perl - а это противоречивые технологии. ООП введён для снижения сложности монолитных графических программ и библиотек, а Perl и PHP для снижения сложности CLI-интерфесных прогрмм (интерфейс командной строки). UNIX и ООП - это несовестимые вещи, первый преследует разделеление сложности на уровне мелких взаимодействующих программ, каждая из которых выполняет свои цели, а второй разделение монолитных программ и библиотек, больше характерных для графического интерфейса, принятого в среде Windows и Macintosh.
Я могу привести 1000 примеров удачного применения ООП в Windows, но почти ни одного в PHP-программировании - философия разная... | |
|
|
|
|
|
|
|
для: cheops
(06.08.2005 в 19:43)
| | >Я могу привести 1000 примеров удачного применения ООП в Windows, но почти >ни одного в PHP-программировании - философия разная...
Ну уж... а как же различные CMS или хотя бы тот же PHPBB...
Там бы без ООП тяжеловато было бы...
Я я не говорю конечно про абстракцию и интерфейсы это больше для С и Java, но здесь важна именно философии ООП. Поняв её (как мне кажется) мне намного проще стало работать после процедурного программирования.
Но вы правы всё зависит от масштаба задачи, чтобы не получилось из пушки по воробьям :) | |
|
|
|
|
|
|
|
для: Axxil
(06.08.2005 в 19:53)
| | А зачем объектно-ориентированный подход там? ООП позволяет разбить сложную задачу на более простые части, но определённым образом, если имеется иерархия объектов, а где иерархия объектов в форуме?
Понятна иерархия в графической библиотеке - графический примитив>форма>окно из окна можно сделать диалоговые окна, кнопки, текстовые области и т.д. Т.е. любой код, когда для создания сущностей нужно использовать либо объектный подход, либо дублировать код, а как применить объектно-ориентированный подход при создании форума? Не просто использовать удобные контейнеры классы, а действительно съэкономить при разработке кода, почему не достаточно процедурного подхода?
Объектно-ориентированные языки поддерживают создание структур с большим количеством связующего кода и сложными уровнями. Это может оказаться полезным в случае, если предметная область является действительно сложной и требует множества абстракций, и вместе с тем такой подход может обернуться неприятностями, если программисты реализуют простые вещи сложными способами, просто потому, что им известны эти способы и они умеют ими пользоваться.
Эрик. С. Реймонд. Искусство программирования для UNIX.
Другими словами существует слишком большой соблазн использовать классы, где их не следует использовать, использовать наследование, когда в реальности иерархия объектов отсутствует, использовать полиморфизм, вообще не понимая, что это такое и в каких случаях его следует использовать.
Часто решение использования объектно-ориентированной технологии принимается в надежде, что это поможет компенсировать недостаток проектирования и понимания способов реализации поставленных задач.
Свести на нет прозрачность и читабельность кода при использовании объектно-ориентированного программирования также легко, как и в его отсутствии, и даже ещё проще. Сложную проблему можно разбить на несколько уровней и это по поможет решить проблему, уровень за уровнем. Можно разбить и простую задачу на несколько уровней, но в результате вместо простой задачи у вас будет сложная задача.
Объектно-ориентированная подход — прекрасное инженерное решение, но принимать решение использования его следует только в том случае, если вы твёрдо и аргументировано можете назвать выгоды его использования по сравнению с альтернативными методами разработки программного обеспеченья.
HTTP и PHP были заточены для решения задач без классов в рамках структурного программирования - втиснуть в эту область классы так же сложно как скелет в мясо. Имеются фундаментальные проблемы и не состыковки, которые будут сводить на нет приумущество ООП. Как сводятся на нет попытки обезопасить Windows - это невозможно, так как приорететом была названа обратная совеместимость новых версий операционной системы со старой, т.е. чтобы старый код можно было запускать в новых операционных системах, а не сетевая безопасность. | |
|
|
|
|
|
|
|
для: cheops
(06.08.2005 в 21:45)
| | Очень интересно =)...
Мне еще учиться, учиться и еще раз учиться =)
Спасибо большое за книгу... спасибо за ответы =)
Я очень благодарен... | |
|
|
|