[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объясните в чем преимущества ООП?
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
slobotsky.denis
Цитата (twin @ 31.10.2014 - 21:39)
Я могу заставить кота писить в унитаз одним движением. Очень полезная функция))) А тебе для этого нужно сначала эту кошку сделать, обучить её, как Куклачев. Мало того, в твоей реализации это вообще невозможно, так как кошка, это не child и не может в её реализации быть метода "говорить". Как и в абстрактном классе не может быть метода "шевелить хвостом".


Всё так, при правильном применении ООП ограничивает. В большинстве случаев это плюс. Как-раз таки, потому что дети не могут шевилить хвостом, и покупатель в интернет магазине не может купить партию товара по цене еденицы товара.

Цитата (twin @ 31.10.2014 - 21:39)
Это не стандарты)))

Даже в PHP это уже стандарты.

Цитата (twin @ 31.10.2014 - 21:39)
А представляешь каково мне?

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

_____________
PHP: The Right Way
Бесплатное обучение Symfony2

Tox: 55BB67DE54B1CB14F8C37B4F3AED64E6A45922988D22F85EF75039751F26F05460664D978F5C
twin
slobotsky.denis
Цитата
Всё так, при правильном применении ООП ограничивает. В большинстве случаев это плюс. Как-раз таки, потому что дети не могут шевилить хвостом, и покупатель в интернет магазине не может купить партию товара по цене еденицы товара.
Да какая нафиг кошка. Почему кошка то должна быть? Её вообще быть не должно, она формируется программой.

Глобальное различие парадигм в том, что ты сначала делаешь кошку, а потом учишь её писить. А так, как ты не Господь Бог, то в изготовлении кошки что-то может пойти не так. Для того, чтобы этого избежать, и напридумали костылей типа интерфейсов и абстракций. И паттернов еще кучу.

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

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

И тут бояться нужно только своих кривых рук. Вообще у меня впечатление, что потому ООП и столь популярно, что снимает кучу ответственности с программиста своими ограничениями. И эти программисты, надувая щеки, хвастаются своими золотыми руками, растущими из задницы. Как говорится, если вы такие умные, чего строем не ходите? smile.gif

Это же касается и "псевдостандартов", которые по твоим словам проверены временем и кошельками. Это не стандарты, это просто возможность набрать побольше дармовой раб-силы. Потому что эти "стандарты" диктуют проект-менеджеры, а не сами разработчики. Последние просто плывут по модному течению.

И про кошельки вопрос очень спорный. Вот FatKat про наш форум написал реплику, никто не отреагировал. А ведь форум на обычном шареде стоит. И денег кстати не зарабатывает, только тратит. Где бы мы сейчас общались, если бы форум был бы стандартным. Где деньги брать? smile.gif

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

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

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

user posted image
S.Chushkin
Цитата (twin @ 31.10.2014 - 21:39)
...

Как бы ты решил вот такую задачку: В "зоопарк" поступило N зверушек. Нужно провести перекличку.
В ООП будет что-то вроде:
Зверушка {
public function Голос() { return null; }
}

Кошка extends Зверушка {
public function Голос() { return 'мяу'; }
}

Собака extends Зверушка {
public function Голос() { return 'гав'; }
}

Селёдка extends Зверушка {
public function Голос() { return ''; }
}

Чупакабра extends Зверушка {
}

// и далее N-4 раза
Зоопарк {
public Зверушки = array();
public function Перекличка() {
foreach($this->Зверушки as Животина) {
echo Животина->Голос();
}
}
}

// Создаём зоопарк...
$Зоопарк = new Зоопарк;
// Принимаем зверушек...
$Зоопарк->Зверушки[] = new Кошка; // и т.д. N раз
// Просим всех подать голос...

$Зоопарк->Перекличка();


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Arh
S.Chushkin
Цитата
Как бы ты решил вот такую задачку:


// Принимаем зверушек...
$db->query("INSERT INTO `animals` (`Тип`,`Номер клетки`,`голос`) VALUES ('Кошка','1','мяу')");
$db->query("INSERT INTO `animals` (`Тип`,`Номер клетки`,`голос`) VALUES ('Собака','2','гаф')");

// Просим всех подать голос...
$query = $db->query("SELECT `Тип`,`голос` FROM `animals`");
while ($row = $query->fetch()) {
echo $row['Тип'].' говорит '.$row['голос']; //Кошка говорит мяу
}


Объекты какие то, наследования, в упор не вижу тут ООП =)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
S.Chushkin
Специально для Arh:
- SQL в любом виде отсутствует/запрещён

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Arh
S.Chushkin
Как это? На сайте отсутствует SQL? А где тогда хранить данные о животных? Каким образом вести статистику, сколько животных сегодня съели? Сколько вчера продали билетов? Какие животные болеют и не могут сказать гаф? Кому завтра делать прививки?

Я понимаю что вы о другом) но всё же это PHP мы не делаем зоопарки, мы делаем сайты для зоопарков. Вы просите решить такую задачу, которая ну ни как не относится к данной области. И все статьи про ООП такие, туалет, зоопарк итд, я спрашивал как применить ООП к гостевой книге, вы ответили что там не нужно, так как книга слишком маленький проект, сказали что если будет большой проект с кучей модулей, тогда пойму, но дело в том что я написал кучу модулей, они работают как по отдельности, так и друг с другом, хоть сразу все сто запусти, никто не будет конфликтовать. Делать наследования смысла нет, делать интерфейсы тем более, делать свойства приватными тоже ни когого смысла.

Вот выше решение задачи как сделать зоопарк, просто и без ООП, и это решение динамическое, так как может расширяться, животные могут пополняться вообще через API, а что в вашем случае, без баз данных и прочего, что будет в результате? Рано или поздно скрипт отработает и выдаст страницу, именно страницу, обычную статическую, смысл вообще делать объекты, когда просто можно сверстать html, скрипт то всё равно будет выдавать одни и теже данные, пока ручками не залезим на хостин и не добавим $Зоопарк->Зверушки[] = new Кошка;

Я к тому что в теории видно, что проще сделать собаку, которая гавкает и писает при этом на дерево с помощью ООП, а на практике применить это же ООП негде.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
chee
S.Chushkin
<?php

$cat = function () {
return 'мяу';
};

$dog = function () {
return 'гав';
};

$fish = function () {
return '';
};

$zooModule = function () {
$animals = array();
return array(
'addAnimal' => function (callable $animal) use (&$animals) {
$animals[] = $animal;
},
'voices' => function () use (&$animals) {
foreach ($animals as $animal) {
echo $animal();
}
}

);

};

$zoo = $zooModule();

$zoo['addAnimal']($cat);
$zoo['addAnimal']($dog);
$zoo['addAnimal']($fish);
$zoo['voices']();

но с наследованием я так и не смог придумать

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

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