Форум программистов, компьютерный форум, киберфорум
Наши страницы
Комментарии
Войти
Регистрация
Восстановить пароль
  1. Старый комментарий
    Аватар для CoderHuligan
    ООП иль процедурка?
    Цитата:
    Сообщение от tmash Просмотреть комментарий
    Объект решает, что ему делать.
    Вот в этом-то и гнездится проблема.. Обьект ничего не должен решать! Вы читали статью Скотта Мэйерса "Когда приходится инкапсулировать, то иногда лучше меньше, чем больше"?
    Он утверждает следующее:
    Цитата:
    Если вы пишете функцию, которая может быть выполнена или как метод класса, или быть внешней по отношению к классу, Вы должны предпочесть ее реализацию без использования метода. Такое решение увеличивает инкапсуляцию класса. Когда Вы думаете об использовании инкапсуляции, Вы должны думать том, чтобы не использовать методы.
    http://www.softcraft.ru/coding/sm/
    Каково, а?..
    А ведь Скотт Мэйерс довольно авторитетный в С++ комьюнити человек, который написал несколько книг про ООП.
    Оказывается, что класс без методов более инкапсулирован, чем класс с методами!
    И это совершенно понятно. В Теории Автоматического Управления, обьект управления ничего не решает, а наоборот: им управляют при помощи управляющих устройств, и это научный подход, который применяется в технологических процессах.
    Такой обьект можно сохранить на диск или переслать по сети. Задайте себе вопрос: а с вашим обьектом можно проделать то же самое?

    Цитата:
    Матрёшку читать снизу вверх:
    Это матрёшка не обьекта/ов, а устройств управления с конкретными регуляторами, которые непосредственно взаимодействуют с обьектами управления.
    Запись от CoderHuligan размещена 15.12.2018 в 13:24 CoderHuligan вне форума
  2. Старый комментарий
    ООП иль процедурка?
    Привет!

    Законспектировал себе Веста.

    Предлагаю выбрать точку опоры для исследования = физиология обычного человека (ОЧ).

    Ограничения вычислительных способностей ОЧ вызвало появление способов программирования. Как пишут отцы: сначала прямо 0 и 1, затем придумали ассемблер, затем языки выше уровнем, затем процедурные, затем ООП.

    Это упрощённое описание развития ЯП отражает увеличение сложностей задач, которые решали люди при помощи компьютера.

    Можно и сейчас писать всё на ассемблере. И есть такие выдающиеся. А ОЧ не может, ему трудно.

    О чём и рассказывает уважаемый Егор Бугаенко - в его жизни пришло время, когда он стал браться за задачи, которые процедурным стилем решались перенапряжением его умственных способностей, что привело к потере удовольствия от программирования. А Егор (как и мы) любит и хочет программировать с удовольствием. И Егор нашёл этот способ.

    И я ему признателен за это, потому что, как ОЧ, я столкнулся с ситуациями, когда дня три с упоением программируешь процедурно, а потом бац! И собственный код становится непонятным, плохим. И начинаешь заново, огульно, программировать процедурно. И опять на день 4-5 свой код становится непонятным, плохим.

    А тут Егор: MAINTAINABLE = наше всё.

    И я начал учиться объектной декомпозиции – моделировать «тупых» надёжных исполнителей. Классы я редко использую. Своих исполнителей я «упаковываю» матрёшкой. Функции пишу простыми и короткими, чтобы, увидев их через месяц-два, у меня (да и ни у кого) не возникало желания их «упростить».

    И эти короткие методы помогли понять Егора: «Кто не пишет юнит-тесты, тот дурак».

    Как в рукопашном – быстрые и сильные идут в ММА, а обычные к Кадочникову. Так и в программировании – талантливые кодируют так, что ОЧ не понимает их код. А ОЧ используют ООП от Веста, благодаря Бугаенко.

    Вы спрашиваете: «логика поведения каждого обьекта собрана в одном месте? Или она как обычно размыта между разными обьектами?»
    Объект решает, что ему делать. Он короток, он понятен, он инкапуслирован. Вначале кажется парадоксом, но ограничения ОЧ вынуждают решать сложные задачи, используя тупых (реально тупее некуда) исполнителей. А лень кодировать даже простых исполнителей вынудит Вас использовать код повторно - а это резко увеличивает производительность (+ не надо писать юнит тесты) нашего труда и кайф от программирования.
    Набрал “тупых” и пусть они сами решают проблему. Это реально прикольно, когда программа делает, то что ты хотел, а начинаешь её пошагово отлаживать и не можешь понять: Куда? Зачем? Почему?  - о чём и писал Давид «Думать как компьютер = дурная привычка в проектах чуть сложнее простого.»

    В физическом мире Вы можете нанять исполнителя, который закупит стройматериалы и сделает ремонт, а программируя это, если Вы ОЧ и любите программировать с удовольствием, Вам придётся придумать или использовать максимально тупых и неумелых исполнителей.
    Матрёшку читать снизу вверх:

    Т.д.
    Т.п.
    Раствор_Положи
    Раствор_Мешай
    Лишнее_Отрежь
    Плитку_Посчитай
    Материал_подними
    Материал_привези
    Материал_выбери
    Продавца_найти
    Магазин_Где
    Деньги
    Замеры

    И для всех нужны юнит-тесты. Зато для следующей квартиры надёжные исполнители уже готовы. Заметили увеличение производительности Вашего труда?
    А можете всё запрограммировать в одного исполнителя, но у Вас не будет уверенности, что он мимоходом не пнёт, не весть откуда взявшуюся, собаку, которая опрокинет краску, куда не надо. И в следующую квартиру Вы не захотите его впускать, а запрограммируете нового.

    Хорошее самочувствие Ваш верный ориентир.
    Запись от tmash размещена 15.12.2018 в 09:23 tmash вне форума
  3. Старый комментарий
    Аватар для CoderHuligan
    ООП иль процедурка?(продолжение)
    Только надо сначала определится с языком. Могу на Си сделать или на Free Basic. На бейсике для наглядности, например запилить простую игру. Надо определиться с задачей или темой игры.
    Запись от CoderHuligan размещена 14.12.2018 в 10:11 CoderHuligan вне форума
  4. Старый комментарий
    Аватар для CoderHuligan
    ООП иль процедурка?(продолжение)
    Цитата:
    Сообщение от ТабуретY Просмотреть комментарий
    А как это в коде будет выглядеть?
    По-позже будут примеры.
    Запись от CoderHuligan размещена 12.12.2018 в 10:21 CoderHuligan вне форума
  5. Старый комментарий
    ООП иль процедурка?(продолжение)
    А как это в коде будет выглядеть?
    Запись от ТабуретY размещена 12.12.2018 в 03:44 ТабуретY вне форума
  6. Старый комментарий
    Аватар для CoderHuligan
    Шаблоны в php(окончание)
    Цитата:
    Сообщение от voral Просмотреть комментарий
    В Вашем html но обернутый в функцию.... оба фала будут инклудится и какой смысл в функции тогда?
    Смысл в том, что у меня каждая функция tpl сама подготавливает переменные с контентом. Возможно, что такой подход и является неверным..
    Скорее всего, первоначальный вариант был более правильным..
    Запись от CoderHuligan размещена 28.11.2018 в 16:51 CoderHuligan вне форума
  7. Старый комментарий
    Шаблоны в php(окончание)
    При этом сомттрите вам понадобилось по сути то же самое меню но немного другая верстка.. У вас будет новая функция включая сбор/расчет переменных. И разница только в верстке, в моем случае просто параметр...
    Если же вы выделите в ф-ию только верстку (а подготовка в другой ф-ии), то у вас не будет особо отличаться от моего варианта. Только если мой файл открыть там будет всеже html. В Вашем html но обернутый в функцию.... оба фала будут инклудится и какой смысл в функции тогда?
    Запись от voral размещена 28.11.2018 в 16:36 voral вне форума
  8. Старый комментарий
    Шаблоны в php(окончание)
    Ну ООП тут постольку по скольку. Можете include использовать и функции.
    Шаблоны как раз в моем случае гораздо легче менять (по крайней мере нагляднее) функция вообще не меняется. Изменяется параметр и все. То что у вас пути прописаны особо ни чего не меняет. Вы исходите из того, что вы не забыли его прописать, если я буду исходить из тех же соображений - ни чего проверять не буду. Ведь по аналогии вам тоже надо тогда проверять, а "существует ли такая функция?"
    Запись от voral размещена 28.11.2018 в 16:32 voral вне форума
  9. Старый комментарий
    Аватар для CoderHuligan
    Шаблоны в php(окончание)
    Цитата:
    Сообщение от voral Просмотреть комментарий
    тут вообще практически статика, ради которой нет смысла функцию пилить
    Это в данной конкретной функции так. Взял самую простую. А в других есть свои переменые, поэтому и обёрнуто всё в функции.
    Цитата:
    Сообщение от voral Просмотреть комментарий
    Т.е. ваша ф-ия по сути это подключение некоего компонента.
    Так оно и есть. А для сокрытия информации шаблон обёрнут в функцию.
    Цитата:
    Сообщение от voral Просмотреть комментарий
    Т.е. я могу "переключать" и шаблон всего сайта, и шаблон отдельного компонента. Т.е. тут "скин" более широкое понятие. И все компоненты подключаются стандартно.
    Понятно. Скорее всего вы пользуетесь традиционными шаблонизаторами и ООП. А я не пользуюсь ни тем ни другим. Хотя элементы ООП и присутствуют в моём коде, но они лишь отдельные элементы, а не основа. основа это процедурный подход, или по правильному компонентный. Не только класс скрывает информацию, но и обычная функция, причем делает это автоматически, естественно, не налагая никаких дополнительных расходов.
    И я могу на лету менять шаблоны, причём для каждого юзверя отдельно.
    А вам по всей видимости, придётся валидировать компоненты путей, прежде чем передавать их в вашу функцию, или делать это в самой функции. У меня все пути прописаны через дефайны, константно.
    Запись от CoderHuligan размещена 28.11.2018 в 16:26 CoderHuligan вне форума
  10. Старый комментарий
    Шаблоны в php(окончание)
    По этому куску трудно судить. (тут вообще практически статика, ради которой нет смысла функцию пилить) Если у вас "логоменю" присутствует на странице всегда и на одном месте, то я даже выделять бы не стал. Т.е. ваша ф-ия по сути это подключение некоего компонента. (код упрощеный - просто чтоб показать подход)
    PHP
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    function includeComponenet($componentName, $componentTemplateName, $componentOptions) {
    // используем автозагрузку классов
         $component = new $componentName;
         $arData = $component->getData($componentOptions); // тут получаем, собираем, формируем 
                                                                                    // данные необходимые для вывода
         $templateFile = sprintf(
                  '%s/comps/%s/%s/template.php',
                  $siteTemplate, // название он же каталог шаблона всего сайта
                  $componentName, // имя компонента
                  $componentTemplateName // шаблон компонента
         );
         require $templateFile; // там доступны наши $arData$component, $componentName,
                                        // $componentTemplateName, $componentOptions и это просто
                                       // html файл в котором для вывода используется минимально необходимый php
    }
    Все компоеннты наследники одного класса. Возможно даже подключение шаблона убрал бы внутрь....

    Т.е. я могу "переключать" и шаблон всего сайта, и шаблон отдельного компонента. Т.е. тут "скин" более широкое понятие. И все компоненты подключаются стандартно.

    При этом если вы решите, что php в html не надо вплетать переделаете в шаблонах (которые будут собраны в одном каталоге и его подкаталогах) все echo $myVar; на %myVar% и вместо require в одном месте сделаете парсер....
    Запись от voral размещена 28.11.2018 в 16:07 voral вне форума
    Обновил(-а) voral 28.11.2018 в 16:12
  11. Старый комментарий
    Аватар для CoderHuligan
    Шаблоны в php(окончание)
    Извините, что поздно отвечаю, так как форум не уведомляет меня о комментах в блоге.
    Цитата:
    Сообщение от voral Просмотреть комментарий
    Да даже вот эта функция. Какой смысл выносить в цикл, а потом клеить?. Чтобы верстка была менее наглядна? Т.е. находясь на 9-16 строке мы должны помнить, что это все внутри td. А зачем и ради чего? При этом подсветка черти какая.
    Да, - вы правы. Но в данном конкретном случае это позволяет отделить блок элементов меню, от контейнера таблицы, так как переменная $menulinks в своём имени ясно отражает природу её содержимого. Если бы вставка шла в одну и ту же переменную, то это было бы менее ясным.

    Цитата:
    Сообщение от voral Просмотреть комментарий
    Стоп. И тут приходим что мы убрали в функцию тупо кусок шаблона.... Точнее избавились от шаблона ради функции.... А зачем? Ради чего?
    Дело в том, что у меня шаблоны в виде функций. Функции позволяют скрывать внутренние переменные, что облегчает кодинг и повышает багоустойчивость скрипта. Это похоже на то, как реализованы шаблоны в известном форумном движке SMF. Сейчас эта функция выглядит намного проще:
    PHP
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    <?php if(!defined('SIBB_OK')){die('Access denied!');}
     
    function sibb_logomenuTpl()
    {
        global $Skin;
    ?>
        <table width="100%" cellspacing="6" id="logomenu" border="0">
            <tr>
                <td align="left" valign="bottom" nowrap>
                
                    <img src="./templates/<?php echo $Skin?>/im/help.gif" title="Переход на страницу помощи" border="0" alt="">
                    &nbsp;
                    <a href="index.php?action=15" title="Переход на страницу помощи">
                        <b>Помощь</b>
                    </a>
                        &nbsp; &nbsp;&nbsp;
                        
                    <img src="./templates/<?php echo $Skin?>/im/members.gif" title="Пользователи" border="0" alt="">
                        &nbsp;
                    <a href="index.php?action=15" title="Список пользователей форума">
                        <b>Пользователи</b>
                    </a>
                    &nbsp; &nbsp;&nbsp;
     
                    <img src="./templates/<?php echo $Skin?>/im/rules.png" title="Правила" border="0" alt="">
                    &nbsp;
                    <a href="index.php?action=15" title="Прежде чем использовать данный форум внимательно прочитайте правила!">
                        <b>Правила</b>
                    </a>
                        &nbsp; &nbsp;&nbsp;
     
                    <img src="./templates/<?php echo $Skin?>/im/search.gif" title="Поиск" border="0" alt="">
                    &nbsp;
                    <a href="index.php?action=15" title="Поиск по форуму">
                        <b>Поиск</b>
                    </a>
                    &nbsp; &nbsp;&nbsp;
        
                </td>
            </tr>
        </table>
    <?php
    }
    sibb_logomenuTpl();
    ?>
    После описания сразу следует её вызов. И прописывается она в своём файле. Файл просто инклюдится в нужном месте. Как видно здесь я избавился от конфига в котором прописаны все менюшки и отказался от языковой поддержки, так как движок планируется чисто русскоязычным.
    Если нужно изменить шаблон, меняем функцию.
    Изначала намерением было сделать навороченный движок с языковой поддержкой и пр. Однако таких движков пруд пруди, а простых и понятных как заклёпка мало, а такие как раз нужны многим. Делаю чисто для своего сайта, для себя, и мне побоку универсальные решения. Если мне нужно будет вставить пункт меню, то я сделаю это прямо в этом файле. Зачем постоянно греть конфиги, да и сервер?
    Это путь дзен: избавление от всего лишнего..
    Похоже, что это может быть и окончательный вариант.. PHP сам по себе шаблонизатор, и подсветка работает как надо. А как бы вы поступили?
    Запись от CoderHuligan размещена 27.11.2018 в 18:12 CoderHuligan вне форума
    Обновил(-а) CoderHuligan 28.11.2018 в 13:42
  12. Старый комментарий
    Аватар для CoderHuligan
    Шаблоны в PHP (продолжение)
    Цитата:
    Сообщение от voral Просмотреть комментарий
    Исходя из выше перечисленного, все эти str_replace (а, кстати, как выводить в вашем варианте строки в той же таблице с неизвестным количеством строк и столбцов), лишь дополнительная нагрузка (и не важно их быстродействие), которая все го лишь заменяет использование PHP на другой "язык". Т.е. в плане скорости формирования страницы здесь 0 сравнивается с парсингом, который точно больше 0.
    Да. Я пришёл к такому же выводу. У меня теперь всё намного проще.))
    Запись от CoderHuligan размещена 27.11.2018 в 17:44 CoderHuligan вне форума
  13. Старый комментарий
    Аватар для Avazart
    Строковая библа на Си.
    Цитата:
    Так и жуйте, в одиночестве.
    Цитата:
    Вы себе льстите... Поверьте "многие" ничего о Вас не думают...
    Кто тут одинок в своем помешательстве.
    Запись от Avazart размещена 21.11.2018 в 20:19 Avazart вне форума
  14. Старый комментарий
    Аватар для CoderHuligan
    Строковая библа на Си.
    Так и жуйте, в одиночестве. Всё таки решил выложить свою вещицу, но несколько позже, когда доделаю. Зачем идти на поводу у снобов? Может кому понадобится. Она гораздо лучше SDS, которая является составной частью REDIS, и на мой взгляд более качественная.
    Запись от CoderHuligan размещена 20.11.2018 в 10:18 CoderHuligan вне форума
  15. Старый комментарий
    Аватар для Avazart
    Строковая библа на Си.
    Как гласила одна старая реклама "Иногда лучше жевать, нежели говорить."
    Запись от Avazart размещена 19.11.2018 в 23:27 Avazart вне форума
  16. Старый комментарий
    Аватар для CoderHuligan
    Строковая библа на Си.
    Не заслужили.
    Жуйте свои жвачки.
    Запись от CoderHuligan размещена 19.11.2018 в 19:28 CoderHuligan вне форума
  17. Старый комментарий
    Аватар для Avazart
    Строковая библа на Си.
    Факир был пьян, фокус не удался.
    Запись от Avazart размещена 19.11.2018 в 18:20 Avazart вне форума
  18. Старый комментарий
    Аватар для CoderHuligan
    Строковая библа на Си.
    Ах какое горе - он не ушёл!
    Запись от CoderHuligan размещена 19.11.2018 в 11:12 CoderHuligan вне форума
  19. Старый комментарий
    Аватар для Rius
    Строковая библа на Си.
    Как обычно :
    • Я ухожу!
    • Идите, идите...
    • И никогда не вернусь!
    • Да ради бога....
    • Вы ещё пожалеете!
    • Что, вы ещё тут?
    • Хлопнул дверью.
    • Наконец-то...
    • Я передумал!
    • Да неужели?..
    Запись от Rius размещена 19.11.2018 в 10:52 Rius вне форума
  20. Старый комментарий
    Аватар для CoderHuligan
    Строковая библа на Си.
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Попутного ветерка вам в широкую спину.
    Я уже передумал: не дождётесь. Много чести вам, а вас лично в ВЕЧНЫЙ игнор. Я же провокатор. Профессиональный.
    Запись от CoderHuligan размещена 19.11.2018 в 10:43 CoderHuligan вне форума
    Обновил(-а) CoderHuligan 19.11.2018 в 10:49
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru