Sto cercando di capire la definizione di 'astrazione' in OOP.
Ho trovato alcune definizioni principali. Sono tutti validi? Uno di loro è sbagliato? Non ho capito bene. (Ho riscritto la definizione con le mie parole).
Definizione 1:
L'astrazione è il concetto di prendere un oggetto dal mondo reale e convertirlo in termini di programmazione. Ad esempio, creando una classe Human
e assegnandole metodi int health
, int age
, String name
, ecc. E eat()
, ecc.
Definizione 2:
Una definizione più generale. L'astrazione è un concetto che si svolge ovunque in un sistema software in cui 'rendere le cose più generali / più semplici / astratte' è coinvolto. Alcuni esempi:
-
Una gerarchia di ereditarietà, in cui le classi superiori sono più semplici o più generali, e definire un'implementazione più generale e astratta. Mentre le classi inferiori nella gerarchia sono più concrete e definiscono implementazioni più dettagliate.
-
Usare l'incapsulamento per nascondere i dettagli dell'implementazione di una classe da altre classi, rendendo la classe più "astratta" (più semplice) al mondo esterno del software.
Definizione 3
Un'altra definizione generale: l'astrazione è il concetto di spostare l'attenzione dai dettagli e dall'implementazione concreta delle cose, ai tipi di cose (cioè classi), alle operazioni disponibili (es. metodi), ecc., rendendo così la programmazione più semplice, più generale e più astratto. (Ciò può avvenire ovunque e in qualsiasi contesto nel sistema software).
Si verifica ad esempio quando si incapsula, perché l'incapsulamento significa nascondere i dettagli dell'implementazione e mostrare solo i tipi di cose e le loro definizioni più generali e astratte. L'esempio di Anotehr utilizza un oggetto List
in Java. questo oggetto utilizza in realtà i dettagli di implementazione di ArrayList
o LinkedList
, ma questa informazione è astratta usando il nome più generico List
.
Qualcuna di queste definizioni è corretta? (Mi riferisco alla definizione più convenzionale e accettata )