ООП / OOP #1: Что такое инкапсуляция и сокрытие информации?

  Рет қаралды 7,157

EngineerSpock - IT & программирование

EngineerSpock - IT & программирование

Күн бұрын

Подписка на Boosty: boosty.to/engineerspock
---------------------------------------------------------------------------------------- Донаты на развитие: pay.cloudtips.ru/p/1f080f72 В этой серии роликов мы разбираемся с объектно-ориентированным программированием (ООП / OOP). Это уже не основы программирования, однако для того, чтобы войти в айти (зная ОО язык) - принципы ООП знать важно. Эту серию роликов можно рассматриваться как введение в ООП (ООП для начинающих), где мы разбираем различные темы:
- инкапсуляция
- наследование
- полиморфизм
- модификаторы доступа
- сокрытие данных
- и др. термины ООП
Вы разберётесь с тем, что такое объектно-ориентированная парадигма на примерах, характерных для таких языков как C#, Java, Python. Так что если вы хотите изучать ООП в Python, ООП в C#, ООП в Java - вы нашли правильный канал.
00:00 Вступление к серии роликов по объектно-ориентированному программированию (ООП)
01:08 Инкапсуляция - определение из википедии
01:58 Сокрытие информации - определение из википедии
03:18 Инкапсуляция в разделе о C#. Пример инкапсуляции
05:24 Сокрытие помогает реализовать инкапсуляцию
06:28 Свойства и инкапсуляция
07:35 Что же такое инкапсуляция?
08:30 Пример инкапсуляции с почтовым индексом
09:45 Заключение
Релевантные видео курсы:
Лучшие практики проектирования и реализации API на C# bit.ly/3ABlLNa
Архитектура ПО: Meta и SOLID принципы в ООП bit.ly/3xoXLL5
Архитектура ПО: внедрение зависимостей на C# bit.ly/3ync17k
#engineerspock #инженерспок #cleancode #чистыйкод #unclebob #функции #методы #инкапсуляция #ООП #OOP

