Тёмный

ТВОЯ ГЛАВНАЯ ОШИБКА В ООП 

ExtremeCode
Подписаться 282 тыс.
Просмотров 606 тыс.
50% 1

Обсуждаем главную ошибку новичков в ООП на собеседованиях, а именно инкапсуляцию, узнаем чем сокрытие данных отличается от инкапсуляции, а так же поговорим о модификаторах доступа
C (lang) код на GitHub
github.com/extremecodetv/data...
Книга Роберта Мартина "Чистая архитектура"
bit.ly/2lYpJxx
Ссылки
● VK: extremecodetv
● Telegram Chat: t.me/extremecode (или в поиске @extremecode)
● GitHub: github.com/extremecodetv

Наука

Опубликовано:

 

2 сен 2019

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 1 тыс.   
@ExtremeCode
@ExtremeCode 4 года назад
Да, тут должен быть какой то смешной комментарий, совсем забыл. Ставь лукас, а то че как бивень А для бустеров у нас есть эксклюзивный контент: boosty.to/extremecode P.S. 3-е сентября пришлось вырезать, дядя Шуфутинский за 10-и секундную вставку бабок хочет -_______________-
@ExtremeCode
@ExtremeCode 4 года назад
bool understand = false; do { var result = youtubeClient.see("yNUJ3vAeyJQ"); understand = brain.getUnderstandState(result); } while (!understand);
@alexeysamovich301
@alexeysamovich301 4 года назад
@fff аа Смотри видео, пока не вдуплишь.
@mikhailturov7066
@mikhailturov7066 4 года назад
​@fff аа if (youtubeClient.comment.Contains("@ExtremeCode а по-русски?") && youtubeClient.comment.author() == "fff aa")) { this.Translate(); } public void Translate() { bool понимают = ложь; делать { различный результат = ютубКлиент.увидеть("yNUJ3vAeyJQ"); понимают = мозг.получитьСостояниеПонимания(результат); } когда (!понять); }
@sledleo
@sledleo 4 года назад
@@ExtremeCode Канешна болтовня, как и определения - занимательно и не обременительна для автора. Но для простолюдинов было бы нагляднее ввиде схем и картинок пояснять. Ибо простолюдины из болтовни образы не генерят...
@sandorik
@sandorik 4 года назад
@fff аа В конце видео полное определение.Разворачиваешь его на весь экран и сиди медитируй пока не прийдёт прозрение.
@karfagen86
@karfagen86 3 года назад
- Какие паттерны ООП вы знаете? - Костылирование, Инкостыляция и Поликостылизм.
@bltvg
@bltvg 3 года назад
Это не паттерны ООП, а принципы ООП. Паттерны - это синглкостыльтон, абстрактная фабрика костылей и всё такое.
@user-ke2od3yl2w
@user-ke2od3yl2w 3 года назад
@@bltvg ну если уже правильно говорить, тогда это и не принципы. Это парадигмы)
@Bloody_River
@Bloody_River 3 года назад
@@user-ke2od3yl2w костыли.
@user-sl7ie9te5r
@user-sl7ie9te5r 3 года назад
@@user-ke2od3yl2w ПАРАдигмы(типа как параолимпиада)
@istox2787
@istox2787 2 года назад
А как-же акостыляция?
@nik1tosssa
@nik1tosssa 4 года назад
Ничего не понял, но из-за того, что достаточно хорошо кивал головой, теперь учусь в стенфорде
@ark-kun7221
@ark-kun7221 4 года назад
Завтра первая пара в какой аудитории?
@Calvin_M.
@Calvin_M. 4 года назад
@@ark-kun7221 Глупый вопрос) Зависит на кого учишься, но ты явно не знал об этом.
@StanSlider
@StanSlider 4 года назад
Интересно хоть было?
@alexanderbelov6892
@alexanderbelov6892 4 года назад
Кивающие головой - это аутисты?
@user-np7ik7ti7v
@user-np7ik7ti7v 4 года назад
@@alexanderbelov6892 нет, киватисты
@anthonyminchenko3109
@anthonyminchenko3109 4 года назад
Проорал с синтаксиса JS-фреймворка
@user-fx5pz7st7c
@user-fx5pz7st7c 4 года назад
Можно объяснить?
@slava0207
@slava0207 4 года назад
@@user-fx5pz7st7c .cs != JS, Using Linq; так же не совсем, смекаешь)
@johnd1431
@johnd1431 4 года назад
Юлиан Шмиголь я тоже не понял шутки, там было приложение на С#, причем тут JS фреймворки и после какого слова надо было заржать
@tozpeak
@tozpeak 4 года назад
@@johnd1431 шутка про то, что в js постоянно появляются фреймворки, и что вполне возможно, где-то однажды появится фреймворк, который позволит писать на c# не выходя из js.
@Nopefish
@Nopefish 4 года назад
@@tozpeak очень сложная шутка. Можно ещё сложнее?
@dudenarima2528
@dudenarima2528 4 года назад
ОБОЖАЮ когда ты приводишь по 20 аналогий ежесекундно
@anrybalka
@anrybalka 3 года назад
Кароч, инкапсуляция - это объединение данных и методов работы с этими данными в одной упаковке («капсуле»). Основа инкапсуляции (капсула) - КЛАСС.
@kimtyatya
@kimtyatya Год назад
Боже я ахуел когда узнал это, мне тупа мои азиатские глаза открыли
@getteg6468
@getteg6468 4 года назад
можно не смотреть видео полностью, 8:14 мин главная суть.
@Istanislav1
@Istanislav1 3 года назад
Спасибо, братанчик
@denysgranevych8279
@denysgranevych8279 3 года назад
Очень полезно
@bltvg
@bltvg 3 года назад
Действительно, можно было уместить в одну картинку.
@drsmith9536
@drsmith9536 3 года назад
То что на слайде это не понятие инкапсуляции, а имплементация инкапсуляции в языке. Реализация скрывает детали не от пользователя, а от следующего уровня абстракции.
@namalnikmisartenko8785
@namalnikmisartenko8785 3 года назад
@@drsmith9536 Автор даун Все нормально
@grustnyia2386
@grustnyia2386 4 года назад
Недопусти этой ошибки на собеседовании! "Не" с глаголами пиши раздельно! P.S. Шучу. Не смог удержаться. :-D
@ExtremeCode
@ExtremeCode 4 года назад
Грязный байт на комментарий сработал :D
@grustnyia2386
@grustnyia2386 4 года назад
@@ExtremeCode :-)
@LobanovSpace
@LobanovSpace 4 года назад
Вахахаха
@CB_CHIEF
@CB_CHIEF 4 года назад
@@grustnyia2386 многие путают отрицательный предлог «не» и приставку «недо», вследствие чего глагол «недосмотреть» (в значении недостаточно следить за кем-л.) пишут раздельно - не досмотреть. А это уже совсем иной смысл: досмотр могут производить, например, таможенники или полицейские, и «не досмотреть» (раздельно) означает не произвести досмотр.
@SabFo_
@SabFo_ 4 года назад
@@CB_CHIEF ох уж этот русский язык
@user-bb1rm5gi6h
@user-bb1rm5gi6h 4 года назад
ИНКАСТЫЛЯЦИЯ, 6/\*b! :D
@IIAHKO
@IIAHKO 4 года назад
Преследование и поливелосипедизм
@Sevenvad
@Sevenvad 4 года назад
Поликостылизм Костылирование Инкостыляция
@user-go7sr1zf6d
@user-go7sr1zf6d 4 года назад
Инбагуляция
@user-ef4wu1kt9i
@user-ef4wu1kt9i 4 года назад
Велосепидизация и костылирование
@maestro_denery
@maestro_denery 3 года назад
Полимарксизм, инмарксизация...
@wwlb4970
@wwlb4970 3 года назад
Чтобы понять в простых словах что такое инкапсуляция, стоит, возможно, понять, что является её нарушением. Нет, объявление полей объекта вместо приватных публичными - это не нарушение инкапсуляции. Крайне распространённое нарушение И. - это уверенность в том, что какое-либо из состояний системы вам заранее известно. - Если вы создаёте метод, держа в уме, что какая-то пропертя в памяти\базе\на фронте\на бэке будет именно такой; - Если вы умело полагаете что, "в основном", данный метод вызывается лишь когда был вызван иной из другой части программы - Если вы уверены что реализация сервиса\репозитории\дао\базы\любого слоя на ваш выбор всегда будет такой как сейчас - И даже если вы наделяете переменную свойствами, которые ей не гарантированы - "эта переменная не может быть НУЛЛ" - "в этой строке по-любому можно вставить значение форматированием" - "пользователь не идиот и знает регекспы" то вы нарушаете инкапсуляцию в каком-то очень глобальном масштабе. Конечно, сокрытие реализации от пользователя - это инкапсуляция. Но это примерно такая же инкапсуляция, как тот полиморфизм, который показывают студентам на примере собак и кошек. Вроде полиморфизм, но становится ли понятней когда вместо собак и кошек AbstractServiceFactoryFactoryFactory?
@IIEPEDO3
@IIEPEDO3 4 года назад
Суть такова, что тебе не нужно знать как работает автомобиль для того, чтобы пользоваться его интерфейсом (рулевым колесом, рычагом кпп, и педалями), т.к. внутреннее устройство инкапсулировано. Говорю этот пример на собесах и норм :)
@viktorkeleberda3355
@viktorkeleberda3355 4 года назад
Эх отличная подача информации с юмором и очень объемно, спасибо, лайкосик поставил :)
@user-nd3vv5fn5e
@user-nd3vv5fn5e 4 года назад
раньше я не очень-то понимал что такое инкапсуляция. Теперь понял, что вообще ничего не понимаю!
@bltvg
@bltvg 3 года назад
Пришёл некто, считающий себя очень умным, сказал, что ты говно. А теперь у тебя из-за него комплекс самозванца.
@user-xc6ns4tl3z
@user-xc6ns4tl3z 4 года назад
Никогда не занимался на C, но в конце ролика понял, что к чему. Красавчик автор)
@serhiyhrytsiuk4376
@serhiyhrytsiuk4376 4 года назад
Как-то столкнулся с таким же недопониманием Инкапсуляции на всоём первом собеседовании. Я тогда у Моженкова посмотрел видос об ООП и почерпнул этот дзен об Инкапсуляции у него. Решил блеснуть на собеседовании, но как-будто о стену ударился. Выпускайте, пожалуйста, видосики почаще!!!!
@user-lz5yw6dq1o
@user-lz5yw6dq1o 3 года назад
Чувак, как хорошо, что твое видео попало ко мне в рекомендации. Завтра иду на собеседование, теперь надеюсь, что меня спросят про инкапсуляцию. И только про нее:)
@antonmarkin6491
@antonmarkin6491 3 года назад
Как результаты собеседования?
@farpurple
@farpurple Год назад
Как результаты жизни?
@neilwilson4075
@neilwilson4075 Год назад
​@@farpurpleон умер
@farpurple
@farpurple Год назад
@@neilwilson4075 о7
@iceEnceladus
@iceEnceladus 4 года назад
тот случай когда до видео знал тему а после засомневался что знал из-за сложной подачи автором и остановил видео чтобы найти в интернете принципиальную схему котЭ ))
@vc36960
@vc36960 3 года назад
Просто КГАМ
@user-hl7zj8fc7u
@user-hl7zj8fc7u 4 года назад
Блин, это было реально классно) всё оказывается так просто)
@MsRomanFed
@MsRomanFed 3 года назад
Код, написанный на С в начале ролика, как пример НЕинкапсуляции, полностью удовлетворяет "понятному и полному" определению инкапсуляции данному на 8:22
@user-wk2vq8xq3u
@user-wk2vq8xq3u 3 года назад
Самое смешное что ровно такой же пример с Point на языке С был в книге "Чистая архитектура" Мартина... и, внезапно, выступала примером инкапсуляции :)
@askolit1458
@askolit1458 Год назад
На С не было единого объекта, который объеденил данные и методы
@proleternal
@proleternal 9 месяцев назад
​@@askolit1458а create и getdistance - это, по-твоему, что? Псы нacpaли?
@roman6572
@roman6572 4 года назад
начали видео выходить, я очень рад)
@user-wr9vf1wr8l
@user-wr9vf1wr8l 4 года назад
Всегда орал с людей, которые пытаются найти глубокий смысл там, где его нет.
@2Quard
@2Quard 4 года назад
Поиски глубоко смысла там где его нет, это способ уйти от реальной жизни.
@alexkart9239
@alexkart9239 4 года назад
т.е. ты орёшь постоянно?
@extrud96
@extrud96 4 года назад
Ну, тут вопрос не в поиске смысла, а в том чтоб найти корректное определение для понятия. Я вижу смысл в этом потому что в программировании очень важно понимать что и почему ты делаешь, для этого нужно хорошо и корректно понимать принципы которые ты используешь в работе. Однако в видео небыло показаны последствия не правильного понимания инкапсуляции, что жаль
@musoismailov6071
@musoismailov6071 4 года назад
Если ты не копался до смысла, то откуда у тебя утверждение что там нет смысла?)
@brianryan4053
@brianryan4053 3 года назад
По английски это называется overthinking
@sergeyvasin6372
@sergeyvasin6372 4 года назад
Классный фреймворк :)
@konst3d
@konst3d 4 года назад
1:31 - Мое лицо, когда меня (15+ лет в деве), начинают спрашивать на собеседовании, что такое "инкапсуляция"... И делает это, какой-нибудь HR, которому "правильный ответ", написали на бумажке.
@user-pt6gm8tj2e
@user-pt6gm8tj2e 4 года назад
Как ты с таким опытом попадаешь на такие собеседования
@konst3d
@konst3d 4 года назад
@@user-pt6gm8tj2e Всегда ищу где получше.
@andreysolomatov1552
@andreysolomatov1552 4 дня назад
...аты попробуй догадаться, что ему накалякали на этой бумажке - и кто...
@AndreySHAP
@AndreySHAP 4 года назад
Видос офигенный! Однозначно лайк!
@moscowdjangoru
@moscowdjangoru 4 года назад
Спасибо за видео! :)
@qlmanlp
@qlmanlp 4 года назад
Угарнул с фреймворка, спасибо за видос
@IshuckShow
@IshuckShow 4 года назад
Экстримкод, люблю
@dimagorelik3956
@dimagorelik3956 3 года назад
Рекомендации 2021. Это то что я хотел посмотреть)
@alexsey59
@alexsey59 4 года назад
да вы жжети парни, еще одно видео не за год. мое почтение
@vebyza
@vebyza 4 года назад
Оооо, сё, пойду пиздить препода по проге, который говорит, что инуапсуляция = сокрытие(вызовите скорую, пожалуйста, у меня дома рыбка живёт ещё)
@LobanovSpace
@LobanovSpace 4 года назад
Хех
@user-vl4zr6py9s
@user-vl4zr6py9s 4 года назад
Само слово инкапсуляция помогает понять его определение, где в нем про сокрытие? В нем про вложение, термин подобран правильно: объединение данных и методов, работающих с ними, в один объект. С другой стороны, верить видео какого-то парня, который грешит неудачными метафорами и примерами вместо преподавателя? Серьезно? Так может сразу слиться из универа и пойти учиться на ютубе?)
@vebyza
@vebyza 4 года назад
@@user-vl4zr6py9s тут дело ещё в том, что дословно переведч слово получится то же самое сокрытие или упрятываение. И получается интересно, мол сокрытие - не только сокрытие. А ютуб, к сожалению, отсрочку не даёт, потому приходится минимально посещать занатия(чтобы не топтать плац) и учиться самому, по крайней мере в регионах
@user-vl4zr6py9s
@user-vl4zr6py9s 4 года назад
@@vebyza хорошая ремарка кстати про дословный перевод, спасибо, что поправили. Высшее Вам в любом случае будет на пользу. Без него однажды потолок карьеры начнет ограничивать рост. Про инкапсуляцию да, интересно получается.) Это при том, что у самого 10 лет с плюсом стажа разработчика ))
@ne4to777
@ne4to777 4 года назад
@@vebyza , дословный перевод не получается сокрытие или упрятывание, а получается помещение в капсулу или упаковка. Упаковка или капсула может быть прозрачной и ты можешь видеть внутренности. Может быть даже дырявой и ты можешь изменять эти внутренности, а значит не будет никакого сокрытия, как нет приватных свойств в JS. Но все равно это будет инкапсуляция. Поэтому можешь смело увольнять своего препода.
@alexgorodecky1661
@alexgorodecky1661 4 года назад
Хорошо рассказываете, уверенно. Прошу указать ссылки на литературу, ведущие к определениям "инкапсуляции" и "чистого ооп", или это лично ваши определения, полученные после реального кодинга?
@evgeny2495
@evgeny2495 9 месяцев назад
Это чистое балабольство в стиле ХаудиХо, знаешь английский - транслируй англоязычный контент, а понимание сути не надо, уже сойдешь за мегапрогера...
@pieceofsnitcrappy2800
@pieceofsnitcrappy2800 Год назад
Братан, хорош, давай, давай вперед! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого почаще?
@user-ni8oi7lq3h
@user-ni8oi7lq3h 2 года назад
Спасибо за видео, из всех общедоступных источников (в основном видосики на ютубе) данное определение инкапсуляции только в книге еще встретил, "Сам себе программист" вроде .. подписался на канал.
@proximacentauri3206
@proximacentauri3206 3 года назад
Вообще-то, товарищ программист, лайк нужно ставить после просмотра видео (а не в начале), чтобы алгоритм ютуба, "обрабатывающий лайки" засчитал его.
@Qraizer
@Qraizer 4 года назад
Пример на C если что и продемонстрировал, то только не отсутствие языковой поддержки ООП в C. Отладчик студия не дал доступа к полям структуры исключительно по меркантильным соображениям, и никакое ООП тут ни при чём. Зато он прекрасно показал "подкованность" автора в механизмах ООП, где последнее П - это Проектирование, а не программирование. Последующий пример на Шарпе окончательно добил. Эх... а как обнадёживающе начинался видос...
@waaagh1769
@waaagh1769 Год назад
Держи в курсе
@SineSet
@SineSet 4 года назад
Вообще-то это не инкапсуляция и не сокрытие. Это реализация после объявления - особенность C/C++, которая позволяет объявить сигнатуру и использовать функцию/тип ДО её/его реализации или вообще в другом файле, например, когда несколько типов имеют указатели на данные типа друг друга, или чтобы не загромождать код сложными структурами. А невозможность при этом достучаться до содержимого объявленного типа - побочный эффект такой особенности. Если функцию (getDistance), обращающуюся к содержимому объявленного так типа (struct Point) реализовать в другом файле, то она тоже не сможет достучаться до содержимого этого типа. Если структуру (struct Point) целиком объявить в заголовочном файле, то всё будет исправно работать. Сравнение с примером в C# не совсем корректно. Там всё это работает потому, что в качестве аргумента метода класса (чего вообще нет в С) используется объект такого же типа, и так как метод является членом класса, то "знает", что называется, "изнутри" структуру полей объектов своего типа, и поэтому нужное поле объекта в аргументе "видит". Кстати, в C++ это тоже работает. В C все обращения к любым типам - только "снаружи". Тем не менее, автор, пиши/снимай ещё. Годно.
@aljesco8338
@aljesco8338 4 года назад
Потрясающий пример того, как сделать видос на восемь минут ни о чём
@LobanovSpace
@LobanovSpace 4 года назад
Хехе
@maxpayne3491
@maxpayne3491 4 года назад
автор мастер разводить пиздеж. ему бы на тв работать)
@faustfreeman3419
@faustfreeman3419 4 года назад
@@maxpayne3491 ни в коем случае. Только чиновником.
@the__Wizard
@the__Wizard 4 года назад
а можно по подробнее, а то я не понял
@volodymyrmykytenko5324
@volodymyrmykytenko5324 4 года назад
Более того: открьіваем книгу Дядюшки Боба, из описания, там також же пример как на видно в С/С++ а вьіводьі противоположньіе: This is perfect encapsulation-in a non-OO language. C programmers used to do this kind of thing all the time. We would forward declare data structures and functions in header files, and then implement them in implementation files. Our users never had access to the elements in those implementation files.
@andreyshostik7703
@andreyshostik7703 3 года назад
Инкапсуляция - принцип который связывает данные и методы(это реализует конструкция класса) что позволяет скрыть детали реализации и упростить использование интерфейса взаимодействия, используется совместно с модификаторами доступа что бы указать что будет интерфейсом взаимодействия, а что деталью реализации.
@princessmary5556
@princessmary5556 Год назад
Бред. Инкапсуляция вообще не привязана к ООП. А "объединение данных и методов их обработки" - это концепт понятия "класса". К инкапсуляции отнонения не имеет. А ещё, у инкапсуляции нет задачи, что-то там скрывать. Так например, приватная секция классов ничего ни от кого не скрывает.
@johnwick8332
@johnwick8332 4 года назад
ппц ты как Боженька открыл мне глаза я то думал ....спасибо
@pavelvorontsov7020
@pavelvorontsov7020 4 года назад
Спасибо за новый термин - инКАСТЕляцию!
@antik_tm2272
@antik_tm2272 Год назад
Контент топ! Давай по больше вот этого)
@Alex023Y
@Alex023Y 4 года назад
В конце нужно добавить "... и предоставляет пользователю интерфейс для взаимодействия с ним"
@alekseyshibayev5243
@alekseyshibayev5243 4 года назад
Инкапсуляция - это возможность менять состояние объекта только им самим (с) Сергей Немчинский
@0imax
@0imax 4 года назад
О, Серёга набирает популярность))
@alexkhonko4115
@alexkhonko4115 4 года назад
Автор, скажите пожалуйста, с какого источника вы взяли определение
@kornext
@kornext 4 года назад
Воу воу воу, палехче! Слишком много инфы за такой короткий срок! Мы то привыкли переваривать все по нескольку месяцев) P.S. Годно!
@nikita893
@nikita893 3 года назад
Очень приятный голос,с хорошим обьяснением,Только вот я не программист...
@ck33122
@ck33122 4 года назад
дизлайк за утечку памяти в си программе
@CDTranslate
@CDTranslate 4 года назад
Открою секрет: в большинстве игр, например, никто не очищает ресурсы, если человек нажал на выход, чтобы не жертвовать временем пользователя. Такой своеобразный tradeoff, хотя по завершению программы ОС сама "освободит" ресурсы.
@Kirik516
@Kirik516 4 года назад
Почему утечка, если по завершению расчета программа выключается?
@user-xo9kz7he4i
@user-xo9kz7he4i 4 года назад
задача любой операционной системы входин не только выделение памяти по запросу приложения но и полная очистка памяти по окончании работы программы.
@Johny_Silverhands
@Johny_Silverhands 3 года назад
В менеджере памяти шиндовс все резервируется вот это бесит
@SerjioSlap
@SerjioSlap 3 года назад
@@CDTranslate да хрен знает, любая нормальная среда разработки включает в себя ВАЗМОЖНОСТЬ! подмести за собой... Наверное не просто так =)
@antizvyagin
@antizvyagin 4 года назад
Мало что понял, но очень интересно, особенно когда код набирается
@RayUa
@RayUa 3 года назад
Спасибо за видос! )))
@user-kz9hd3qd5y
@user-kz9hd3qd5y 4 года назад
Вижу видос от ExtremeCode - ставлю лукас
@alexandersobolev2769
@alexandersobolev2769 4 года назад
Инкапсуляция (понимаемая как связывание вместе данных и методов для работы с ними) _на самом деле_ связана с механизмами ограничения доступа к этим данным. Это не _сокрытие_ (когда внутреннее устройство данных неизвестным; такой «черный ящик»), а именно _ограничение доступа_ - т. е. невозможность работать с этими данными _в обход_ заданных методов. Такое требование прежде всего предназначено для повышения _надежности_ кода. Разработав и протестировав класс (структура данных + методы для работы с ними) вы _гарантируете пользователям этого класса предсказуемость его работы. Собственно, именно в этом и состоит суть связывания вместе данных и методов. Подход функциональных (не ООП) языков с независимым определением структур и функций ничуть не менее удобен, чем синтаксис языков ООП, где обрабатываемая структура просто переносится из аргумента функции в ее «префикс» (имя объекта с точкой перед именем метода). Связывание вместе данных и методов нужно _как раз_ для _ограничения доступа_ к данным! Возможность работы с данными напрямую (точнее, возможность изменять их), _минуя_ заранее заданный набор методов, можно сравнить с дырой в заборе рядом с «навороченным» пропускным пунктом со развитой системой безопасности (всевозможные сканирования сетчатки, рамки металлоискателя и пр.); все эти меры безопасности бесполезны, когда их можно легко обойти через заботливо оставленную дыру. Ну и уже во _вторую_ очередь - ограничение доступа к данным _только_ через его методы позволяет изменять реализацию, не меняя интерфейс доступа (и, соответственно, не меняя код существующих клиентов). Но это всего лишь дополнительная «удобность», не ___ Строго говоря, ООП-языки, допускающие определение public-данных (а это и C++, и C#, и Java, и т. д.) _нарушают_ инкапсуляцию и, таким образом, являются, строго говоря, _не совсем_ ООП-языками. А вот, например, то, как организована работа с окнами (hWnd) в Windows (всех версий, начиная с самых первых), как это ни парадоксально звучит, является _хорошим_ примером ООП, несмотря на чисто C-шную реализацию и связанные с этим синтаксические неудобства. Там есть и полиморфизм (можно разослать одно и то же сообщение самым разным типам окон - будь то кнопки, списки, комбобоксы или главное окно программы), пройдясь по списку hWnd - и получить специфическую для каждого типа окон реакцию на это сообщение. Есть и аналог наследования - субклассирование, когда вы для нового типа окна переопределяете реакцию на некоторые сообщения, переадресуя обработку остальных в оконную функцию «родительского» типа окон. И наконец, там _совершенно правильно_ организована инкапсуляция - по одному только hWnd вы не сможете получит доступ к внутреннему представлению данных окон, миную определенные для него «методы» - типы сообщений MSG, которые могут быть обработаны данным типом окон. Как видно из этого примера, «связывание данных и методов» при помощи _специального синтаксиса_ языка программирования (вроде определения классов, как «структур с методами») вовсе не обязательно для реализации принципов ООП.
@TheMerklar
@TheMerklar 4 года назад
Видос и не рассчитан на новичков. Автор указал на то, что обычно в определении инкапсуляции ставят акцент на сокрытии данных, а не на объедении методов и данных в один объект. И достаточно доступно это разъяснил
@LithiumDeuteride-6
@LithiumDeuteride-6 10 месяцев назад
Сокрытие требуется чтобы не допустить некорректное обращения к методам и членам объекта. Например, в XRay есть вектор который надо инициализировать перед прочтением. Значит закрываем его protected, а get у него конечно public, и всё, никаких проблем не имеем. А если вектор будет так же public, то можем иметь ошибки которые могут быть достаточно трудно обнаруживаемые, если другой программист который не в курсе проблемы, будет использовать этот член объекта напрямую.
@princessmary5556
@princessmary5556 9 месяцев назад
Вы пишете: *Сокрытие требуется чтобы не допустить некорректное обращения к методам и членам объекта* Чушь.
@princessmary5556
@princessmary5556 9 месяцев назад
Вы пишете: *Например, в XRay есть вектор который надо инициализировать перед прочтением. Значит закрываем его protected* Это не сокрытие. Ограничение доступа к данным ничего ни от кого не скрывает.
@user-ql9eg7qg2n
@user-ql9eg7qg2n 4 года назад
ничего не понял, но очень интересно ...
@vangogih
@vangogih 4 года назад
Пример с расстоянием между точками был взял из книги дяди боба про архитектуру?)
@Solfylte
@Solfylte 3 года назад
Ага, там где она пишет что уже в С была инкапсуляция.
@vangogih
@vangogih 3 года назад
@@Solfylte тогда ты не понимаешь что такое инкапсуляция, потому что в С ее не было.
@Solfylte
@Solfylte 3 года назад
​@@vangogih Ок. Я не написал что она там была или нет, это ваша интерпретация коментария.
@opusdv3503
@opusdv3503 4 года назад
Тупо браво)) определено лайк и репост))
@QwerTy-vq1vb
@QwerTy-vq1vb 4 года назад
"ИнКастыляция" =)
@nikelsad
@nikelsad 4 года назад
ИнкОстыляция
@yalauitarik
@yalauitarik 4 года назад
@@nikelsad о, уже и у инкостыляции появилось 2 трактовки
@m.k.6117
@m.k.6117 3 года назад
Спасибо за топ контент!
@skinbones9021
@skinbones9021 4 года назад
Большое спасибо!
@RomanPRO96RUS
@RomanPRO96RUS 4 года назад
Честно говоря, понятия не имею как я наткнулся на данное видео и зачем зашел, т.к естественно ничего не понял, но было очень интересно! Спасибо!:))
@ilyamz1927
@ilyamz1927 4 года назад
Чем плох конструктор для создания класса?? :((
@FobosWorld
@FobosWorld 3 года назад
Обычно это делают чтобы валидировать входные данные при создании нового инстагса
@mafiozi4418
@mafiozi4418 4 года назад
Ты крут! Жду больше видосов :3
@nikitoskin2012
@nikitoskin2012 4 года назад
Просмотрел полторы минут и сразу подписался
@TheKoropet
@TheKoropet 4 года назад
Инкостыляция, порноморфизм.. что дальше?
@batfist6595
@batfist6595 4 года назад
Найсследование (что?)
@nikelsad
@nikelsad 4 года назад
Тут, где-то в комментах, было -- преследование =)
@alexanderp4532
@alexanderp4532 3 года назад
абстругация
@sirjorgenbjorgen2295
@sirjorgenbjorgen2295 4 года назад
а когда полноценный курс C++ будет ?
@joefast505
@joefast505 4 года назад
Согласен!
@juliusmalkov9620
@juliusmalkov9620 4 года назад
@@joefast505 они ещё по C# всего не сняли!!!
@user-ox5ip7sm2n
@user-ox5ip7sm2n 4 года назад
Почему всех на плюсы тянет? работы в СНГ на с++ нету, а если есть то плотят на там гроши, если ты не senior
@g-manchanel1710
@g-manchanel1710 4 года назад
Марк Андерсон прыгать с сисей на другие языки проще всего
@user-jy4tl6cx8u
@user-jy4tl6cx8u 3 года назад
@@user-ox5ip7sm2n я работаю на плюсах в qt и платят хорошо
@bannikovn8814
@bannikovn8814 4 года назад
Хорошее определение, мне нравится
@LobanovSpace
@LobanovSpace 4 года назад
Спасибо за видео
@alexanderkostyuk755
@alexanderkostyuk755 4 года назад
Инкапсуляция это скрытие чегото, помещение его в капсулу! и все! Дослоно в капсулу(encapsulate=заключать в капсулу )! А связывание данных и медотов в один обьект это для слишком умных!
@YmNIKYm
@YmNIKYm 4 года назад
Ты слишком сложно поясняешь, всего в одну строчку, запиши видос на пол часа хотя бы.
@ne4to777
@ne4to777 4 года назад
Хочешь, я тебе реализую инкапсуляцию без сокрытия данных?
@alexanderkostyuk755
@alexanderkostyuk755 4 года назад
@@ne4to777 Ну так в чем проблема, давай! выкладывай сюда будем смотреть!
@ne4to777
@ne4to777 4 года назад
@@alexanderkostyuk755 , на js class Test { constructor(x) { this.x = x } get() { return this.x } } const a = new Test(1) console.log(a.get()) // 1 console.log(a.x) // 1
@alexanderkostyuk755
@alexanderkostyuk755 4 года назад
​@@ne4to777 Нормально! Такой вопрос, а как ты ограничил доступ одних компонентов программы к другим?
@sobanya_228
@sobanya_228 4 года назад
Slipknot/Bieber трек - топ
@yamaxila
@yamaxila 3 года назад
А где можно скачать этот модный новый JS Framework? Очень уж он, мне понравился.
@igorklimovskiy7638
@igorklimovskiy7638 4 года назад
Инкапсуляция - это принцип сокрытия реализации от пользователя. При этом не важно чего - класс, модуль, приложение. Этот принцип необходим для абстрагирования реализации от интерфейса. Мне кажется это понятнее и главное точно не содержит ошибок типа где-то объект, где должен быть класс.
@alexanderbelov6892
@alexanderbelov6892 4 года назад
Инкапсуляция - это про объединение в реализации кода и данных под единой сущностью класс. А абстрагирование - это про разделение интерфейса и реализации. Это отдельно существующие понятия.
@user-ih8kn7pf6l
@user-ih8kn7pf6l 4 года назад
Я так понял, что Инкапсуляция - это сокрытие.
@max96169
@max96169 4 года назад
Js framework качает
@SteemeX
@SteemeX 4 года назад
Очень понравилась вставка с хардбасом!
@MyFinist
@MyFinist 4 года назад
Подскажите плиз, что за кавер на слипкнот на 3:14?
@lipl2357
@lipl2357 4 года назад
Baby jastin bieber
@maxon17
@maxon17 4 года назад
2:50 iiiiiiiiis BORIS !
@user-mrmirajizhere-927
@user-mrmirajizhere-927 3 года назад
* сидит и задумчиво кивает *
@ErOp-nOMugOp
@ErOp-nOMugOp 3 года назад
Прямо как в школе, нужно знать наизусть...
@illiazheleznyi4588
@illiazheleznyi4588 3 года назад
Люблю такие штуки, особенно когда человека ищут клипать формы, а спрашивают какие типы семафоров есть. Эти теоретические данные хороши, но это же надо меньше чем в 1% кода.
@MrVladkey
@MrVladkey 6 месяцев назад
Клепать
@AlexCSharp
@AlexCSharp 4 года назад
Ммм... Мартин, "Чистая архитектура". Молодцы, хотя бы источники хорошие берёте. )
@vxarlanchuk
@vxarlanchuk 4 года назад
8:13. До этого момента смотреть бессмысленно, просто тратите время.
@MasterSergius
@MasterSergius 4 года назад
Всмысле тратите время? А поржать?
@user-fe1dd4bd8f
@user-fe1dd4bd8f 4 года назад
ExtremeCode - канал про то, что такое инкапсуляция
@VariousPeopleJoke
@VariousPeopleJoke 4 года назад
Я просто хочу сказать, спасибо тебе большое за твои видео!
@sagamoreBel
@sagamoreBel 4 года назад
Не с глаголами, ну. Вы что, совсем технари там?
@MrIbah42
@MrIbah42 4 года назад
долго, мало смысла, демагогия.
@vanyaivanov671
@vanyaivanov671 3 года назад
Те, кто пишет, что суть в конце -- просто не посмотрели видос целиком. Чел на протяжении 8 минут отделял инкапсуляцию от сокрытия, а на последних секундах просто все скидал в кучу и сказал, что это определение инкапсуляции
@ddosip9308
@ddosip9308 4 года назад
Ну наконец ты мне глаза открыл! А то я уж не справился бы
@alex-rr5mt
@alex-rr5mt 4 года назад
Спасибо за музыку! Если бы ещё тиму белоруских включили, то было бы просто отлично
@majestif
@majestif 4 года назад
Спасибо за видос, в целом доступно, но код ужасен, какая-то мешанина из древного С++, Си и утечки памяти в придачу.
@Dmittry
@Dmittry 4 года назад
Хоть я и не шарю в C/C++, но malloc без освобождения меня тоже очень смутил. Так можно?
@notapirate505
@notapirate505 4 года назад
@@Dmittry Можно конечно, вот на видео сделал же. Только не нужно. В данном контексте +-килобайт памяти утек, не страшно, просто одноразовый пример же. Но все равно не нужно.
@notapirate505
@notapirate505 4 года назад
Код компилился в с++ проекте, кстати. Примечательно, что канпелятор не ругнулся на malloc без каста, g++ бы нафиг послал уже.
@Serhii_Likhash
@Serhii_Likhash 4 года назад
Критика это хорошо, а какое у вас решение? Просто нужно чистить за собой мусор, никакой утечки нет посоны
@KaraMaslyatam
@KaraMaslyatam 4 года назад
Зачем чистить память в программе, которая работает микросекунду времени и выделяет одну страницу памяти? Где там древний C++? MS компилятор по дефолту читает "*.c" как Си код и плюсовые штуки не схавает, поэтому там не может быть C++.
@user-xi4kl9bq1u
@user-xi4kl9bq1u 4 года назад
Только через 8, сука, месяцев и несколько раз пересматривая это видео, я понял что такое инкапсуляция. Твою ж дивизию как все просто.
@GazziFX
@GazziFX 4 года назад
@ExtremeCode сможешь объяснить почему NET Framework так странно написан. Есть тип AppDomain в нем статическая функция Unload(AppDomain domain) и в ней вызывается domain.getDomainID() которая вызывает статический метод Thread.GetDomainID(), но раз это статический метод, то почему его бы не вызывать сразу в Unload, хотя по логике тогда бы самоуничтожался домен, но как на поток может влиять вызов метода другого домена?
@alexanderbelov6892
@alexanderbelov6892 4 года назад
Потому что AppDomain::getDomainID() - это интерфейс. А то что AppDomain не хранит этот DomainID, а получает его через Thread::getDomainID() - это реализация, которую можно поменять. AppDomain::Unload такая подробность не интересна. Видимо в AppDomain куча других методов, и менять их в случае смены реализации доступа к DomainID программисту не интересно.
@Wardriving666
@Wardriving666 4 года назад
6:46 инкастыляцыя? Теперь Я слышал всё!
@viktorpoliushko2015
@viktorpoliushko2015 4 года назад
инкостыляция)
@user-vg4wc6we9g
@user-vg4wc6we9g 4 года назад
Есть другое понятие инкапсуляции в сетях связи, поэтому "неправильное" определение является общим для всех областей. А то, что ты назвал - более узкое)
@dontyoudaredude
@dontyoudaredude 4 года назад
Это шедевр!!!
@davidkyharchyk9043
@davidkyharchyk9043 4 года назад
Че за фреймворк? ;)
@momon5994
@momon5994 4 года назад
Фреймворк не очень, C# называется.
@LordZiegfrid
@LordZiegfrid 4 года назад
Чето джун разошелся, 8 минут объяснять инкапсуляцию...
@MosqRap
@MosqRap 4 года назад
инскатыляцию*
@andredru4278
@andredru4278 20 дней назад
Спасибо. Мне стало понятней.
@GazziFX
@GazziFX 4 года назад
Я в общем ничего, не понял, но по сути в C# Instance методы это Static методы, но первый аргумент это и есть экземпляр этого класса. В видео наверное что-то другое объяснялось, но мое утверждение можно проверить по генерирумому коду IL, либо можно переопределить метод, с помощью манипуляций с Compiler Services и IntPtr этих методов
@user-lw6vg2pi2t
@user-lw6vg2pi2t 3 года назад
Для начала: даже маленькие примеры должны быть корректными. Где освобождение памяти в C-варианте примера? И второе: зачем демонстрировать ООП и правильную инкапсуляцию на JS Framework'е, когда ничуть не хуже это можно сделать на C++, заодно и продемонстрировав отличия от C?
Далее
THE MOST FREQUENT MISCONCEPTIONS ABOUT OOP
19:37
Просмотров 537 тыс.
Ё*кий полиморфизм
9:47
Просмотров 281 тыс.
Хоть бы почистил..
00:49
Просмотров 386 тыс.
Ты должен писать плохой код
10:41
Полиморфизм ломает твой код
9:45
Мой странный компьютер 2024
18:33