Ну почему... Разницу увидеть просто. Сложно увидеть, а тем более доказать,
преимущества одного перед другим.
Вот ООП:
class Cat
{
public function getVoice()
{
return 'Meow!';
}
}
class Cock
{
public function getVoice()
{
return 'Cock-a-doodle-doo!';
}
}
$cat = new Cat;
echo $cat->getVoice();
$cock = new Cock;
echo $cock->getVoice();
А вот это процедурка:
class Voice
{
public function getCatVoice()
{
return 'Meow!';
}
public function getCockVoice()
{
return 'Cock-a-doodle-doo!';
}
}
$voice = new Voice;
echo $voice->getCatVoice();
echo $voice->getCockVoice();
Здесь не так явно (голос тоже можно обозвать объектом), но для начала пойдет.
Отличие тут в сфере применения алгоритмов. То, что принято называть "процедуркой" по сути является субъектным программированием. Субъект отвечает на вопрос "кто". Объект же, это цель, сущность, которую заставляют что-либо делать, наблюдая за результатом. То есть это "что".
Другими словами, процедурная программа пишется от первого лица. Первым лицом выступает интерпретатор. Он выбирает нужный голос из списка возможных. В объектном нужно сначала "активировать" носитель голоса (кошку или петуха), и только потом заставить его "звучать". Процедурка, это набор возможных действий программы, а не конкретного объекта.
Дословно так:
(ооп) беру собаку, она лает.
(пп) воспроизвожу лай собаки.
Что тут лучше - у каждого свое мнение. Это извечный холивар. С одной стороны в ООП декомпозиция более явна. Потому что вроде как привычнее и сравнимее с реальным миром. От того большинство программистов и попадает в сладкие сети ООП.
Но это только до тех пор, пока функционал невелик. Как только он разрастается, появляется куча мертвого, и довольно серьёзная избыточность действующего кода, которые сводят на нет все достижения. С этим приходится бороться всевозможными фокусами (читай: паттернами). А они тоже имеют разные толкования. Синглтон, сервис-локатор и некоторые другие уже давно названы антипаттернами в определенных кругах.
Потому ООПэшники понемного сдают позиции, сами того не замечая. Яркий пример - делегирование.
С другой стороны у процедурки тоже имеются свои недостатки. Один из самых главных, как не парадоксально, довольно высокий уровень вхождения.
Дело в том, что то, что новоявленные ООПэшники (да и не только они) называют процедурным программированием, по сути является программированием в одну строку. А это не так. Процедурка поощряет использование как функций, так и классов, для локализации алгоритмов и той же декомпозиции.
И написать грамотный процедурный код намного сложнее, нежели ООП. Тут я поностью согласен с
Santehnick, если нет самодисциплины, если страшна свобода, то ООП - твой выбор. Эта парадигма и создана для того, чтобы снять побольше ответственности с программиста, перекладывая проблемы на сервер.
Так что ООП нужно пережить. :) Ну или застрять в нем навсегда, утешаясь тем, что железо дешевле программиста.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.