Абстракція VS Інформація, що приховує інкапсуляцію VS


167

Чи можете ви сказати, яка різниця між абстракцією та інформацією, що ховається в розробці програмного забезпечення?

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

Оновлення: я знайшов хорошу відповідь на ці три концепції. Дивіться окрему відповідь нижче для кількох цитат, взятих звідти .


"Потім інкапсуляція - це техніка упаковки інформації таким чином, щоб приховати те, що повинно бути прихованим, і зробити видимим те, що має бути видно." ; пам'ятаючи, що інкапсуляція досягається за допомогою приховування інформації.
wulfgarpro


citation kink break
Rishi Dua

Відповіді:


152

Ідіть до джерела! Грейді Бух говорить (в Об'єктно-орієнтованому аналізі та дизайні, стор. 49, друге видання):

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

Іншими словами: абстракція = об'єкт зовні; інкапсуляція (досягається за допомогою приховування інформації) = об'єкт внутрішньо,

Приклад: у .NET Framework System.Text.StringBuilderклас надає абстракцію над буферним рядком. Ця абстракція буфера дозволяє працювати з буфером без огляду на його реалізацію. Таким чином, ви можете додавати рядки до буфера, не враховуючи, як StringBuilderвнутрішньо слідкувати за такими речами, як вказівник до буфера та керувати пам’яттю, коли буфер заповнюється повністю (що це робиться при інкапсуляції через приховування інформації).

rp


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

Інший реальний приклад для визначення
Буха

Скажіть, будь ласка, чи правильно було б сказати, що абстракцію найкраще розуміти з точки зору коду клієнта, тоді як інкапсуляція найкраще зрозуміла з точки зору службового коду (тобто самого інкапсульованого класу)?
користувач1338998

Реальний приклад для наведеного вище визначення пояснюється тут: stackoverflow.com/a/635755/3181500
user3181500

83

ОП оновила своє запитання кількома цитатами, які він знайшов, а саме у статті Едварда В. Берара під назвою "Абстракція, інкапсуляція та приховування інформації" . Я повторно розміщую трохи розширену та переформатовану версію оновлення ОП, оскільки це має бути відповіддю самостійно.

(Усі цитати взяті із згаданої статті.)

Абстракція:

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

Приховування інформації:

"Її інтерфейс чи визначення було обрано таким чином, щоб якомога менше розкрити його внутрішню роботу". - [Парнас, 1972b]

"Абстракція може [...] використовуватись як метод визначення того, яку інформацію слід приховати."

"Плутанина може виникнути, коли люди не зможуть розрізнити приховування інформації та техніку (наприклад, абстрагування), яка використовується, щоб допомогти визначити, яку інформацію потрібно приховати."

Інкапсуляція:

"Це [...] стосується побудови капсули, у випадку концептуальної перешкоди, навколо якоїсь колекції речей". - [Wirfs-Brock et al, 1990]

"Як процес, інкапсуляція означає акт укладення одного або декількох елементів у контейнер [...]. Інкапсуляція як сутність позначає пакет або корпус, який містить (містить, додає) один або більше предметів."

"Якщо інкапсуляція - це те саме, що приховується інформація", то можна зробити аргумент, що "все, що було інкапсульовано, було також приховано". Це, очевидно, неправда ".

Висновок:

"Абстракція, приховування інформації та інкапсуляція - це дуже різні, але дуже пов'язані між собою поняття. Можна стверджувати, що абстракція - це техніка, яка допомагає нам визначити, яка конкретна інформація повинна бути видною, а яка інформація повинна бути прихованою. Інкапсуляція - це техніка. для упаковки інформації таким чином, щоб приховати те, що повинно бути прихованим, і зробити видимим те, що призначено бути видимим ".


чудове пояснення практично. було б чудово надати конкретні приклади в java. мені здається, що сеттер / геттер у Java приховує реалізацію, отже, досягнення Information Hiding(або приховування реалізації), тоді як загальне classдосягає інкапсуляції, а абстракція досягається через privateдоступ
abarik

57

Abstraction приховує деталі реалізації, забезпечуючи шар над базовим функціоналом.

Information Hidingприховує дані, на які впливає ця реалізація. Використання privateі publicпід цим. Наприклад, приховування змінних класів.

Encapsulationпросто введення всіх подібних даних і функцій в групу, наприклад, Classв програмуванні; Packetв мережі.

Завдяки використанню класів, ми реалізуємо всі три поняття - Abstraction, Information HidingіEncapsulation


33

Будь ласка, не ускладнюйте прості поняття.

Інкапсуляція : Зведення даних та методів в єдине ціле - це інкапсуляція (наприклад, клас)

Абстракція : це акт представлення лише найважливіших речей без включення довідкових деталей. (наприклад, інтерфейс)

ДЛЯ ПРИКЛАДІВ І БІЛЬШЕ ІНФОРМАЦІЇ GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

Схвалені визначення тут

PS: Я також пам’ятаю визначення з книги C ++ Суміти Арори, яку ми читали в 11 класі;)


