Outoverlay
@Outoverlay

Когда ооп быстрее процедурного?

Когда ооп быстрее процедурного?
  • Вопрос задан
  • 1327 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
ООП рассчитано не на скорость исполнения, а на скорость разработки. Как, впрочем, и многие другие современные технологии разработки. Всё, что ООП делает, можно реализовать и без ООП, и даже эффективнее. Стоит ли — другой вопрос.

Какую задачу конкретно решает ООП? Обуздать сложность разработки программ, собранных из взаимодействующих компонентов. Вот от этого и пляшем: если программа не модульная (например, какой-нибудь сложный научный расчёт), ООП мало поможет. Также ООП не поможет, если стандартная реализация ООП недостаточно эффективна по процессору или по памяти — например, в мою бытность JavaMe’шником ООП не жаловали, поскольку памяти много ел, типичный мобильник имел от 215 до 800 килобайт доступной памяти. Также плохо будет работать там, где нет взаимодействия (на типичном PHP, который выдал страничку и исчез).

Что на PHP можно реализовать объектно?
• Поддержку каких-то протоколов (БД, почта, какая-нибудь внешняя веб-служба наподобие VK API или Mandrill).
• Что-нибудь из предметной отрасли, что меняет своё состояние — например, генерация картинок, звуков, архивов, PDF…
• Может, сделаешь какой-нибудь генератор страниц, который сначала собирает каркас страницы, а затем, в зависимости от настроек и целевого устройства, обращивает его HTML-кодом.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
@abcyu
Разработчик
Когда код огромный и ты в нем блудишь и делаешь косяки.
Ответ написан
Комментировать
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
Все зависит от Вас самих, т.е. от Вашего способа мыслить. Ваших способностей.
Возможно Вам вообще в Вашу голову будет легче ложиться "функциональщина" чем ООП и это не страшно и не плохо. Просто Ваша особенность.

Но практика показывает, что для очень многих людей куда привычней и легче думается, если они пишут код ООП-нуто. И действительно. Мы, люди, уже думаем объектами. Для нас не крыло взяло параметры и сам взмахнулось, а просто "Птицы летают"! Мы видим кассиров, птиц, собак, начальников и др. сущности. Мы их делим по роду деятельности: бухгалтеры, программеры, стоматологи, и др. Мы их делим по соц. признаку: пенсионеры, студент и др. Мы уже мыслим типами, объектами, характеристиками и действиями, которые они могут совершать. Обычно, людям, не приходит в голову, что "Птицы ползают и заползают в норы", потому что в нашей голове есть интерфейс "птица" в котором зашито "летает, имеет крылья".
Оглянитесь. Мы уже думаем объектами, поэтому для большинства программеров проще писать в ООП-стиле
Ответ написан
Комментировать
Mrrl
@Mrrl
Заводчик кардиганов
Про РНР не знаю, скажу на примере С/С++.

Если виртуальными функциями не пользоваться, то C и C++ дадут одинаковую эффективность.
Если пытаться один и тот же код, требующий run-time полиморфизма написать на C и на C++, то, вероятнее всего, код на C++ будет эффективней. Потому что у вас не хватит терпения аккуратно заполнять и использовать таблицы виртуальных функций, и получится код с большим количеством case, а то и if/else по тегам объектов. В конечном итоге, можно будет написать программу на C, эквивалентную программе на С++ (а потом её соптимизировать), но она будет сложной, непонятной, и практически нерасширяемой: добавление нового полиморфного метода в систему типов (с модификацией всех таблиц и всех методов, работающих с тегами) будет мучением.
Ответ написан
Комментировать
Vadiok
@Vadiok
Веб разработчик
Если не рассматривать скорость разработки, то мне приходит в голову только вариант с автозагрузкой классов в PHP. Если сравнивать 2 таких варианта - классы загружаются при необходимости через __autoload(), а функции загружаются все сразу, то тут производительность выше у классов, т.к. не подгружаются лишний код.
Ответ написан
Комментировать
vt4a2h
@vt4a2h
Senior software engineer (C++/Qt/boost)
Вообще вопрос довольно странный. Не знаю как там дела с PHP, но про C++ я бы сказал: профилировщик в руки, релизный билд и смотрите. Да и потом, насколько быстрее, критична ли производительность, что в приоритете -- производительность или поддержка и расширяемость... ? Обычно весь код и не требует оптимизации по скорости работы, только некоторые места (которые иногда хоть на ассемблере перепиши, а в силу особенности алгоритмов большей скорости не получишь).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы