За последние 24 часа нас посетили 20156 программистов и 1657 роботов. Сейчас ищут 1468 программистов ...

Примеры рабочих скриптов в ООП стиле

Тема в разделе "PHP для новичков", создана пользователем Rezovskij, 23 апр 2016.

Метки:
  1. Rezovskij

    Rezovskij Новичок

    С нами с:
    18 фев 2016
    Сообщения:
    84
    Симпатии:
    1
    Дорогие друзья, могли бы дайть ссылочки на примеры проектов в ООП стиле с русской поддержкой ? Англ ,к сожаленью, на 0 уровне. Хочу понять, как мыслят программисты пишущие на ООП.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно подробнее, что конкретно ищешь?
     
  3. Rezovskij

    Rezovskij Новичок

    С нами с:
    18 фев 2016
    Сообщения:
    84
    Симпатии:
    1
    любой работающий код на php в ооп стиле, желатно с русским комментированием.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Думаю трудно такое найти, обычно комментируют просто для чего метод, чтобы потом на основании комментариев сгенерировать документацию, ещё не очевидные места комментируют, там где код по мнению автора получился запутанным или не понятным.
    Смотри код framework'ов, таких как yii2, symafony3 и т. д. Почитай что такое PSR.
    Есть книги с описанием ООП, и книги по ООП и PHP.
     
  5. Rezovskij

    Rezovskij Новичок

    С нами с:
    18 фев 2016
    Сообщения:
    84
    Симпатии:
    1
    спасибо))
     
  6. Period

    Period Новичок

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1
    Чтобы понять ООП, нужно понять, что такое полиморфизм. Это самое сложное в ООП. Неумение писать в ООП-стиле в 99% означает непонимание принципа полиморфизма.
     
  7. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    А какой имеено полиморфизм нужно понять? ;) Перегрузку методов? Параметрический полиморфизм / дженерики? Подтипов?
    В общем глупость сказали. Наличие полиморфизма вообще не означает наличие ООП.
     
  8. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Когда читаешь код и не понимаешь для чего автор его писал, появляется мотивация перевести комментарии. Перевод комментов кода, для меня было отправной точкой в изучении англ.
     
  9. Rezovskij

    Rezovskij Новичок

    С нами с:
    18 фев 2016
    Сообщения:
    84
    Симпатии:
    1
    Тоже об этом подумал.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Hello World на ООП

    PHP:
    1. /********************************************************************
    2. Model-View-Controller implementation according to POSA
    3. (Pattern-Oriented Software Architecture
    4.   http://www.hillside.net/patterns/books/Siemens/book.html)
    5. ********************************************************************/
    6. class HelloWorldController {
    7.     private $model;
    8.     function __construct($model) {
    9.         $this->model = $model;
    10.     }
    11.     function handleEvent($args) {
    12.         $this->model->setStrategy($args[2]);
    13.         $this->model->addText($args[1]);
    14.     }
    15. }
    16. class HelloWorldModel {
    17.     private $text;
    18.     private $observers = array();
    19.     private $strategy;
    20.     function attach($observer) {
    21.         $this->observers[] = $observer;
    22.     }
    23.     function getData() {
    24.         $facade = new HelloWorldFacade($this->strategy);
    25.         return $facade->getHelloWorld().$this->text."\n";
    26.     }
    27.     function addText($text='') {
    28.         $this->text = $text;
    29.         $this->notify();
    30.     }
    31.     function setStrategy($strategy) {
    32.         $this->strategy = $strategy;
    33.     }
    34.     function notify() {
    35.         foreach ($this->observers as $observer) {
    36.             $observer->update();
    37.         }
    38.     }
    39. }
    40. class HelloWorldView {
    41.     private $model;
    42.     function initialize($model) {
    43.         $this->model = $model;
    44.         $model->attach($this);
    45.         return $this->makeController();
    46.     }
    47.     function makeController() {
    48.         return new HelloWorldController($this->model);
    49.     }
    50.     function update() {
    51.         $this->display();
    52.     }
    53.     function display() {
    54.         echo $this->model->getData();
    55.     }
    56. }
    57. /*********************************************************************
    58. "Business logic"
    59. ********************************************************************/
    60. class HelloWorld {
    61.    function execute() {
    62.        return "Hello world";
    63.    }
    64. }
    65. class HelloWorldDecorator {
    66.    private $helloworld;
    67.    function __construct($helloworld) {
    68.        $this->helloworld = $helloworld;
    69.    }
    70.    function execute() {
    71.        return $this->helloworld->execute();
    72.    }
    73. }
    74. abstract class HelloWorldEmphasisStrategy {
    75.     abstract function emphasize($string);
    76. }
    77. class HelloWorldBangEmphasisStrategy extends HelloWorldEmphasisStrategy {
    78.     function emphasize($string) {
    79.        return $string."!";
    80.     }
    81. }
    82. class HelloWorldRepetitionEmphasisStrategy extends HelloWorldEmphasisStrategy {
    83.     function emphasize($string) {
    84.        return $string." and ".$string." again";
    85.     }
    86. }
    87. class HelloWorldEmphasizer extends HelloWorldDecorator {
    88.    private $strategy;
    89.    function HelloWorldEmphasizer($helloworld,$strategy) {
    90.        $this->strategy = $strategy;
    91.        parent::__construct($helloworld);
    92.    }
    93.    function execute() {
    94.        $string = parent::execute();
    95.        return $this->strategy->emphasize($string);
    96.    }
    97. }
    98. class HelloWorldStrategyFactory {
    99.     static function make($type) {
    100.         if ($type == 'repetition') return self::makeRepetitionStrategy();
    101.         return self::makeBangStrategy();
    102.     }
    103.     static function makeBangStrategy() {
    104.         return new HelloWorldBangEmphasisStrategy;
    105.     }
    106.     static function makeRepetitionStrategy() {
    107.         return new HelloWorldRepetitionEmphasisStrategy;
    108.     }
    109. }
    110. class HelloWorldFormatter extends HelloWorldDecorator {
    111.    function execute() {
    112.        $string = parent::execute();
    113.        return $string."\n";
    114.    }
    115. }
    116. class HelloWorldFacade {
    117.     private $strategy;
    118.     function __construct($strategyType) {
    119.         $this->strategy = HelloWorldStrategyFactory::make($strategyType);
    120.     }
    121.     function getHelloWorld() {
    122.         $formatter = new HelloWorldFormatter(
    123.                 new HelloWorldEmphasizer(
    124.                     new HelloWorld,$this->strategy));
    125.         return $formatter->execute();
    126.     }
    127. }
    128. $model = new HelloWorldModel;
    129. $view = new HelloWorldView;
    130. $controller = $view->initialize($model);
    131. $controller->handleEvent($_SERVER['argv']);
     
    Dimon2x, denis01 и mr.akv нравится это.
  11. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Ахаха, зачетно!
     
  12. Period

    Period Новичок

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1
    Я про использование в реальных проектах, а не про теоретические познания и выученные определения. В идеале, чтобы код назвать ОО каждый его метод должен быть полиморфным. В реальности так мало кто делает.
     
  13. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Я тоже про использование в реальных проектах. Все эти проявления полиморфизма - вполне себе используются в реальных проектах. И перегрузка, и дженерики.
    Каждый метод полиморфный? Т.е. вы все же про перегрузку методов? Ну так PHP не поддерживает перегрузку.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    В пхп можно задавать дефолтные значения и нет строгой типизации. Можно сказать, что методы пхп в принципе изначально рождаются потенциально перегруженными. Ничто не мешает внутри метода выяснить число аргументов и их тип, и делать разное. Хотя конечно это не так, как обычно выглядит.
     
  15. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44