Классы или функции. Скорость исполнения кода.

master_x
Те, кто говорит, что ООП медленее, и переходят из-за этого на процедуры, экономят на спичках, и чаще всего не понимают ООП.
никто и не говорит, про переход на процедурныйстиль кодинга...

ворос был:
Какова разница скорости выполнения кода, когда реалицация выполняется функциями или классами? Да и есть ли она? Вернее сущствена или можно об этом и не думать?
ответ: да, есть (объекты - медленнее), но она несущественна...
 

ForJest

- свежая кровь
440hz
ООП подход, при умелом его использовании позволяет правильно организовать передачу управление и разделение обязанностей сущностей системы.
Сделать то же самое можно и при процедурном подходе, но чуть сложнее.
По поводу тормозов. В компилируемых языках программирования ООП явно тормознее чем процедурный подход - по простой причине что вызов метода объекта занимает больше тактов процессора, чем вызов процедуры.

Но. При грамотном использовании ООП получаются приложения которые легко и просто изменять, находить узкие места и оптимизировать.
Критерий тормозное/быстрое на уровне вызовов не может служить достаточным для использования или не использования ООП, т.к. ООП просто более продвинутая методика чем процедурное программирование и с успехом заменяет последнее.
----------------------------------------------
В конкретных ситуациях, если найдено узкое место системы и оно заключается в том, что наличие иерархии объектов, их сложных связей приводит к существенных "тормозам" - всегда можно выполнить рефакторинг "Встраивание метода" и таким образом убрать лишние вызовы.
Либо же можно вынести тормозной кусок из цикла (ведь обычно тормоза начинаются сказываться при многократном посвторении).
---------------------------------------------------
Т.е. по сути вопрос этого топика восходит к
http://www.yandex.ru/yandsearch?rpt=rad&text=%EF%F0%E5%E6%E4%E5%E2%F0%E5%EC%E5%ED%ED%E0%FF+%EE%EF%F2%E8%EC%E8%E7%E0%F6%E8%FF+%FD%F2%EE+%E7%EB%EE
 

Screjet

Новичок
Ещё раз: докажи, да?
PHP:
class hello_world {

  function set_hello( $message ){
    $this->message = htmlspecialchars($message);
  }

  function display(){
    echo $this->message;
  }
}

$hello_world = new hello_world();
$hello_world->set_hello("Hello world");
$hello_world->display();
ну и..
PHP:
function display_hello_world( $message ){
  echo htmlspecialchars($message);
}

display_hello_world("Hello world");
Чего тут доказывать?
Назначение подходов разное ;)
 

.::PhoenikS::.

Новичок
Фанат
Собственно, я хотел только показать разницу в вызове функций и методов, не более того. При прочих равных на 1000 итераций IMHO вполне наглядно представлена эта самая разница.

Если я не прав: приведи пример сам, потому как ты все время любишь ткнуть носом, но без разъяснений %))
 
PHP:
<?php
     function getmicrotime() 
    { 
        list($usec, $sec) = explode(" ", microtime()); 
        return ((float)$usec + (float)$sec); 
    } 
 
     
    $time1 = getmicrotime();
	
    class c {       
        public function _a()
        {
            for($i = 0; $i < 100; $i++);
        }
    } 
    
    $test = new c;
    for( $i = 0; $i < 1000; $i++ )
        $test->_a();
        
    echo 'time oop: '.(getmicrotime() - $time1).'<br>';
    
           
    $time2 = getmicrotime();   
    function test()
    {
        for($i = 0; $i < 100; $i++);
    }        
    
    
    for( $j = 0; $j < 1000; $j++ )
        test();
    
    echo 'time func: '.(getmicrotime() - $time2);
?>
разница - минимальна, но у меня она никогда не была в пользу ООП...
 

Лисю

Guest
я по делу говорю. ООП - это совокупность данных и методов для работы с ними. Этот пример наглядно это показывает.

-~{}~ 06.10.05 18:40:

