SOLID принципы: OCP (Открытости/закрытости (Open Closed Principle)

  Рет қаралды 115,658

Sergey Nemchinskiy

Sergey Nemchinskiy

Күн бұрын

При́нцип откры́тости/закры́тости (англ. The Open Closed Principle, OCP) - принцип ООП, устанавливающий следующее положение: «программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения»; Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification (Bertrand Meyer)
- открыты для расширения: означает, что поведение сущности может быть расширено путём создания новых типов сущностей.
- закрыты для изменения: в результате расширения поведения сущности, не должны вноситься изменения в код, который эту сущность использует.
- Ценность принципа: нет необходимости в регрессионном тестировании
Термин «принцип открытости/закрытости» имеет два значения:
1. Принцип открытости/закрытости Мейера
2. Полиморфный принцип открытости/закрытости
Бертран Мейер в основном известен как основоположник термина Принцип открытости/закрытости, который появился в 1988 году в его книге Object-Oriented Software Construction, отвечая на вопрос:
1. Как можно разработать проект, устойчивый к изменениям, срок жизни которых превышает срок существования первой версии проекта?
2. однажды разработанная реализация класса в дальнейшем требует только исправления ошибок, а новые или изменённые функции требуют создания нового класса
3. реализация интерфейса может быть унаследована и переиспользована, но интерфейс может и измениться в новой реализации
Полиморфный принцип открытости/закрытости:
1. основывается на строгой реализации интерфейсов и на наследовании от абстрактных базовых классов или на полиморфизме.
2. Созданный изначально интерфейс должен быть закрыт для модификаций, а новые реализации как минимум соответствуют этому изначальному интерфейсу, но могут поддерживать и другие, более расширенные.
Статья Роберта С. Мартина «The Open-Closed Principle» в 1996 была одной из плодотворных статей для популяризации такого подхода
Крэйг Ларман отнёс термин Принцип открытости/закрытости к шаблону Алистэра Кокбёрна, названного Protected Variations
Курсы для новичков:
JAVA - bit.ly/3i9DlOa
JAVA Start - bit.ly/2DIfBBK
Инструментарий JAVA - bit.ly/2XClPdz
Automation QA (Java) - bit.ly/31viHS9
ANDROID - bit.ly/2XwHofC
C#/.NET - bit.ly/3fDLSqW
C# START - bit.ly/3gA0usF
PYTHON - bit.ly/3fB2fV6
FRONT-END - bit.ly/31rmq2P
WORDPRESS Developer - bit.ly/2Dlx8Aa
SALESFORCE Developer - bit.ly/2EYPs2q
UI/UX дизайн - bit.ly/3iiTyk2
Project management - bit.ly/3a1WQW9
Обучение на проекте - bit.ly/2CalHL2
Продвинутые курсы для состоявшихся девелоперов:
GRASP and GoF Design patterns - bit.ly/3khIGF3
Enterprise patterns - bit.ly/30zLq95
Сайт Foxminded: bit.ly/3kkOygQ
Foxminded в ФБ: / foxmindedco
FoxmindEd в Instagram: / foxminded.ua
Foxminded в VK: foxminded
Мой Telegram: t.me/nemchinskiyOnBusiness
Мой блог: www.nemchinsky.me
1. На основе работы Роберта Мартина (дяди Боба). Акроним SOLID предложен Michael Feathers
2. SOLID (сокр. от англ. single responsibility, open-closed, Liskov substitution, interface segregation и dependency inversion)
1. SRP Принцип единственной ответственности (The Single Responsibility Principle) - Каждый класс должен иметь одну и только одну причину для изменений.
2. OCP Принцип открытости/закрытости (The Open Closed Principle) - программные сущности … должны быть открыты для расширения, но закрыты для модификации
3. LSP Принцип подстановки Барбары Лисков (The Liskov Substitution Principle) объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы
4. ISP Принцип разделения интерфейса (The Interface Segregation Principle) много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения
5. DIP Принцип инверсии зависимостей (The Dependency Inversion Principle) Зависимость на Абстракциях. Нет зависимости на что-то конкретное
0:00 - вступление Сергея Немчинского
0:23 - про принципы SOLID
1:12 - формулировка Open-Closed Principle (OCP)
2:50 - почему хорошо следовать принципу открытости-закрытости
3:53 - как соблюдать OCP согласно Бертрану Мейеру
6:20 - как соблюдать OCP согласно Роберту Мартину (полиморфный OCP)
8:25 -про расширение классов через интерфейсы

Пікірлер: 188
@user-gq7wt3zs1t
@user-gq7wt3zs1t 3 жыл бұрын
Жду пока он скажет - "Я больше не Сергей Немчинский, теперь я имплементирую интерфейс Сергея Немчинского!" )) Спасибо за видео, как всегда доходчиво и понятно
@user-eb7rm2wt5e
@user-eb7rm2wt5e Жыл бұрын
ахах, в голос))))))))))))))))))
@xandrop
@xandrop 10 ай бұрын
А так как Такое запомнить нельзя, то прочитает со смартфона
@mikhailanisimov2160
@mikhailanisimov2160 3 жыл бұрын
"В промышленном софте всегда всё протестировано", - хорошая шутка. =)
@user-kf1xn1dq9t
@user-kf1xn1dq9t 3 жыл бұрын
Смеялись всем тестовым отделом.
@kirillshamyakov6649
@kirillshamyakov6649 3 жыл бұрын
Видос SOLID’ный, спасибо, с меня луцк
@user-si5sg1cb3r
@user-si5sg1cb3r 3 жыл бұрын
Очень простое і доступное объяснение. Даже есть практический пример из жизни, что очень помогает понять. Спасибо большое! Мне очень нравится ваши видео. ☺
@MrBulat1
@MrBulat1 3 жыл бұрын
Спасибо за видео, приятно было слушать.
@demidovmaxim1008
@demidovmaxim1008 3 жыл бұрын
Большое спасибо за выпуск!!!
@user-hz3tr9bu1h
@user-hz3tr9bu1h 3 жыл бұрын
у Вас такие прикольные лекции записаны, давно не было, делайте побольше лекций)
@sergem2794
@sergem2794 3 жыл бұрын
Отличная подборка. Давно ждал SOLID
@egorvafin1978
@egorvafin1978 2 жыл бұрын
Сергей, спасибо за видео про SOLID
@MrBulat1
@MrBulat1 3 жыл бұрын
Спасибо, приятно вас слушать. Плюсую.
@user-xt7up4st1n
@user-xt7up4st1n 3 жыл бұрын
Давно не заходил, отличный формат видео. Зашел прям очень.
@strekozart
@strekozart 3 жыл бұрын
Сергей спасибо за видео! Мне очень нравится как вы вкладываетесь в объяснение, очень круто!
@AnnaIsHere
@AnnaIsHere 3 жыл бұрын
и оформление. И вот эти штучки внизу видео, отрезочки. Мимими!
@artur1998g
@artur1998g 3 жыл бұрын
Спасибо большое за видеоролики. Очень доходчиво объясняешь.
@shkippitor1895
@shkippitor1895 3 жыл бұрын
Спасибо за Ваш труд)
@user-by3wf7tp9c
@user-by3wf7tp9c 3 жыл бұрын
Замечательный цикл видео, спасибо Сергей!
@sealkeen
@sealkeen 2 жыл бұрын
На самом деле, спасибо большое, Сергей, пересматриваю во время тренинга, правда, не у вас, к сожалению, а в епаме, но всё-таки. Во время написания кода Ваши рекомендации, когда на заднем плане идут, реально отлично помогают при рефакторинге архитектуры приложения. Пишу классы для доступа к базе данных и интерфейс, где у меня очень высокая зависимость классов друг от друга, а потом слышу с заднего плана: надо просто вынести клиентский код в интерфейс, и реально выношу его в интерфейс, и оно всё в результате отлично спроектировано получается.
@grommaks
@grommaks 3 жыл бұрын
Харош, было интересно 🙃 спасибо
@user-uf9kn1lg2s
@user-uf9kn1lg2s 3 жыл бұрын
Спасибо большое за видео, супер!
@simplechannel7859
@simplechannel7859 2 жыл бұрын
Сергей, спасибо!
@Zlobusz
@Zlobusz 3 жыл бұрын
Завязка на интерфейсы - это круто!
@UserUser-yk9bt
@UserUser-yk9bt 3 ай бұрын
Спасибо большое за видео))
@r2d2925
@r2d2925 3 жыл бұрын
Жду продолжений! очень доходчево и легко для понимания
@alekseytsvetaev6261
@alekseytsvetaev6261 3 жыл бұрын
Топ видос! Ждём остальные
@veldan1202
@veldan1202 3 жыл бұрын
Видосики стали превосходными/)))
@johnsnow2810
@johnsnow2810 3 жыл бұрын
Очень сумбурное объяснение. Если бы сам не знал бы принципы solid, то из этого видео возможно не понял бы. Ну и да, доску нужно ближе и маркеры темнее или вообще перейти на запись видео с экрана, с электронной доской. В любом случае спасибо за видео! Очень полезно послушать многие вещи, то как их другие понимают.
@rus1006
@rus1006 2 жыл бұрын
я тоже ничего не понял. однако буква s из его объяснения понятна. вообще то я думал расширение под собой подразумевает применение паттернов
@mashinostroitel
@mashinostroitel 3 жыл бұрын
Супер. Спасибо :)
@boberbober8083
@boberbober8083 3 жыл бұрын
Маркером по бумаге.. ууух, мурашки по коже, не смог досмотреть но лайк поставил.
@khusamalfas2121
@khusamalfas2121 3 жыл бұрын
Большое спасибо
@jossefal1957
@jossefal1957 3 жыл бұрын
Отличное видео
@-boiadeiro-
@-boiadeiro- 3 жыл бұрын
осталось 3 принципа и мы наконец познаем силу ООП!
@user-us5uf9tt8i
@user-us5uf9tt8i 3 жыл бұрын
спасибо! ждем про Л😀 ... и поставте маркерную доску. удобная дешевая штука, и на ней всё видно! не то что на этой. сами посмотрите(с телефона 😀)
@kosee4008
@kosee4008 Жыл бұрын
Спасибо!
@romanmotovilov129
@romanmotovilov129 3 жыл бұрын
Спасибо! Ставлю лайк перед просмотром! А теперь можно и посмтотреть...
@alexanderraf5553
@alexanderraf5553 3 жыл бұрын
Полиморфная трактовка от дяди Боба крута!!!!!!) Сергей, вы гений обьяснять сложное простым человеческим языком.спасибо!))))
@user-nd3ye6qd1i
@user-nd3ye6qd1i 3 жыл бұрын
Спасибо!
@MegaMrTan
@MegaMrTan 3 жыл бұрын
Здравствуйте, благодарю за труд; пишите, плз, жирнее или маркеры смените))
@vincentvega1903
@vincentvega1903 3 жыл бұрын
Спасибо
@AndriySydorka
@AndriySydorka 3 жыл бұрын
Дядя Сережа тащит!
@DenVeR-PRO
@DenVeR-PRO 3 жыл бұрын
Вот это скорость!
@Corvus_I_am
@Corvus_I_am 10 ай бұрын
Я не знаю как максимально вежливо подсветить, наверное, все равно обижу спикера, но все же повторю, что исключение хезитационных пауз из речи стало бы колоссальной её оптимизацией. Ещё раз спасибо за труд. С признательностью и благодарностью.
@vitalijuskolinko9011
@vitalijuskolinko9011 3 жыл бұрын
Иду смотреть второй раз, чтобы лучше понять ;)
@turchik5763
@turchik5763 3 жыл бұрын
Сергей, запишите подробное видео про android разработку, с чего начать и т д. Хочется услышать от вас рекомендации новичку
@lexaznaurov5205
@lexaznaurov5205 3 жыл бұрын
Спасибо большое! Шарпистам рекомендую видео от Tim Corey по Solid, чуть длиннее и с примерами
@z1zzz
@z1zzz 3 жыл бұрын
Очень классная линейка видео про SOLID. Большое спасибо вам за это! Если можно, то можете снять также линейку видео про structural, behavioral design patterns. Хотя бы по 3 с каждого?
@konstantinviktorovich8194
@konstantinviktorovich8194 3 жыл бұрын
Поберегите природу, используйте маркерные доски!
@dimitro.cardellini
@dimitro.cardellini 3 жыл бұрын
Перечитал Роберта Мартина. Специально, чтобы убедиться в том, что я правильно понимаю Принцип Отркытоти / Закрытости (OCP). . Так, вот, этот принцип не совсем про Классы и Интерфейсы, наследование и реализацию, и уж тем более, не про "замочки" на классах. Это все, конечно правильно, но, это все частные способы вносить изменения в код, который, кстати, не обязательно соответствует OCP. И применение к нему описанных техник изменения сохранит это свойство кода. . OCP о том, что следуя SRP мы также должны учитывать, что отдельные подзадачи могут иметь разные решения и выделять соответствующие абстракции, защищая этим самым решение общей задачи от изменений, и делая такое решение открытым для расширения. Т.е. OCP -- это про декомпозицию кода. Именно, следуя OCP мы должны выделить наши зависимости, т.е. проанализировать, какие подзадачи могут иметь альтернативные решения, оценить вероятность такого измнения, что в свою очередь позволит не плодить лишнии абстракции. . На простом примере: Мы делаем функцию сортировку и используем в алгоритме простую конструкцию: a < b, чтобы понять надо ли нам поменять элементы местами или нет. Мы находимся в рамках SRP (т.е. наш алгоритм имеет одного Актора, решает одну задачу). Но, если нам надо будет реализовать сортировку уже по возрастанию (убыванию), то нам надо будет менять алгоритм, чего собственно мы и хотим избежать. . Так вот OCP говорит нам о том, что наш алгоритм сортировки должен абстрагироваться от реализации отношения порядка (что помимо всего прочего позволит абстрагироваться еще и по типу данных элементов коллекции). . Видео из объяснения OCP вылилось в расказ про DIP, где зависимости нам уже даны. OCP -- про выявление зависимостей и создание абстракций. . На 9:20 Сергей дает пример Клиентского класса и Серверного класса, и говорит о том, что это нарушает OCP потому, что мы не можем расширить их взаимодействие. И здесь очень опасная и хитрая ошибка, которая заключается в том, что нам не надо расширять это взаимодействие. Нам надо расширить функциональность, а не взаимодействие отдельных двух компонентов. . В заключении, перефразирую Кота Матроскина: - чтобы инвертировать что-нибудь "ненужное", сначала надо абстрагироваться по этому "ненужному", а мы об этом в видео не говорим ...
@sashchernuh
@sashchernuh 3 жыл бұрын
"Видео из объяснения OCP вылилось в расказ про DIP, где зависимости нам уже даны. OCP -- про выявление зависимостей и создание абстракций." - спасибо за идею!
@ivanandreev9571
@ivanandreev9571 3 жыл бұрын
Подскажите пожалуйста, как абстрагироваться от отношения порядка в случае с сортировкой?
@dimitro.cardellini
@dimitro.cardellini 3 жыл бұрын
@@ivanandreev9571 заменить "a < b" на "compare(a, b) < 0" -- это будет OCP. Это позволит изменять порядок сортировки, не меняя при этом сам алгоритм сортировки. А потом по DIP надо принимать функцию conpare на вход влгоритма сортировки.
@ivanandreev9571
@ivanandreev9571 3 жыл бұрын
@@dimitro.cardellini то есть мы создадим целый класс компаратора и интерфейс для него?
@dimitro.cardellini
@dimitro.cardellini 3 жыл бұрын
@@ivanandreev9571 ну, я бы предпочёл лямбду )
@freydrauver249
@freydrauver249 2 жыл бұрын
За серію відео велике дякую! P. S. Заберіть хтось в Сергія зелений маркер.
@son9261
@son9261 3 жыл бұрын
Кайфонул)
@dmitry_promath
@dmitry_promath 3 жыл бұрын
Такой вопрос: можно ли начать свою карьеру на фрилансе, а уже потом претендовать на позицию middle в it-компании спустя 1-3 года работы на фрилансе? В моем случае именно так получается, тк работаю по контракту и не могу работать официально где-либо еще, плюс ко всему время не позволит. Рассматриваю фронтенд-разработку
@hmixa
@hmixa 3 жыл бұрын
Использование оператора new смерть для тестов. Работайте через интерфейсы, скармливая их вашему коду снаружи и будет вам счастье!
@anti1am3r
@anti1am3r 3 жыл бұрын
Где то вам все равно создавать экземпляры надо )
@cyrilanisimov
@cyrilanisimov 3 жыл бұрын
Мы тоже тебя любим)
@vitaliyprokopov2194
@vitaliyprokopov2194 3 жыл бұрын
Сергей, Бертран Маер также придумал язык Eiffel, который по-сути есть примером подхода программирования по контракту)
@AnaRxistBoD
@AnaRxistBoD 3 жыл бұрын
Такой вопрос: а что насчет расширения функционала через extensions (extension methods)? Насколько это соответствует принципу "открытости-закрытости"?
@MegaSosnooley
@MegaSosnooley 3 жыл бұрын
А как быть с MVC? Например у меня есть какой-то контроллер (класс) и что есть добавление методов в него? Изменение класса или расширение класса? Если изменение, то как мне в свой контроллер добавлять методы (экшены) ?
@user-hz3tr9bu1h
@user-hz3tr9bu1h 3 жыл бұрын
У Вас есть премиум доступ к материалам без менторинга и чата и т.д.? дороговато обцчение)
@sh1maru
@sh1maru 3 жыл бұрын
А как этот принцип сочетается с тем, что бизнес требования, а за ними бизнес-логика, меняются по два раза в день и всем в принципе заранее понятно, что так и будет?
@Enterprise_IT_support
@Enterprise_IT_support Жыл бұрын
👍
@user-yo6no3jk9l
@user-yo6no3jk9l 3 жыл бұрын
Сергей, купите пластиковую доску. У меня от скрипа фломастера по бумаге зубы свело! Слушал без звука с субтитрами.
@user-sb2th7yz6v
@user-sb2th7yz6v 3 жыл бұрын
Ля как маркер крутит)
@user-888azim-97
@user-888azim-97 2 жыл бұрын
😂
@sealkeen
@sealkeen 2 жыл бұрын
10:10 Если посмотреть так-то по диаграмме на декторатор, то получается, что у нас циклическая зависимость Прокси от Интерфейса и Интерфейса от прокси) И мы можем вставлять абсолютно любое количество дополнительного функционала: логирование, кэширование, аутентификацию, авторизацию, аудит - поскольку они все полетят в трубу, а проекты просто не скомпилируются :D
@sashchernuh
@sashchernuh 3 жыл бұрын
Сергей, такой вопрос, не знаете ли поменял ли Мейер первое его понимание этого принципа во втором издании в 97 годе, после того как Мартин опубликовал версию OCP в 96 году?
@user-ez2yf3yd3z
@user-ez2yf3yd3z 2 жыл бұрын
Ok!
@dsalodki
@dsalodki 3 жыл бұрын
не видно что пишется на доске, может маркеры тёмные использовать?
@andrewkovalchuk1665
@andrewkovalchuk1665 3 жыл бұрын
Сергей, ты случайно в конце не оговорился про IoC и Dependency Inversion? Может имел ввиду Dependency Injection, как имплементацию IoC, а используя Dependency Inversion принцип мы можем подкидывать в IoC контейнер нужные нам реализации интерфейса? В данном случае оговорка, как по мне, достаточно существенная и может ввести в заблуждение тех, кто недавно с этим столкнулся... А так все по делу. Спасибо за то что ты делаешь. Лойк!)
@mikhaillucky8130
@mikhaillucky8130 3 жыл бұрын
да, это оговорка, еще чуть раньше он принцип назвал паттерном, но если человек захочет разобраться в этой теме, данных видосов будет мало, а небольшие неточности исчезнут в процессе.
@andrewkovalchuk1665
@andrewkovalchuk1665 3 жыл бұрын
Так то коммент я писал с целью обратить внимание тех, кто только столкнулся с этим. На собесе, конечно, лучше так не оговариваться...
@user-bn8wj4tq1i
@user-bn8wj4tq1i 3 жыл бұрын
Вопрос, так а конструкция Роберта Мартина(1996 год), я не понял как там тогда "расширять" функционал, если и старый класс(функционал), и новый, зависят от одного интерфейса. как мы добавим что-т новое, если интерфейс у них один?
@nrnwest
@nrnwest 2 жыл бұрын
функционал можно только добавить но не трогая интерфейс а вот первый вариант гибче выходит, там мы наследуюем и добавляем любой функционал (в интерфейс) не нарушай базовый интерфейс ) чет Сергей не договаривает или просто на тренинг так манит )))
@Bjfhj
@Bjfhj 3 жыл бұрын
Нельзя трогать старый код, а как тогда понять что в родительском модуле есть все необходимые методы для будущего (клиентского) кода ? Или добавление методов в родительский код не будет считаться нарушением OCP, а нарушение будет тогда, когда будут переписываться уже реализованные методы ?
@vesster2883
@vesster2883 3 жыл бұрын
10:10 Как коротко объяснить разницу между Proxy и Decorator? Поменять выход стрелки. Это самое короткое и понятное объяснение без кода, которое можно использовать в любом коде где это целесообразно. Правда без знания UML понять будет сложно.
@waltergibbs3041
@waltergibbs3041 Жыл бұрын
а что делать если правки подразумевают под собой дополнение интерфейса?
@ZeroBone
@ZeroBone 3 жыл бұрын
6:57 Реализация интерфейсов в UML обозначается пунктирной линией (со стрелкой как при наследовании на конце).
@LeoMrakobes
@LeoMrakobes 3 жыл бұрын
Историческая отсылка понравилась, а вот по сути - если бы я не знал как работают SOLID принципы - то без наглядных примеров мало что понял бы из этого видео
@alexandernifanin7366
@alexandernifanin7366 3 жыл бұрын
Да, тоже не раз изучал SOLID, но из примеров с нуля точно ничего не понял бы. Хотя, если сделать подробнее, то видео получится на полчаса.
@TimC0x
@TimC0x 3 жыл бұрын
9:50 почему же "прокси", это же адаптер, он позволяет соединить одну систему с другой. прокси это если об подмене реального объекта заглушкой
@lyloo6577
@lyloo6577 3 жыл бұрын
Подразумевается, наверное, что требуемый объект будет инициализирован или найден при необходимости. Адаптер это про другое, про создание одного интерфейса поверх другого/других для удобства использования
@dmitryzolkin7904
@dmitryzolkin7904 Жыл бұрын
Подскажите, почему инверсия зависимостей и софт код это не одно и тоже? Разве обращение к конкретным объектам через интерфейс это не софт?
@crypto_octocat
@crypto_octocat 3 жыл бұрын
Черные футболки дают +10 к солидности )
@user-gq8wv1ov5u
@user-gq8wv1ov5u 3 жыл бұрын
Добрый день Сергей. Слышали ли Вы о бесплатных курсах Ш++ в Кропивницком, и что о них думаете. Заранее спасибо за ответ.
@LeoMrakobes
@LeoMrakobes 3 жыл бұрын
За Сергея не отвечу, а вот сам я знаком со многими из КОВО где эти курсы проводятся и знаю многих кто после Ш++ достаточно неплохо устроились работать, плюс там отличная внутренняя атмосфера. Если вы сами мотивированны к обучению - то естественно получите хорошие знания
@sergey.stafeev
@sergey.stafeev 3 жыл бұрын
Хорошая скрытая реклама)
@sergey.stafeev
@sergey.stafeev 3 жыл бұрын
@@LeoMrakobes хороший рекламный комментарий)
@user-gq8wv1ov5u
@user-gq8wv1ov5u 3 жыл бұрын
@@LeoMrakobes Понятие "неплохо устроились" у каждого разное, но я все же надеюсь получить ответ от С. Немчинского.
@alexandernifanin7366
@alexandernifanin7366 3 жыл бұрын
Ш++... сколько ассоциаций возникает.
@sergey.stafeev
@sergey.stafeev 3 жыл бұрын
Непонятно, почему я не могу добавить метод в существующий класс, чем плодить новые классы наследованием и там добавлять? И если правок будет много, то это сколько ж наследований будет.
@alexandernifanin7366
@alexandernifanin7366 3 жыл бұрын
Да ерунда, конечно. Я бы так сказал, что добавлять можно, а вот менять - проблемно, т.к. зависимые классы и клиенты тоже придётся менять. Проблема может быть в интерфейсе. Если туда добавить метод, его придётся добавлять во все наследники.
@user-hv8rh8nk9d
@user-hv8rh8nk9d 3 жыл бұрын
Вопрос жизни и смерти Когда Сергея Немчинского перестанут звать Сергеем Немчинским?
@vitalik100500q
@vitalik100500q 3 жыл бұрын
Когда замуж выйдет
@gibizov
@gibizov 3 жыл бұрын
Не, а вдруг ещё кто-то не знает? И заметьте, Сергей старается протараторить это как можно быстрее. Хотя уже можно просто рисовать баннер с фио и регалиями, как в программе «Время». 100К уже есть, зачем им слушать это постоянно? Чтоб в подкорку вбивалось? Ну мякше надо, нежнее.
@Oleksii_Leshchenko
@Oleksii_Leshchenko 3 жыл бұрын
@@gibizov Это же фишка про которую столько шутят. Это хорошо Тем более, большой процент новых, не подписанных
@gibizov
@gibizov 3 жыл бұрын
Алексей Лещенко «люблю вас и всё вот это вот» :)
@user-qv4hn6qq4n
@user-qv4hn6qq4n 3 жыл бұрын
@@vitalik100500q Возможно тогда появится еще один Сергей Немчинский вполне возможно
@IROnMAn-ze6op
@IROnMAn-ze6op 3 жыл бұрын
Не понял насчёт трактовки от Мартина: нам что, нужно создавать новый класс, который заново будет имплементировать интерфейс, только поведение уже будет другое, чем у класса, со старой реализацией?
@SergeyNemchinskiy
@SergeyNemchinskiy 3 жыл бұрын
примерно так. но можно от старого унаследоваться
@IROnMAn-ze6op
@IROnMAn-ze6op 3 жыл бұрын
@@SergeyNemchinskiy если не унаследоваться от старого, то всё равно не понимаю. У нас есть новый класс с новой реализацией, зачем тогда сохранять старый?
@kisurov
@kisurov 3 жыл бұрын
@@IROnMAn-ze6op Новый класс может быть обёрткой над старым, дополняя его функционал, а не повторяя его целиком
@truenerdofbotva5831
@truenerdofbotva5831 3 жыл бұрын
@@kisurov но у нас же тогда в итоге окажется по десять обёрток над каждым классом, как с этим быть? Или предполагается, что код будет писаться сразу как надо, и изменения будут малочисленными?
@MaksUsanin
@MaksUsanin 3 жыл бұрын
"все ещё зовут Сергей Немчинский" :))
@anzarsh
@anzarsh 3 жыл бұрын
Захардкожено)
@aaayakou
@aaayakou 3 жыл бұрын
Вопрос: А разве методы расширения не являются примером реализации OCP? Ведь при их реализации мы вроде как не изменяем изначального класса
@levovix
@levovix 3 жыл бұрын
методы расширения это те же методы, но написанные вне класса. никаким примером они не являются
@aaayakou
@aaayakou 3 жыл бұрын
@@levovix ок, ясно
@user-nz2hh9po2r
@user-nz2hh9po2r 3 жыл бұрын
Благодарю за видео, только не очень понятно, как ваша установка о том. что работающему программисту не нужно прокачивать т. н. хардскиллы в свободное от работы время, увязывается с тем, что вы преподаете курс по паттернам явно не для новичков
@JackFastGame
@JackFastGame 3 жыл бұрын
Очень важный вопрос: всегда ли следует соблюдать SOLID или есть альтернативные концепции принципов работы в ООП?
@KirillTerekhov
@KirillTerekhov 3 жыл бұрын
JackFastGame есть GRASP как более традиционный набор принципов. Ещё из интересного есть книжка “A philosophy of software design” в который автор подходит к проблеме с другой стороны и даёт определение сложности и поддерживаемости, а из него уже выводятся принципы
@alexandernifanin7366
@alexandernifanin7366 3 жыл бұрын
Точно не всегда. Если проект на десяток тысяч строк, можно смело слать лесом. Сильно ограничивает без особых преимуществ
@JackFastGame
@JackFastGame 3 жыл бұрын
@@alexandernifanin7366 Разве SOLID не помогает в больших проектах?
@alexandernifanin7366
@alexandernifanin7366 3 жыл бұрын
@@JackFastGame Это к чему вопрос? Помогает. Я вообще отвечал на другой вопрос и про небольшой проект.
@nrnwest
@nrnwest 2 жыл бұрын
почему не испльзовать абстрактный класс, тот же интерфейс но еще дает плюс
@RadioWestin
@RadioWestin Жыл бұрын
совсем неизвестный Бертран Мейер - ничего себе :) автор Eiffel, авторитетной книги ООП "Object-Oriented Software Construction" и еще кучи всего :)
@user-qv4hn6qq4n
@user-qv4hn6qq4n 3 жыл бұрын
Так, ничего не понял. А разве зависимость от интерфейсом не относится к Dependency Inversion Principle?
@SergeyNemchinskiy
@SergeyNemchinskiy 3 жыл бұрын
все принципы связаны. но да. это именно к тому принципу. Просто я пояснил и дополнил, чтобы у людей было связанное понимание принципов
@apdgslfhsodbna
@apdgslfhsodbna 3 жыл бұрын
Работал в 2х компаниях дот нет джуном... омг сколь там было говна, платили хорошо, но видимо понимали что с этим легаси разбираться, и одна из этих компаний достаточно известная.
@homo-ergaster
@homo-ergaster 3 жыл бұрын
Не Microsoft случаем? У меня университетский товарищь ушел к ним. Говорит класс на 50 тысяч строк запилить там как запросто.
@apdgslfhsodbna
@apdgslfhsodbna 3 жыл бұрын
@@homo-ergaster , яндекс
@videonafoto
@videonafoto 3 жыл бұрын
Не очень понятно. А как расширять функциональность, если интерфейс менять нельзя? А если клиенту нужны новые методы, или старые методы с другой сигнатурой?
@rusrulet2806
@rusrulet2806 2 жыл бұрын
тоже задался тем же вопросом. и судя по комментам, вопрос остаётся открыт )
@dredwolf7325
@dredwolf7325 3 жыл бұрын
давай 10 минут баек про frontend
@DrZupan
@DrZupan 2 жыл бұрын
что отвечать на собеседовании на вопрос "что такое О с солид?" так и не понял)
@xandrop
@xandrop 10 ай бұрын
Все очень хорошо на бумаге, но вот если лектор, чтобы что-то объяснить постоянно лезет в смартфон, то как это ответить на собеседовании, к примеру.
@lukeskyworker2637
@lukeskyworker2637 3 жыл бұрын
В учебниках для начинающих всё время пишут о Полиморфизме, Инкапсуляции и Наследовании. Но, не поясняют по-нормальному, для чего это нужно. На живых примерах. Т.е. наследование нужно, как я понял из этого видео, что бы, в том числе и не добавлять баги в уже работающий код. И что бы не тратить деньги на тестировщиков, которые эти баги будут отлавливать.
@alexandernifanin7366
@alexandernifanin7366 3 жыл бұрын
ООП был изобретён намного раньше SOLID. Согласен, принцип подходит для наследования, только наследование не обязано подчиняться OCP. Есть класс „насекомое“. К нему добавляются методы „ползать“, „летать “, „жалить“. От него можно наследовать жука, гусеницу, осу. Тратить деньги на тестирование всё равно придётся, просто меньшие.
@UGEEGO
@UGEEGO 3 жыл бұрын
В названии не закрыты круглые скобки ;)
@brodlovherrsov7097
@brodlovherrsov7097 3 жыл бұрын
А че ты подглядываешь?)
@victormakovchik249
@victormakovchik249 2 жыл бұрын
Кроме Бертрана Мейера был ещё Сид Мейер - разработчик культовой игры Цивилизация! Может родственник?)))
@malochico7363
@malochico7363 3 жыл бұрын
("В общем обо всем по порядку. О солид принципах поговорим чуть попозже")
@vrabosh
@vrabosh 3 жыл бұрын
А если нашел способ как улучшить старый код, там типа где трогать нельзя, тогда что?
@0imax
@0imax 3 жыл бұрын
Работает - не трогай :) Понадобится "официально" туда залезть - тогда уже можно попробовать внести "новшества".
@vrabosh
@vrabosh 3 жыл бұрын
@@0imax хотя я на начальном этапе максимально стараюсь оптимизировать и гибкость сделать.. и уже когда проект разросья уже не трогать, а все недочеты запоминать на след проект, и потмо уже править в новом проекте.
@perva4ina
@perva4ina 3 жыл бұрын
Больше комментов богу комментов
@NummeSpnet
@NummeSpnet 3 жыл бұрын
получается OCP от Дяди Боба есть ни что иное как DIP... получается O зависит от D )
@Alexey0795
@Alexey0795 3 жыл бұрын
8:35 "листочек"
@bashconsole
@bashconsole 2 жыл бұрын
1:12. я вот 20+ лет как программист и тоже выуцчить не могу. странно почему.
@Sasha2dx
@Sasha2dx 3 жыл бұрын
Я если что могу серъёзно заниматься разработкой даже выписывая перманентный говнокот. :D
Каха с волосами
01:00
К-Media
Рет қаралды 6 МЛН
Не пей газировку у мамы в машине
00:28
Даша Боровик
Рет қаралды 7 МЛН
Stupid man 👨😂
00:20
Nadir Show
Рет қаралды 27 МЛН
Принцип хорошего кода DRY (dont repeat yourself)
16:20
Sergey Nemchinskiy
Рет қаралды 70 М.
Принцип открытости/закрытости. SOLID для React
14:51
Михаил Непомнящий
Рет қаралды 13 М.
Open/Closed Principle Explained - SOLID Design Principles
10:22
Web Dev Simplified
Рет қаралды 132 М.
SOLID принципы на Python: OCP - Принцип открытости / закрытости
21:15
EngineerSpock - IT & программирование
Рет қаралды 9 М.
Как форматировать код правильно?  Clean Code
20:58
Каха с волосами
01:00
К-Media
Рет қаралды 6 МЛН