Большие проблемы наследования в ООП

  Рет қаралды 174,321

ExtremeCode

ExtremeCode

4 жыл бұрын

В этом видео мы узнаем какие проблемы несет в себе принцип наследования из ООП и как эти проблемы можно решить при помощи стратегии, интерфейсов или методов расширения
Исходники из видео
github.com/extremecodetv/Inhe...
Видосик про Стратегию
• Важнейший шаблон прогр...
Музыка: DJ Blyatman - SLAV KING feat. Life of Boris (Instrumental)
• DJ BLYATMAN - SLAV KIN...
#ооп #программирование #наследование
Доп. ссылки:
● Insta: / _extremecode
● VK: extremecodetv
● Telegram Chat: t.me/extremecode (или в поиске @extremecode_chat)
● Конструктор сайтов StoryLand: storyland.mobi/?...

Пікірлер: 758
@illidanstormrage8022
@illidanstormrage8022 4 жыл бұрын
Пингвин должен говорить не "ХЗ", а "Линукс"
@Firefly_3161
@Firefly_3161 4 жыл бұрын
И еще пингвин бы сказал что ООП говно, а Си наше все! Каждый раз для граблей - ООП с выходом новых стандартов (по факту костылей которые называют фичами) для того чтобы улучшить грабли. Но всеравно грабли от этого не перестают ими быть, даже если они удобнее! Как следсвие over-garbage код, утечки памяти, мусорный код сжирающий ресурсы машины... Таким бы был пингвин если бы Линус Торвальд использовал грабли ООП для создания этой системы! Да и был бы этот пингвин еще жив - большой вопрос!
@bsunjar
@bsunjar 4 жыл бұрын
"fuck nvidia"(c)
@YY-zw2ec
@YY-zw2ec 4 жыл бұрын
GNU
@AlexP-jc7rz
@AlexP-jc7rz 4 жыл бұрын
А в чем разница?
@mhhit
@mhhit 3 жыл бұрын
представь себе пингвина у которого звуки хз XD
@user-we9ei6ks4d
@user-we9ei6ks4d 4 жыл бұрын
4:19 Как же хорошо, что в C# нет множественного наследования 4:20 ...А теперь в C# 8 можно пилить дефолтную реализацию интерфейса
@ivangor1997
@ivangor1997 4 жыл бұрын
@@user-w32eiJkNlIn9a2nRq6n Они становятся абстрактными классами просто с возможностью множественного наследования.
@MacIn173
@MacIn173 4 жыл бұрын
@@user-w32eiJkNlIn9a2nRq6n так и просто полностью абстрактный класс остается контрактом, который нельзя сам по себе инстанцировать.
@voltamperoff
@voltamperoff 4 жыл бұрын
@@user-w32eiJkNlIn9a2nRq6n "Он может содержать в себе кучу базовой логики, в отличие от интерфейса." (с) Но начиная с 8-й версии, это отличие полностью исчезает.
@bonumsignum7017
@bonumsignum7017 4 жыл бұрын
@@voltamperoff Глупость, в интерфейс ты не добавишь поле. Это вся суть интерфейса, ты не можешь задать стейт классу.
@khodis2002
@khodis2002 3 жыл бұрын
Интерфейсы описывают, что класс делает, а абстрактный, как он это делает, то есть в нём лежит кусок кода, работающий за логику наследников. В интерфейсе методы логики особой не несут. Можно даже сказать, что метод в интерфейсе - заглушка, которую можно переделать (с целью избежания рефакторинга)
@user-xm3ue3nc5x
@user-xm3ue3nc5x 3 жыл бұрын
Когда пришёл узнать о недостатках наследования, но вместо этого начал танцевать ХАРДБАСС!
@evgeniym29
@evgeniym29 4 жыл бұрын
Слоны умеют плавать :) В остальном, как обычно, красава :)
@dashandr1
@dashandr1 4 жыл бұрын
Ты слон
@evgeniym29
@evgeniym29 4 жыл бұрын
@@dashandr1 И кто это говорит, жирный троль? :)
@dashandr1
@dashandr1 4 жыл бұрын
@@evgeniym29 азарной слон)
@replace22yu40
@replace22yu40 4 жыл бұрын
Кстати да, они хорошо плавают
@yevheniidolmatov3170
@yevheniidolmatov3170 4 жыл бұрын
Кликбейт же
@user-vm9ye6qy9h
@user-vm9ye6qy9h 4 жыл бұрын
Проблемы не у наследования в ООП, а у того, кто неправильно его применяет. Если вы забиваете микроскопом гвозди, то ни гвозди, ни микроскоп в этом не виноваты.
@Rumpelstilzchen_M
@Rumpelstilzchen_M 4 жыл бұрын
так он вроде именно про это и говорит.
@addressmodel2121
@addressmodel2121 4 жыл бұрын
Илья Иванов , наследование - это не совсем удачный термин для этого механизма. Именно поэтому это самое "наследование" и применяют неправильно многие люди. Если термин "наследование" заменить на термин "расширение функциональности", то название становится рекомендацией к применению этого механизма.
@VeryWorried
@VeryWorried 4 жыл бұрын
ога, архитектурно-структурные подходы.
@vzlomer1000
@vzlomer1000 4 жыл бұрын
Проблемы с доступом к джой казино, как только увидел твой коммент у меня пронеслось в первую очередь
@nuclearcoil
@nuclearcoil 4 жыл бұрын
Но почему микроскоп обычно применяют нормально, а наследование пихают хер знает куда? Кроме того, применений у этого "микроскопа" не так уж и много между прочим. А апологеты ООП выставляют его как "основопологающий принцип", один "трёх якобы суперглавных". Вот это и заставляет новичков пихать его куда-попало. Они думают, что без наследования их код будет не достаточно крутой. И в результате пытаются пришить к нему наследование, лишь бы было.
@0vdmk
@0vdmk 4 жыл бұрын
3 часа ночи, я же даже не программист...
@vip51000
@vip51000 4 жыл бұрын
Становись
@paztwel
@paztwel 4 жыл бұрын
А в целом ты смог понять о чем вообще идёт речь? 😄
@equim7363
@equim7363 4 жыл бұрын
@@paztwel я не понял, почему метод swim нельзя засунуть сразу в класс Пингвин? Чтобы не повторять его если появится класс акула например?
@user-vt1qw1zj9w
@user-vt1qw1zj9w 4 жыл бұрын
Норм жизнь тратишь
@azamatkurmangaliyev6010
@azamatkurmangaliyev6010 3 жыл бұрын
@@equim7363 да
@Max-np7om
@Max-np7om 4 жыл бұрын
Инкапсуляция тоже была бы мусором, если бы не сокрытие данных
@user-rr5fx9zm1s
@user-rr5fx9zm1s 4 жыл бұрын
Кажется, в одном из роликов говорилось, что инкапсуляция, это не тоже, что и сокрытие
@bearpro
@bearpro 4 жыл бұрын
@@user-rr5fx9zm1s По крайней мере не сокрытие данных точно. Инкапсуляция - сокрытие реализации за интерфейсом, и нужно для того чтобы в реализацию можно было вносить изменения в ходе поддержки программы (баг пофиксить, оптимизировать что-нибудь. С такими целями блин сделаны все нововведения в программировании после появления символьных имён для процессорных инструкций - упрощение поддержки и улучшения кода).
@tankowot
@tankowot 4 жыл бұрын
Брат беги, не оглядывайся =)))
@nuclearcoil
@nuclearcoil 4 жыл бұрын
@@user-rr5fx9zm1s сокрытие подразумевает не только сокрытие данные, но и сокрытие реализации.
@kek2961
@kek2961 3 жыл бұрын
что мешает делать мне все публичными?
@soulwind7577
@soulwind7577 4 жыл бұрын
Сидишь такой, ура наконец то начал понимать ООП, спасибо видосу теперь понятно, что ни хя не понятно XD
@angelotrriton9940
@angelotrriton9940 Жыл бұрын
Полезно, понятно, быстро и с музыкой! Однозначно лайк и спасибо! 😘
@antaki93
@antaki93 4 жыл бұрын
Зачем вообще пихать метод Swim() в родительский класс, если он не является общим для всех наследников? По-моему, вы чего-то не понимаете в ООП.
@leeroyjenkns5182
@leeroyjenkns5182 4 жыл бұрын
Проблемы с ООП возникают у тех, кто именно так его использует. Поэтому для демонстрации "как делать не нужно" самое то
@ivansidorov5
@ivansidorov5 4 жыл бұрын
@@leeroyjenkns5182 Ты описываешь идеальный мир которого не существует.в реальных проектах почти всегда такая хуйня как на видео и ен важно банк это или стартап , нет времени постоянно все рефакторить.
@Nikita-hu9bk
@Nikita-hu9bk 4 жыл бұрын
@@ivansidorov5 А если изначально так не делать?)
@ivansidorov5
@ivansidorov5 4 жыл бұрын
@@Nikita-hu9bk ты никогда не писал большой проект где участвуют больше 3 человек?) и длится больше года. Изначально можно сделать хорошо при 2 условиях: 1) ТЗ не меняется 2) Дают время на рефакторинг . Я перевидал много проектов, везде полная дичь с ООП и куча костылей для него. нет говна только в тех проектах, которые мелкие и пишутся 1 человеком, а еще в тех где писал все ты) потому что там там, как привык ты)
@AlexAlex-ms3bg
@AlexAlex-ms3bg 4 жыл бұрын
Да затем, чтобы видос заснять. А про что тогда снимать??
@Temp1archik
@Temp1archik 2 жыл бұрын
Слишком идеальный контент. Пишу комментарий, чтобы было понятно, что вы делаете лучшие туториалы на свете. И великолепным голосом
@alexxx4434
@alexxx4434 4 жыл бұрын
Слоны, ска, ПЛАВАЮТ! А если серьезно, то это пример плохого приложения наследования. Ибо если бы в биологии так же решили классифицировать животных тупо по умениям они бы тоже быстро за.бались, и ничего бы у них толкового не вышло. Соответственно, проблема не в системе иерархического наследования, а в её правильном применении.
@dmitriiplotnikov1137
@dmitriiplotnikov1137 4 жыл бұрын
Точно. Здесь проблема не в том, что "наследование говно", а в том как оно используется. Добавление swim в класс animal соответствует утверждению, "все животные плавают". В данном случае, это неверное определение уровня абстракции, на котором должен быть размещен метод. Чем выше уровень абстракции, тем более общие части в нем должны находиться. Биологическая классификация живых организмов хороший пример развития такой классификации от общего к частному. Более прикладной уровень - возьмите System.Object, там будут только самые общие методы, которыми должны обладать все произвольные объекты, чтобы среда нормально работала. Так-то при желании или в угоду хайпу можно извратить любую идею.
@shadowinthemirror2055
@shadowinthemirror2055 4 жыл бұрын
AlexXx, я говорю как относительно биолог:вы ахуеть как правы
@evgeny_5891
@evgeny_5891 4 жыл бұрын
Тоже с вами парняги абсолютно согласен!!! Ребята с канала просто хайпануть захотели, а новечки в профессии решат после этого видео забить на наследование)
@user-bu1ou5vd5y
@user-bu1ou5vd5y 4 жыл бұрын
@@evgeny_5891 но в видео было сказано что наследование нужно, но использовать стоит аккуратно (если я ничего не забыл)
@evgeny_5891
@evgeny_5891 4 жыл бұрын
@@user-bu1ou5vd5y В целом мне видос очень понравился, лай однозначно! Автор ближе к концу ролика начинает говорить, о том что наследование "допустимая" штука, но нужно использовать ее с умом, как по мне, нужно это было-бы сказать в начале, но я не автор.) В целом классный канал, и ребята поднимают правильные темы, желаю им удачи!
@donqhomo8810
@donqhomo8810 4 жыл бұрын
дроп в 8 утра в рабочий день, кайф))
@paul_wiggin
@paul_wiggin 4 жыл бұрын
Чтобы было чем на работе заняться.. щас мужики всем отделом посмотрят и будут холиварить весь день! А если там ещё адепты разных языков есть, то холиварить будут до понедельника.
@purplep3466
@purplep3466 4 жыл бұрын
@@paul_wiggin ахахаххахаха
@ajajapenoflex
@ajajapenoflex 4 жыл бұрын
Спасибо за критические ролики! И своеобразного юмора над всем тем балаганом что есть в кодинге. Долго время не мог подступиться к ооп и паттернам и прочим техникам, казалось чем то сверх сложным и требующим много времени для разбирательств, но когда узнал о проблемах в ооп и понял за что его макают лицом в грязь, вообщем говоря обратную сторону медали, то пришло озарение и понимание простых вещей, для чего все эти паттерны придуманы и какую большую проблему в проектировании с помощью кода они решают. Так же наконец то прочитал книгу чистый код и достаточно легко переварил все в ней сказано и офигел на сколько же она простая и это только верхушка айсберга тех вещей с помощью которых можно по-человечески выполнять свою работу))
@JasterSalli
@JasterSalli 3 жыл бұрын
Классно! Помню как в рамках изучения JS писал терариум, так добавление каких-либо возможностей "жителям" иногда приводило к хорошим проблемам. А вообще мне понравилось)
@EshkinKot1980
@EshkinKot1980 4 жыл бұрын
Этот видос явно лучше видоса про стратегию, исправляешься, потому лайк.
@user-hh7cy8tr6h
@user-hh7cy8tr6h 4 жыл бұрын
Спасибо, только сегодня сделал дз по массива и теперь в ООП погрузился, нихрена не ясно но очень интересно)
@Oleksandp
@Oleksandp 4 жыл бұрын
Сами создаем проблемы -- сами героически преодолеваем. 1. Менять базовый класс можно только общей логикой. Уже ниже писали что добавлять метод, который будет вызыватся только в одном единственном наследнике -- такое себе. 2. Ничто не запрещает обьединить подход с интерфейсами и абстрактным классом. И тогда можешь внедрять хоть утконосов, которые вообще ни от кого не наследованы в реализации. 3. Без конкретики как это потом применять все это бесмысленный набор символов. Итого полезного из видео: нехуй пихать в базовый класс всю логику, а потом удивлятся "че за порожняк".
@devil_of_war
@devil_of_war 4 жыл бұрын
странно как то написал, отвечу так, как понял. 1. Так вроде ты описал то, что в начале и объяснялось - проблема. Но! В ходе расширения наследников много будет. 2. Не совсем понял, к чему утконосы до объединения подходов с интерфейсами и абстрактными классами. Если можно, по проще объясни. 3. А ручками никто не запрещал потом это потрогать (попрактиковаться).
@Oleksandp
@Oleksandp 4 жыл бұрын
@@devil_of_war Так, я затер нахер всю ту простыню, что хотел выдать, и постарасю максимально упаковать "меседж": Без явного понимания нахер нам эти классы и как их потом использовать, любой довод можно как подтвердить, так и опровергнуть. У нас нет дилемы "яйцо - курица", вначале ВСЕГДА НУЖНО ТЗ. - если программа подразумевает что мы вытягиваем из коробки животное, и заставляем его подать голос, наследование вполне проканывает. - если программа подразумевает что вытянутое животное нужно будет заставить сделать N-действий, и этот список "динамический", то наследование действительно больше создаст проблем, чем решит. Возможно часть обьектов и будут обьедены общей реализацией, но более надежно вынести все это за интерфейс. И так можно придумывать до бесконечности.
@devil_of_war
@devil_of_war 4 жыл бұрын
@@Oleksandp вот теперь намного яснее. Даже нечего сказать в противовес. Ведь реально ТЗ разное, и программы разные.
@dreawmy2912
@dreawmy2912 2 жыл бұрын
даже если так, композиция + интерфейсы выглядят красивей и меньше кода пишется (лучше, чем у каждого наследника писать новый метод, а абсрактный класс будет содержать пару полей)
@dreawmy2912
@dreawmy2912 2 жыл бұрын
@@Oleksandp когда много похожих зверушек с маленькими отличиями, то лучше наследование. Но если же у нас целый зоопарк и общие у зверушек только пара свойсв, удобней будет указанный в видео способ.
@KirillTerekhov
@KirillTerekhov 4 жыл бұрын
По-моему, если не следовать несуществующему принципу ООП "объявления всех методов должны быть только в базовых классах", то в примере будет всё ок с наследованием, не?
@ExtremeCode
@ExtremeCode 4 жыл бұрын
По-моему если следовать существующему принципу ООП, то мы должны в конечном счете работать с абстракциями, не?
@KirillTerekhov
@KirillTerekhov 4 жыл бұрын
@@ExtremeCode конкретный класс тоже описывает абстракцию. Над всеми его экземплярами
@KirillTerekhov
@KirillTerekhov 4 жыл бұрын
@@ExtremeCode но, вообще, не разу не видел понимание принципа "абстракция" из ООП как необходимость наличия слова "abstract" перед каждым методом. Обычно это про то, что мы должны создать хорошую абстракцию, которая скрывает детали реализации. Про создание минимального интерфейса, который легко использовать. Можете посмотреть у Крэга Лармена в главе про GRASP про принцип "high cohesion / low coupling", например
@ExtremeCode
@ExtremeCode 4 жыл бұрын
@@KirillTerekhov абстракция, это не абстрактные классы, весь смысл ООП заключен в полиморфизме и апкасте к "общим" типам, вместо работы с "конкретными" типами, именно из-за этого весь сыр бор в статической типизации, т.к. это единственный способ работать с группой схожих объектов без конкретизации что именно это за объект, хотя они могут иметь различные реализации. Для того чтобы достичь этого - существует как наследование, так и реализация интерфейсов. В видео была показана конкретная проблема которая возникает при использовании именно наследования, и различные варианты решения этой проблемы.
@KirillTerekhov
@KirillTerekhov 4 жыл бұрын
@@ExtremeCode как я уже говорил, конкретный класс - это тоже абстракция. Достаточная для решения проблемы из видео. Проблема с наследованием там в том, что вы его применили неправильно. В нарушение принципа подстановки Лисков, например
@star_lord1911
@star_lord1911 4 жыл бұрын
Час назад вернулся с днюхи, смотрю в универе и получаю полезную инфу 😂
@DicrTarasov
@DicrTarasov 4 жыл бұрын
Наоборот, это очень вредное видео, в котором автор показал как он не понял как правильно использовать ООП.
@FoRGeish
@FoRGeish 4 жыл бұрын
Новый год давно наступил, а автора отпускать похоже не собирается. Взять хуево составленный контракт (а куча абстрактных методов и есть контракт, а не наследование) назвать это наследованием и предложить решение, которое к полиморфизму отношения не имеет от слова "совсем": все животные будут реализовывать ходьбу, плавние и т.п. одинаковым способом? БРАВО, ГЕНИАЛЬНО, ШЕДЕВР. Еще и на серьезных щщах это все рассказывать... Видимо смотрят это реально только "маслята", коли такое соотношение лайков/дизов
@ivankramarenko
@ivankramarenko 4 жыл бұрын
Эм, представьте что я тупой ребёнок, почему одним способом?
@NikolayMishin
@NikolayMishin 4 жыл бұрын
Отличный ролик👍🤗
@victor_bozhok
@victor_bozhok 4 жыл бұрын
Прекрасная подача
@Rostik-pk1ik
@Rostik-pk1ik 4 жыл бұрын
дождались!
@vilkillian
@vilkillian 4 жыл бұрын
Это не проблемы ООП, это проблемы кодеров, которые не могут в ООП
@vBasterv
@vBasterv 3 жыл бұрын
Если прогер говорит "Это проблемы кодеров которые не умеют в ООП", то этот прогер не умеет в ООП. И слава богу что таким криворукам теперь вяжут руки в любом современном ЯП, чтобы они свое "мега ООП" не несли в массы.
@vilkillian
@vilkillian 3 жыл бұрын
@@vBasterv чел...
@sergeifomin3225
@sergeifomin3225 3 жыл бұрын
Ребят. Давайте жить дружно. Вы же понимаете, что ООП инструмент ограничений - метод борьбы одного программиста с коллегами. Когда над проектом работают сотри программистов, такие архитектурные решения - скелет проекта. Нужный чтобы весь код не превратился в мусор, который тяжело поддерживать. ООП это уже давно не пушистый зверёк, который создан для того, чтобы тебе было удобно)
@vilkillian
@vilkillian 3 жыл бұрын
@@sergeifomin3225 именно
@easystm6865
@easystm6865 3 жыл бұрын
Чел?
@Retroromancer
@Retroromancer 4 жыл бұрын
Вот что значит хороший ролик. Я вообще не кодер, не понимаю ничего из сказанного, но смотреть интересно.
@user-xg8hw3iz6e
@user-xg8hw3iz6e 4 жыл бұрын
Доброго времени суток. Осветите пожалуйста темы с подключением GitHub, Azure и прочим. Плюсы, минусы, отличия. Как подключить для чего нужно. И еще хотелось бы увидеть программирование с использование баз данных, так ка большинство приложений клиент-серверные. Заранее спасибо.
@xakkep9000
@xakkep9000 4 жыл бұрын
Классненько!
@razor23Ukraine
@razor23Ukraine 4 жыл бұрын
Exceptions не нужны - а вот это уже интересненько! Давай жги!
@JOELwindows7
@JOELwindows7 4 жыл бұрын
This is your daily dose of Recommendation .
@dimzinnatov7242
@dimzinnatov7242 4 жыл бұрын
Лучше уж просто сооздать класс Animal, и отдельно интефрейсы типа ISwimmer : where T , IWalker : where T , вроде так лучше. Возможно ошибаюсь) Я не так давно программирую
@evgenasd8892
@evgenasd8892 4 жыл бұрын
Здорово раскрываете суть паттерна(нов), все понятно. Остается попрактиковать закрепив результат. Кстати в книге «Банды четырех» этот паттерн нифига не понятен, с их примером создания текст.редактора.
@sergey1658
@sergey1658 4 жыл бұрын
Умный кто-то, Может видео, как делать большие проекты типа paint, word? С чего начинать, какая должна быть структура чтобы было ооп и красиво
@Andrey-il8rh
@Andrey-il8rh 4 жыл бұрын
а ты маленькие уже умеешь делать?
@sergey1658
@sergey1658 4 жыл бұрын
@@Andrey-il8rh калькулятор-шифратор какой-нибудь легко, с чуть ооп
@Andrey-il8rh
@Andrey-il8rh 4 жыл бұрын
@@sergey1658 такие проекты как word явно не в одно рыло делаются, многое ещё зависит от языка на котором предстоит писать проект. ООП это не панацея и не показатель крутости - это инструмент для решения конкретных проблем которые для начала нужно осознать, не нужно городить в проекте ООП ради оценки подруги маминой сестры
@user-ml6im5rs1e
@user-ml6im5rs1e 4 жыл бұрын
Угарнул на моменте трейтов и PHP программистов)
@user-up7lg8ol9c
@user-up7lg8ol9c 4 жыл бұрын
именно в словах типа "я запихну все в кучу, чтобы не усложнять код" и кроется вся суть :D
@PrefixKrema
@PrefixKrema 4 жыл бұрын
Очень люблю ваш канал. Не хотите сделать видео на тему, как начать участвовать в опенсорс проектах, и контрибьютить на гитхабе? А так же как участвовать в хакатонах, и надо ли оно вообще. С каким опытом итд.
@user-sj2ky8ol1f
@user-sj2ky8ol1f 4 жыл бұрын
Спасибо! Схема гибкая бесспорно, но в защиту наследования хочется спрлсить - возможно не в парадигме дело, а в детализации архитектуры? Ведь если подумать перед тем как писать код можно же превентировать будущие изменения добавив пару промежуточных классов? Или это бред? У вас просто в видео так обставленно, что наследование изначально неумёхи используют)
@Rostik-pk1ik
@Rostik-pk1ik 4 жыл бұрын
сейчас бы прийти в офис с колоночькой и врубить эту прекрасную музыку и кодить... *кайф*
@lesnoy_leo
@lesnoy_leo 4 жыл бұрын
Не ну за хардбас только лукаса можно влипить\
@unset1302
@unset1302 3 жыл бұрын
Вообще не ебу, что происходит на экране, но смотрю все видосы. 👍
@sergiysych7760
@sergiysych7760 4 жыл бұрын
лайк за музло, контент тоже годный
@algol36
@algol36 4 жыл бұрын
В последнем примере с Trait - зачем все так сложно? Почему нельзя просто сделать два интерфейса ICanWalk и ICanSwim, и затем написать класс расширение для каждого из них? Типа public static void Walk(this ICanWalk canWalk){...} ?
@SWdarkWind
@SWdarkWind 4 жыл бұрын
наконец то снова шарп)
@vladimir2358
@vladimir2358 4 жыл бұрын
дык, open/closed principle! Только ситхи вносят изменения в классы
@vinik_tfo
@vinik_tfo 4 жыл бұрын
open/closed сложно представить при грубом наследовании
@pangutovskiy1659
@pangutovskiy1659 3 жыл бұрын
Хуык
@vladimir2358
@vladimir2358 3 жыл бұрын
@@vinik_tfo, наследование не нарушает его, каким бы грубым оно не было, только бы Лисков оставалась удовлетворённой)
@it-6411
@it-6411 4 жыл бұрын
Наследование в подавляющем большинстве случаев необходимо только разве что при использовании различных фреймворков и api, где дизайн классов специально заточен для того, чтобы от них наследовались. А если реюзать свой код, то интерфейсы, композиция и utility-методы)
@alonev1875
@alonev1875 4 жыл бұрын
Мне кажется не плохой вариант, когда мы создаем пустые емкости через абстрактный класс Trait и наполняем их расширенными методами статического класса. Extrimiсты по вашему мнению какой лучший вариант? C#8.0 позволяет реализовывать методы в интерфейсе. В чем плюсы и минусы.?
@demantools
@demantools 4 жыл бұрын
Может сделаете видос про функциАнальное программирование? Думаю малаяткам(мне) будет интересно послушать байки про императивные и декларативые стили, карелизация там...
@guxershmeg
@guxershmeg 4 жыл бұрын
Но теперь для создания пингвина надо изучить в коде 3-4 сущности вместо 1. А каждая из них может так же конструироваться из 3-4 сущностей. Создание объектов в такой архитектуре усложняется геометрически.
@KulaGGin
@KulaGGin 4 жыл бұрын
Прикольно. Не знал, что так можно.
@denismaltsev9573
@denismaltsev9573 4 жыл бұрын
Лайк за нормальную музыку, браток)
@Crazmuss
@Crazmuss 4 жыл бұрын
Ничего не понятно, но очень интересно.
@vladyslavtymofieiev4213
@vladyslavtymofieiev4213 3 жыл бұрын
Тема конфронтации объектно-ориентированного кода и кода процедурного все же не несколько однозначная. Например, при ооп легко добавлять новые объекты, а в процедурном программировании легче расширить функции объектов.
@konstantine_2761
@konstantine_2761 4 жыл бұрын
ВЫЗЫВАЮ ПОЯСНИТЕЛЬНУЮ БРИГАДУ. А на. уя было в первом примере добавлять столько сущностей, если можно было просто добавить виртуальную функцию, переопредедив ее в гребаном пингвине?
@keeroin
@keeroin 4 жыл бұрын
Пили про исключения!)
@ishdx9374
@ishdx9374 3 жыл бұрын
Монады лучше
@DarkIllusoire
@DarkIllusoire 4 жыл бұрын
На самом деле, этот пример надуманный - он больше про проектирование"а что если, вдруг" - это как про бабушку, которая стала дедушкой
@ebla1n393
@ebla1n393 4 жыл бұрын
На самом деле если ты вдруг столкнёшься с данной проблемой перед каким нибудь дедлайном, то тебе придется либо нахер выкидывать свой прошлый код в помойку, либо юзать хуеву тучу костылей :/ Так что не советую говнокодить в таком случае если зарплата нормальная. В любом случае при расширении интерфейса тебе придется выкидывать код на помойку и писать его по новой. Имхо, это неуважение к себе и к своему свободному времени ибо никогда нельзя быть уверенным в будущей неизменности своего кода.
@DarkIllusoire
@DarkIllusoire 4 жыл бұрын
@@ebla1n393 в любую систему следует закладывать разумную реализацию, а если у вас внезапно, появляются собаки умеющие летать, то это проблемы проектирования, код не должен помогать говнокодить. Для остальных случаев, дедлайна того же, есть куча возможностей прилепить сколь угодно костылей. Наследование должно применяться не для красоты, а для простоты. То есть наследование от абстрактных классов, реализующие интерфейсы с не пустыми виртуальными методами - довольно гибкая система, когда нужно переиспользовать код
@klerg321
@klerg321 4 жыл бұрын
@@ebla1n393 но если нет оснований думать, что кто-то кроме пингвина будет плавать, так и не надо делать ерунду и обмазываться интерфесами. Вот когда появится необходимость, тогда и вынесется в отдельный абстр. класс или интерфейс "плавучее животное"
@ebla1n393
@ebla1n393 4 жыл бұрын
@@klerg321 в довольно больших проектах одиночные исключения встречаются очень редко, а при большом кол-ве исключений (имеется в виду различия в функциональности объектов подкласса т.к. речь идет о расширении функционала) теряется сама идейность наследственности, ибо каждому объекту придется расписывать по новой его ф-ции и код это почти не сократит. +как всегда аргумент об изменении родительского класса остается на месте.
@ebla1n393
@ebla1n393 4 жыл бұрын
@@klerg321 отсутсвие оснований на данное предположение почти не встречается в более-менее крупных проектах, а в мелких наследственность - игрушка, ибо создает минимальные сокращения и препятствует расширению ф-ционала
@Mr43046721
@Mr43046721 4 жыл бұрын
Лукас, заслуженно.
@user-bn7tq4ml6l
@user-bn7tq4ml6l 4 жыл бұрын
Почему то во многих книгах, много где вообще в интернете наследование подается как один из самых популярных, часто используемых и нужных штук в ООП. На деле же это механизм, который нужно использовать с умом и не пихать везде где тока можно
@sergobelich6963
@sergobelich6963 4 жыл бұрын
Как услышал хардбасс. Сразу лайк подписка колокольчик
@rotrhino
@rotrhino 4 жыл бұрын
Найс процитировал первую главу про Стратегию из книжки по шаблонам проектирования.
@pavlochychylnitskiy1288
@pavlochychylnitskiy1288 4 жыл бұрын
Привет, подскажи вкратце каких вещей хватит для фронтенда кроме html и css конечно
@kirill2974
@kirill2974 3 жыл бұрын
Жду видео про исключения
@nezajac
@nezajac 4 жыл бұрын
Я начал понимать для чего нужны интерфейсы, но я еще не дочитался до них в книжках.
@user-rl8ei4iu9z
@user-rl8ei4iu9z 7 ай бұрын
музыкальное сопровождение шикарно
@teddeiread1735
@teddeiread1735 4 жыл бұрын
Лукааааааааас!
@user-hl7zj8fc7u
@user-hl7zj8fc7u 4 жыл бұрын
Поставил лайк под видео, видос хороший, но сейчас меня зачмырят... Как же я рад что я учил только Java))) Там как бы с этим делом реально по проще.
@user-nw8sn5gf9e
@user-nw8sn5gf9e 9 ай бұрын
Можно более подробный разбор последнего примера ? А-то я вроде понял , но больше на интуицию , хотелось бы больше ясности в нем , что бы так сказать уверенно ступать и чувствовать твердый пол под ногами =D
@Wherrimy
@Wherrimy 4 жыл бұрын
Проблемы наследования тут не показаны. Когда ты добавляешь метод в класс Animal, ты должен сразу прикинуть является ли данное свойство неотъемлемой частью именно всех животных, или только отдельных видов таковых. Если нет, то пользуешься чехардой из наследованных классов (вплоть до выделения всех царств, подцарств и т.д. из биологической иерархии в пределах требования программы). Если классов слишком много, пользуешь стратегию/мост/декоратор, например. Ну а в целом, да, есть принцип "композиция лучше наследования", например из-за того, что композиция динамична, а наследование статично.
@ilya9485
@ilya9485 4 жыл бұрын
Ребят, а как вы доступ к полям через свою стратегию получать то будете?
@klerg321
@klerg321 4 жыл бұрын
А легко, прокидывать также. Лучше каждый сеттер/геттер оформить отдельным экшэном :D
@nezajac
@nezajac 4 жыл бұрын
Подскажите нубу что это за волшебная кнопочка которая совершает автозаполнение?
@ryazanov13
@ryazanov13 4 жыл бұрын
ок, если я получаю список животных и они в начале должны говорить, а потом ходить, какой интерфейс мне указывать? Сам по себе интерфейс с точки зрения ООП разве ни есть наследование? Например, в случае с++ вообще нет интерфейсов как языковой конструкции, но можно создавать абстрактные методы, при этом есть множественное наследование, в итоге можно через наследование реализовать то что ты показал через интерфейсы.
@matrix_root
@matrix_root 4 жыл бұрын
Муза на фоне топчик
@Rumpelstilzchen_M
@Rumpelstilzchen_M 4 жыл бұрын
О. Как раз исключения изучаю. Рассказывай.
@agweprint27
@agweprint27 3 жыл бұрын
а почему нельзя обращаться просто penguin.Swim и penguin.Walk, в примере с дефолтными рализациями в интерфейсе? Там класс Penguin имплементирует 2 интерфейса (IWalker и ISwimmer), которые уже имеют реализацию.
@conanchief
@conanchief 4 жыл бұрын
них...чего не понятно, но ооочень интересно
@jmik4956
@jmik4956 4 жыл бұрын
А разве следование "принципу единой ответственности" не должно на корню присечь подобные ситуации?
@MK_Electron
@MK_Electron 3 жыл бұрын
Не мог вникнуть в код , потому что музон качает xD
@yurademchenko9924
@yurademchenko9924 3 жыл бұрын
Лайк. Но, 4:00 интерфейс IAnimal это моЩЩно ))
@bearpro
@bearpro 4 жыл бұрын
Default Interface Implementation сделали только для поддержки Legacy, по этому нужно явно обращаться через интерфейс при использовании реализации по умолчанию. Да и это приводит к тем же проблемам, что и множественное наследование. Вообще, у меня вопросы возникли уже в самом начале видео, где автор начал добавлять член к абстрактному Animal. Два интерфейса : IWalking и ISwimming - решат все проблемы не хуже чем решения продемонстированные в конце (я говорю "не хуже" не просто так, неудобства возникнут как только мы сложим всех наших Animals в какой-нибудь List, и у нас уже не останется информации ни о каких интерфейсах, так что типы придётся всё равно проверять в рантайме). При использовании типов достаточно придерживаться SOLID (в данном примере нужно было бы обратить внимание сразу на O, L и I). Бизнес-логику можно и даже нужно писать, по максимуму используя все фишки ООП. Просто ООП нужно уметь правильно готовить.
@umangmishra5614
@umangmishra5614 4 жыл бұрын
English viewers who got this recommended can take refuge here🙏
@dmytrolambru2984
@dmytrolambru2984 4 жыл бұрын
Аффигенно! Спасибо за хорошие примеры и аргументацию )
@user-fv6jt7vf6k
@user-fv6jt7vf6k 3 ай бұрын
Если не множественное, тогда может селективное наследование? В описании производного класса перечисляем что наследуем, а что отбрасываем?
@El.Barrent
@El.Barrent 4 жыл бұрын
Видео нужно было назвать "How to slav your inheritance".
@jakksoft
@jakksoft 4 жыл бұрын
Я весь урок качался под трек 😂
@user-mu8ve8in6q
@user-mu8ve8in6q 4 жыл бұрын
Слоны как раз отлично умеют плавать.
@seniordev9275
@seniordev9275 4 жыл бұрын
Берешь абстрактный класс, делаешь у него метод virtual. И получается тот же интерфейс с дефолтной реализацией. Для меня добавление этой "фичи" очень сомнительная идея... которая как раз порождает множественное наследование
@maslyonoklesnoy6699
@maslyonoklesnoy6699 4 жыл бұрын
Животное может выполнять массу действий. Если добавлять на каждое действие по свойству IAction, то класс разбухнет. Как организовать возможные действия для животного?
@klerg321
@klerg321 4 жыл бұрын
да не воспринимать это как догму. Нафигачить действия кушать/спать в абстрактном, редкие действия или через общего наследника, или предложенным способом, или вообще не плодить интерфейсов, если действие уникально
@Oleksandp
@Oleksandp 4 жыл бұрын
все же нужно расматривать конкретного слона, а не абстрактного в вакуме. очень, ОЧЕНЬ много зависит от того что изачем делаешь.
@user-ox4yl6gu3u
@user-ox4yl6gu3u 2 жыл бұрын
Я под такую музыку иногда отхватывал и иногда сам кому-нибудь вкладывал на подмосковных дискотеках в начале нулевых))) А тут ООП.
@mitrus4
@mitrus4 4 жыл бұрын
Ну если при проектировании начинаешь понимать, что интерфейс будет расширяться намного быстрее чем сущности, то visitor можно прикрутить. Для меня, как для плюсовика, все что вы показали то же наследование, ибо интерфейсов как сущностей у нас нет. Вопрос лишь в том, какую иерархию строить с учетом будущих изменений. И достаточно часто очевидно какие части будут расширяться в будущем быстрее, а какие медленнее.
@tigranovakyan4913
@tigranovakyan4913 4 жыл бұрын
Понятие класс -это то что объединяет общие методы и свойства (Бро пингвин и собака имеют разные свойства) не нужно усложнять жизнь называя их зверушками)))) еще и под один класс пихать их)) ах да название канала же 'ExtremeCode' теперь все понятно))
@oleghardy4622
@oleghardy4622 4 жыл бұрын
по сути это пересказ первой главы книги про паттерны фрименов)
@star_lord1911
@star_lord1911 4 жыл бұрын
Давай по чаще видосы, очень годно 👍
@vladyslavandriienko3969
@vladyslavandriienko3969 4 жыл бұрын
Ничего не понял, но крайне интересно
@olezhonnv3215
@olezhonnv3215 4 жыл бұрын
Проблема в том, что практика показывает следующее. Как бы вы не проектировали, по мере роста проекта у вас в любом случае будет такая мешанина кода, что там ООП - не ООП, уже не важно будет. Потому что такова жизнь! Проектирование дает результат в начале и потом некоторое время. А дальше все это станет легаси кодом. В ЛЮБОМ СЛУЧАЕ! Независимо от парадигмы и подхода.
@smaugterrible5785
@smaugterrible5785 3 жыл бұрын
Я правильно понял, что для обхода проблем с наследованием пришлось реализовать typeclasses из Хацкеля?
@danilkha
@danilkha 4 жыл бұрын
Может я чего-то не понимаю, но в java, например, можно создать готовый класс с методами которые уже что-то делают и когда какой-то класс от него наследуется, то этот класс может переопределить готовые методы класса родители без переписок abstract
@dashandr1
@dashandr1 4 жыл бұрын
Вот хороший вопрос. Когда плюсы изучал, тоже так делал
@user-ws5ns3sl1q
@user-ws5ns3sl1q 4 жыл бұрын
Слоны по дефолту не умеют плавать. Если ты напишешь реализацию для плавания по умолчанию в классе, и наследуешь от этого класса слона, то метод swim все равно унаследуется, и получится что слоны умеют плавать.
@qaserus1226
@qaserus1226 4 жыл бұрын
@@user-ws5ns3sl1q в видео говориться что уже после добавляется метод свим. Так вот, в джаве пишешь в класс пингвин метод свим и все. В класс родительский не надо его пихать. Я ещё тот маслёнок... только учусь. Может чего не понимаю еще
@user-ws5ns3sl1q
@user-ws5ns3sl1q 4 жыл бұрын
@@qaserus1226 Тогда тебе придется весь код этого метода продублировать для каждого животного, которое умеет плавать. Написать метод swim для пингвина, собаки, кошки и.тд, причем весь этот код будет одинаковым (или почти одинаковым). А дублирование это плохо
@qaserus1226
@qaserus1226 4 жыл бұрын
@@user-ws5ns3sl1q ну если этот метод нужен многим классам то да)))
@user-be2cy2fb9u
@user-be2cy2fb9u 4 жыл бұрын
просто вместо walk нужно использовать move. и Вот уже и червяк и слон ходют... walk это уже реализация move ))) и в методе move определяем стиль движения - идти, ползти, плыть(если в воде) и это должно может быть инкапсулировано, это же не объект без поведения
@VaeV1ct1s
@VaeV1ct1s 9 ай бұрын
Очень интересное решение. А в шарпах нет миксинов?
@user-tk2jy8xr8b
@user-tk2jy8xr8b 3 жыл бұрын
Слоны замечательно плавают!
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
7:30 а чтобы не делать приведение типа, нельзя вместо var базовый тип укзать?
@user-zi8jn1go8k
@user-zi8jn1go8k 3 жыл бұрын
Если интерфейсам разрешено содержать дефолтную реализацию, тогда чем это отличается от множественного наследования?
THE MOST FREQUENT MISCONCEPTIONS ABOUT OOP
19:37
ExtremeCode
Рет қаралды 540 М.
КУРСЫ ПО ПРОГРАММИРОВАНИЮ
13:26
ExtremeCode
Рет қаралды 333 М.
Whyyyy? 😭 #shorts by Leisi Crazy
00:16
Leisi Crazy
Рет қаралды 19 МЛН
Homemade Professional Spy Trick To Unlock A Phone 🔍
00:55
Crafty Champions
Рет қаралды 34 МЛН
แข่งกันขายหน่อไม้
11:21
ООП вопросы на юнити собеседовании
14:11
Максим Крюков
Рет қаралды 42 М.
НЕНОРМАЛЬНОЕ ООП
10:57
ExtremeCode
Рет қаралды 213 М.
Полиморфизм ломает твой код
9:45
ExtremeCode
Рет қаралды 226 М.
How Immutability Helps in OOP (Yegor Bugayenko, USA)
46:36
Вкатываемся в тестирование кода
8:35
ExtremeCode
Рет қаралды 128 М.
Просто о ООП (Парадигмы ООП)
21:14
webDev
Рет қаралды 41 М.
ТВОЯ ГЛАВНАЯ ОШИБКА В ООП
8:45
ExtremeCode
Рет қаралды 606 М.
КОПИМ НА АЙФОН В ТГК АРСЕНИЙ СЭДГАПП🛒
0:59
ВЫ ЧЕ СДЕЛАЛИ С iOS 18?
22:40
Overtake lab
Рет қаралды 122 М.
#miniphone
0:16
Miniphone
Рет қаралды 3,1 МЛН
Iphone or nokia
0:15
rishton vines😇
Рет қаралды 1,7 МЛН
Mi primera placa con dios
0:12
Eyal mewing
Рет қаралды 719 М.
Секретный смартфон Apple без камеры для работы на АЭС
0:22