Шаблоны разработки. ООП и основы UML

  Рет қаралды 78,680

Sergey Nemchinskiy

Sergey Nemchinskiy

10 жыл бұрын

Обновленный курс GRASP and GoF Design patterns - bit.ly/3m8T19A
💪 ПРОКАЧАЙ СВОИ ХАРД-СКИЛЛЫ ЗА 2 МЕСЯЦА!
Вводная лекция курса "Шаблоны разработки программного обеспечения". Основы ООП. Основы UML. Плейлист: • Шаблоны разработки. Вв...
Все материалы курса лекций (включая конспект лекций) на моем канале на SlideShare: www.slideshare.net/SergeyNemch...
Изучение C#/.Net bit.ly/2P5JKuM
Изучение Blockchain developer bit.ly/2KF1Y60
Сайт учебного центра: bit.ly/2N3ckw6

Пікірлер: 62
@hameltomor
@hameltomor 9 жыл бұрын
Это самые лучшие лекция которые я только видел! Легко, доступно и понятно. Большое Вам спасибо)
@danielginzburg2924
@danielginzburg2924 3 жыл бұрын
Сергей вы молодец! Вы один из лучших лекторов. Большое вам спасибо!
@dmytrodemydenko6732
@dmytrodemydenko6732 5 жыл бұрын
Как ребятам повезло. Педагог с большой буквы
@AlluringStuff
@AlluringStuff 7 жыл бұрын
Смотрю на одном дыхании! Лучшей подачи материала я еще не видел!
@denistalko6585
@denistalko6585 3 жыл бұрын
Прекрасные лекции! Спасибо огромное, очень интересно и полезно! Рассказывается доступно, живо, невероятно интересно. Очень классно!
@dmitrypopov5056
@dmitrypopov5056 10 жыл бұрын
Большое спасибо за лекции, они шикарны.
@serjchernyh8715
@serjchernyh8715 10 жыл бұрын
Еще раз огромное спасибо за лекции.Век живи, век учись.Многое для себя открыл.Понял, что был "хитрым программистом" :)
@viktorsoroka4510
@viktorsoroka4510 8 жыл бұрын
Здорово! И с юмором и, что самое главное, все по делу. Спасибо)
@olek_tar
@olek_tar 9 жыл бұрын
Классная лекция! Спасибо!
@dutnum5766
@dutnum5766 8 жыл бұрын
Обозначение уровня доступа на UML диаграммах: + public - private # protected ~ package
@AnaRxistBoD
@AnaRxistBoD 4 жыл бұрын
internal? protected internal? private protected? sealed?
@hristy-A
@hristy-A 2 жыл бұрын
@@AnaRxistBoD package - это и есть internal, только package - это абстрактно, на уровне диаграмм UML, а internal на уровне конкретного языка. Другие модификаторы доступа можно получить с помощью комбинации имеющихся (не лучший вариант) или использовать диаграммы для конкретного языка, где уже придуманы свои обозначения.
@user-cc2mi5jh3y
@user-cc2mi5jh3y 4 жыл бұрын
Полиморфизм - это поддержка нескольких реализаций на основе общего интерфейса. Matt Zandstra
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil Жыл бұрын
Слишком общо. Не передаёт суть
@SHURmandroid
@SHURmandroid 10 жыл бұрын
Спасибо за "продолжение мучений"... :-)
@YasnaKo
@YasnaKo 2 жыл бұрын
Вывела для себя тезис: - Наследование строить снизу вверх, а не сверху вниз.
@farenoy6848
@farenoy6848 3 жыл бұрын
Я ❤️ Сергея Немчинского
@cyrilanisimov
@cyrilanisimov 2 жыл бұрын
аааааа! волосатый Немчинский!! Привет из 2021
@kolobokhexopod5423
@kolobokhexopod5423 10 жыл бұрын
Перегрузка методов и функций (в случае C++) также считается полиморфизмом, но только статическим (compile time). Виртуальные методы класса обеспечивают динамический полиморфизм (runtime). Полиморфизм - это когда один и тот-же кусок кода выполняет разную работу в зависимости от внешних факторов - конкретного типа объекта скрывающегося за указателем на базовый класс, типа аргумента при вызове функции, и тп. Заменили один указатель на базовый класс на другой, и при вызове виртуальной функции через этот указатель код уже делает что-то другое. Или при вызове функции поменяли аргумент одного типа на аргумент другого типа - получили совсем другое поведение (пример статического полиморфизма). Я понимаю полиморфизм, как способность оперировать объектами разных типов в обобщенном виде, способность писать общие алгоритмы для обработки объектов являющихся потомками некоторого базового класса. Инкапсуляция позволяет поддерживать объекты и части системы в непротиворечивом состоянии. Наследование - инструмент, позволяющий обобщать свойства и поведение объектов. Строго говоря, полиморфизм не является прерогативой объектно-ориентированного подхода. Можно использовать полиморфизм программируя на чистом C. Например, используя указатели на функции можно получить такой-же эффект как от полиморфизма в ОО языках.
@0imax
@0imax 6 жыл бұрын
Да, в книжках по C++ перегрузку часто называют статическим полиморфизмом. Но мне кажется, не стОит смешивать понятия "перегрузка" и "полиморфизм", дабы не было путаницы. Перегрузка обычно используется, чтобы одной и той же функции можно было скормить разные типы данных, но при этом действия над ними производились одинаковые или очень похожие. Полиморфизм в контексте ООП преследует другие цели - менять поведение *объекта* в зависимости от типа самого объекта, при том что входные данные одного типа. Можно построить полиморфизм на перегрузке, но это будет коряво и бессмысленно)
@NorthSea-xb7jk
@NorthSea-xb7jk 4 ай бұрын
сабскрайбнулся, досмотрю , оценю
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil Жыл бұрын
Спасибо!
@user-ff3ez4pv6e
@user-ff3ez4pv6e 4 жыл бұрын
6 лет прошло! До сих пор актуально
@codingfox
@codingfox 3 жыл бұрын
и не говори)
@user-yg8mt9fy8l
@user-yg8mt9fy8l 3 жыл бұрын
Лекция вроде от 2008 года
@0imax
@0imax 3 жыл бұрын
И будет ещё лет 20 минимум.
@rusnickk
@rusnickk 8 жыл бұрын
спасибо за интересную лекцию, возник такой вопрос: если для получения price необходимо обращение к базе данных для чего используется экземпляр класса, скажем, DataBaseProvider, до как передается ссылка на этот объект экземпляру OderItem?
@faridnadirov5472
@faridnadirov5472 6 жыл бұрын
Лучший лектор!
@global_silence2623
@global_silence2623 6 жыл бұрын
Правильно ли я понял, что "Агрегацию" нужно рисовать между классами А и В ромбиком в сторону класса А, если А содержит поле List? И еще. Верно ли я понимаю, что если мы воспринимаем обычную стрелочку, как создание экземпляра класса и вызова каких-то методов, то стартовый класс main может быть просто утыкан этими обычными стрелками?
@MrSergeyUSA
@MrSergeyUSA 8 жыл бұрын
Спасибо за видео! Скажите по вашему какое отношение больше подходит для классов Директория и Файл?
@MrSergeyUSA
@MrSergeyUSA 8 жыл бұрын
+Sergey Nemchinsky с точки зрения может ли существовать абстрактный файл без абстрактного каталога вообще, если каталогами считать все устройства с их корневыми папками.
@Ma_X64
@Ma_X64 6 жыл бұрын
На уровне файловой системы всё есть файл. и каталог - тоже файл, и порт - файл (в линухе уж точно), и принтер - файл. Тем не менее, в ОС ведь всегда существует корневая директория. Потому что это удобно и с точки зрения пользователя выглядит логично. Поэтому нужно выбирать тот вариант, который будет удобен с точки зрения конечного пользователя того, что ты пишешь.
@kaynsolo
@kaynsolo 6 жыл бұрын
Like!
@Mike19910711
@Mike19910711 4 жыл бұрын
Про UML. Стрелка Association показывает, что один объект (от которого идёт стрелка) содержит в поле другой объект (тот, куда направлена стрелка). Аналогичная стрелка, но прерывистая (Dependency) означает, что класс, от которого идёт стрелка, в одном из методов принимает в качестве параметра или возвращает в каком-нибудь методе объект класса, на который направлена стрелка.
@SergeyNemchinskiy
@SergeyNemchinskiy 4 жыл бұрын
Я вам рассказал то, как эти стрелки будут читать ваши коллеги. Как они задуманы разработчиками - всем пофиг. Реальная жизнь говорит - вот так :) Можно ее игнорировать, но смысл?
@fio6951
@fio6951 3 жыл бұрын
нам не важно сколько ты проектов успешных сделал, не важно, что на твоем софте работают бесперебойно серьезные объекты (не те которые в ООП, а те, где живут и трудятся сотни и даже тысячи людей - в режиме реалтаим). нам надо чтобы ты знал что такое паттерны
@user-lp1qt8ot9v
@user-lp1qt8ot9v 4 жыл бұрын
На слайдах везде 2008. Сейчас актуально все?
@user-yj8vx8ph4j
@user-yj8vx8ph4j 4 жыл бұрын
безусловно, парадигма не стареет
@kirillkir6268
@kirillkir6268 Жыл бұрын
Все хорошо, вот только OrderItem и Good это DTO, а распределение калькуляции это нарушение Сингл Респонсибилити калькулятора)
@sergeyltk
@sergeyltk 4 жыл бұрын
А разве язык программирования (Java / c++) и способ очистки памяти является ключевым критерием в определении того, какой тип ассоциации использовать? Там вроде логический критерий, когда лучше агрегация, а когда композиция. В агрегации плюсом идёт гибкость, а в композиции - скрытие от глаз клиента деталей реализации. Ну, это моё понимание.
@1Cry1987
@1Cry1987 7 жыл бұрын
Шаблон Creator предполагает, что публичный интерфейс калькулятора будет содержать все методы, необходимые для манипулирования сокрытых классов. Хорошо. А если сокрытых классов 10? 20? Это же будет God Class, не иначе. И к тому же, если ListItem будет создаваться напрямую в Calculator, как тестировать этот код?
@ansz237
@ansz237 8 жыл бұрын
Разве creator не конфликтует с принципом инверсией зависимости? Каждый раз когда один класс напрямую порождает объект другого класса между ними возникает жесткая связь.
@0imax
@0imax 3 жыл бұрын
Любое создание объектов нарушает IoC, поскольку в итоге всё-равно нужно явно указать конкретный класс, будь это обычное создание класса, через фабрику или ещё как-то. Так что ничего страшного в этом нарушении нет. Принципы можно и нужно нарушать, если это делается во благо, как, например, тот же Factory method нарушает принцип Low coupling: класс, создающий подклассы, знает о всех своих наследниках.
@MrShnaiderTV
@MrShnaiderTV Жыл бұрын
​@@0imax Именно из-за нарушения DIP создание объектов и инкапсулируется в фабрики. Принцип creator действительно нарушает DIP, так как создает объекты в runtime, а не на этапе инициализации программы (Clean code, глава 11). Фабричный же метод (в оригинале) DIP не нарушает, так как все зависимости в самой программе направлены на абстракции, а реализацию создания объекта можно подменить, подставив другую реализацию создающего объекта (фабрики). Если реализовывать паттерн, как рассказывал Сергей (через статичные методы), то да, это нарушение DIP. Но это и не оригинальная реализация паттерна, а лишь его интерпретация
@1Cry1987
@1Cry1987 7 жыл бұрын
А лектор фанат группы Amaranthe ;)
@Megapixxxell
@Megapixxxell 5 жыл бұрын
ссылка на материалы лекций не SlideShare не работает =(
@helavin4ik
@helavin4ik 4 жыл бұрын
Работает, только что скачал
@user-pg8ry1tm3t
@user-pg8ry1tm3t 2 жыл бұрын
Вообще-то жесткая зависимость - агрегация… has a. Relationship “is a” less then aggregation
@leon4uk
@leon4uk 8 жыл бұрын
Да никто не спрашивает на собеседованиях к примеру что такое полиморфизм и вообще про парадигмы. Все пытаются спросить подковыристый вопрос даже не на тему абстракции, а типа - есть хомяк, а утром его нет. Куда делся хомяк. Вот смотря как ответишь, так и возьмут тебя на работу. А еще спросят про китайский язык.
@maddjimi8854
@maddjimi8854 7 жыл бұрын
Народ вот хвалит, а я так думаю зря... Объяснение, например, полиморфизма крайне плохое и косноязычное. Если человек уже не знает, что это такое ни хрена не будет понятно.
@user-ee5if7ru4g
@user-ee5if7ru4g 6 жыл бұрын
суть курса в том, что люди уже знают основы
@0imax
@0imax 5 жыл бұрын
Mad Djimi Курс паттернов следует смотреть, зная основы ООП, а лучше проработав пару лет, чтобы было понятно вообще о чём речь. Не зря этот курс находится у Сергея в плейлисте "для опытных разработчиков" :)
@user-gw6df6ns7e
@user-gw6df6ns7e 5 жыл бұрын
Ну полиморфизм - это холивар. А параметризованный тип - это полиморфизм. А если это реализовано через мономорфизацию? А оверлоадинг тоже можно отнести к полиморфизму?
@libx75
@libx75 6 жыл бұрын
раз уж начал - досмотрел до конца. но больше никаких лекций от этого автора ни за что.
@g19m74
@g19m74 2 жыл бұрын
Заканали фоновые бла бла бла
Как быстро замутить ЭлектроСамокат
00:59
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 13 МЛН
Её Старший Брат Настоящий Джентельмен ❤️
00:18
Глеб Рандалайнен
Рет қаралды 7 МЛН
Великовозрастный программист. Стоит ли идти в IT в 40 лет
8:17
Дилетант широкого профиля
Рет қаралды 9 М.
Как быстро замутить ЭлектроСамокат
00:59
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 13 МЛН