Плутати у визначенні поняття "абстракція" в ООП


16

Я намагаюся зрозуміти визначення поняття "абстракція" в ООП.

Я натрапив на кілька основних визначень. Чи всі вони дійсні? Чи один з них не так? Я збентежений. (Я переписав визначення власними словами).

Визначення 1:

Абстракція - це концепція взяття якогось об'єкта з реального світу та перетворення його в терміни програмування. Такі , як створення Humanкласу і надавши йому int health, int age, String nameі т.д. властивості і eat()т.д. методи.

Визначення 2:

Більш загальне визначення. Абстракція - це поняття, яке відбувається в будь-якій точці програмної системи, в якій бере участь «зробити щось більш загальним / простішим / абстрактним» . Кілька прикладів:

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

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

Визначення 3

Ще одне загальне визначення: Абстракція - це концепція переміщення фокусу від деталей та конкретної реалізації речей, до типів речей (тобто класів), доступних операцій (тобто методів) тощо, тим самим робить програмування більш простим, загальним, і більш абстрактні. (Це може відбуватися в будь-якому місці та в будь-якому контексті програмної системи). Це відбувається, наприклад, при інкапсуляції, оскільки інкапсуляція означає приховати деталі реалізації та показати лише типи речей та їх більш загальні та абстрактні визначення. Прикладом Anotehr було б використання Listоб’єкта в Java. цей об'єкт фактично використовує деталі реалізації a ArrayListабо a LinkedList, але ця інформація абстрагується за допомогою більш загальної назви List.

Чи правильне будь-яке з цих визначень? (Я маю на увазі найбільш звичайне і прийняте визначення).


Абстракція визначає "річ" як певний ТИП речі (тварина => собака), щоб ще більше звузити її (собака => пудель).
Крістін

Відповіді:


22

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

Ось кілька хороших пояснень:

Ви як людина маєте різні стосунки в різних ролях. Коли ти в школі, то ти - «Учень» . Коли ти на роботі, ти - «працівник» . Коли ви перебуваєте в урядовій установі, вас можуть розглядати як "громадянина" . Таким чином, це зводиться до того, в якому контексті ми дивимось сутність / об'єкт. Тож якщо я буду моделювати систему оплати праці , я буду розглядати вас як працівника (PRN, повний робочий день / неповний робочий день, призначення) . Якщо я моделюю систему зарахування на курси , то я буду розглядати ваші аспекти та характеристики як студент (кількість роликів, вік, стать, зарахуваний курс) . І якщо я буду моделювати інформаційну систему соціального захистуто я буду розглядати ваші дані як громадянина (як DOB, стать, країна народження тощо)

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

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


3
Отже, ви б сказали, що це як узагальнення замість специфікації?
Роберт Роша

1
@samyismyhero Саме так! Шукаємо загальні ознаки та поведінку об'єктів для абстрагування.
Maxood

[Тварина => Собака] - це абстракція. Ви визначаєте, які можливі частини "тварини" можуть створити "собаку". (Хвіст, ноги, хутро тощо). Потім ви можете використовувати клас "Собака", щоб визначити Пуделя, Пітбуля тощо. Отже, ви декларуєте породи собак на основі класу "Собака" замість "тварини".
Крістін

3

Визначення 1, безумовно, не абстракція. Це більш детально описує моделювання .

Визначення 2 і 3 описують те саме. І те, і інше - досить хороші описи абстракції.


Це те, що я думав! abstract class ShapeЛол!
Роберт Роша

2

Кожне з цих визначень чудово.

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

У першому випадку ви (в даний час) не можете включати реальних людей у ​​свій код; Ви зосереджуєтесь на конкретних деталях людини, які відповідають вашим цілям. В іншій програмі вам може знадобитися зосередитися на різних деталях. Це були б різні абстракції людини, і кожна може бути однаково справедливою у своєму контексті .

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

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