Принципы ООП, инкапсуляция, абстракция, наследование, полиморфизм, Unity, C#

  Рет қаралды 15,466

Sergey Kazantsev

Sergey Kazantsev

Күн бұрын

Пікірлер: 134
@hello_nazarko
@hello_nazarko Жыл бұрын
Больше 10 лет опыта с юнити, множество пересмотренных видосов и имхо - у тебя самые исчерпывающие, толковые по повествованию \ примерам. Подписался, буду рекомендовать, жду новый контент!
@bur-mq1mq
@bur-mq1mq Жыл бұрын
Согласен, просмотрел некоторые видео, очень много понял, что не понимал из других! А у канала всего 2к подписчиков!
@scc-6
@scc-6 7 ай бұрын
+, согласен
@fuuuns
@fuuuns 3 ай бұрын
Подписываюсь. И под комментаторами и на канал ))) 10 лет смотрел искал разное... Только это стрельнуло. Схоронил.
@NikitaJe_
@NikitaJe_ 10 ай бұрын
Это самое лучшие и понятное объяснение всех принципов что Я видел за всю жизнь. Ничего лишнего, просто только то что надо так еще и понятным языком
@user-huyuzeraaaaady
@user-huyuzeraaaaady Ай бұрын
хоть где-то узнала как работает стиральная машинка))))))))))
@doxo3469
@doxo3469 Жыл бұрын
По качеству видео прямо ваау, все понятно и супер, люблю паузы между слов, так получается запомнить и обдумать услышанное)
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
Надеюсь, паузы не такие уж большие)
@doxo3469
@doxo3469 Жыл бұрын
нет, это отнюдь не стеб, мне реально так очень легко понимать информацию @@sergeykazantsev1655
@youpubeqwer
@youpubeqwer Жыл бұрын
Супер, самое лучшее объяснение ООП что нашел! Продолжайте снимать уроки, у вас талант учить!
@timelapse3606
@timelapse3606 Жыл бұрын
Ходят слухи, есть запустить стиралку в 4 утра с оборотами 666 в минуту, можно призвать Сергея) спасибо за видео, помог азы вспомнить
@АндрейНиколаевич-г9р
@АндрейНиколаевич-г9р 11 ай бұрын
Класс, спасибо, чётко, с примером и понятно. Десяток видео пересмотрел, и все как из утюга пишут один и тот же код и говорят, вот это полиморфизм, а в чем его суть не понятно, ещё раз благодарю.
@АртакМирзоян-л3б
@АртакМирзоян-л3б 23 күн бұрын
блин прям самый офигенный видос который я когда либо встречал про ООП, спасибо Дорогой Сергей джан!!! четко и внятно все объяснил ,спасибо вам большое
@sergeykazantsev1655
@sergeykazantsev1655 23 күн бұрын
Этот ролик я как раз в Ереване записывал, где прожил целый год. Очень теплые воспоминания об Армении сформировались) Вам спасибо
@АртакМирзоян-л3б
@АртакМирзоян-л3б 22 күн бұрын
@@sergeykazantsev1655 жаль что я не знал про это, а то можно было бы пообщаться с вами в живую и получить советы от мастера)))
@АнастасияМитюшина-ь7о
@АнастасияМитюшина-ь7о Жыл бұрын
Спасибо за видео, продолжайте в том же духе!!!! Хотелось бы в дальнейшем увидеть про ECS
@zjcom-bb7ek
@zjcom-bb7ek 3 ай бұрын
Я В ШОКЕ. Столько роликов было просмотрено, а так разъяснить паблик от прайвета никто не смог!
@younggd
@younggd 4 ай бұрын
вы - настоящий герой. спасибо за ваши труды, безмерно вам благодарен.
@Kancernik
@Kancernik Жыл бұрын
Здравствуйте! Ваш канал это настоящая находка, которую посоветовал мне друг. Данный канал единственный, на котором мне не скучно погрузиться в детали шаблонов проектирования и разобраться в некоторых моментах теории программирования! Очень жду новые видосы, старые уже пересмотрел по 3 раза)
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
Спасибо большое, у меня сейчас мало есть сил и времени на канал но все равно пытаюсь хоть часик хоть пол часика в день ему уделять)
@ntn2866
@ntn2866 10 ай бұрын
Это лучшие уроки которые я встречал на ютубе. Спасибо огромное! Всё просто и понятно. Лайк, подписка. 🔥🔥🔥🔥
@flyman811
@flyman811 10 ай бұрын
Sergey Kazantsev, из вас хороший бы учитель информатики получился. Лукас и подписота)
@Дарья-м1ф9т
@Дарья-м1ф9т 10 ай бұрын
Гениальное оформление материала🍑
@shelikhann
@shelikhann 8 ай бұрын
Не понимаю, почему так мало просмотров, очень недооцененный контент, еще не находил настолько исчерпывающих объяснений на эту тему, наконец-то я понял как это работает
@void4365
@void4365 7 ай бұрын
Единственный видос по ооп, который я действительно слушал
@apofex
@apofex 6 ай бұрын
Только погружаюсь в разработку игр и ваши видео просто находка! Спасибо.
@wholesomecrimson
@wholesomecrimson 4 ай бұрын
очень информативное и понятное видео, а еще вставки невероятно смешные
@ВладиславХрущев-ч2й
@ВладиславХрущев-ч2й Жыл бұрын
Сергей, спасибо! У Вас лучшая подача материала) Буду ждать новые видосы!
@ДмитрийБарсуков-ъ8р
@ДмитрийБарсуков-ъ8р 9 ай бұрын
Спасибо, все очень доступно. Вроде как все знал, но послушал и стал знать еще лучше :)))
@ephemerayne
@ephemerayne Жыл бұрын
Приятно слушать автора и все хорошо объясняет! Спасибо)
@adrassad
@adrassad Жыл бұрын
Видео огонь, очень доходчиво и примеры отличные !🤘
@Greshnoff
@Greshnoff 9 ай бұрын
Спасибо, всё очень хорошо объяснено. У вас талант учителя!
@sunsungie
@sunsungie 5 ай бұрын
это просто обалденно, огромная благодарность за это видео, всё супер понятно
@scc-6
@scc-6 7 ай бұрын
Класс не конвертируется, а одновременно является и тем и другим(про наследование) Классно сказано. До этого я обкастил в голове, а так достаточно спросить, чем является
@Miketo_Sanso
@Miketo_Sanso 6 ай бұрын
Бро, лучший)) Сейчас задумываюсь о том, чтобы работу найти, твои ролики для повторения материала и изучения нового - просто спасение :D. Респект, лайк и подписка. Даешь полезный контент!
@Creeper71
@Creeper71 Жыл бұрын
Желаю развития каналу! Очень хорошие объяснения. Наконец понял всю идею инкапсуляции
@КорвинКори-б6у
@КорвинКори-б6у Жыл бұрын
Мы скучаем по лучшим обучающим видосам 😊
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
Июль и август выдались для меня очень непростыми) И на работе тяжело, и вообще в другую страну переезжаю. Потихоньку пилю материал по новой игре) Но когда я её опубликую - не знаю. Очень непростая игра получается)
@КорвинКори-б6у
@КорвинКори-б6у Жыл бұрын
@@sergeykazantsev1655 Поздравляю с переездом!!! Если не секрет, в какую страну? Сам мечтаю переехать, но что-то не находится работка с релокейтом.
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
Спасибо! В Германию, в город Гамбург. Работку с релокейтом действительно нелегко найти, много фирм которые зовут тебя на фул удалёнку и им всеравно в какой ты стране, а вот с релоком предложений мало и релокают в основном синьоров. Я искал около года
@СержПахомов-л4я
@СержПахомов-л4я 4 ай бұрын
Спасибо большое за ваш труд. Как всегда на высоте. Хотелось бы что нибудь про чистую архитектуру, с простейшем примером реализации ,например ToDo List. А то концепций и идей много но не всегда понятно можно ли её добиться на практике
@sergeykazantsev1655
@sergeykazantsev1655 4 ай бұрын
Спасибо! У меня есть рубрика паттерны на практике, где я делаю небольшие но полноценные игры Подробного разбора именно архитектуры там нет, но можете посмотреть на гитхабе проекты, две игры уже сделано
@Djegur
@Djegur Жыл бұрын
Спасибо ОГРОМНОЕ. Очень понятно и круто объяснили!!! Это лучший канал по Юнити на русскоязычном ютубе. Спасибо.
@Kancernik
@Kancernik Жыл бұрын
Посмотрел, хоть все принципы и знаю =) Классный канал!
@wepko
@wepko Жыл бұрын
Супер, ты золотой мужик
@august4228
@august4228 7 ай бұрын
Спасибо за работу! Многое помогло понять.
@scc-6
@scc-6 7 ай бұрын
Не много не понимаю, чем имено мне нравятся твои видосы. Наверное, у тебя голос классный
@scc-6
@scc-6 7 ай бұрын
Еще практика всегда есть, понятно, нахуя
@sergeykazantsev1655
@sergeykazantsev1655 7 ай бұрын
Спасибо. Когда-нибудь я куплю хороший микрофон и перестану записывать в пустых комнатах - тогда вообще будет АСМР
@nerpa3056
@nerpa3056 10 ай бұрын
Очень подробно и понятно, спасибо!
@Black_Raven-
@Black_Raven- Жыл бұрын
дуже корисні відоси. Отримую максимальний апгрейді скіллсів від цього. Продовжуй - це в кайф
@КорвинКори-б6у
@КорвинКори-б6у Жыл бұрын
Лучший, спасибо за годноту
@askardw636
@askardw636 Жыл бұрын
Очень круто, продолжайте!
@EliseyUnity
@EliseyUnity Жыл бұрын
Спасибо большое, сразу видно настоящий Сеньер. Сергей, подскажите пожалуйста какие курсы вы осваивали для c# и Unity, где вы так хорошо выучились. И можете посоветовать достоверные источники пожалуйста, желательно русскоязычные!?
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
На днях сделаю подборку и выложу ее как пост от сообщества, наверное)
@Djegur
@Djegur Жыл бұрын
@@sergeykazantsev1655 ждем
@kkolyann2
@kkolyann2 Жыл бұрын
Отличное видео, для начинающих самое то)
@lopiktest5193
@lopiktest5193 Жыл бұрын
Благодарю за видео, синьер
@vladimirkraft4315
@vladimirkraft4315 Жыл бұрын
Спасибо большое за урок!
@botcser
@botcser Жыл бұрын
Кстати говоря, говорят, что лучше создавать контроллер для управлением состояний игрока, а не пихать логику в самого игрока, аля MVC, но для наглядности этот пример то что надо👍
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
всё зависит от того насколько сложная игра. Если много состояний или механик - в одном игроке может вообще быть несколько контроллеров, какой-нибудь отдельный для анимаций, отдельный для состояния(жив/мёртв, какие нибудь эффекты) и куча ещё всего
@Desotterro
@Desotterro Жыл бұрын
Спасибо тебе, мил человек!
@timurcraft2018
@timurcraft2018 Жыл бұрын
Спасибо, кажется, я начал что-то понимать про ООП 😅
@USSR-Lenin-Stalin-Forever
@USSR-Lenin-Stalin-Forever 3 ай бұрын
22:15 Не понял зачем делать getPrice абстрактным (дублирование кода все равно осталось), там же для юнита можно просто поля создать стоимость и стоимость по модулю и гетпрайс просто выбирает нужное поле. Да и магические числа это плохо само по себе
@sergeykazantsev1655
@sergeykazantsev1655 3 ай бұрын
GetPrice имеет смысл сделать абстрактным если поведение будет сложнее, чем просто возвращение конкретных чисел. Например если у каждого юнита была бы своя хитрая формула по которой считался финальный результат. С вашим аргументом я согласен, в видео я сделал простой пример чтобы не перегружать.
@АнтонЕлумеев
@АнтонЕлумеев Жыл бұрын
Спасибо за видео!
@pashafilenko1567
@pashafilenko1567 Жыл бұрын
Отличное видео!
@botcser
@botcser Жыл бұрын
Пизец, не знал, что инженеры стиралок владеют навыком ООП!
@АбдуллахАхфасаев
@АбдуллахАхфасаев Жыл бұрын
Скажите пожалуйста, а upcast используется исключительно в массивах? если где хоть как то объясняют про суть upcasting'а говорят про масивы, не уж то нет других примеров
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
Тут скорее апкаст используется не в массивах а в коллекциях(массивы, списки, словари, HashMap и тд) Ещё может пригодиться в программировании на уровне интерфейса и внедрении зависимостей. Там могут быть случаи что мы работаем не с коллекциями а именно с индивидуальным сервисом и где то его надо проапкастить
@obusis
@obusis Жыл бұрын
🤌 идеально
@Дневниксамоучки-ъ1и
@Дневниксамоучки-ъ1и 10 ай бұрын
Посмотрев видео и примеры из геймдева самому аж захотелось перейти в геймдев из бэкенда 🤣🤣
@sergeykazantsev1655
@sergeykazantsev1655 10 ай бұрын
А мне в последнее время наоборот, хочется освоить что-то еще, например бэкенд
@XjsjvsJfkekxg
@XjsjvsJfkekxg Жыл бұрын
Можешь привести примеры паттернов, которые чаще используются в проектах среднего и большого масштаба
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
MVVM, Декоратор, Фабрики, всякие DI-контейнеры, например
@PinkPanteRus
@PinkPanteRus Жыл бұрын
Спасибо!
@vladoosick806
@vladoosick806 Ай бұрын
Здравствуйте, скажите, пожалуйста, почему в примере для проверки, является ли юнит кратным 3, не используется вот такая формула: return (_id % 3 == 0)? То есть если сейчас юнит является 3 по счёту то номер перекрасится в жёлтый? а так по формуле как у вас 2 юнит должен перекраситься в желтый цвет. Объясните, пожалуйста, почему именно такая формула используется.
@sergeykazantsev1655
@sergeykazantsev1655 Ай бұрын
Здравствуйте, индекс начинается с нуля, поэтому к id мы прибавляем единицу и только потом делим на 3
@vladoosick806
@vladoosick806 Ай бұрын
@sergeykazantsev1655 а, теперь понял. Спасибо большое!
@naumov-channel
@naumov-channel Жыл бұрын
А будут еще видое?
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
Будут, но нескоро и нечасто, в последнем сообщества объяснял почему)
@sashko-w8f
@sashko-w8f Жыл бұрын
Спасибо, Вроде все понятно, но вот абстракция как-то уж очень похожа на наследование с полиморфизм. Не понятно зачем его надо было выделять отдельно.
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
Они взаимосвязаны и вместе используются для решения одной и той же задачи. Отсюда и похожесть. Можно сказать что это три части одного целого Но всё же их хорошо бы различать)
@Digildon
@Digildon Жыл бұрын
пасиба, польза есть
@ИванРодионов-е4е
@ИванРодионов-е4е 7 ай бұрын
По сути же мы все равно можем менять переменную health из другого класса через метод AddHealth, задать например значение в миллион или я что-то не понял?
@sergeykazantsev1655
@sergeykazantsev1655 7 ай бұрын
менять переменную через метод лучше, чем менять переменную напрямую. в метод легко добавить валидацию(ту же проверку на миллион) и метод проще дебажить и логгировать, нежели изменение поля напрямую
@ИванРодионов-е4е
@ИванРодионов-е4е 7 ай бұрын
@@sergeykazantsev1655 спасибо за ответ!
@maxbystryk7266
@maxbystryk7266 2 ай бұрын
Не признаю выделение абстракции в самостоятельный принцип. По сути она является частью каждого из трех принципов, а определение абстракции и полиморфизма вообще практически идентично.
@14dayspon
@14dayspon 6 ай бұрын
Сказка на ночь
@ggplay7778
@ggplay7778 Жыл бұрын
Спасибо, помогло
@KeysREC
@KeysREC Жыл бұрын
Как это всё работает то понятно, а вот как это всё писать не понятно :D
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
у меня на канале есть плейлист "Паттерны на практике". В рамках неё я запилил игрульку, вертикальный скроллер, вылил в открытую проект на гитхаб. Связку - полиморфизм + наследование + абстракция можно посмотреть там на логике Interactables - как я описал астероиды, аптечки, монетки, щиты и тд)
@sergeykazantsev1655
@sergeykazantsev1655 Жыл бұрын
а так, просто надо пытаться потихоньку писать, косячить, понимать где накосячил, переписывать и так по кругу) с каждым следующим кругом будет чуть яснее)
@KeysREC
@KeysREC Жыл бұрын
@@sergeykazantsev1655 о спасибо, надо будет глянуть
@hackzem07
@hackzem07 8 ай бұрын
Привет, в конце видео ты показал код, где для каждого типа юнита ты создал свою переменную, а если у нас 10 типов, ошибочка в конце.😅
@sergeykazantsev1655
@sergeykazantsev1655 8 ай бұрын
Можно, пожалуйста по конкретней, в чём ты считаешь тут ошибочку? Желательно с таймингом, а то я пока не понимаю о какой переменной на каждого юнита идёт речь
@DarkIllusoire
@DarkIllusoire 5 ай бұрын
Инкапсуляция - это состояние и методы в одном объекте, в этом вся суть, все что идет дальше чьи-то девиации, от человека, который не в курсе, что есть языки ООП, где нет области видимости и что-то скрыть, даже на уровне редактора кода не получится. Не ясно, откуда пошла традиция приплетать сокрытие к инкапсуляции, но даже наличие области видимости, никак не мешает создавать объекты с публичными полями и методами и о, боги, оно все равно работает - скрываем мы что-то или нет, другими словами, скрываем мы что-то или нет - мы используем инкапсуляцию, а значит место в определении про сокрытие - избыточный мусор xD
@sergeykazantsev1655
@sergeykazantsev1655 5 ай бұрын
Ну по мне тейк про сокрытие данных не противоречит, а дополняет общую идею инкапсуляции, потому многие их и объединяют. Методы и данные мы помещаем в один объект. Зачем? Мое мнение - затем, чтобы код превращался в маленькие черные ящички, в которых считается логика и чтобы код было удобно сегрегировать по модулям. С функциональными языками такое сделать можно но не так удобно. Модификаторы доступа делаются ровно для того-же, изоляция кода по черным ящикам и чтобы снаружи этот черный ящик никто особо не шатал. Уменьшает количество контроля снаружи. Если выпендриться - можно и не использовать инкапсуляцию - просто делать классы с одними методами без хранения состояния. Но тут по мне как в анекдоте про двух ковбоев в пустыне)
@sergeykazantsev1655
@sergeykazantsev1655 5 ай бұрын
Цитата от Рихтера(CLR via C#) Инкапсуляция данных означает, что поля типа ни в коем случае не следует открывать для общего доступа, так как в этом случае слишком просто написать код, способный испортить сведения о состоянии объекта путем ненадлежащего применения полей. Цитата от Шилдта(Java руководство чего-то там) Инкапсуляция - это механизм, который связывает код вместе с обрабатываемыми данными и сохраняет их в безопасности как от внешнего влияния так и от ошибочного пользования Не могу я вышеназванных дядь назвать какими-то мутными личностями которые ввели дурацкую традицию и ввели всех в заблуждение. Ну разве что если с вашей стороны есть более авторитетные личности которые доказывают что эти авторы заблуждаются и неправы)
@DarkIllusoire
@DarkIllusoire 5 ай бұрын
@@sergeykazantsev1655 не стоит рожать культ авторитета на основе каких-то заслуг, мнимых или нет. Вы прочитайте что я написал и подумайте своей головой, а не кивайте на кого-то. Я не говорю, что сокрытие это плохо, просто в контексте инкапсуляции - это пятое колесо, как я и писал выше: инкапсуляция будет работать не зависимо от того, закрываетесь вы областью видимости или нет. Против фактов не попрешь: без сокрытия инкапсуляция в C# происходит, ООП языки без ограничения области видимости существуют и здравствуют
@sergeykazantsev1655
@sergeykazantsev1655 5 ай бұрын
Как по мне к людям которые больше 20ти лет пишут код, и по своему опыту написали книги и постоянно продолжают их издавать в новых редакциях, к книгам которых с большим уважением и респектом относятся лиды и архитекторы с зп 300к в наносекунду - к этим людям по крайней мере стоит прислушаться. Авось за такое время они что-то поняли. И это я уже не говорю про свой личный опыт, который уже за 7 лет перевалил. Ну а так мы на второй круг заходим - я считаю что сокрытие это не пятое колесо - а полное продолжение идеи изоляции кода от случайного воздействия со стороны. Насчёт того что инкапсуляция происходит и без сокрытия данных - я не понимаю суть этого утверждения. Это как утверждать что "Раз на велосипеде можно ездить без седушки(и я уверен такие бывают) давайте доказывать всем что велосипед это транспортное средство с рулем двумя колёсами но без седла - ибо седушка не обязательна"
@DarkIllusoire
@DarkIllusoire 5 ай бұрын
@@sergeykazantsev1655 ещё раз, инкапсуляция - это буквально упаковка переменных и функций в объект, все. Сокрытие в этом всем никак не помогает и не мешает, то есть в определении оно лишнее. И ещё раз, медленно, на пальцах инкапсуляция случается без использования сокрытия и есть ООП языки, в которых НЕТ области видимости в принципе, то есть совсем нет, вот вообще)) И вы можете хоть Иисуса Христа поставить в качестве авторитета, привести миллион доводов, что сокрытие очень важная штука(с чем я и не спорю), но факты, упрямая штука - инкапсуляция вполне себе существует без сокрытия, хоть обшилдься и обрехтерись в десна
@nono-lw1nl
@nono-lw1nl 12 күн бұрын
Почему это единственное видео которое нормально объясняет ООП?
@hactle_d
@hactle_d 2 ай бұрын
Как же меня убивают эти всплывающие картинки, особенно при большом определении
@ГеннадийШушпанов-д1ч
@ГеннадийШушпанов-д1ч 3 ай бұрын
Я бы все же не сопоставлял наследование с копированием, пусть даже и умным. Ведь ниже Вы нашли другое сопоставление, отметив, что производный класс является и классом-предком. А раз он является, то и имеет все, что предку положено, без всякого копирования.
@sergeykazantsev1655
@sergeykazantsev1655 3 ай бұрын
Но производный класс же не просто является классом предком, но и позволяет расширять его. Сколько читал разных книг на эту тему, у меня сложилось ощущение, что везде основной фокус обращен на то, что наследование позволяет избегать копирования одного и того же кода и делает код более гибким.
@ГеннадийШушпанов-д1ч
@ГеннадийШушпанов-д1ч 3 ай бұрын
@@sergeykazantsev1655 возможность избежать копирования при наследовании, скорее побочный эффект. Процедурный подход тоже в плюсы записывал эту возможность. Наследование определяет отношение между абстрактным и детальным. При наследовании потомок является предком. А вот если потомок расширяет предка, то это другое отношение -- расширение. При нем потомок не является предком. Например, прямоугольник является фигурой -- это наследование, а трехмерная точка расширяет двумерную, но не является ей. То, что оба отношения реализованы одинаково лишь случайность. А книги пишут люди со своих точек зрения. С ними можно и поспорить. Не так ли? Мы ведь тоже спорим, несмотря на то, что мнение другого -- написанный текст, маленькая книга.
@sergeykazantsev1655
@sergeykazantsev1655 3 ай бұрын
Я ваш аргумент про точки зрения понимаю, Но я считаю что если человек на каком-то деле съел собаку, а всякие Кнуты, Рихтеры, Фаулеры и прочие авторы которые переиздают одну и ту же книгу в течение 20 лет, редактируют, улучшают ее, дискутируют на форумах и тд - это не просто вкусовое мнение - это занесенный на бумагу многолетний опыт, как минимум выслушать стоит. А так если спорить - надо тогда на факты выводить) Почему избегание копирования побочный эффект? Почему именно абстрагирование и возможность отделение абстракции от деталей важнее? А если главное в наследовании это отношение между абстрактным и детальным - то зачем тогда принцип Абстракция - разве они не одно и то же тогда объясняют? Все равно конечно на вкусовщину и личный опыт сойдемся - но мало ли
@ГеннадийШушпанов-д1ч
@ГеннадийШушпанов-д1ч 3 ай бұрын
@@sergeykazantsev1655 книги конечно читать надо :). Да, это материализованный опыт. Но всего лишь опыт. И если выводы противоречат вашему опыту, то почему бы не поспорить? Да, в наследовании отношение абстрактный-детальный важнее копирования. Потому что это фундамент ООП, причина для наследования, база для полиморфизма. А то, что на этом можно строки кода экономить -- это побочный эффект. Однако зримый эффект, вот на нём и фокусируются. Вы себе вопрос задайте, как часто причиной наследования была необходимость избежать копирования? Или все же чаще Вы иерархию абстракций строили. Судя по википедии принцип абстракции вообще к наследованию не относится. Он призывает избегать дублирования кода "путем использования абстракций, предоставляемых языком программирования или библиотеками программного обеспечения". Так что абстракции в принципе абстракции, это несколько иное понятие, нежели абстракции в наследовании ООП. Примечание. Я в этом топике только Ваши комментарии вижу почему-то.
@sergeykazantsev1655
@sergeykazantsev1655 3 ай бұрын
Я ваши ответы не удаляю, если что) Для меня в наследовании важно расширение: написать абстрактное ядро, и в потомках уже добавлять уникальное мясцо. Я частенько огребал последствий от дублированного в нескольких местах кода, и наоборот, получал много эстетического удовольствия, когда какую нибудь логику окошек загнал в базовый класс, написал ее в одном месте и забыл. И когда нужно поменять поведение, мне достаточно менять его в одном месте. Создание ядра с логикой, и наращивание другой логики для потомков - вот что я вижу главной частью наследования. И такое наращивание возможно благодаря копированию. Как-то так
@Алексей-ц1г9е
@Алексей-ц1г9е 8 ай бұрын
Пример со стиральной машинкой отличный способ показать процедурное программирование: 1 загрузить_тряпки(); 2 выбрать_режим(стирать_тряпки); 3 засыпать_порошок(); 4 начать_стирку(); А причем сдесь ООП ? И вообще, кто вам мешает скрывать переменные и методы в процедурном программировании ? Что вы до них так докапываетесь. Половина ютуб "учителей" сами не особо понимают что такое ООП, и морочат голову новичкам.
@sergeykazantsev1655
@sergeykazantsev1655 8 ай бұрын
Ох уж эти "эксперты в комментах" - которые притягивают тему которая вообще в ролике не затрагивается и в итоге эти эксперты спорят сами с собой Ну давайте по фактам... Причем тут процедурное программирование и ваш пример когда речь идёт об ООП? В моём примере - стиральная машинка - объект, есть внутренние данные и методы, которые непосредственно с ней взаимодействуют, есть сокрытие некоторых данных от внешнего воздействия. В этом заключается инкапсуляция. Если не согласны, дайте конкретику и уточните. В процедурном программировании нет модификаторов public private и protected, в процедурном программировании нет понятия объект, зачем вообще в видео про ООП это накидывать?
@Алексей-ц1г9е
@Алексей-ц1г9е 8 ай бұрын
@@sergeykazantsev1655 В моем примере у стиральной машины тоже есть внутренние данные и методы, которые непосредственно с ней взаимодействуют, есть сокрытие некоторых данных от внешнего воздействия. Только это все набор функций в процедурном программировании. А если я эти функции и преременные залеплю одной структурой, будет это объектом ? Следует пояснить, чем нобор функций отличается от в объекта, ну или признать что пример с машинкой неудачный. Если из языка выкинуть указатели на память, то неважно ООП это или процедурный язык, намутить public private и protected не составит труда. Я пытаюсь понять что такое ООП, но вижу только процедурщиков, которые сами не понимают что они процедурщики. Ну или ООП нафиг никому не нужно, просто современный тренд для резюме.
@sergeykazantsev1655
@sergeykazantsev1655 8 ай бұрын
Мое мнение, что главное различие между ООП и процедурным программированием заключается не столько в инкапсуляции, хотя и в ней тоже(ибо есть protected) но в самой идее абстракции, наследования и полиморфизма. Насколько я знаю, умного копирования структур с их возможностями расширения в процедурных языках нет. В конце видео я как раз привожу задачу на подсчёт суммы разных юнитов, и как раз таки показываю разницу как бы это решение приблизительно выглядело в процедурном коде и как это благодаря ООП можно завернуть и избежать дублирования логики Ну и также принцип DIP как раз говорит что благодаря такому подходу у нас инвертируется зависимость и подход разработки идёт не от частного к общему, а от общего к частному
@Алексей-ц1г9е
@Алексей-ц1г9е 8 ай бұрын
@@sergeykazantsev1655 Как я понял (в разных умных книжках написано по-разному) отличие ООП от процедур не в коде, а в подходе к решению. Объект должын быть самостоятельным, его не надо водить за ручку и говорить что ему делать, в противном случае и получаются процедуры завернутые в псевдо-классы. я как процедурщик запилил бы задачу с юнитами так (примерно): #define WAR 0 #define MAG 1 #define ARC 2 // WAR MAG ARC int unit_price_us[] = { 10, 20, 30 } int unit_price_ex[] = { 15, 40, 10 } int get_price(id, type) { if (type > 2) return 0; if (id % 3) return unit_price_us[type]; else return unit_price_ex[type]; } int get_sum() { int result =0; for (int id = 0; id < COUNT; id++) result += get_price(id, units[id]); return result; } Благодаря процедурам можно завернуть и избежать дублирования логики, избежать накопипастинье классов, сократить код и поднять производительность :)
@sergeykazantsev1655
@sergeykazantsev1655 8 ай бұрын
Согласен, на процедурном тоже это не невыполнимая задача, вот только я не уверен что если задачка будет посложнее подсчёта суммы - могут начаться более наглядные сложности Например если ГД-шники захотят устроить АБ-тесты и потестить разные механики нанесения урона. Например: 1. Чистый и постоянный урон(всегда бьёт 3) 2. Ранжированный урон(2-5) 3. Чистый и постоянный но с вероятностью крита. В ООП ты создаёшь 3 класса, наследников одного базового с абстрактным методом CalculateDamage и можешь легко это всё переключать. В процедурном тоже можно так сделать, но я не уверен что это будет достаточно удобно.
My scorpion was taken away from me 😢
00:55
TyphoonFast 5
Рет қаралды 2,7 МЛН
小丑教训坏蛋 #小丑 #天使 #shorts
00:49
好人小丑
Рет қаралды 54 МЛН
Ё*кий полиморфизм
9:47
ExtremeCode
Рет қаралды 291 М.
This is How PRO's Breakdown Programming Problems Quickly
5:42
The Coding Lion
Рет қаралды 412
ТВОЯ ГЛАВНАЯ ОШИБКА В ООП
8:45
ExtremeCode
Рет қаралды 617 М.
Просто о ООП (Парадигмы ООП)
21:14
webDev
Рет қаралды 44 М.