6

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

Приховування інформації - це принцип, згідно з яким користувачі програмного компонента (наприклад, класу) повинні знати лише основні деталі того, як ініціалізувати та отримати доступ до компонента, і не потрібно знати подробиці реалізації.

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

Тому його не абстрагування VERSUS інформації приховує. Це інформація, що приховує абстракцію VIA.


4

Абстракція

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

Інкапсуляція

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


3

Абстракція приховує деталі реалізації, як ви їх висловлювали.

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

Приховування інформації приховує деталі реалізації. Програмування важко. Ви можете мати багато речей, з якими можна розібратися та впоратися. Тут можуть бути змінні, які ви хочете / потребуєте, щоб слідкувати дуже близько. Приховування інформації гарантує, що ніхто випадково щось не порушує, використовуючи змінну чи метод, який ви відкрили.

Ці 2 концепції дуже тісно пов'язані між собою в об'єктно-орієнтованому програмуванні.


3

Абстракція - це процес ідентифікації суттєвих характеристик об'єкта без включення в нього невідповідних і виснажливих деталей.

Інкапсуляція - це процес зведення даних і функцій, що управляють цими даними в єдине ціле.

Абстракція та інкапсуляція пов'язані між собою, але взаємодоповнюючі поняття.

  1. Абстракція - це процес. Інкапсуляція - це механізм, за допомогою якого реалізується абстракція.

  2. Абстракція фокусується на спостережуваній поведінці об'єкта. Інкапсуляція фокусується на здійсненні, що спричиняє таку поведінку.

Приховування інформації - це процес приховування деталей реалізації об'єкта. Це результат інкапсуляції.


2

Інкапсуляція: зв'язування членів даних та функцій членів разом називається інкапсуляцією. інкапсуляція проводиться через клас. абстракція: приховування деталей реалізації форми використання або від перегляду називається абстракцією. наприклад: int x; ми не знаємо, як int буде працювати внутрішньо. але ми знаємо, що int буде працювати. тобто абстракція.


2

Абстракція: Абстракція - це поняття / техніка, яка використовується для виявлення того, яким повинен бути зовнішній вигляд об'єкта. Зробити доступним лише необхідний інтерфейс.

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

Інкапсуляція: прив'язка даних та пов'язаних з ними функцій в одиницю. Це полегшує абстрагування та приховування інформації. Дозволяє застосовувати такі елементи, як доступ членів, до пристрою для досягнення абстракції та приховування інформації


2

Дивіться допис Джоеля про Закон про хиткі абстракції

JoelOnsoftware

В основному, абстрагування дає вам свободу мислення концепцій вищого рівня. Непрограмаційна аналогія полягає в тому, що більшість з нас не знає, звідки береться наша їжа, або як вона виробляється, але той факт, що нам (як правило) не потрібно турбуватися про це, звільняє нас робити інші речі, наприклад програмування.

Щодо приховування інформації, я погоджуюсь із закликом.


2

Зовсім коротко

Інкапсуляція : - приховування інформації

Абстракція : - Приховування реалізації

Abstractionдозволяє зосередитись на тому what the object does, що означає інкапсуляціяhow an object works


1

Абстракція дозволяє ставитися до складного процесу як до простого процесу. Наприклад, стандартна абстракція "файл" розглядає файли як суміжний масив байтів. Користувачеві / розробнику навіть не доводиться думати про проблеми кластерів та фрагментації. (Абстракція зазвичай відображається як класи або підпрограми.)

Приховування інформації стосується захисту ваших абстракцій від зловмисних / некомпетентних користувачів. Обмежуючи контроль над деяким станом (наприклад, розподілом жорсткого диска) оригінальним розробником, величезна кількість обробки помилок стає зайвою. Якщо ніхто інший, крім драйвера файлової системи, не може записати на жорсткий диск, то драйвер файлової системи точно знає, що записано на жорсткий диск і де. (Звичайним проявом цього поняття є privateі protectedключові слова в мовах ОО.)


1

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

Отже, приховування інформації - це мета, абстрагування - це процес, а інкапсуляція - це техніка.