Пікірлер: 45
@user-yl8tj3jm9j
@user-yl8tj3jm9j 3 жыл бұрын
Вообще и правда туго доходит, но это не проблема автора канала, просто нужно вникнуть, так то все очень годно!
@user-zk7np4pw2z
@user-zk7np4pw2z 3 жыл бұрын
Ничего не понимаю, но очень интересно))) давай знания в массы)
@lightseeker745
@lightseeker745 Жыл бұрын
Блин спасибо тебе за твой контент! Твои видео крутые, понятные и действительно очень полезные!!
@Skyff85
@Skyff85 3 жыл бұрын
Так выходит, что все что нам говорят о инкапсуляция это сокрытие, а сама инкапсуляция это независимый класс с защищенной логикой, который можно использовать повсеметсно где есть в этом необходимость. Жду продолжения, чет я с этими понятиями все никак толком не разберусь.
@EngineerSpock
@EngineerSpock 3 жыл бұрын
Где я говорил что инкапсуляция это сокрытие? С помощью сокрытия и логики достигается инкапсуляция. Сокрытие это один из механизмов достижения инкапсуляции.
@Skyff85
@Skyff85 3 жыл бұрын
@@EngineerSpock Я про информация из интернета, которая в основном определяет сокрытие как инкопсуляцию. А ты как раз это подчеркиваешь и относишь инкопсуляцию к более сложному независимому классу, с защитой от нужды вмешательсва из вне. Ну я пытаюсь понять и это так выглядит сейчас в моей голове, после просмотра данного ролика. На самом деле могу сказать, что данная подача, может и правильная, но воспринимается она сложно. Ну как мне кажется. Но мне интеретсно смотреть ролики, есть в них полезные вещи.
@EngineerSpock
@EngineerSpock 3 жыл бұрын
@@Skyff85 всё верно сказали
@Makata4.20
@Makata4.20 3 жыл бұрын
Замудренно. Новичку, как я понял, для кого был создан данный ролик, не понять что это такое. Кучу терминов, не понятная формулировка помогает новичку все дальше и дальше быть от правды!))) Это некие коррективы, которые возможно натолкнут сделать что то по проще!) Спасибо автору за труды!)
@EngineerSpock
@EngineerSpock 3 жыл бұрын
Если новичок от слова вот вообще новичок, то понять будет сложно, наверное.
@EngineerSpock
@EngineerSpock 3 жыл бұрын
Хоть какой-то опыт нужен.
@Makata4.20
@Makata4.20 3 жыл бұрын
@@EngineerSpock Ну и новичок особо не понимает на что он наткнулся) Кратко, хотел сказать --> НЕ НАВРЕДИ, юнлингу своему!)))
@UCnBUnAmcvCs8FePEtmn
@UCnBUnAmcvCs8FePEtmn Жыл бұрын
После всего круговорота неоднозначной информации я пришел к следующему пониманию. Скажите верное ли оно или я что-то упустил? Итак, цитата с википедии: ============================================ В объектно-ориентированных языках программирования и других связанных областях инкапсуляция относится к одному из двух связанных, но разных понятий, а иногда и к их комбинации: 1) Языковой механизм для ограничения прямого доступа к некоторым компонентам объекта . 2) Языковая конструкция, упрощающая объединение данных с методами (или другими функциями), работающими с этими данными. Некоторые исследователи языков программирования и ученые используют первое значение отдельно или в сочетании со вторым как отличительную черту объектно-ориентированного программирования , в то время как некоторые языки программирования, предоставляющие лексические замыкания , рассматривают инкапсуляцию как особенность языка, ортогонального объектной ориентации. Второе определение мотивировано тем фактом, что во многих объектно-ориентированных языках и других связанных областях компоненты не скрываются автоматически, и это можно переопределить; таким образом, сокрытие информации определяется как отдельное понятие теми, кто предпочитает второе определение. ============================================= Предназначение инкапсуляции, как я понял, заключается в том, чтобы отделить интерфейс и реализацию, от нежелательного вмешательства извне к тем вещам, к которым пользователь интерфейса не должен прикасаться и знать о них. И взаимодействовать только через интерфейс. Таким образом может показаться, что первое понятие из вики справедливо, но достаточно ли только его? Выходит, если так считать, то объединение данных с методами здесь лишнее. В таком случае, что будет сокрываться, если нет объединённых ни методов ни данных?По всей видимости это бессмысленно. Из этого следует что ТОЛЬКО СОКРЫТИЕ - это НЕ инкапсуляция. Может есть языки, где нельзя писать код, не объединяя методы и свойства, тогда для них играет роль только первое определение, а второе идет из коробки. Идем дальше, ко второй формулировке. Получается, что есть языки в которых объединение методов и свойств не делает их недоступными извне автоматически, и им для достижения этого требуются свои механизмы, поэтому и зародилась первая формулировка. В итоге это всё равно оба понятия вместе. Из этого следует, что: СОКРЫТИЕ - ЭТО ИНСТРУМЕНТ ДЛЯ ДОСТИЖЕНИЯ ИНКАПСУЛЯЦИИ, но только его одного недостаточно для этого (следует из вывода абзаца выше), требуется еще и объединение методов и свойств. ???????????????????????????? Осталось проверить последний вариант. Возможна ли инкапсуляция только объединением методов и свойств без сокрытия? Даже если в некоторых ЯП сокрытие идёт из коробки и нам стоит заморочиться только с объединением, всё равно используются два понятия вместе, хоть и одно из них из коробки. Здесь у меня нет ответа, есть только предположение: добиться инкапсуляции одним лишь объединением нельзя. (скажите так ли это) Подводя итог, определение инкапсуляции верно если считать оба формулировки неразрывными. Но почему же всё таки кто-то считает, что верно только первое утверждение, а кто-то что верно второе? Помогите прояснить сей нюансы, кто действительно понимает. Надеюсь кому-то мои размышления были полезны.
@DarkW1zard
@DarkW1zard 2 жыл бұрын
Вот про вики. А есть же первоисточники, кто создавал язык, кто консультировал, они как это всё рассказывают и разжёвывают?
@qrthack3233
@qrthack3233 4 ай бұрын
Скажите пожалуйста правильно ли я понял) Инкапсуляция обеспечивает три правила: 1. Данные (поля), и методы которые работают с этими данными, находятся в одном классе. 2. Сокрытие данных: данные (поля) должны быть сокрыты от внешнего использования т.е. поля должны быть приватными. 3. Методы, которые работают с данными (полями), защищают от неправильного использования.
@EngineerSpock
@EngineerSpock 4 ай бұрын
Да, по первому пункту могут быть нюансы, но в целом верно.
@qrthack3233
@qrthack3233 4 ай бұрын
@@EngineerSpock Спасибо Вам большое
@petrvictorovich
@petrvictorovich 2 жыл бұрын
Вот откуда все эти п-р-сы, которые так пишут!? А главное - зачем? Зачем писать - тратить время и силы на то, что никому не поможет, а только запутает? У меня даже есть намётки для ответа на эти вопросы! Есть простой - человеческий язык, а есть научный и у них разные цели и задачи. Простой язык - очень разносторонняя штука - можно развлекаться болтовнёй, а можно всерьёз "простыми словами" стараться передать знание. А вот у научного языка - главная задача - это наиболее точно и однозначно зафиксировать информацию. Каждое слово - зачастую - отсылка к другому понятию, научному труду или целой дисциплине. Научное определение - это по-сути гипертекст - набор ссылок на куски знания, которые должны служить обоснованием для определения - мол мы тут не с потолка это взяли - а обсновываем на этом, этом и вон-том. Так вот... авторы Википедии, просто замахиваются на то в чём не способны. Видимо для умного вида и потому что формат обязывает - они берутся писать научным языком, но у них нет ни знаний, ни способностей чтобы сделать это правильно. Поэтому такие определения - и содержат кучу непонятных слов и содержат кучу ошибок, потому что автор не знает значения этих слов в точности и не умеет ими пользоваться. Ему, при этом, кажется что всё хорошо - потому что его личное и неправильное понимания научных слов у него в голове складывается в одному ему понятную логическую структуру.
@eugenesmith9940
@eugenesmith9940 Жыл бұрын
Я бы не назвал трактовку инкапсуляции на википедии бредом. Там определенно сложный для новичка текст, но по факту суть он передает верно.
@user-ew2pd6fq8j
@user-ew2pd6fq8j 3 жыл бұрын
Я тут комментарии почитал, что-то кому-то не понятно. -------------------------------------------------------------------------------- Сказано, сокрытие это инструмент, то есть то с помощью чего реализуют инкапсуляцию, а сама инкапсуляция это скорее некоторое представление того как нужно конструировать работу в ООП для достижения гармоничного функционирования, чем конкретное безоговорочное значение (то есть, если вдруг возникнет другой инструмент который поможет реализовать инкапсуляцию, то данное понятие расширится в рамках парадигмы ООП). -------------------------------------------------------------------------------- Проблема новичков в том что думать не хотят вообще никак и ни в какую, сплошные недовольства и агрессия. -------------------------------------------------------------------------------- Видео ролик на 6 баллов из 5, ребят, а кому что-то не понятно, то Вам 100% просто лень мозги включать, ну проще чем Илья объясняет я хз..., и картинки уже как маленьким деткам показал, и по пальцам все перечислил..., разжевывать уже просто некуда! -------------------------------------------------------------------------------- Остается и в правду - сказку на ночь рассказать о то как парень девушке хотел сделать сюрприз (идея сюрприза в неожиданности, значит знать никто не должен (приватность), или знать должны те кто участвуют в подготовке сюрприза (защищенность)), ну вот готовится парень к сюрпризу, а тут друг ей проговорился..., все, идея нарушена как бы сокрыть факт подготовки ни пытались, ООП скорее идея того как упростить разработку, чем конкретная реализация, сможете данную идею иначе реализовать то это тоже будет ООП, если ее ключевые понятия буду в "теме". P.S. Не знаю согласитесь ли Вы Илья, с тем что я написал, но я это все вижу примерно так, если "грубо говоря". Если нет, что же, в любом случае век живи век учись, но то что 100%, так это ныть и опускать руки - Я не собираюсь - вот это гарантированно! Короче, кто способен, тот Вас оценит...
@user-yl8tj3jm9j
@user-yl8tj3jm9j 3 жыл бұрын
Фигасе, ты обьяснил 😂👍, четко, так что даже я понял 😅
@Ruslan-mf9fj
@Ruslan-mf9fj Жыл бұрын
6 баллов из 5 при переполнении даст 1 )) но я с вами согласен, мне ролик понравился
@talisman1104
@talisman1104 10 ай бұрын
1:43 всё правильно написано в вики. Просто слишком заумным языком. Инкапсуляция - это действительно с одной стороны механизм объединения данных и функций, работающими с этими данными, в один компонент, а с другой стороны, в тоже время, - механизм, обеспечивающий сокрытие данных (структуры компонента), но создающий интерфейс работы с этим компонентом. По началу изучения ООП появляется путаница в понятиях, когда "обеспечение" выдают за "является". Из-за этой ошибки остаётся в памяти, что инкапсуляция является сокрытие данных
@Tyn4tyk
@Tyn4tyk 2 жыл бұрын
Сокрытие это private поля или методы, что тут обсуждать?!!!
@EngineerSpock
@EngineerSpock 2 жыл бұрын
Так мы же инкапсуляцию обсуждаем в основном.
@user-jb7xp6ms3j
@user-jb7xp6ms3j 2 жыл бұрын
Чувак, ты гений. Ты так и не дал определения инкапсуляции, зато перечеркнул википедию и сказал, что в ней написано фуфло, хотя там даны ссылки внизу из каких уважаемых источников взято определение. То есть ты знаешь лучше этих людей? Браво.
@EngineerSpock
@EngineerSpock 2 жыл бұрын
зашёл только что в статью про инкапсуляцию и там вообще ссылок внизу нет. Кроме того, что такое инкапсуляция я объяснил.
@EngineerSpock
@EngineerSpock 2 жыл бұрын
для тех кто в танке, в трёх словах совсем упрощённо: инкапсуляция это защита инвариантов
@user-jb7xp6ms3j
@user-jb7xp6ms3j 2 жыл бұрын
@@EngineerSpock Это ты придумал про защиту инвариантов или кто? Ссылочку можно на оригинал? Я так понимаю, что ты ссылки искал в рувикипедии, в которой представлен перевод англоязычной статьи, которую наверно можно найти здесь en.wikipedia.org/wiki/Encapsulation_(computer_programming) в которой есть ссылки на оригиналы материалов в крутых изданиях. Все очень просто.
@EngineerSpock
@EngineerSpock 2 жыл бұрын
@@user-jb7xp6ms3j да точно, я же на инглише смотрел. Глянул первые две ссылки и судя уже по названиям там о том о чём я как раз здесь и говорю. В вики пишут плохо перефразируя оригинальные смыслы. Копать глубоко можно начинать отсюда: blog.ploeh.dk/2012/11/27/Encapsulationofproperties/
@EngineerSpock
@EngineerSpock 2 жыл бұрын
@@user-jb7xp6ms3j и не забывайте, что "крутые издания" это штука очень обманчивая. Посмотрите ролик про Боба Мартина на моём канале.
@talisman1104
@talisman1104 10 ай бұрын
Ну, определения инкапсуляции так и не дано. Лишь говорится о том, что делает инкапсуляция и что обеспечивает.
@qwerty6810
@qwerty6810 2 жыл бұрын
Что-то все равно не понимаю (((( видно это ваша ООП не для средних умов.
@eugenesmith9940
@eugenesmith9940 Жыл бұрын
На самом деле инкапсуляцию легко объяснить с помощью аналогии из реального мира. Проблема в том, что люди хотят понимать его на прикладном уровне, но без постоянной практики это невозможно. Ровно как и понимание "а когда именно мне надо применять инкапсуляцию". Можно, конечно, сказать - всегда, но не уверен, что это упростит восприятие. Что же до примеров из реального мира. То самый простой - это автомобиль. У него есть огромное количество разных объектов и их методов, большая часть которых от вас, как раз-таки, и скрыта. Скрыта так, что вы не можете без грубого вмешательства и нарушения руководства по эксплуатации влиять на эти процессы. Упростим авто до минимума: у вас есть кнопки "старт", у двигателя есть состояние - вкл и выкл (engineActive = true/false). У колес есть состояние - заблокированы и разблокированы (wheelsLock = true/false) и такое же состояние у руля (steeringWheelLock = true/false). Теперь суть "программы" авто такая, что если engineActive = false, то wheelsLock = true и steeringWheelLock = true. Как только engineActive = true, то по цепочке меняются состояния других объектов: wheelsLock = false и steeringWheelLock = false. Теперь представьте, если бы вы могли влиять на эти состояния "изнутри". Таким образом могла бы возникнуть ситуация, когда engineActive = false (двигатель выкл), но при этом разблокированы колеса, но заблокирован руль (wheelsLock = false и steeringWheelLock = true). Или для пущей ясности добавим сюда еще 2 метода (действия): 1. подача топлива; 2. подача искры. По внутренней логике программы алгоритм такой, что подача топлива - это цикл, запускающийся ДО подачи искры с условием, что цикл крутится до подачи искры, если искры нет, то цикл повторяется максимум 2 раза, и если после этих кругов искры еще нет, то цикл завершается, подачи топлива больше нет - где-то поломка. Инкапсуляция и здесь не позволит вам влиять на эти "внутренние" методы. Потому что если бы вы могли, то вполне вероятно вмешательство бы привело к тому, что вы бы залили свечи, нарушив работу цикла подачи топлива, который бы не закруглялся после определенного, допустимого количества попыток, а работал намного дольше (или "вечно"). Инкапсуляция призвана уберечь в конечном счете от таких багов, не позволяя другим пользователям чьего-то кода сделать с ним (с кодом) что-то такое, что не предусмотрено вообще.
@Jahnt
@Jahnt 2 жыл бұрын
Мда, понятие инкапсуляция возведено в ранг религиозной философии. При чем сколько людей(программистов) столько же мнений. И что же это такое на самом деле, так и не понятно. Имхо, по моему в данном вопросе достаточно знать как ее реализовать. А вникать и рассуждать о том что это, дело.. хм.. каких ни будь других людей думающих о смысле бытия... Ну или на крайняк если кому то очень хочется заморочится и выяснить таки что это.
@EngineerSpock
@EngineerSpock 2 жыл бұрын
В этом вопросе нет никакого плюрализма. Есть единственно верный ответ. И если это программисту непонятно, то с разработкой любого api будут проблемы.
@Jahnt
@Jahnt 2 жыл бұрын
@@EngineerSpock А "единственно верный ответ" на этот вопрос - это Ваш? Ну дак это субъективная точка зрения. И плюрализма тут хоть отбавляй. Так если я не могу доверять другим (по Вашим же словам), то почему должен доверять Вам? Я не хочу ни с кем спорить. Так как не являюсь программистом. Я всего лишь стремлюсь им стать в данный момент, и ищу истину, которую крайне сложно найти в том обилии мнений что есть в интернетах и среди моих знакомых программеров. И тем сложнее для меня понять, что же это за зверь такой - "инкапсуляция". Загадка))
@lightseeker745
@lightseeker745 Жыл бұрын
@@Jahnt можешь думать что это сокрытие, как руку набьешь в программках, основанных на ООП, так можешь пересмотреть видосик. Автор действительно прав, на самом деле сокрытие данных это только следствие инкапсуляции, но на начальном этапе это не так важно
Always be more smart #shorts
00:32
Jin and Hattie
Рет қаралды 40 МЛН
Was ist im Eis versteckt? 🧊 Coole Winter-Gadgets von Amazon
00:37
SMOL German
Рет қаралды 20 МЛН
Ликбез программиста #1: Парадигмы программирования - ООП, ФП...
13:55
EngineerSpock - IT & программирование
Рет қаралды 27 М.
Просто о ООП (Парадигмы ООП)
21:14
webDev
Рет қаралды 41 М.
Python + PyQt5 + PostgreSQL (часть 1)
25:25
Перлины: Владислав и Елена
Рет қаралды 13 М.
THE MOST FREQUENT MISCONCEPTIONS ABOUT OOP
19:37
ExtremeCode
Рет қаралды 543 М.
Docker за 20 минут
21:42
suchkov tech
Рет қаралды 64 М.
Новичкам об Инкапсуляции и ООП.
13:18
Что такое API?
6:05
Merion Academy
Рет қаралды 321 М.
Принципы ООП. 1. Инкапсуляция
8:55
Sergey Nemchinskiy
Рет қаралды 193 М.