Confuso sulla definizione di "astrazione" in OOP


16

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 Humanclasse 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 Listoggetto in Java. questo oggetto utilizza effettivamente i dettagli di implementazione di an ArrayListo 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 ).


L'astrazione sta definendo una "cosa" come un certo TIPO di cosa (Animale => Cane) al fine di restringerlo ulteriormente (Cane => Barboncino).
Christine,

Risposte:


22

L'astrazione è uno dei 3 pilastri della programmazione orientata agli oggetti (OOP). Significa letteralmente percepire un'entità in un sistema o contesto da una prospettiva particolare. Eliminiamo i dettagli non necessari e ci concentriamo solo sugli aspetti necessari per quel contesto o sistema in esame.

Ecco alcune buone spiegazioni:

Tu come persona hai relazioni diverse in ruoli diversi. Quando sei a scuola, allora sei uno "Studente" . Quando sei al lavoro, sei un "Dipendente" . Quando sei in un istituto governativo, puoi essere visto come un "Cittadino" . Quindi si riduce a ciò in quale contesto stiamo osservando un'entità / oggetto. Quindi, se sto modellando un sistema di gestione stipendi , ti guarderò come dipendente (PRN, tempo pieno / tempo parziale, designazione) . Se sto modellando un sistema di iscrizione al corso, prenderò in considerazione i tuoi aspetti e le tue caratteristiche di studente (numero di iscrizione , età, genere, corso di iscrizione) . E se sto modellando un sistema informativo sulla sicurezza socialepoi guarderò i tuoi dettagli come cittadino (come DOB, genere, paese di nascita, ecc.)

Ricorda che l'astrazione (concentrandosi sui dettagli necessari) è diversa dall'incapsulamento (nascondere i dettagli dal mondo esterno). Incapsulamento significa nascondere i dettagli dell'oggetto e fornire un'interfaccia decente per le entità nel mondo esterno per interagire con quell'oggetto o entità. Ad esempio, se qualcuno vuole conoscere il mio nome, non può accedere direttamente alle mie cellule cerebrali per sapere qual è il mio nome. Invece quella persona o chiederà il mio nome. Se un guidatore desidera accelerare un veicolo, esiste a tale scopo un'interfaccia (pedale dell'acceleratore, marcia, ecc.).

Il 1 ° def non è molto chiaro. Def 2 è buono ma tende a confondere il principiante mentre cerca di collegare Astrazione con Incapsulamento ed Ereditarietà. Def 3 è la migliore delle 3 definizioni in quanto definisce chiaramente cos'è esattamente l'astrazione.


3
Quindi diresti che è come una generalizzazione anziché una specifica?
Robert Rocha,

1
@samyismyhero Exactly! Cerchiamo attributi e comportamenti generici degli oggetti per l'astrazione.
Maxood,

[Animale => Cane] è un'astrazione. Definisci quali parti possibili un "Animale" può avere per creare un "Cane". (Coda, zampe, pelliccia, ecc.). Quindi, puoi utilizzare la classe "Cane" per definire un barboncino, un pitbull, ecc. Quindi, stai dichiarando le razze di cani in base alla classe "cane" anziché un "animale".
Christine,

3

La definizione 1 non è assolutamente un'astrazione. Ciò descrive più da vicino la modellazione .

Le definizioni 2 e 3 descrivono la stessa cosa. Ed entrambi sono descrizioni abbastanza buone di un'astrazione.


È quello che pensavo! abstract class Shapelol!
Robert Rocha,

2

Ognuna di queste definizioni va bene.

L'astrazione è dove ti concentri solo su quei dettagli che sono importanti per il tuo scopo.

Nel primo caso, tu (al momento) non puoi includere persone reali nel tuo codice; ti concentri su particolari dettagli di una persona che serve al tuo scopo. In un altro programma potrebbe essere necessario concentrarsi su diversi dettagli. Queste sarebbero astrazioni diverse di una persona e ognuna può essere ugualmente valida nel loro contesto .

La seconda e la terza definizione continuano questa idea, applicandola alle entità software.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.