Ехал сегодня в авто и своим детям 6 лет рассказывал про декомпозицию из Вашего ролика.Если поймут они - то точно усвою сам. Дал им примеров парочку и всё,уже вечером дети рассказали маме - что такое декомпозиция,где применяется в жизни и почему она удобна! Спасибо за подробный ход мыслей новичка И как делать правильно.
Сергей, большое спасибо за курсы. По поводу того, что народ интересуется даже не сомневайтесь. Жду с нетерпением следующих видео. На фоне изобилия самой разной информации очень полезно послушать выжимку от бывалого человека, так сказать наметить приоритеты, что изучать в первую очередь, а что вообще можно опустить.
Во второй части вы рассказываете про древовидные структуры. И говорите, что правильным решением сделать дерево групп - это записывать в группу список его дочерних групп или список товаров. А почему нельзя, например, хранить в группе просто ссылку на ее предка или NULL если это корневая группа? А в товаре как раз хранить ссылку группу, которой принадлежит товар либо NULL, если товар вне групп. Спасибо.
Вы очень похожи на моего учителя информатики и когда я смотрю на Вас вспоминаю свою молодость.( Сначала он преподавал нам в школе а ещё вел факультативный кружок) Манера говорить один в один .Даже внешне похожи. Спасибо.
Спасибо большое за ваши байки! =) Очень хотелось бы посмотреть видео о том каким образом можно развернуть код написанный на if-ах в ООП стиль, либо о методиках уменьшения использования if конструкций в коде.
Сергей, здравствуйте. В вашем примере с чеком я бы поместил метод, вычисляющий стоимость товара в Goods. То есть, этот метод должен получать количество купленного товара и вычислять по нему стоимость. А OrderItem будет пользоваться этим методом. Дело в том, что цена товара зачастую не фиксирована, а зависит от разных факторов, и в том числе, от размера закупки. Цена за один купленный компьютер может быть значительно выше чем за 10. Так что, со стоимостью должна разбираться сущность Goods.
Спасибо за очередную порцию полезной информации, единственный маленький совет - попробуйте брать звуковую дорожку камеры, а не с микрофона, по-крайней мере не будет пропаданий звука.
как реализовать список списков через объекты? например меню -> категории -> блюда. List listofCat Думаю нужно создать класс Category который состоит(агрегация) из List, и тогда List Menu
эх... (смайлик боли) надеюсь на этот раз я таки новый проект весь разрисую. спасибо за лекции! не первый год канал смотрю. и данный плейлист тоже не в первый раз слушаю ) жалко что многие вещи быстро забываются. прямо как у Рейстлина Маджере из ДрегонЛейнс проблема - ему постоянно надо было читать книги с заклинаниями потому что после произнесения они стирались из головы )))
У меня вопросы по каталогу. Вот у нас есть AbstractGroup с полем children: List и Group с полем good: List. - я правильно понимаю что в children: List храниться ноутбук, монитор, мышка, видеокарта и т.п., а в good: List конкретные марки вышеперечисленных товаров (MSI GP62 6QE Leopard Pro) - как эти списки связаны? вот есть у нас 2 листа, а если нужно посмотреть какие ноутбуки у нас есть то где у нас между списками взаимосвязь (я на uml вижу что есть класс, один список он наследует, один в нем есть и все)?
Спасибо, полезная лекция. Про деревья интересно. Расскажите о разнице в обработке и хранении товаров таких типов (пример): 1) болт М3 - все одинаковые, имеет свой код в каталоге, все просто 2) главная пара редуктора - вроде все одинаковые, но имеют каждая уникальный номер (их может быть очень много). Как быть? Как с болтом не получится так как при продаже клиенту должен быть указан уникальный номер проданного товара. И возможен возврат или обмен по этому номеру. Нужно поддерживать товары этих двух типов одновременно.
+Sergey Nemchinsky Предположу, что можно создать класс, унаследованный от товара, в котором будет дополнительное поле "уникальный номер" и в переопределенном методе getItemId добавлять этот номер к id товара
Требуем ещё подобных видео! Очень полезную тему Вы задели. Сергей, а можно вопрос: В программировании под веб, часто ли приходится использовать многопоточность? или это в основном удел ГУИшных приложений? Просто сейчас с потоками вожусь. Спасибо!
Сергей, а наличие методов подсчета в реализациях Order не противоречит одному из первых принципов GOF паттернов "программируйте на уровне интерфейса, а не на уровне реализации"? Dependency injection напрашивается.
Спасибо за ваши видео, очень познавательно! Осветите, пожалуйста, как быть с зацыкливанием объектов друг на друга. Например, у Goods есть поле типа Group, а у Group есть поле со списком Goods. На сколько я понемаю, Goods не скомпелируется, если нет скомпилированного Group и наоборот Group не скомпелируется без Goods. Где лучше разрывать зависимость?
по поводу float и double для денег вы правы, а вот по поводу Integer вы зря, используют BigDecimal обычно www.javapractices.com/topic/TopicAction.do?Id=13
+Ilya Afanasyev Оставил маленькое предупреждение для тех кто будут смотреть это видео с тем, чтобы не "глотали" бездумно все то о чем вещает Серёжа. Набивайте свои шишки господа. Это хоть и больно, зато учит на всю жизнь. Байки на то и байки, чтобы байками и оставаться :-)
Спасибо, хорошо, полезно. но. Нумерация занятий обязательно должна быть в названии роликов! Это же в том числе и показывает классность программиста - умение грамотно именовать переменные, файлы... Если нет структуры в именовании роликов, то о каком курсе декомпозиции может идти речь... Это тоже: как может управлять чем-то большим (заводом, страной например) человек, который в собственной семье порядок навести не может...
Писать цену в таблицу товаров - типичная ошибка всех не 1С-ных систем. Цена может отличаться в разных регионах. Цена меняется со временем. А отчётность строится за разные периоды. По разным регионам. Значит за один период с одной ценой, за другой период с другой ценой. Как пользователи обходят этот косяк в не 1С-ных системах на практике? Дублируют запись с новой ценой. Итого два товара с одинаковым названием, артикулом, но с разной ценой. Получается бардак
Согласен, цену надо дублировать в списке товаров в заказе, т.к. Она может меняться со временем в каталоге товаров, или на нее может быть отдельная скидка например.
Столкнулся с проблемой при установке ArgoUML. Скачал с официального сайта argouml.tigris.org, ссылка с википедии. В начале установки - сообщение: На компьютере, мол, не установлено JRE. Но как так?! Я в Intellj IDEA уже как пол года компилирую, запускаю код. Ладно, вариантов нет, жму ок - выберите компоненты программы для установки. Две галочки - JRE, ArgoUML - далее... Останавливается на connecting при установке jre. Неужели на официальном сайте глючный инсталлер?
Здравствуйте, Сергей. Спасибо за видео, как всегда интересно. Если возможность задавать вопросы ещё в силе, не могли бы вы осветить вопрос- шаблон проектирования Singleton - какой правильный вариант по вашему мнению? А то статей на этот счет достаточно много но под каждой в комментариях развиваются настоящие баталии, которые в конец запутывают. Или может укажите ресурс где по вашему мнению изложена оптимальная точка зрения.
С типом цены за товар не согласен. Цена товара может быть и менее копейки. Вот сумма товара может и да. Вот например на складах у каждого товара есть цена за лот(пачку,коробку) и есть розничная цена 1штуки того что в коробке. В коробке 1000 гвоздей стоит 2,50грн за коробку сколько будет стоить 500 гвоздей. Если посчитать в копейках(с типом интегер), то получится ровно 0))) 250/1000=0,25=0(Integer)*500=0. Если не флоат то нужно уже будет выдумывать что-то типа дополнительного поля exponent для обозначения запятой, так что тут еще нужно подумать))) Ну или создавать метод типа getGoodPcsPrice и поле pcs(кол в лоте) с возвр флоат. Зачем это нужно, ну например для вычисления конкретной стоимости изделия, а из неё что бы получить стоимость партии, а из неё сколько расходов пошло на производство и все производные. Точно знаю если в бухгалтерии не сходится 1 копейка, в любую сторону, то это целая проблема, по крайней мере когда я работал в банке так и было))).
Очень интересно и полезно. Спасибо! Есть вопрос по поводу групп. Может быть есть смысл сделать так: class Catalog { public List groups; } class Group : Catalog { public List goods; } Насколько это живой вариант?
ну.. тогда не нужен абстрактный класс каталог и семантически вроде понятнее, мол каталог - это список групп, а группа - это тот же каталог только у него еще есть список товаров. Да и вроде как понятие каталог и так уже достаточно абстрактное.. Ну в общем это так просто мысли вслух.. Хотел узнать Ваше мнение по поводу такой конструкции. Реально ли такое встретить в работающем решении?
***** На хромокей не надо, тогда потеряются ламповость и уют... :-) Просто звук не всегда хорошо слышно, он слегка бубнит и эхом отдает... не всё можно разобрать... но это мои мелкие придирки... :-) Спасибо за рассказы!
Ехал сегодня в авто и своим детям 6 лет рассказывал про декомпозицию из Вашего ролика.Если поймут они - то точно усвою сам.
Дал им примеров парочку и всё,уже вечером дети рассказали маме - что такое декомпозиция,где применяется в жизни и почему она удобна!
Спасибо за подробный ход мыслей новичка И как делать правильно.
Сергей, большое спасибо за курсы. По поводу того, что народ интересуется даже не сомневайтесь. Жду с нетерпением следующих видео. На фоне изобилия самой разной информации очень полезно послушать выжимку от бывалого человека, так сказать наметить приоритеты, что изучать в первую очередь, а что вообще можно опустить.
Программирую на PHP, совершенно не помню зачем подписался на ваш канал. Вдруг наткнулся на "байки" - слушаю с огромным удовольствием! Спасибо.
Во второй части вы рассказываете про древовидные структуры. И говорите, что правильным решением сделать дерево групп - это записывать в группу список его дочерних групп или список товаров. А почему нельзя, например, хранить в группе просто ссылку на ее предка или NULL если это корневая группа? А в товаре как раз хранить ссылку группу, которой принадлежит товар либо NULL, если товар вне групп. Спасибо.
Вы очень похожи на моего учителя информатики и когда я смотрю на Вас вспоминаю свою молодость.( Сначала он преподавал нам в школе а ещё вел факультативный кружок) Манера говорить один в один .Даже внешне похожи. Спасибо.
Сергей, огромное спасибо! Вы очень понятно преподносите материал, очень полезно.
Спасибо большое за ваши байки! =)
Очень хотелось бы посмотреть видео о том каким образом можно развернуть код написанный на if-ах в ООП стиль, либо о методиках уменьшения использования if конструкций в коде.
Отличные байки, приятно слушать!
Сергей, здравствуйте.
В вашем примере с чеком я бы поместил метод, вычисляющий стоимость товара в Goods. То есть, этот метод должен получать количество купленного товара и вычислять по нему стоимость. А OrderItem будет пользоваться этим методом.
Дело в том, что цена товара зачастую не фиксирована, а зависит от разных факторов, и в том числе, от размера закупки. Цена за один купленный компьютер может быть значительно выше чем за 10. Так что, со стоимостью должна разбираться сущность Goods.
За декомпозицию человека, большой лайк!
Спасибо, Сергей!
Спасибо за очередную порцию полезной информации, единственный маленький совет - попробуйте брать звуковую дорожку камеры, а не с микрофона, по-крайней мере не будет пропаданий звука.
звук с ужасными разрывами. В остальном спасибо
Завжди коли ви кажете новачки роблять так і говорите точно як би я зробив!)))
как реализовать список списков через объекты?
например меню -> категории -> блюда.
List listofCat
Думаю нужно создать класс Category который состоит(агрегация) из List, и тогда
List Menu
Насчёт древовидной структуры не очень понял, а про декомпозицию шикарно обьяснили
эх...
(смайлик боли)
надеюсь на этот раз я таки новый проект весь разрисую.
спасибо за лекции! не первый год канал смотрю. и данный плейлист тоже не в первый раз слушаю )
жалко что многие вещи быстро забываются.
прямо как у Рейстлина Маджере из ДрегонЛейнс проблема - ему постоянно надо было читать книги с заклинаниями потому что после произнесения они стирались из головы )))
Кстати, в 2023 он всё ещё Сергей Немчинский
У меня вопросы по каталогу. Вот у нас есть AbstractGroup с полем children: List и Group с полем good: List.
- я правильно понимаю что в children: List храниться ноутбук, монитор, мышка, видеокарта и т.п., а в good: List конкретные марки вышеперечисленных товаров (MSI GP62 6QE Leopard Pro)
- как эти списки связаны? вот есть у нас 2 листа, а если нужно посмотреть какие ноутбуки у нас есть то где у нас между списками взаимосвязь (я на uml вижу что есть класс, один список он наследует, один в нем есть и все)?
Надо налобать столько кода, чтобы потек мозг. А потом задавать вопросы. Я пока остановился на первом этапе. Спасибо за видео.
Спасибо, полезная лекция. Про деревья интересно. Расскажите о разнице в обработке и хранении товаров таких типов (пример):
1) болт М3 - все одинаковые, имеет свой код в каталоге, все просто
2) главная пара редуктора - вроде все одинаковые, но имеют каждая уникальный номер (их может быть очень много).
Как быть? Как с болтом не получится так как при продаже клиенту должен быть указан уникальный номер проданного товара. И возможен возврат или обмен по этому номеру. Нужно поддерживать товары этих двух типов одновременно.
+Sergey Nemchinsky Предположу, что можно создать класс, унаследованный от товара, в котором будет дополнительное поле "уникальный номер" и в переопределенном методе getItemId добавлять этот номер к id товара
Требуем ещё подобных видео! Очень полезную тему Вы задели.
Сергей, а можно вопрос:
В программировании под веб, часто ли приходится использовать многопоточность? или это в основном удел ГУИшных приложений?
Просто сейчас с потоками вожусь.
Спасибо!
А что насчет такого построения дерева, когда у объекта есть поле parent такого же класса?
красота , спасибо!
Серега, ты красавчик 👍😁
Сергей, а наличие методов подсчета в реализациях Order не противоречит одному из первых принципов GOF паттернов "программируйте на уровне интерфейса, а не на уровне реализации"? Dependency injection напрашивается.
Спасибо за ваши видео, очень познавательно!
Осветите, пожалуйста, как быть с зацыкливанием объектов друг на друга. Например, у Goods есть поле типа Group, а у Group есть поле со списком Goods. На сколько я понемаю, Goods не скомпелируется, если нет скомпилированного Group и наоборот Group не скомпелируется без Goods. Где лучше разрывать зависимость?
А что делать в случае, если к примеру, при покупке пары товаров на них будет идти определённая скидка? Не получится же просто вызвать goods.price()
Не получилось ли так, что Goods зависит от Group и наоборот? Не циклическая зависимость?
По группам всё ожидал когда прозвучит фраза: Шаблон проектирования "Компоновщик". Так и не дождался.
Молодой был, не опытный. ))) Какую хрень с каталогом сморозил.
14:00 попробовал - выдает true. Вот код:
float f1 = 1.0f;
float f2 = 1.0f;
System.out.println(f1 == f2);
Имелось в виду что-то другое?
36:00, абстрактна група знає про групу. Порушення DI принципу
по поводу float и double для денег вы правы, а вот по поводу Integer вы зря, используют BigDecimal обычно www.javapractices.com/topic/TopicAction.do?Id=13
+Олег Орлов Хотел тоже об этом написать, но увидел Ваш коммент.
+Ilya Afanasyev Оставил маленькое предупреждение для тех кто будут смотреть это видео с тем, чтобы не "глотали" бездумно все то о чем вещает Серёжа. Набивайте свои шишки господа. Это хоть и больно, зато учит на всю жизнь. Байки на то и байки, чтобы байками и оставаться :-)
А еще Money есть
Спасибо, хорошо, полезно. но. Нумерация занятий обязательно должна быть в названии роликов! Это же в том числе и показывает классность программиста - умение грамотно именовать переменные, файлы... Если нет структуры в именовании роликов, то о каком курсе декомпозиции может идти речь... Это тоже: как может управлять чем-то большим (заводом, страной например) человек, который в собственной семье порядок навести не может...
Писать цену в таблицу товаров - типичная ошибка всех не 1С-ных систем. Цена может отличаться в разных регионах. Цена меняется со временем. А отчётность строится за разные периоды. По разным регионам. Значит за один период с одной ценой, за другой период с другой ценой. Как пользователи обходят этот косяк в не 1С-ных системах на практике? Дублируют запись с новой ценой. Итого два товара с одинаковым названием, артикулом, но с разной ценой. Получается бардак
Согласен, цену надо дублировать в списке товаров в заказе, т.к. Она может меняться со временем в каталоге товаров, или на нее может быть отдельная скидка например.
Какие ютуб-каналы и плейлисты есть на эту тему, чтоб подробней изучить декомпозицию предметных областей?
Столкнулся с проблемой при установке ArgoUML. Скачал с официального сайта argouml.tigris.org, ссылка с википедии. В начале установки - сообщение: На компьютере, мол, не установлено JRE. Но как так?! Я в Intellj IDEA уже как пол года компилирую, запускаю код. Ладно, вариантов нет, жму ок - выберите компоненты программы для установки. Две галочки - JRE, ArgoUML - далее... Останавливается на connecting при установке jre. Неужели на официальном сайте глючный инсталлер?
Отличные видео, только сделайте что то со звуком... просто мозг выносит его пропадание
А какие средства Uml можете посоветовать, не argo?
Здравствуйте, Сергей. Спасибо за видео, как всегда интересно. Если возможность задавать вопросы ещё в силе, не могли бы вы осветить вопрос- шаблон проектирования Singleton - какой правильный вариант по вашему мнению? А то статей на этот счет достаточно много но под каждой в комментариях развиваются настоящие баталии, которые в конец запутывают. Или может укажите ресурс где по вашему мнению изложена оптимальная точка зрения.
***** Спасибо.
С типом цены за товар не согласен. Цена товара может быть и менее копейки. Вот сумма товара может и да. Вот например на складах у каждого товара есть цена за лот(пачку,коробку) и есть розничная цена 1штуки того что в коробке. В коробке 1000 гвоздей стоит 2,50грн за коробку сколько будет стоить 500 гвоздей. Если посчитать в копейках(с типом интегер), то получится ровно 0))) 250/1000=0,25=0(Integer)*500=0. Если не флоат то нужно уже будет выдумывать что-то типа дополнительного поля exponent для обозначения запятой, так что тут еще нужно подумать))) Ну или создавать метод типа getGoodPcsPrice и поле pcs(кол в лоте) с возвр флоат. Зачем это нужно, ну например для вычисления конкретной стоимости изделия, а из неё что бы получить стоимость партии, а из неё сколько расходов пошло на производство и все производные. Точно знаю если в бухгалтерии не сходится 1 копейка, в любую сторону, то это целая проблема, по крайней мере когда я работал в банке так и было))).
что по декомпазиции можно почитать
Спасибо!
Все классно, но я бы в любом случае начинал описывать классы с контрактов - интерфейсов)
В первом случае(метод summ в нужном месте) вы применили принцип InformationExpert а во втором(вложенные группы товаров) шаблон Composite. Верно?
Вам спасибо за ролики! Крутые
а сточки зрения SQL методы price, sum они же не нужны для подсчета ?
***** это типа пример ?
я в смысле если будет sql то, запросом быстрее будет
Очень интересно и полезно. Спасибо!
Есть вопрос по поводу групп. Может быть есть смысл сделать так:
class Catalog
{
public List groups;
}
class Group : Catalog
{
public List goods;
}
Насколько это живой вариант?
ну.. тогда не нужен абстрактный класс каталог и семантически вроде понятнее, мол каталог - это список групп, а группа - это тот же каталог только у него еще есть список товаров. Да и вроде как понятие каталог и так уже достаточно абстрактное..
Ну в общем это так просто мысли вслух.. Хотел узнать Ваше мнение по поводу такой конструкции. Реально ли такое встретить в работающем решении?
спасибо
Это же composite.
Ну, там где группы и каталоги.
refactoring.guru/design-patterns/composite
Сергей,
перезапишите пожалуйста. Звук! Это ужасно!
Эх, еще бы звук записывать на микрофон-петличку... :-(
***** На хромокей не надо, тогда потеряются ламповость и уют... :-) Просто звук не всегда хорошо слышно, он слегка бубнит и эхом отдает... не всё можно разобрать... но это мои мелкие придирки... :-) Спасибо за рассказы!
Немчинский как всегда часу ночи снимает😀
Сергей добрый день.Скажите вы имеете какое либо отношение к Джава Раш?
Нихрена не понял, но ОЧЕНЬ интересно. )))
"Человека декомпозировать не надо. За это срок светит." Бугагашенька :)
"В котором новичок умирает..." :)))) Интересно рассказывает, хотя звук ужасный. Самому знакомо :)
up
Подавление шума на "0", плииииизззз!
Привет квадратноголовым. Надеюсь ты просто игрок? А то я теперь буду боятся что ты мой код увидишь.
Софт менять нужно и со звуком беда, а так гууд.
тут хоть более менее нормальная борода
6 666 просмотров
Ужасный звук. Невозможно слушать.
Спасибо