1 Востаннє редагувалося navchalkin (05.07.2017 15:06:04)

Тема: Інкапсуляція і Скривання даних - не одне і те ж?

Всім привіт. Будучи на курсах по програмуванню пів року тому, почув таке цікаве твердження, що інкапсуляція - це не скривання даних, на то є data hiding, але поняття інкапсуляції і хайдінгу десь так на 80-90% перетинаються. Перелопатив гугл, нічого схожого не знайшов, що б підтверджувало чи спростовувало це твердження. Тепер мені ця думка жити не дає)) Може серед форумних гуру є хтось, хто пояснить?

2

Re: Інкапсуляція і Скривання даних - не одне і те ж?

Хм, я думав інкапсуляція - це така штука, що дозволяє тобі запхати в метод якісь дані, код, який їх обробить і написати, що той метод робить.

А далі вже другий програмер, дивиться: цей метод приводить машину в рух. Мені треба, щоб машина проїхали 2 метри - викликаєм. Але він вже не замислюється, яке там підключення машини до коліс і як вона буде гальмувати. Просто викликає, і тішиться результатом.

Так?

3

Re: Інкапсуляція і Скривання даних - не одне і те ж?

Q-bart написав:

Хм, я думав інкапсуляція - це така штука, що дозволяє тобі запхати в метод якісь дані, код, який їх обробить і написати, що той метод робить.

А далі вже другий програмер, дивиться: цей метод приводить машину в рух. Мені треба, щоб машина проїхали 2 метри - викликаєм. Але він вже не замислюється, яке там підключення машини до коліс і як вона буде гальмувати. Просто викликає, і тішиться результатом.

Так?

Наскільки я розумію, керуючись тим твердженням що я писав, приведений вами приклад - це якраз data hiding, а ось скривання даних в методі і самого метода в класі - це вже інкапсуляція. Та мені дуже сильно здається, що я можу помилятись, тому і прошу щоб знавці провели чітку паралель між цими поняттями!

Подякували: Q-bart1

4

Re: Інкапсуляція і Скривання даних - не одне і те ж?

І взагалі, мене тепер мучить ще одне питання - що таке дані в класі і яка їхня відмінність чи схожість з атрибутами і методами класу... :|  *WALL*  *FACEPALM*

Подякували: Q-bart1

5

Re: Інкапсуляція і Скривання даних - не одне і те ж?

Саме слово означає - помістити в капсулу. Це не обов'язково тільки приховати. Ви поміщаєте в капсулу сукупніть речей (сутностей), які згруповані за якоюсь ознакою. Наприклад, ті ж "капсули часу", куди запихають якісь шкільні речі і викопують через 20 років (принаймні, в американських фільмах таке неоднократно показували).
Отож, тут розуміється також те, що ви поміщаєте в капсулу дані та методи роботи з ними. І саме через ці методи ви можете доступатися до даних, а не ніяк інакше.

Подякували: 221VOLT, navchalkin, Q-bart, LoganRoss, leofun015

6

Re: Інкапсуляція і Скривання даних - не одне і те ж?

http://www.python-course.eu/images/data_abstraction.png
Опираючись на Python-course (гортати в низ до такої ж картинки як вверху) можна зробити висновок, що різниця є, і досить таки суттєва.
Коротко: інкапсуляція - не обов'язково приховування даних. Ці дані можуть бути інкапсульовані в метод, ми їх можемо бачити, але звернення до них має відбуватись саме через метод, а не напряму. А приховування даних - це приховування даних , *CRAZY*  це сховування інформації так, що ззовні її змінити неможливо. А в сукупності це все дає нам інформаційну абстракцію.

Подякували: Master_Sergius1

7

Re: Інкапсуляція і Скривання даних - не одне і те ж?

Master_Sergius написав:

Саме слово означає - помістити в капсулу. Це не обов'язково тільки приховати. Ви поміщаєте в капсулу сукупніть речей (сутностей), які згруповані за якоюсь ознакою. Наприклад, ті ж "капсули часу", куди запихають якісь шкільні речі і викопують через 20 років (принаймні, в американських фільмах таке неоднократно показували).
Отож, тут розуміється також те, що ви поміщаєте в капсулу дані та методи роботи з ними. І саме через ці методи ви можете доступатися до даних, а не ніяк інакше.

Впринципі все так і є. Але на той момент коли читав вас, все ще не міг зрозуміти відмінність між інкапсуляцією і датахайдінгом. Зараз ніби розібрався з поняттями. Дякую за допомогу)

8

Re: Інкапсуляція і Скривання даних - не одне і те ж?

В моменти коли я щось не можу зрозуміти, я думаю, що ще не доріс. Чи по віку, чи по навичках. Здається, зараз цей момент  :)