Sto cercando di capire la definizione di "astrazione" in OOP.
Ho trovato alcune definizioni principali. Sono tutti validi? Uno di loro ha torto? 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 creare una Human
classe e dando int health
, int age
, String name
, ecc proprietà e eat()
metodi ecc.
Definizione 2:
Una definizione più generale. L'astrazione è un concetto che si svolge ovunque in un sistema software in cui è coinvolto "rendere le cose più generali / più semplici / astratte" . Alcuni esempi:
Una gerarchia ereditaria, in cui le classi superiori sono più semplici o più generali e definiscono 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) verso il mondo del software esterno.
Definizione 3
Un'altra definizione generale: l'astrazione è il concetto di spostare l'attenzione dai dettagli e l'implementazione concreta delle cose, ai tipi di cose (ad es. Classi), alle operazioni disponibili (ad 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 durante l'incapsulamento, poiché l'incapsulamento significa nascondere i dettagli dell'implementazione e mostrare solo i tipi di cose e le loro definizioni più generali e astratte. Un esempio potrebbe essere l'utilizzo di un List
oggetto in Java. questo oggetto utilizza effettivamente i dettagli di implementazione di an ArrayList
o a LinkedList
, ma queste informazioni sono astratte usando il nome più generale List
.
Una di queste definizioni è corretta? (Mi riferisco alla definizione più convenzionale e accettata ).