Это не абстрактная фабрика. В вашей демонстрации в факторио изменяется только один "компонент" - на выходе завода получаются то пластины, то двигатели, то провода. Суть же абстрактной фабрики в том, что выход фабрики - это несколько классов, каждый из которых является наследником своего интерфейса. Примером абстрактной фабрики могли бы быть книжки со всеми чертежами для производства колб. С одними и теми же выходами (это важно!). В первой книжке используются синие заводы, во втором - зеленые, а в третьем - зеленые с маяками и модулями. Получается, что каждая из книжек - это отдельная фабрика. Каждый чертеж - объект. Так как входы и выходы для каждого типа колб в разных книжках одинаковые, то они как бы наследуются от одного и того же интерфейса (то есть у каждых красных колб - одни и те же входы и выходы одинаково расположенные). Но и то, пример с натяжкой Пример же показанный в видео не подходит ни под один паттерн проектирования, потому что Вы просто заменяете один "класс" на другой, у которого даже другой выход. Это даже под наследование не подходит, потому что нарушает принцип Лисков. Это вообще сложный для понимания и использования паттерн, программист может ни разу в жизни его не использовать)
Спасибо большое за развёрнутый комментарий! Вы абсолютно правы в том, что реализация «абстрактной фабрики» в реальных проектах гораздо глубже, чем просто «поменяли выход завода». Мой пример с Factorio был скорее упрощённой метафорой: хотел показать саму идею «меняем внутреннюю начинку - интерфейс остаётся прежним», чтобы новичкам было легче это понять на знакомом примере. Конечно, если разбирать классический паттерн «Абстрактная фабрика» по канону, там речь идёт о целой группе родственных объектов, наследующихся от общих интерфейсов. То, о чём вы говорите в примере с «книжками чертежей», действительно ближе к классике паттерна: несколько разных «наборов» с одинаковой структурой входов-выходов, но разным наполнением (синие/зелёные заводы, модули и так далее). Это хороший и более «каноничный» пример абстрактной фабрики, когда у нас есть несколько связанных классов, которые нужно порождать «набором». Согласен, что этот паттерн не самый простой и далеко не всегда необходим в повседневной работе. Но порой, когда проект растёт и объектов становится много, абстрактная фабрика спасает от хаоса. Спасибо, что дополнили ролик разъяснением и поделились своим взглядом! Уверен, многим будет полезно увидеть ещё один пример, показывающий, как именно работает «настоящая» абстрактная фабрика и почему тема действительно сложнее, чем кажется на первый взгляд.
Абстрактная фабрика - это фабрика фабрик, то есть фабрика, которая возвращает другие (конкретные) фабрики. Если натягивать это на факторио, то это завод, который выпускает другие (разные) заводы, которые выпускают продукты. При этом выпускаемые заводы для разных продукций (шестеренки, пластины, кирпичи)
5:36 Ооо, это мой метод! Но не совсем так: лучше заняться разработкой системы, которая непосредственно встраивает специи в организм, сразу как только считывает характерные для необходимости просить передать соль поведенческие паттерны. Захотел попросить передать соль? Как вдруг ХОБА! А она сама тебе мгновенно прилетает! Автоматизация! \(⌒∇⌒)/
4:33 выглядит точно так же, когда ты рассказывал про принцип закрытости, типа перестраивание фабрики похожим образом это нарушение принципа закрытости...
@Just-York получается, смысл в том, что при нарушении закрытости мы перестраиваем то, что внутри завода, а здесь мы делаем новый завод, который имеет такие же ресурсы на входе но у которого другая функция, при этом, внутренности первого не меняются?
@ все верно, но только нам в данном случае не важно какие внутренности, так как речь про внешний интерфейс, который даже не знает каким образом сделаны внутренности у него задача дать ресурс и получить результат. Можно в качестве примера взять простой станок, ты же не знаешь каким образом он из железных пластин делает гайки или трубы, тебе важен результат. Тут тоже самое, только глобальнее в рамках набора станков
Абстрактное программирование плохо работает на олимпиадном программировании, где: есть очень сложная задача, нужно за наименьшее количество времени написать программу которая будет выполнять эту задачу, скорее всего будет миллион подводных камней, а когда ты сделал программу, ты сдаёшь её и забываешь как о страшном сне.
Факторио даёт очень близким паттерны поведения с программированием и хороший факторщик быстрее разберёться с патронами программирования и наоборот. Но он хоть и близки и чувствуются похоже работать с ними нужно по разному. Я не против того что вы называете что-то чем-то. Но на концепции фактории решения из программирования не работают в полной мере. Например принцип dry воще не функционирует на поздних этапах игры потому что снести что-то и поставить что-то огромное очень просто. Я бы ёщо аргументировал почему абстрактную фабрику нельзя объяснять на примере факторио но мне лень писать.
Полностью согласен, но я ставлю основной целью не рассказать как в факторио это использовать, а как понять сложные вещи в программировании на примере факторио. Тут игра выступает как визуальный материал, подкрепляющий слова в большей степени чем аналогией с программированием. Если в каких-то моментах получается сопоставить, то отлично.
@@Just-York как я сказал это неплохо если это поможет кому-то но из за особенностей игры их можно не правильно истолковать хотя это в принципе особенность паттернов программирования. Их почти невозможно понять без гигантского багажа знаний и опыта .
Не играл в satisfactory, но 6/12 -> 1 выглядит более выгодным по ресурсам, чем 18/50 -> 3, если 3 завода с первым рецептом построить не сложнее, чем 1 завод со вторым. В чем фокус?
там подписано справа. Выгода в скорости. В первом случае - 5 пластин в минуту, во втором - 15 в минуту. Там ресурсы безконечные, поэтому скорость производства там важнее
@@Just-York В factorio space age ресурсы тоже бесконечные. За исключением урана, гольмия и одной из жидкости на аквилло, которые конечны. И то, исследование на продуктивность добычи не требует ни один из конечных ресурсов, имея бесконечное количество времени возможно довести продуктивность до таких величин, что и ограниченность ресурсов фульгоры и аквилло не будут иметь значения.
Дизлайк за натягивание совы на глобус. Рассказываете про абстрактную фабрику, а показываете обычную инкапсуляцию. Если и хотели что то этакое показать, то могли на примере чертежей изобразить, ну или над моллом поплясать. Новичков только путаете
Когда учишься на проге и играешь в факторио, а ютуб подсовывает это... Наслаждению нет предела, контент пушка
Это не абстрактная фабрика. В вашей демонстрации в факторио изменяется только один "компонент" - на выходе завода получаются то пластины, то двигатели, то провода. Суть же абстрактной фабрики в том, что выход фабрики - это несколько классов, каждый из которых является наследником своего интерфейса. Примером абстрактной фабрики могли бы быть книжки со всеми чертежами для производства колб. С одними и теми же выходами (это важно!). В первой книжке используются синие заводы, во втором - зеленые, а в третьем - зеленые с маяками и модулями. Получается, что каждая из книжек - это отдельная фабрика. Каждый чертеж - объект. Так как входы и выходы для каждого типа колб в разных книжках одинаковые, то они как бы наследуются от одного и того же интерфейса (то есть у каждых красных колб - одни и те же входы и выходы одинаково расположенные). Но и то, пример с натяжкой
Пример же показанный в видео не подходит ни под один паттерн проектирования, потому что Вы просто заменяете один "класс" на другой, у которого даже другой выход. Это даже под наследование не подходит, потому что нарушает принцип Лисков.
Это вообще сложный для понимания и использования паттерн, программист может ни разу в жизни его не использовать)
Спасибо большое за развёрнутый комментарий! Вы абсолютно правы в том, что реализация «абстрактной фабрики» в реальных проектах гораздо глубже, чем просто «поменяли выход завода». Мой пример с Factorio был скорее упрощённой метафорой: хотел показать саму идею «меняем внутреннюю начинку - интерфейс остаётся прежним», чтобы новичкам было легче это понять на знакомом примере. Конечно, если разбирать классический паттерн «Абстрактная фабрика» по канону, там речь идёт о целой группе родственных объектов, наследующихся от общих интерфейсов.
То, о чём вы говорите в примере с «книжками чертежей», действительно ближе к классике паттерна: несколько разных «наборов» с одинаковой структурой входов-выходов, но разным наполнением (синие/зелёные заводы, модули и так далее). Это хороший и более «каноничный» пример абстрактной фабрики, когда у нас есть несколько связанных классов, которые нужно порождать «набором».
Согласен, что этот паттерн не самый простой и далеко не всегда необходим в повседневной работе. Но порой, когда проект растёт и объектов становится много, абстрактная фабрика спасает от хаоса.
Спасибо, что дополнили ролик разъяснением и поделились своим взглядом! Уверен, многим будет полезно увидеть ещё один пример, показывающий, как именно работает «настоящая» абстрактная фабрика и почему тема действительно сложнее, чем кажется на первый взгляд.
Абстрактная фабрика - это фабрика фабрик, то есть фабрика, которая возвращает другие (конкретные) фабрики. Если натягивать это на факторио, то это завод, который выпускает другие (разные) заводы, которые выпускают продукты. При этом выпускаемые заводы для разных продукций (шестеренки, пластины, кирпичи)
Хорошо определил, можно считать производные фабрики - чертежами допустим отдельной сборной линии шестеренок с 15ью сборщиками
Абстрактная фабрика в факторио это ты но скорее уже godobject
Завод чье производство уходит в расширение обьема производства и для создания еще большено расширение завода засчет завода.
То чувство когда самостоятельно дошел до данной концепции и в проге и в факторио. Спасибо за подробный разбор этих идей.
Спасибо за видео! ООП стало чуть понятнее ))
Спасибо большое за такой подход. Действительно интереснее и понятнее изучать в таком формате. Желаю успехов в дальнейшем!)
5:36 Ооо, это мой метод! Но не совсем так: лучше заняться разработкой системы, которая непосредственно встраивает специи в организм, сразу как только считывает характерные для необходимости просить передать соль поведенческие паттерны.
Захотел попросить передать соль? Как вдруг ХОБА! А она сама тебе мгновенно прилетает!
Автоматизация! \(⌒∇⌒)/
Спасибо большое за труды! Very valuable! ❤🎉
4:33 выглядит точно так же, когда ты рассказывал про принцип закрытости, типа перестраивание фабрики похожим образом это нарушение принципа закрытости...
не совсем :) это 2 разных цеха. 1й производит пластины из руды, 2й производит проволку из руды
@Just-York получается, смысл в том, что при нарушении закрытости мы перестраиваем то, что внутри завода, а здесь мы делаем новый завод, который имеет такие же ресурсы на входе но у которого другая функция, при этом, внутренности первого не меняются?
@ все верно, но только нам в данном случае не важно какие внутренности, так как речь про внешний интерфейс, который даже не знает каким образом сделаны внутренности у него задача дать ресурс и получить результат. Можно в качестве примера взять простой станок, ты же не знаешь каким образом он из железных пластин делает гайки или трубы, тебе важен результат. Тут тоже самое, только глобальнее в рамках набора станков
Проблема это продумать когда и задача до конца не понятна и приходится на ходу добавлять входы выходы
Абстрактное программирование плохо работает на олимпиадном программировании, где: есть очень сложная задача, нужно за наименьшее количество времени написать программу которая будет выполнять эту задачу, скорее всего будет миллион подводных камней, а когда ты сделал программу, ты сдаёшь её и забываешь как о страшном сне.
Факторио даёт очень близким паттерны поведения с программированием и хороший факторщик быстрее разберёться с патронами программирования и наоборот. Но он хоть и близки и чувствуются похоже работать с ними нужно по разному. Я не против того что вы называете что-то чем-то. Но на концепции фактории решения из программирования не работают в полной мере. Например принцип dry воще не функционирует на поздних этапах игры потому что снести что-то и поставить что-то огромное очень просто. Я бы ёщо аргументировал почему абстрактную фабрику нельзя объяснять на примере факторио но мне лень писать.
Это скорее ролик про абстракции интерфейсы но не фабрика
Полностью согласен, но я ставлю основной целью не рассказать как в факторио это использовать, а как понять сложные вещи в программировании на примере факторио. Тут игра выступает как визуальный материал, подкрепляющий слова в большей степени чем аналогией с программированием. Если в каких-то моментах получается сопоставить, то отлично.
@@Just-York как я сказал это неплохо если это поможет кому-то но из за особенностей игры их можно не правильно истолковать хотя это в принципе особенность паттернов программирования. Их почти невозможно понять без гигантского багажа знаний и опыта .
ты забыл упомянуть достаточно большой минус абстрактной фабрики в Factorio: она занимает очень много места, и её невозможно реализовать в начале игры
Не играл в satisfactory, но 6/12 -> 1 выглядит более выгодным по ресурсам, чем 18/50 -> 3, если 3 завода с первым рецептом построить не сложнее, чем 1 завод со вторым. В чем фокус?
там подписано справа. Выгода в скорости. В первом случае - 5 пластин в минуту, во втором - 15 в минуту. Там ресурсы безконечные, поэтому скорость производства там важнее
@@Just-York тогда понял) Спс, видео приятное, посмотрел с удовольствием!
@@Just-York В factorio space age ресурсы тоже бесконечные. За исключением урана, гольмия и одной из жидкости на аквилло, которые конечны. И то, исследование на продуктивность добычи не требует ни один из конечных ресурсов, имея бесконечное количество времени возможно довести продуктивность до таких величин, что и ограниченность ресурсов фульгоры и аквилло не будут иметь значения.
@@ОбычныйЧеловек-щ7м я больше говорил про класику, но хорошее замечание!)
Дизлайк за натягивание совы на глобус. Рассказываете про абстрактную фабрику, а показываете обычную инкапсуляцию. Если и хотели что то этакое показать, то могли на примере чертежей изобразить, ну или над моллом поплясать. Новичков только путаете
опа, годнота