[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объясните в чем преимущества ООП?
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
PHPLIVE
Для меня ООП, это метод который сковывает код в какието рамки,
на самом деле , это помогает организовать и оптимизировать код, конечно возникает больше вопросов , например который возник у меня, пожалуйста помогите , если не сложно
http://phpforum.su/index.php?showtopic=83849
chee
Так как вы долго отвечаете и в принципе, отвечаете так как я и предпологал, то я написал пример вашего кода и моего, резултат их работы одинаков.

Ваш код(форматированый и дописаный)

<?php

class
Enimals_Sounds
{

public static function кошка()
{
echo 'мяу';
}

public static function собака()
{
echo 'гав';
}

public static function селедка()
{
echo '...';
}

}


class Enimals_Jump
{

public static function кошка()
{

}


public static function собака()
{

}


public static function селедка()
{

}

}


class Enimals_MoveTail
{

public static function кошка()
{

}


public static function собака()
{

}


public static function селедка()
{

}

}


class My_Enimals_Sounds extends Enimals_Sounds
{

public static function лошадка()
{
echo 'игого';
}

}


class My_Enimals_Jump extends Enimals_Jump
{

public static function лошадка()
{

}

}


class My_Enimals_MoveTail extends Enimals_MoveTail
{

public static function лошадка()
{

}

}


class Zoo
{

public static $Зверушки = array();

public static function run($action)
{
if (!class_exists($action))
throw new Exception();

foreach (self::$Зверушки as $Животина) {
$action::$Животина();
}
}

}


Zoo::$Зверушки = array('кошка', 'собака', 'лошадка');
Zoo::run('My_Enimals_Sounds');
Zoo::$Зверушки = array('кошка', 'собака', 'селедка', 'лошадка');
Zoo::run('My_Enimals_Jump');
Zoo::run('My_Enimals_MoveTail');

итого 114 строк
Минусы:
- Вы меняли код класса Zoo в методе run
- Сомнительный подход с наследованием классов действий, можно характеризовать как "костыль", по той парадигме которой вы выбрали, лучше бы было добавить метод "лошадка" в существующие классы(но это приведет к изменению классов)

мой код

<?php


class
Animal
{

protected $voice;

public function doVoice()
{
echo $this->voice;
}

public function doJump()
{

}


public function doMoveTail()
{

}

}


class AnimalFactory
{

/**
*
@return \Animal
*
@param string $animal
*/

static public function newAnimal($animal)
{
$className = ucfirst($animal);

if (!class_exists($className)) {
throw new Exception(sprintf('class for %s not found', $animal));
}

return new $className;
}

}


class Horse extends Animal
{

protected $voice = 'Игого';

}

class Cat extends Animal
{

protected $voice = 'мяу';

}

class Dog extends Animal
{

protected $voice = 'гав';

}

class Fish extends Animal
{

protected $voice = 'буль-буль';

}

class Zoo
{

protected $animals = array();

public function addAnimal(\Animal $animal)
{
$this->animals[] = $animal;
}

public function doIt(\AbstractAction $action)
{
foreach ($this->animals as $animal) {
$action->action($animal);
}
}

}


abstract class AbstractAction
{

abstract public function action(\Animal $animal);
}

class JumpAction extends AbstractAction
{

public function action(\Animal $animal)
{
$animal->doJump();
}

}


class VoiceAction extends AbstractAction
{

public function action(\Animal $animal)
{
$animal->doVoice();
}

}


class MoveTailAction extends AbstractAction
{

public function action(\Animal $animal)
{
$animal->doMoveTail();
}

}


class AllAction extends AbstractAction
{

public function action(\Animal $animal)
{
$animal->doJump();
if (!($animal instanceof Fish)) {
$animal->doVoice();
}
$animal->doMoveTail();
}

}


$zoo = new \Zoo;
$zoo->addAnimal(AnimalFactory::newAnimal('cat'));
$zoo->addAnimal(AnimalFactory::newAnimal('dog'));
$zoo->addAnimal(AnimalFactory::newAnimal('fish'));
$zoo->addAnimal(AnimalFactory::newAnimal('horse'));
$action = new \AllAction;
$zoo->doIt($action);

149 строк
Минусы:
- Больше классов
- Больше потребляет ресурсов

Выводы(на данный момент): Ваш код более производительный, но при этом для изменения поведения нужно править существующий код, в моем же случае с производительностью беда, но классы я не правил, а добавлял новые. При том количество строк не различается в разы, заметьте это.



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

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