Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите понять смысл классов
 
 автор: kosta_in_net   (07.01.2010 в 07:17)   письмо автору
 
 

Я программирую много лет на разных языках. Начиналось все с клипера, паскаля и бейсика. Не помню, были ли в них классы, но я привык писать операторы и создавать функции. Позже, программируя под виндовс, я использовал стандартную библиотеку классов, чтоб не писать весь ее функционал заново и обращался к объектам класса, пользуясь их методами и атрибутами. Но я так и не понял, почему классы :)
Сейчас я, в основном пишу на ПХП. Как и раньше, я либо пишу просто набор операторов, один за другим, либо, если функционал может потребоваться в разных ситуациях, оборачиваю его в функцию и вызываю с разными параметрами. К примеру, можно написать так:

echo 'Всем привет';

А можно так

function echotext($textstring){
echo $textstring;
}

и, при необходимости, вызывать как

echotext('Всем привет');

Естественно, делать функцию из единственного оператора не имеет смысла, но для примера пойдет :)

Но часто я вижу в чужем коде использование классов. Так же, как и раньше, мне непонятно, почему классы? Кто-нибудь, может мне объяснить, почему вместо функций используются классы? Зачем, к примеру, оборачивать вышеприведенную функцию echotext в класс:

class Class_echotext {
function echotext($textstring){
echo $textstring;
}
}

чтоб потом вызывать это так:

$some_text = new Class_echotext;
$some_text->echotext('Всем привет');

(кстати, проверьте, правильно ли я это написал - это моя первая попытка использовать классы в ПХП).

Так вот, зачем лишние обертки? Чтобы увеличить размер кода?

Есть кто-нибудь, готовый помочь мне понять идею самих классов? Почему некоторые прогаммисты заменяют функции классами? Мне бы хотелось найти собеседника, свободно ориентирующегося в классах и готового обсудить применение функций и классов на конкретных примерах. Есть такие?

  Ответить  
 
 автор: Николай2357   (07.01.2010 в 11:35)   письмо автору
 
   для: 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('Всем привет');
и все, то польза тоже очевидна. Ты крут. Ты ОФИГЕННЫЙ программер, которому непристало писать как смертные, ты ООП-шник. И мыслишь по другому, и все остальные - ломаки. Ни в коем случае нельзя писать
<?
echo 'Всем привет';

Так пишут только нубы)))
По крайней мере от сознания такой фундоментальной истины становится тепло и приятно.

ООП в веб-программировании (ИМХО) - вещь бестолковая. А классы - полезное. Если действительно на своих местах.

  Ответить  
 
 автор: kosta_in_net   (07.01.2010 в 11:59)   письмо автору
 
   для: Николай2357   (07.01.2010 в 11:35)
 

>Допустим произвести какие то манипуляции с именем. Чтоб не объявлять его глобальным...

Я где-то так себе это представлял. Но, если только для этого, то, получается, 99% случаев применения классов в пхп было неуместным. К примеру, http://www.captcha.ru/kcaptcha/ сделана классом (по крайней мере, так было. когда я заглядывал в нее не менее года назад), хотя по сути, там и в фукцию пихать нечего.

  Ответить  
 
 автор: ride   (07.01.2010 в 11:51)   письмо автору
 
   для: kosta_in_net   (07.01.2010 в 07:17)
 

очень советую книгу Мэтта Зандстры.
Прочтите и поймете, что выше написали бред

  Ответить  
 
 автор: kosta_in_net   (07.01.2010 в 12:01)   письмо автору
 
   для: ride   (07.01.2010 в 11:51)
 

В чем мой бред? Я задал вопрос. Вопрос бредовый? Тогда в чем бредовость вопроса?

  Ответить  
 
 автор: Николай2357   (07.01.2010 в 12:16)   письмо автору
 
   для: kosta_in_net   (07.01.2010 в 12:01)
 

Бред, это адресовано мне. Но я и написал в таком ключе, что предполагал такую реакцию.
Все дело в том, что это не только моё мнение. И не каждой книжке и не каждому высказыванию нужно слепо верить. Нужно думать самому.
Вот допустим высказываеие Стерлинга Хьюза:
У меня такое чувство, что всё ООП состоит из превращения уже имеющихся задач в новые. 
И уже только потом дело доходит до их решения. 
Конечно, такой подход многое упрощает, но он ужасно неэффективен для разработки небольшого набора взаимосвязанных программ, 
что, собственно, и является сутью программных разработок для Web. 

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

Его Вы тоже назовете человеком, несущем бред? Тогда я Вас от души поздравляю.

  Ответить  
 
 автор: Саня   (07.01.2010 в 13:11)   письмо автору
 
   для: kosta_in_net   (07.01.2010 в 07:17)
 