Заниматься тем, что тестировать, что лучше - функция или клас -- глупость неимоверная.

ООП прежде всего было создано для другого СТИЛЯ программирования, удобства работы. Как можно сравнивать два стиля - они сами по себе уникальны.
 

master_x

Pitavale XXI wieku
сам дурак.

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

Заниматься тем, что тестировать, что лучше - функция или клас -- глупость неимоверная.
вот как раз таки этим ты сейчас и занимаешься.
 

ForJest

- свежая кровь
Господа, давайте поменьше взаимных упрёков и побольше слов по теме поста, пожалуйста.
 

Лисю

Guest
Ты изначально, сказав первую цитату поставил под сомнение возможность создания простейшей листалки при помощи процедурного подхода.
создай!!!!!!!!!!!!! багодарен буду по гроп!!!!!!

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

-~{}~ 06.10.05 18:54:

Если человеку нравится писать на ООП - добро.
Нравится на процедурном - добро, пиши.
А утверждать, что "это можно написать на функциях, вместо класса", то это навязчивая идея. Можно на С сайты писать. Только на php удобнее.
 

SiMM

Новичок
> А утверждать, что "это можно написать на функциях, вместо класса", то это навязчивая идея.

Не надо выдавать желаемое за действительное. Давайте вернёмся к тому, о чём была речь. Вначале вы заявили на фразу "все можно сделать на фунциях" следующее
> можно, но кривизна будет немерянная + код разрастётся до немыслимых размеров.
на что вам было отвечено
> Всё зависит от решаемых задач.
Теперь вы пытаетесь впарить, что последняя фраза означает "всё надо писать на функциях, те кто пишет на ООП - идиоты". Извините, но утверждать подобное, я повторюсь, это
> надо с головой недружить
+ можно ещё к этому добавить - иметь богатую нездоровую фантазию.
PS:
> Можно на С сайты писать.
Писать можно даже на ассемблере. Если это - оправдано.
 

svetasmirnova

маленький монстрик
Loshadka
А ты несколько раз подряд свой тест запусти. Во всяком случае на PHP5.1RC2-dev интересные результаты.
 

Profic

just Profic (PHP5 BetaTeam)
Loshadka, svetasmirnova
time oop: 0.081699848175
time func: 0.084459066391
PHP 5.0.6-dev (cli) (built: Sep 30 2005 18:24:15)
:)
 

svetasmirnova

маленький монстрик
time oop: 0.200394868851
time func: 0.11292886734
---------------------
time oop: 0.10129904747
time func: 0.103134155273
----------------------
time oop: 0.0993959903717
time func: 0.113419055939
-------------------------
PHP5.1RC2-dev

А я сюда похожий тест когда-то постила даже в первый раз ООП выигрывал на 5.х. Но раз ситуация изменилась: сорри.
 

ForJest

- свежая кровь
SiMM
Спасибо, прочитал с интересом :)
Перенёс обратно :)

-~{}~ 06.10.05 20:41:

PHP 4.4. Apache 1.3.27 WinXP
Увеличил кол-во вызовов до 10000 раз.
Код:
time oop: 1.1054911613464
time func: 1.1921129226685 

time oop: 1.1117939949036
time func: 1.1262760162354 

time oop: 1.271112203598
time func: 1.080020904541
С отключенным Zend Optimizer:
Код:
time oop: 1.3535220623016
time func: 1.2030420303345 

time oop: 1.2352020740509
time func: 1.3352410793304 

time oop: 1.2283580303192
time func: 1.1999270915985
------------------------
Из приведённых "тестов" явно видно что на этапе выполнения ООП подход и процедурный занимают примерно одинаковое время, в пределах погрешности. Или же 0.000003 сек на вызов - как в одну, так и в другую сторону.

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

BeGe

Вождь Апачей, блин (c)
Насчёт оптимизации.
Сейчас уже проще купить новый процессор (память, винт,.... ) чем нанять команду программистов по оптимизации проекта.
 
Сверху