Я намагаюся зрозуміти визначення поняття "абстракція" в ООП.
Я натрапив на кілька основних визначень. Чи всі вони дійсні? Чи один з них не так? Я збентежений. (Я переписав визначення власними словами).
Визначення 1:
Абстракція - це концепція взяття якогось об'єкта з реального світу та перетворення його в терміни програмування. Такі , як створення Humanкласу і надавши йому int health, int age, String nameі т.д. властивості і eat()т.д. методи.
Визначення 2:
Більш загальне визначення. Абстракція - це поняття, яке відбувається в будь-якій точці програмної системи, в якій бере участь «зробити щось більш загальним / простішим / абстрактним» . Кілька прикладів:
Ієрархія спадкування, де вищі класи простіші або загальніші, і визначають більш загальну та абстрактну реалізацію. У той час як нижчі класи в ієрархії більш конкретні і визначають більш детальну реалізацію.
Використовуючи інкапсуляцію, щоб приховати деталі реалізації класу від інших класів, зробивши таким чином клас більш "абстрактним" (простішим) для зовнішнього світу програмного забезпечення.
Визначення 3
Ще одне загальне визначення: Абстракція - це концепція переміщення фокусу від деталей та конкретної реалізації речей, до типів речей (тобто класів), доступних операцій (тобто методів) тощо, тим самим робить програмування більш простим, загальним, і більш абстрактні. (Це може відбуватися в будь-якому місці та в будь-якому контексті програмної системи). Це відбувається, наприклад, при інкапсуляції, оскільки інкапсуляція означає приховати деталі реалізації та показати лише типи речей та їх більш загальні та абстрактні визначення. Прикладом Anotehr було б використання Listоб’єкта в Java. цей об'єкт фактично використовує деталі реалізації a ArrayListабо a LinkedList, але ця інформація абстрагується за допомогою більш загальної назви List.
Чи правильне будь-яке з цих визначень? (Я маю на увазі найбільш звичайне і прийняте визначення).