Чи можете ви надати приклад Java для того ж?
Chinmay

1

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


1

Просто додавши докладнішу інформацію про InformationHiding , знайдено Це посилання справді хороше джерело з прикладами

InformationHiding - це ідея, що проектне рішення має бути прихованим від решти системи, щоб запобігти ненавмисному з'єднанню. Інформаційна хованість - це принцип дизайну. InformationHiding повинен повідомляти про те, як ви інкапсулюєте речі, але, звичайно, цього не потрібно .

Інкапсуляція - особливість мови програмування.


1

І абстракція, і інкапсуляція - це дві з чотирьох основних концепцій OOP, які дозволяють моделювати речі з реального світу в об'єкти, щоб ви могли їх реалізувати у своїй програмі та коді. Багато початківців плутаються між абстракцією та інкапсуляцією, оскільки вони обоє дуже схожі. Якщо ви запитаєте когось, що таке абстракція, він скаже, що це концепція OOP, яка фокусується на відповідній інформації, приховуючи непотрібні деталі, а коли запитаєте про інкапсуляцію, багато хто скаже, що це ще одна концепція OOP, яка приховує дані зовнішнього світу. Визначення не є помилковими, оскільки абстракція та інкапсуляція щось приховують, але ключова різниця полягає у намірі.

Абстракція приховує складність, надаючи вам більш абстрактну картину, свого роду 10 000 футів, тоді як інкапсуляція приховує внутрішню роботу, щоб потім ви могли її змінити. Іншими словами, абстракція приховує деталі на рівні проектування, тоді як інкапсуляція приховує деталі на рівні реалізації.


0

Прочитавши всі вищевказані відповіді одна за одною, я не можу зупинити себе від публікації цього

абстракція передбачає можливість визначати об'єкти, які представляють абстрактних "акторів", які можуть виконувати роботу, звітувати про та змінювати їх стан та "спілкуватися" з іншими об'єктами в системі.

Зверху інкапсуляція досить чітка ->

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

довідкова вікі


0

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

Інкапсуляція - це те, як створюється об’єкт, а абстракція - це те, як об’єкт розглядається у зовнішньому світі.


0

Інкапсуляція: зв'язування даних та методи, що діють на них. це дозволяє приховувати дані від усіх інших методів в інших класах. Наприклад: MyListклас, який може додати елемент, видалити елемент та видалити всі елементи методами add, removeта removeAllдіяти у списку (приватний масив), до якого не можна отримати доступ безпосередньо ззовні.

Абстракція: приховує невідповідну поведінку та дані. Приховано (абстрагується) те, як фактично зберігаються, додаються чи видаляються елементи. Мої дані можуть зберігатися у простому масиві, ArrayList, LinkedList тощо. Також те, як реалізуються методи, приховано ззовні.


0

Інкапсуляція - забезпечення доступу до внутрішніх даних контрольованим способом або запобігання прямому доступу до членів.

Абстракція - приховування деталей реалізації певних методів відоме як абстракція

Розберемося за допомогою прикладу: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

тепер для абстракції визначте метод, до якого можна отримати доступ, і користувач не знає, що є тілом методу і як він працює. Розглянемо вище приклад, ми можемо визначити область методу, яка обчислює площу прямокутника.

 public int area()
 {
  return length*breadth;
 }

Тепер, коли користувач використовує вищевказаний метод, він просто отримає площу, а не так, як її обчислюють. Ми можемо розглянути приклад методу println (), який ми просто знаємо, що він використовується для друку, і ми не знаємо, як він друкує дані. Я детально написав блог. Ви можете ознайомитись із посиланням нижче для отримання додаткової інформації абстракції проти інкапсуляції


0

Варто зазначити, що ці терміни мають стандартизовані визначення IEEE, які можна шукати за посиланням https://pascal.computer.org/ .

абстракція

  1. погляд на об'єкт, який фокусується на інформації, що має відношення до певної мети, і ігнорує решту інформації
  2. процес формулювання погляду
  3. процес придушення несуттєвих деталей для встановлення спрощеної моделі або результату цього процесу

приховування інформації

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

інкапсуляція

  1. техніка розробки програмного забезпечення, що складається з виділення системної функції або набору даних та операцій з цими даними в модулі та надання точних специфікацій для модуля
  2. Поняття, що доступ до імен, значень та значень обов'язків класу повністю відокремлений від доступу до їх реалізації
  3. ідея, що модуль має зовнішню сторону, яка відрізняється від його внутрішньої, що він має зовнішній інтерфейс та внутрішню реалізацію
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.