Снова про ООП

proWoke

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

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

Стоп. У тебя разве есть метод Born? Что это за метод такой? Как ты представляешь этот метод на реальном человеке? А метод train? - это что такое?

Давай лучше так:
PHP:
interface Human {
  public function go($lengthInMeters); // умеем ходить на заданную длину метров $lengthInMeters
  public function relax(); // отдыхаем, ничего не делаем (стоим, лежим)
 }
Теперь надо добавить свойства - рост, вес, пол. Сделаешь?
Плохо я как то понял задание. У интерфейса же не может быть свойств. Но если это делать через абстрактный класс, то я бы так сделал.
PHP:
abstract class Human {
  
  protected $weight, $height, $sex;
  
  abstact protected function go($lengthInMeters);
  abstact protected function relax();
}
 

proWoke

Новичок
А мне понравилась идея с монстрами, набросал кусочек ООП:
https://gist.github.com/809180

Использовать можно было бы примерно так:
PHP:
<?php

$andy = new Skeleton();
$pierre = new Death_Magican();
$angus = new Human_Hero();

$angus->put_on_fire($andy);
$andy->attack($angus);
try {
  $pierre->magic_attack(angus);
} catch (Exception $e )
{
  echo $e->getMessage();
}
?>
У меня ошибка выдаётся после запуска твоего кода. Вот тут:
PHP:
class Human_Hero extends Human {
    public function put_on_fire(Basic_Unit $unit)
    {
        // Direct attack on enemy
        return $unit->defence(Attack_Type::FIRE, 30);
    }
А когда описывается метод defence :

PHP:
public function defence(Attack $attack) { }
В описании метод принимает один аргумент. Вроде в этом ошибка? Или я чего то не понимаю?
 

iceman

говнокодер
научись сначало программировать, отлаживать, потом к ооп будешь переходить, видать тебе рано еще )
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Должно быть
PHP:
// Direct attack on enemy
        return $unit->defence(new Attack(Attack_Type::FIRE, 30));
Но боюсь, iceman прав )))
 

AmdY

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