|
|
|
| Я программирую много лет на разных языках. Начиналось все с клипера, паскаля и бейсика. Не помню, были ли в них классы, но я привык писать операторы и создавать функции. Позже, программируя под виндовс, я использовал стандартную библиотеку классов, чтоб не писать весь ее функционал заново и обращался к объектам класса, пользуясь их методами и атрибутами. Но я так и не понял, почему классы :)
Сейчас я, в основном пишу на ПХП. Как и раньше, я либо пишу просто набор операторов, один за другим, либо, если функционал может потребоваться в разных ситуациях, оборачиваю его в функцию и вызываю с разными параметрами. К примеру, можно написать так:
echo 'Всем привет';
А можно так
function echotext($textstring){
echo $textstring;
}
и, при необходимости, вызывать как
echotext('Всем привет');
Естественно, делать функцию из единственного оператора не имеет смысла, но для примера пойдет :)
Но часто я вижу в чужем коде использование классов. Так же, как и раньше, мне непонятно, почему классы? Кто-нибудь, может мне объяснить, почему вместо функций используются классы? Зачем, к примеру, оборачивать вышеприведенную функцию echotext в класс:
class Class_echotext {
function echotext($textstring){
echo $textstring;
}
}
чтоб потом вызывать это так:
$some_text = new Class_echotext;
$some_text->echotext('Всем привет');
(кстати, проверьте, правильно ли я это написал - это моя первая попытка использовать классы в ПХП).
Так вот, зачем лишние обертки? Чтобы увеличить размер кода?
Есть кто-нибудь, готовый помочь мне понять идею самих классов? Почему некоторые прогаммисты заменяют функции классами? Мне бы хотелось найти собеседника, свободно ориентирующегося в классах и готового обсудить применение функций и классов на конкретных примерах. Есть такие? | |
|
|
|
|
|
|
|
для: kosta_in_net
(07.01.2010 в 07:17)
| | Все просто. Если нужно несколько разных действий в одном флаконе - удобно их в один флакон и сунуть. Там, внутри, сохранятся текущие значения переменных, пока с ними нужно что то делать. Допустим произвести какие то манипуляции с именем. Чтоб не объявлять его глобальным.
<?php
class Class_echotext
{
private $Name = 'Мир';
public function __construct($name = '')
{
if(!empty($name))
$this->Name = $name;
}
public function setName($name = '')
{
if(!empty($name))
$this->Name = $name;
}
public function getName()
{
return 'Привет, '. $this->Name .'!';
}
}
$some_text = new Class_echotext();
//$some_text = new Class_echotext('Вася');
$some_text->setName('Петя');
echo $some_text->getName();
|
А если это
<?
$some_text = new Class_echotext;
$some_text->echotext('Всем привет');
| и все, то польза тоже очевидна. Ты крут. Ты ОФИГЕННЫЙ программер, которому непристало писать как смертные, ты ООП-шник. И мыслишь по другому, и все остальные - ломаки. Ни в коем случае нельзя писать
Так пишут только нубы)))
По крайней мере от сознания такой фундоментальной истины становится тепло и приятно.
ООП в веб-программировании (ИМХО) - вещь бестолковая. А классы - полезное. Если действительно на своих местах. | |
|
|
|
|
|
|
|
для: Николай2357
(07.01.2010 в 11:35)
| | >Допустим произвести какие то манипуляции с именем. Чтоб не объявлять его глобальным...
Я где-то так себе это представлял. Но, если только для этого, то, получается, 99% случаев применения классов в пхп было неуместным. К примеру, http://www.captcha.ru/kcaptcha/ сделана классом (по крайней мере, так было. когда я заглядывал в нее не менее года назад), хотя по сути, там и в фукцию пихать нечего. | |
|
|
|
|
|
|
|
для: kosta_in_net
(07.01.2010 в 07:17)
| | очень советую книгу Мэтта Зандстры.
Прочтите и поймете, что выше написали бред | |
|
|
|
|
|
|
|
для: ride
(07.01.2010 в 11:51)
| | В чем мой бред? Я задал вопрос. Вопрос бредовый? Тогда в чем бредовость вопроса? | |
|
|
|
|
|
|
|
для: kosta_in_net
(07.01.2010 в 12:01)
| | Бред, это адресовано мне. Но я и написал в таком ключе, что предполагал такую реакцию.
Все дело в том, что это не только моё мнение. И не каждой книжке и не каждому высказыванию нужно слепо верить. Нужно думать самому.
Вот допустим высказываеие Стерлинга Хьюза:
У меня такое чувство, что всё ООП состоит из превращения уже имеющихся задач в новые.
И уже только потом дело доходит до их решения.
Конечно, такой подход многое упрощает, но он ужасно неэффективен для разработки небольшого набора взаимосвязанных программ,
что, собственно, и является сутью программных разработок для Web.
... Такие модели, особенно применительно к Web, получаются намного более сложными сами по себе,
чем проблемы, для решения которых они создавались.
|
Его Вы тоже назовете человеком, несущем бред? Тогда я Вас от души поздравляю. | |
|
|
|
|
|
|
|
для: kosta_in_net
(07.01.2010 в 07:17)
| | Раньше программы писали без функций. Но со временем программы стали усложняться и повторяющегося кода стало очень много. Решили выделять код в функции. Функция — это blackbox, превращающий входные данные в выходные по определённым правилам.
С течением времени программы ещё более усложнились и процедурный подход стал неудобен. Появилась новая парадигма — ООП, где класс — форма для штамповки объектов со своими определёнными свойствами и поведением. Если рассматривать объект как хранилище функций, то да, ООП не имеет смысла. Не всякая задача решается средствами ООП (особенно задачи уровня "Hello world!", как в вашем примере). В РНР таких задач очень мало. | |
|
|
|
|
|
|
|
для: Саня
(07.01.2010 в 13:11)
| | Наверное поэтому я пока и не въехал, зачем оно тут. Но я реально видел программы размером в 100 строк, использующих классы (размером в 98 строк, 2 другие строки программы были применением класса). И мне не давало покоя то, что я не мог понять гениальность данного кода. Переписывая его набором операторов, я сокращал код вдвое-втрое и пытался понять, в чем мой косяк, что я теряю, отказавшись от класса. Теперь мне становится интересным, какую цель приследовали люди, одевая в классы даже ОДНОРАЗОВЫЙ код. Похоже, это уже просто сила привычки... | |
|
|
|
|
|
|
|
для: kosta_in_net
(07.01.2010 в 13:30)
| | > Но я реально видел программы размером в 100 строк, использующих классы
Не в последнюю очередь благодаря авторам таких программ РНР называют языком быдлокодеров. | |
|
|
|
|
|
|
|
для: kosta_in_net
(07.01.2010 в 13:30)
| | объект такого класса может быть делегатом другого класса. в таком случае преимущества будут видны сразу. | |
|
|
|
|
|
|
|
для: ride
(07.01.2010 в 14:50)
| | В том и беда, что не сразу. Вместо простой функции придется искать родителя, разбирать дебри наследований и прочей ерунды, хотя это скорее всего используется единожды. Ну пусть два раза.
ООП - образ мысли. И люди, пишущие все и вся объектами не представляют, что можно иначе. Вернее считают это ниже своего достоинства. Отсюда и пример топикстартера про несколько строк, засунутых в класс, отсюда и понятие "быдлокодер". То есть человек, называющий вещи своими именами, без гламурного налета ООП. | |
|
|
|
|
|
|
|
для: Саня
(07.01.2010 в 13:11)
| | Вся беда в том, что в веб-программировании очень мало задач, где действительно оправдан такой подход. ООП призвано облегчить разработку, это понятно. Если есть готовая архитектура и готовые объекты с нужными методами, конечно проще писать на объектной парадигме. Но это фреймворк - готовые, за ранее приготовленные решения.
Решать специфичную, одноразовую задачу - бред. Сначала нужно спроектировать (а это не просто) все приложение сразу, потом разработать и отладить участки (классы), потом попытаться этого монстра оптимизировать.
Когда решаются нестандартные (а я отношусь к людям, которые любую задачу считают нестандартной), этот подход не оправдан именно из за сложности реализации.
Ну не потребуются эти специфические классы в другом приложении - зачем так напрягаться, когда можно все решить легко и просто. Единственный минус - ламером прослывешь. Слава Богу пока еще в этой теме никто мне не предложил на асме писать или бэйсике. ))) | |
|
|
|
|
|
|
|
для: kosta_in_net
(07.01.2010 в 07:17)
| | "...стоит иметь ввиду знаменитый девиз Perl: "Любую задачу можно решить несколькими способами". Это особенно верно для небольших сценариев, когда быстро получить рабочий код и запустить его важнее, чем создать структуру, которая сможет эффективно и безболезненно вырасти в большую систему (в мире экстремального программирования наспех разрабатываемые проекты такого рода называют пробнымии решениями)" (С) Мэтт Зандстра.
Тут было упоминание о его книге "РНР. Объекты, шаблоны и методики программирования" - щас чего то его не заметил, но +100500 к тому посту, ибо книга действительно на редкость прекрасна. | |
|
|
|
|
|
|
|
для: Boeing
(07.01.2010 в 18:22)
| | может у вас есть эта книга в эл. виде? | |
|
|
|
|
|
|
|
для: psychomc
(07.01.2010 в 19:06)
| | В электронном, к сожалению, нет.
Но есть электрокнига Джорджа Шлосснейгла. РНР - Профессиональное программированиие. Она немного о другом, но, на мой взгляд, достойна внимания, поскольку сильно отличается от семейства книг, ака переписанныйМануал | |
|
|
|
|
|
|
|
для: Boeing
(07.01.2010 в 19:23)
| | эту читал в электронном. неплохая, согласен..
сейчас ищу всё что в большей степени связано с ооп | |
|
|
|
|