На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (4) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> ООП vs %name% , размышления о проектировании
    Буэнос диас, амигос!

    Понемногу изучая Rust, я столкнулся с тем, что привычные приемы проектирования "не работают". Конечно же я об ООП и его паттернах проектирования. Некоторые "коллеги по цеху" уже разочаровались по стопицот раз, переписывая С++ код на Rust.

    В представленной выше ссылке, как по мне, интересна не сама статья как натянуть сову на глобус, а последующие обсуждения. Там промелькнуло хорошее высказывание "Нет ООП-задач. Есть один из подходов - это используя ООП. Как будто он один единственный" (не дословно).

    Собственно вопросы к обсуждению

    Приступая к проектированию проекта, большинство разработчиков, которые худо-бедно владеют ЯП с полной поддержкой ООП, этот подход и выбирают. Я не имею ввиду 100-строчные "хелоу ворлд" утилиты. А нормальные, более-менее сложные проекты.

    1) А как быть если полной поддержки ООП в ЯП нет?
    2) Есть ли приемы/методики проектирования не менее удобные чем объектно-ориентированное?
    3) А есть ли для них свои "паттерны проектирования", которые есть для ООП?

    :-?

    ЗЫ: Аббревиатуру "ООП" читаем как "Объектно-ориентированное программирование" или "Объектно-ориентированное проектирование" по контексту.
      Цитата JoeUser @
      Понемногу изучая Rust, я столкнулся с тем, что привычные приемы проектирования "не работают". Конечно же я об ООП и его паттернах проектирования.

      Например?

      Добавлено
      Цитата JoeUser @
      1) А как быть если полной поддержки ООП в ЯП нет?
      2) Есть ли приемы/методики проектирования не менее удобные чем объектно-ориентированное?
      3) А есть ли для них свои "паттерны проектирования", которые есть для ООП?

      1) Не использовать ООП. Не использовать такой язык. Использовать ООП через кастомные/библиотечные решения для языка.
      На самом деле последний вариант вполне реален. Просто "шаблоны ООП" расширяются вначале самыми примитивными - "объект", "класс" и т.п.
      2) Что значит "не менее удобные"? :)
      Есть старое структурное/процедурное программирование. Есть функциональное.
      3) Ну конечно есть. Паттерны есть вообще почти во всем :) Вопрос в том, описаны ли они так же хорошо, как для ООП. Для функциональщины вроде видел литературу, но сам не читал.

      Добавлено
      Конкретно в rust, по-моему можно вполне соответствовать SOLID, а что ещё нужно? Наследование реализации? Не уверен, что это большое препятствие.
        Цитата D_KEY @
        Например?

        Давай для начала посмотрим простейшее, к примеру паттерн "Фабричный метод", как это будет смотреться на Rust?

        Пример реализации этого на С++ из вики:
        ExpandedWrap disabled
          #include <iostream>
          #include <string>
          using namespace std;
           
          class Product {
            public:
              virtual string getName() = 0;
              virtual ~Product() = default;
          };
           
          class ConcreteProductA: public Product {
            public:
              string getName()override {return "ConcreteProductA";}
          };
           
          class ConcreteProductB: public Product {
            public:
              string getName()override {return "ConcreteProductB";}
          };
           
          class Creator {
            public:
              virtual Product* factoryMethod() = 0;
              virtual ~Creator() = default;
          };
           
          class ConcreteCreatorA: public Creator {
            public:
              Product* factoryMethod()override {return new ConcreteProductA();}
          };
           
          class ConcreteCreatorB: public Creator {
            public:
              Product* factoryMethod()override {return new ConcreteProductB();}
          };
           
          int main() {
            ConcreteCreatorA CreatorA;
            ConcreteCreatorB CreatorB;
            // An array of creators
            Creator*creators[] = {&CreatorA, &CreatorB};
            // Iterate over creators and create products
            for(auto&& creator: creators) {
              Product* product=creator->factoryMethod();
              cout << product->getName() << endl;
              delete product;
            }
            return 0;
          }


        Цитата D_KEY @
        Есть старое структурное/процедурное программирование. Есть функциональное.

        Ну понятия "программирование" и "проектирование" - несколько разные все ж вещи. Результатом программирования является программа или отдельные ее части. Результатом проектирования является математическая модель, имеющая структуру, характеристики и свойства.

        Меня интересует сейчас только варианты проектирования - не ООП.
          Цитата JoeUser @
          как это будет смотреться на Rust

          Точно так же и будет.

          Добавлено
          Можно, пожалуй, согласиться, что существующие подходы к проектированию gui фреймворков на раст укладываются плохо - до сих пор нет вменяемых gui библиотек. Но ООП тут вообще никаким боком.
            Паттерны проектирования программисту не нужны. Они нужны только писателям книг про паттерны проектирования.
            Сообщение отредактировано: applegame -
              Цитата applegame @
              Паттерны проектирования программисту не нужны. Они нужны только писателям книг про паттерны проектирования.

              Спорное утверждение. Пару лет назад я писал "монстра" на Qt в одно лицо. Столько времени ушло на организацию взаимодействия элементов интерфейса на основе сигналов-слотов, просто ппц. А просто по-тому, что изначально все писал "в лоб", не сильно заботясь про создание структуры, где каждый объект или совокупность выполняют только свойственные ему/ей функции. Гораздо позже прочел книгу по паттернам проектирования ООП. А мог бы сэкономить время разработки в разы.
                Цитата OpenGL @
                Точно так же и будет.

                :good: Как считаешь, все ли паттерны ООП проектирования можно так же перевести на Rust, или могут быть проблемы?
                  Цитата JoeUser @
                  Гораздо позже прочел книгу по паттернам проектирования ООП. А мог бы сэкономить время разработки в разы.
                  У меня было не так. Когда я первый раз прочитал о паттернах, то выяснил, что я их и так уже использую, не зная что они имеют какие-там названия. Они же примитивны.
                    Цитата JoeUser @
                    Цитата D_KEY @
                    Есть старое структурное/процедурное программирование. Есть функциональное.

                    Ну понятия "программирование" и "проектирование" - несколько разные все ж вещи. Результатом программирования является программа или отдельные ее части. Результатом проектирования является математическая модель, имеющая структуру, характеристики и свойства.

                    Меня интересует сейчас только варианты проектирования - не ООП.

                    Ну так в данном конкретном случае программирование и проектирование связаны тесно.
                    Процедурный подход толкает тебя на проектирование в концепциях модулей, структур данных и (ключевое) операций над ними,
                    ОО - объектов и взаимодействия между ними,
                    функциональщина - потоков данных и цепочек вычислений.

                    Добавлено
                    Цитата applegame @
                    Когда я первый раз прочитал о паттернах, то выяснил, что я их и так уже использую, не зная что они имеют какие-там названия.

                    Так в этом и суть паттернов, что они дают каталогизированный и систематизированный список стандартных подходов, позволяя экономить время при обсуждении и работе в командах(и последующей поддержки возможно даже другими людьми).
                    Ну а новичкам действительно дают правильную справку. Хотя я бы не торопился паттерны давать джунам :)
                      Цитата applegame @
                      Когда я первый раз прочитал о паттернах, то выяснил, что я их и так уже использую, не зная что они имеют какие-там названия.

                      +1. Мне разве что visitor в новинку был, но скорей всего только потому, что на момент прочтения я не сталкивался с задачей, где нужна динамическая диспетчирезация по двум параметрам, а если бы столкнулся, то, полагаю, сам бы пришёл к похожему решению.

                      Цитата D_KEY @
                      позволяя экономить время при обсуждении и работе в командах

                      Хз, по моему опыту всегда достаточно своими словами описать, что ты хочешь это сделать. Умные слова из книжки для этого не сильно нужны.

                      Цитата JoeUser @
                      Как считаешь, все ли паттерны ООП проектирования можно так же перевести на Rust, или могут быть проблемы?

                      Я не вижу каких-либо подводных камней. Сложности BC, которые непременно будут поначалу при программировании на расте, будут относиться скорей к конкретному применению того или иного паттерна и конкретной ситуации, а не к паттерну как таковому.
                        Цитата OpenGL @
                        Хз, по моему опыту всегда достаточно своими словами описать, что ты хочешь это сделать. Умные слова из книжки для этого не сильно нужны.

                        Так можно не описывать, если все понимают термин сразу. Что, неужели никогда не используешь слова "фабрика", "визитор", "фасад" или ещё чего? Или разъясняешь каждый раз их?
                        Не верю :)

                        Да и в коде если соответствующие классы имеют в своих именах соответствующие названия, то читать и вникать проще.
                          Цитата D_KEY @
                          Что, неужели никогда не используешь слова "фабрика", "визитор", "фасад" или ещё чего?

                          Если я скажу, что не использую - ты поверишь? :D Фабрику бывает что использую, всё остальное же использовал только для того, чтобы выпендриться сказать что данное решение носит такое название.
                            Цитата applegame @
                            Паттерны проектирования программисту не нужны. Они нужны только писателям книг про паттерны проектирования.
                            Два чая этому гражданину
                            Цитата D_KEY @
                            Что, неужели никогда не используешь слова "фабрика", "визитор", "фасад" или ещё чего? Или разъясняешь каждый раз их?
                            Не верю
                            я эти слова использую настолько редко, что уже и забыл слово "визитор". Наверное, спасибо, что напомнил:)
                              Цитата OpenGL @
                              Фабрику бывает что использую

                              Ну вот видишь. В этом и смысл. В твоём случае устоялся один паттерн. Для других этот список будет более полным.

                              Добавлено
                              Цитата negram @
                              я эти слова использую настолько редко, что уже и забыл слово "визитор".

                              Ну хоть фабрику-то используешь? :D
                              И вообще, насколько часто обсуждаешь решения при проектировании/архитектурные решения с коллегами? Насколько часто копаешься в чужом коде?
                                Цитата D_KEY @
                                Насколько часто копаешься в чужом коде?

                                При копании в чужом коде все равно не поможет. Какой-нибудь "наблюдатель" можно реализовать сто и одним способом, и когда поймешь, что смотришь именно на него, только в профиль, тогда будет уже поздно - из глаз будут течь кровавые слезы, а уши завернутся в трубочку от мата :D
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0436 ]   [ 16 queries used ]   [ Generated: 28.03.24, 10:21 GMT ]