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

preview_player
Показать описание
- инкапсуляция
- наследование
- полиморфизм
- модификаторы доступа
- сокрытие данных
- и др. термины ООП

Вы разберётесь с тем, что такое объектно-ориентированная парадигма на примерах, характерных для таких языков как 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 Заключение

Релевантные видео курсы:

#engineerspock #инженерспок #cleancode #чистыйкод #unclebob #функции #методы #инкапсуляция #ООП #OOP
Рекомендации по теме
Комментарии
Автор

Вообще и правда туго доходит, но это не проблема автора канала, просто нужно вникнуть, так то все очень годно!

ДавидВартанян-йч
Автор

Блин спасибо тебе за твой контент! Твои видео крутые, понятные и действительно очень полезные!!

lightseeker
Автор

Ничего не понимаю, но очень интересно))) давай знания в массы)

ВячеславБублик-жи
Автор

Скажите пожалуйста правильно ли я понял)
Инкапсуляция обеспечивает три правила:
1. Данные (поля), и методы которые работают с этими данными, находятся в одном классе.
2. Сокрытие данных: данные (поля) должны быть сокрыты от внешнего использования т.е. поля должны быть приватными.
3. Методы, которые работают с данными (полями), защищают от неправильного использования.

qrthack
Автор

Замудренно.
Новичку, как я понял, для кого был создан данный ролик, не понять что это такое. Кучу терминов, не понятная формулировка помогает новичку все дальше и дальше быть от правды!)))
Это некие коррективы, которые возможно натолкнут сделать что то по проще!)
Спасибо автору за труды!)

Makata.
Автор

Так выходит, что все что нам говорят о инкапсуляция это сокрытие, а сама инкапсуляция это независимый класс с защищенной логикой, который можно использовать повсеметсно где есть в этом необходимость. Жду продолжения, чет я с этими понятиями все никак толком не разберусь.

Skyff
Автор

Вот откуда все эти п-р-сы, которые так пишут!?
А главное - зачем? Зачем писать - тратить время и силы на то, что никому не поможет, а только запутает?
У меня даже есть намётки для ответа на эти вопросы!
Есть простой - человеческий язык, а есть научный и у них разные цели и задачи.
Простой язык - очень разносторонняя штука - можно развлекаться болтовнёй, а можно всерьёз "простыми словами" стараться передать знание. А вот у научного языка - главная задача - это наиболее точно и однозначно зафиксировать информацию. Каждое слово - зачастую - отсылка к другому понятию, научному труду или целой дисциплине. Научное определение - это по-сути гипертекст - набор ссылок на куски знания, которые должны служить обоснованием для определения - мол мы тут не с потолка это взяли - а обсновываем на этом, этом и вон-том.
Так вот... авторы Википедии, просто замахиваются на то в чём не способны. Видимо для умного вида и потому что формат обязывает - они берутся писать научным языком, но у них нет ни знаний, ни способностей чтобы сделать это правильно. Поэтому такие определения - и содержат кучу непонятных слов и содержат кучу ошибок, потому что автор не знает значения этих слов в точности и не умеет ими пользоваться. Ему, при этом, кажется что всё хорошо - потому что его личное и неправильное понимания научных слов у него в голове складывается в одному ему понятную логическую структуру.

petrvictorovich
Автор

После всего круговорота неоднозначной информации я пришел к следующему пониманию. Скажите верное ли оно или я что-то упустил?

Итак, цитата с википедии:

В объектно-ориентированных языках программирования и других связанных областях инкапсуляция относится к одному из двух связанных, но разных понятий, а иногда и к их комбинации:

1) Языковой механизм для ограничения прямого доступа к некоторым компонентам объекта .
2) Языковая конструкция, упрощающая объединение данных с методами (или другими функциями), работающими с этими данными.

Некоторые исследователи языков программирования и ученые используют первое значение отдельно или в сочетании со вторым как отличительную черту объектно-ориентированного программирования, в то время как некоторые языки программирования, предоставляющие лексические замыкания, рассматривают инкапсуляцию как особенность языка, ортогонального объектной ориентации.

Второе определение мотивировано тем фактом, что во многих объектно-ориентированных языках и других связанных областях компоненты не скрываются автоматически, и это можно переопределить; таким образом, сокрытие информации определяется как отдельное понятие теми, кто предпочитает второе определение.


Предназначение инкапсуляции, как я понял, заключается в том, чтобы отделить интерфейс и реализацию, от нежелательного вмешательства извне к тем вещам, к которым пользователь интерфейса не должен прикасаться и знать о них. И взаимодействовать только через интерфейс.
Таким образом может показаться, что первое понятие из вики справедливо, но достаточно ли только его? Выходит, если так считать, то объединение данных с методами здесь лишнее. В таком случае, что будет сокрываться, если нет объединённых ни методов ни данных?По всей видимости это бессмысленно. Из этого следует что ТОЛЬКО СОКРЫТИЕ - это НЕ инкапсуляция. Может есть языки, где нельзя писать код, не объединяя методы и свойства, тогда для них играет роль только первое определение, а второе идет из коробки.

