[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Императив VS ООП
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
Arh
Цитата
Это к Arh вопросы.

Какие ко мне вопросы?)

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

Если подразумевать что проект написанный только с использованием функций - это процедурный проект.
Если проект написан только с использованием классов - это ООП проект.
А если в проекте есть и функции и классы, то это императив.

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

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

В тоге все запутались.
Если в проекте есть хоть один new, это делает его ООПшным? Или это делает его проектом с использованием ООП? Или там вообще нет ООП, так как работа с классами не всегда считается объектно ориентированной как говорит inpost "Классы - это процедурный подход, к ООП не относятся" и чего следует сделать вывод что ООП в PHP вообще не возможен, так как классы не относятся к ООП, но сделать всякие там полиморфизмы и прочее без классов нельзя.

В итоге понять что такое ООП становиться еще сложней. А как можно сравнивать две никому не понятные вещи.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
sergeiss
Ты попутал контекст. Мы говорим о наследовании, как признаке ООП. Я не использую наследование, задекларированное этой парадигмой. В мануале говорится о расширении классов. И только в одном месте, да и то с юмором, приводится синоним слову extends: inheritance.

Так что я понимаю твоё возмущение еще по прошлой теме, но тут ты совсем не встрочку влез.

В ООП наследуются объекты. И наследование без переопределения методов, это неполное наследование.

Давай так рассудим. Механизм extends позволяет расширить базовый класс и переопределить его методы. Если методы не переопределяются - это расширение. Оно может использоваться в ООП. Но если еще и переопределяются, это наследование. Оно тоже может использоваться в ООП, но не может в императиве.

Повторю - расширить класс можно не создавая объекта.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Arh
Постараюсь объяснить свою позицию.

1. Процедурный код должен состоять только из операторов, нативных и пользовательских функций, которые выполняются последовательно в глобальной области видимости, изменяя состояние переменных контекста. Допустимо использование нативных объектов и статических классов.

2. ООП код должен состоять из классов, который обрабатывает контекст через создание объектов и их взаимодействие.

3. Императивный код, это совокупность инструкций, которые выполняются последовательно, изменяя состояние переменных контекста. (Тут они одинаковы с процедуркой. Но:) Инструкцией может являться как любая функция так и метод статического класса или объекта. Последние являются комплексными инструкциями или библиотеками. Передача объекта в другой объект недопустима. Как недопустимы абстракции и ооп полиморфизм (вызов метода, который определен в потомке). В императиве не декларируется инкапсуляция, управление контекстом может передаваться в класс или объект.

Непонятки с последним только. Почему то посчитали, что если я инициализировал объект, то это автоматически ООП.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
twin

Цитата
1. Процедурный код должен  состоять только из ... функций

То есть вот это неверно?
Цитата
Классы - это процедурный подход, к ООП не относятся


Цитата
2. ООП код ... обрабатывает контекст через создание объектов и их взаимодействие.

То есть вот это ООП
$tpl->загрузить('index.tpl')->обработать()->вывести();

А вот это не ООП?
$file = $tpl->загрузить('index.tpl');
$file = $tpl->обработать($file);
echo $file;


Цитата
3. Императивный код, это ... любая функция так и метод статического класса

"Статический" в смысле что написано static и использование this невозможно или в каком то другом?

Цитата
Передача объекта в другой объект недопустима.

Любого объекта или именно экземпляра класса?

Получается императив, это смесь процедурки с ооп, с некоторыми ограничениями?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
Кстати я раньше пытался делать так
$tpl->загрузить('index.tpl')->обработать()->вывести();

Но потом когда мне понадобилось сделать так
$text = $tpl->обработать($text);

Естестено ничего не работало, так как нужен еще какой то метод, который будет возвращать.

$text = $tpl->обработать($text)->вернуть();


В итоге получался бред и появлялась куча проблем
Например этот метод должен загрузить шаблон
$text = $tpl->load('index.tpl');

что если я хочу не просто загрузить, а сразу обработать
$text = $tpl->load('index.tpl')->обработать();

Если это реализовать, тогда $tpl->load('index.tpl'); не будет работать
То есть всегда нужно вызывать так
$text = $tpl->load('index.tpl')->вернуть();
//вместо так
$text = $tpl->load('index.tpl');

что вобщем то не удобно

В итоге впринципе отказался от этих стрелочек
Когда нужно будет что то обработать, просто передам на обработку нужному методу
$text = $tpl->load('index.tpl');
$text = $tpl->обработать($text);


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
SerginhoLD
Цитата (Arh @ 4.11.2014 - 16:19)
Естестено ничего не работало, так как нужен еще какой то метод, который будет возвращать.


Магия нужна?
http://php.net/manual/ru/language.oop5.mag...object.tostring

class tpl
{
protected $tpl;

function load($file)
{
$this->tpl = file_get_contents($file);
// bla bla

return $this;
}

function edit($text)
{
$this->tpl .= $text;

return $this;
}

function get()
{
return $this->tpl;
}

function __toString()
{
return $this->tpl;
}
}


$tpl = new tpl;
echo $tpl->load(__DIR__ . '/index.tpl') . "\n";

echo $tpl->load(__DIR__ . '/index.tpl')->edit('Yo') . "\n";

$tpl2 = new tpl;
$tpl2->load(__DIR__ . '/index.tpl');
$tpl2->edit('Yo');
echo $tpl2->get();


tpl file 
tpl file Yo
tpl file Yo


_____________
"internet explorer всех правильней отображает страницы" ©
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.