Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Давайте поиграем в ООП (=
Форумы портала PHP.SU » Разное » Прочее » Давайте поиграем в ООП (=

Страниц (2): [1] 2 »
 

1. tato - 26 Февраля, 2013 - 02:13:44 - перейти к сообщению
Правила просты, исходный класс Start:

PHP:
скопировать код в буфер обмена
  1.  
  2. class Start
  3. {
  4.     protected $var;
  5.  
  6.     public fucntion __construct( $var )
  7.     {
  8.         $this->var = $var;
  9.     }
  10. }
  11.  


Первый расширяет этот класс, называет его своим ником и добовляет метод с какой-либо простой логикой(над переменой $var).

Например Я начну:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Tato extends Start
  3. {
  4.     proteceted function getVar()
  5.     {
  6.         return $this->var;
  7.     }
  8. }
  9.  


Следующий расширяет мой класс, перекрывать существующие методы нельзя!
(Добавление)
Для повторного участия называйте класс NickVer2 и т.д.
(Добавление)
Использовать чужие методы конечно же можно (=
2. DeepVarvar - 26 Февраля, 2013 - 02:21:41 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class DeepVarvar extends Tato
  2. {
  3.   protected $data = array();
  4.  
  5.   public function appendToData($value)
  6.   {
  7.  
  8.     if (is_array($value) or is_object($value)) {
  9.       // TODO сделать класс исключений, обернуть проверку в try catch
  10.       throw new startException("Method expects only simple values");
  11.     }
  12.  
  13.     array_push($this->data, $value);
  14.  
  15.   }
  16.  
  17. }
3. DelphinPRO - 26 Февраля, 2013 - 03:06:40 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class DelphinPRO extends DeepVarvar {
  2.  
  3.   /**
  4.    * @return mixed
  5.    */
  6.   public function extractData()
  7.   {
  8.     return array_pop($this->data);
  9.   }
  10. }
4. DeepVarvar - 26 Февраля, 2013 - 05:19:25 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class DeepVarvar_Version2 extends DelphinPRO
  2. {
  3.  
  4.   public function setVar($var)
  5.   {
  6.     // TODO Тут тоже нужна проверка входных данных
  7.     // Пока без нее
  8.     $this->var = $var;
  9.   }
  10.  
  11.   public function shuffleAllAndResetVar()
  12.   {
  13.     shuffle(array_push($this->data, $this->var));
  14.     $this->setVar(null);
  15.   }
  16.  
  17. }
5. EuGen - 26 Февраля, 2013 - 08:01:13 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. final class EuGen extends DeepVarvar_Version2
  2. {
  3.    public function __destruct()
  4.    {
  5.       return new EuGen;
  6.    }
  7. }
6. Vinyl - 26 Февраля, 2013 - 08:08:59 - перейти к сообщению
Фигасе вы тут отжигаете Радость
7. DeepVarvar - 26 Февраля, 2013 - 08:13:30 - перейти к сообщению
EuGen, так не чесно! Ха-ха
Посоны, даёш форк!
8. EuGen - 26 Февраля, 2013 - 08:16:00 - перейти к сообщению
Вот и я к тому. А именно - что правила неоднозначны и не защищают от "замкнутых" вариантов, когда игра завершается по причине невозможности её продолжения.
Вообще, любопытно, как далеко это бы зашло и какие методы работы в итоге бы возникли. К ООП, наверное, это все же имело бы слабое отношение (после 30-40 наследований), но тем не менее.
Можно считать мой комментарий - лишь примером и не учитывать его в дискуссии.
9. DelphinPRO - 26 Февраля, 2013 - 09:05:23 - перейти к сообщению
CODE (bash):
скопировать код в буфер обмена
  1. git clone --branch DeepVarvar_Version2


Спойлер (Отобразить)
10. tato - 26 Февраля, 2013 - 09:19:12 - перейти к сообщению
Этот так сказать тестовый заезд (=, на самом деле пока обедал такая вот идейка пришла.
А правила можно всегда поправить и выпустить 2.0 версию игры, надо бы лучше продумать.
11. EuGen - 26 Февраля, 2013 - 09:24:15 - перейти к сообщению
Суть в том, что плохо наследоваться от одной сущности. Добавить сюда, скажем, интерфейсы (стартовые), и пусть участники либо наследуются от имеющихся сущностей, либо реализуют базовый интерфейс(ы), сообразно тому, правильно ли по его (участника) ощущениям это или нет. Этим можно будет избавиться от десятков наследований, да и система получится более разветвтленная и сбалансированная.
Разумеется, стандартные интерфейсы(Traversable, Serializable и т.п.) точно так же можно реализовывать. А, возможно, стоит дать возможность добавлять и свои интерфейсы, которые станут базовыми (однако не каждый комментарий, он же "ход")
12. DlTA - 26 Февраля, 2013 - 09:27:39 - перейти к сообщению
а еще стоит использовать иной способ хранения кода,
не в постах, а то как потом проверять валидность (отсутствие переопределения и т.д.)
а так бы компилятор проверял
(Добавление)
и договориться о версии пыха
13. OrmaJever - 26 Февраля, 2013 - 10:08:31 - перейти к сообщению
Блин, а идея то интересная! Даже очень интересная, только нужно как уже многие говорили, обговорить правила, версию php и где хранить код.
14. EuGen - 26 Февраля, 2013 - 10:23:10 - перейти к сообщению
Верно. С интерфейсами - так вообще игра в "ассоциации" выходит. Вот я напишу прототип в интерфейсе - и пусть все догадываются, что же я имел ввиду и пишут реализации.
Предлагаю условиться: версия PHP строго 5.4 - тогда, например, рефлексию можно будет использовать.
Начало:
PHP:
скопировать код в буфер обмена
  1. interface Universe
  2. {
  3.    const C = 299792458;
  4.    const h = 6.62606957;
  5.  
  6.    public function getEnergyByMass($fMass);
  7. }

PHP:
скопировать код в буфер обмена
  1.  
  2. class Reality implements Universe
  3. {
  4.    public function getEnergyByMass($fMass)
  5.    {
  6.       return is_numeric($fMass)&&$fMass>=0?$fMass*pow(Universe::C, 2):null;
  7.    }  
  8. }

- здесь я привожу сразу два "хода" для понимания того, какие могут быть правила "игры", а так же понять, можно ли их применять, эти правила, и интересно ли. Стоит добавить, думаю, то, что базовые интерфейсы можно "расширять", добавляя в них прототипы, но вот "сужать" не следует, поскольку тогда реализации этих интерфейсов могут стать некорректными.
15. DlTA - 26 Февраля, 2013 - 11:25:48 - перейти к сообщению
может все же и тему выбрать
а то уж сильно большие ребусы получаются...
(Добавление)
а еще б хорошо описание прикручивать в корректной форме, а то только код как то не корректно.

 

Powered by ExBB FM 1.0 RC1