Идем дальше, ко второй формулировке. Получается, что есть языки в которых объединение методов и свойств не делает их недоступными извне автоматически,
и им для достижения этого требуются свои механизмы, поэтому и зародилась первая формулировка. В итоге это всё равно оба понятия вместе. Из этого следует, что:
СОКРЫТИЕ - ЭТО ИНСТРУМЕНТ ДЛЯ ДОСТИЖЕНИЯ ИНКАПСУЛЯЦИИ, но только его одного недостаточно для этого (следует из вывода абзаца выше), требуется еще и объединение методов и свойств.


Осталось проверить последний вариант. Возможна ли инкапсуляция только объединением методов и свойств без сокрытия? Даже если в некоторых ЯП сокрытие идёт из коробки и нам стоит заморочиться только с объединением, всё равно используются два понятия вместе, хоть и одно из них из коробки.
Здесь у меня нет ответа, есть только предположение: добиться инкапсуляции одним лишь объединением нельзя. (скажите так ли это)
Подводя итог, определение инкапсуляции верно если считать оба формулировки неразрывными.
Но почему же всё таки кто-то считает, что верно только первое утверждение, а кто-то что верно второе?

Помогите прояснить сей нюансы, кто действительно понимает. Надеюсь кому-то мои размышления были полезны.

UCnBUnAmcvCsFePEtmn
Автор

Вот про вики. А есть же первоисточники, кто создавал язык, кто консультировал, они как это всё рассказывают и разжёвывают?

DarkWzard
Автор

1:43 всё правильно написано в вики. Просто слишком заумным языком. Инкапсуляция - это действительно с одной стороны механизм объединения данных и функций, работающими с этими данными, в один компонент, а с другой стороны, в тоже время, - механизм, обеспечивающий сокрытие данных (структуры компонента), но создающий интерфейс работы с этим компонентом. По началу изучения ООП появляется путаница в понятиях, когда "обеспечение" выдают за "является". Из-за этой ошибки остаётся в памяти, что инкапсуляция является сокрытие данных

talisman
Автор

Я тут комментарии почитал, что-то кому-то не понятно.

Сказано, сокрытие это инструмент, то есть то с помощью чего реализуют инкапсуляцию, а сама инкапсуляция это скорее некоторое представление того как нужно конструировать работу в ООП для достижения гармоничного функционирования, чем конкретное безоговорочное значение (то есть, если вдруг возникнет другой инструмент который поможет реализовать инкапсуляцию, то данное понятие расширится в рамках парадигмы ООП).

Проблема новичков в том что думать не хотят вообще никак и ни в какую, сплошные недовольства и агрессия.

Видео ролик на 6 баллов из 5, ребят, а кому что-то не понятно, то Вам 100% просто лень мозги включать, ну проще чем Илья объясняет я хз..., и картинки уже как маленьким деткам показал, и по пальцам все перечислил..., разжевывать уже просто некуда!

Остается и в правду - сказку на ночь рассказать о то как парень девушке хотел сделать сюрприз (идея сюрприза в неожиданности, значит знать никто не должен (приватность), или знать должны те кто участвуют в подготовке сюрприза (защищенность)), ну вот готовится парень к сюрпризу, а тут друг ей проговорился..., все, идея нарушена как бы сокрыть факт подготовки ни пытались, ООП скорее идея того как упростить разработку, чем конкретная реализация, сможете данную идею иначе реализовать то это тоже будет ООП, если ее ключевые понятия буду в "теме".

P.S. Не знаю согласитесь ли Вы Илья, с тем что я написал, но я это все вижу примерно так, если "грубо говоря". Если нет, что же, в любом случае век живи век учись, но то что 100%, так это ныть и опускать руки - Я не собираюсь - вот это гарантированно! Короче, кто способен, тот Вас оценит...

race-Vulcan
Автор

Я бы не назвал трактовку инкапсуляции на википедии бредом. Там определенно сложный для новичка текст, но по факту суть он передает верно.

eugenesmith
Автор

Чувак, ты гений. Ты так и не дал определения инкапсуляции, зато перечеркнул википедию и сказал, что в ней написано фуфло, хотя там даны ссылки внизу из каких уважаемых источников взято определение. То есть ты знаешь лучше этих людей? Браво.

ДенисК-ря
Автор

Сокрытие это private поля или методы, что тут обсуждать?!!!

Tyntyk
Автор

Ну, определения инкапсуляции так и не дано. Лишь говорится о том, что делает инкапсуляция и что обеспечивает.

talisman
Автор

Что-то все равно не понимаю (((( видно это ваша ООП не для средних умов.

qwerty
Автор

Мда, понятие инкапсуляция возведено в ранг религиозной философии. При чем сколько людей(программистов) столько же мнений. И что же это такое на самом деле, так и не понятно. Имхо, по моему в данном вопросе достаточно знать как ее реализовать. А вникать и рассуждать о том что это, дело.. хм.. каких ни будь других людей думающих о смысле бытия... Ну или на крайняк если кому то очень хочется заморочится и выяснить таки что это.

Jahnt