Раньше программы писали без функций. Но со временем программы стали усложняться и повторяющегося кода стало очень много. Решили выделять код в функции. Функция — это blackbox, превращающий входные данные в выходные по определённым правилам.
С течением времени программы ещё более усложнились и процедурный подход стал неудобен. Появилась новая парадигма — ООП, где класс — форма для штамповки объектов со своими определёнными свойствами и поведением. Если рассматривать объект как хранилище функций, то да, ООП не имеет смысла. Не всякая задача решается средствами ООП (особенно задачи уровня "Hello world!", как в вашем примере). В РНР таких задач очень мало.

  Ответить  
 
 автор: kosta_in_net   (07.01.2010 в 13:30)   письмо автору
 
   для: Саня   (07.01.2010 в 13:11)
 

Наверное поэтому я пока и не въехал, зачем оно тут. Но я реально видел программы размером в 100 строк, использующих классы (размером в 98 строк, 2 другие строки программы были применением класса). И мне не давало покоя то, что я не мог понять гениальность данного кода. Переписывая его набором операторов, я сокращал код вдвое-втрое и пытался понять, в чем мой косяк, что я теряю, отказавшись от класса. Теперь мне становится интересным, какую цель приследовали люди, одевая в классы даже ОДНОРАЗОВЫЙ код. Похоже, это уже просто сила привычки...

  Ответить  
 
 автор: Саня   (07.01.2010 в 14:36)   письмо автору
 
   для: kosta_in_net   (07.01.2010 в 13:30)
 

> Но я реально видел программы размером в 100 строк, использующих классы
Не в последнюю очередь благодаря авторам таких программ РНР называют языком быдлокодеров.

  Ответить  
 
 автор: ride   (07.01.2010 в 14:50)   письмо автору
 
   для: kosta_in_net   (07.01.2010 в 13:30)
 

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

  Ответить  
 
 автор: Николай2357   (07.01.2010 в 15:03)   письмо автору
 
   для: ride   (07.01.2010 в 14:50)
 

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

  Ответить  
 
 автор: Николай2357   (07.01.2010 в 13:49)   письмо автору
 
   для: Саня   (07.01.2010 в 13:11)
 

Вся беда в том, что в веб-программировании очень мало задач, где действительно оправдан такой подход. ООП призвано облегчить разработку, это понятно. Если есть готовая архитектура и готовые объекты с нужными методами, конечно проще писать на объектной парадигме. Но это фреймворк - готовые, за ранее приготовленные решения.
Решать специфичную, одноразовую задачу - бред. Сначала нужно спроектировать (а это не просто) все приложение сразу, потом разработать и отладить участки (классы), потом попытаться этого монстра оптимизировать.
Когда решаются нестандартные (а я отношусь к людям, которые любую задачу считают нестандартной), этот подход не оправдан именно из за сложности реализации.
Ну не потребуются эти специфические классы в другом приложении - зачем так напрягаться, когда можно все решить легко и просто. Единственный минус - ламером прослывешь. Слава Богу пока еще в этой теме никто мне не предложил на асме писать или бэйсике. )))

  Ответить  
 
 автор: Boeing   (07.01.2010 в 18:22)   письмо автору
 
   для: kosta_in_net   (07.01.2010 в 07:17)
 

"...стоит иметь ввиду знаменитый девиз Perl: "Любую задачу можно решить несколькими способами". Это особенно верно для небольших сценариев, когда быстро получить рабочий код и запустить его важнее, чем создать структуру, которая сможет эффективно и безболезненно вырасти в большую систему (в мире экстремального программирования наспех разрабатываемые проекты такого рода называют пробнымии решениями)" (С) Мэтт Зандстра.

Тут было упоминание о его книге "РНР. Объекты, шаблоны и методики программирования" - щас чего то его не заметил, но +100500 к тому посту, ибо книга действительно на редкость прекрасна.

  Ответить  
 
 автор: psychomc   (07.01.2010 в 19:06)   письмо автору
 
   для: Boeing   (07.01.2010 в 18:22)
 

может у вас есть эта книга в эл. виде?

  Ответить  
 
 автор: Boeing   (07.01.2010 в 19:23)   письмо автору
 
   для: psychomc   (07.01.2010 в 19:06)
 

В электронном, к сожалению, нет.

Но есть электрокнига Джорджа Шлосснейгла. РНР - Профессиональное программированиие. Она немного о другом, но, на мой взгляд, достойна внимания, поскольку сильно отличается от семейства книг, ака переписанныйМануал

  Ответить  
 
 автор: psychomc   (07.01.2010 в 19:58)   письмо автору
 
   для: Boeing   (07.01.2010 в 19:23)
 

эту читал в электронном. неплохая, согласен..

сейчас ищу всё что в большей степени связано с ооп

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования