Confuso circa la definizione di 'astrazione' in OOP

15

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 )

    
posta Aviv Cohn 26.02.2014 - 06:44
fonte

3 risposte

18

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 preso in considerazione.

Ecco alcune buone spiegazioni:

Come persona hai relazioni diverse in ruoli diversi. Quando sei a scuola, sei uno "studente" . Quando sei al lavoro, sei un "Dipendente" . Quando ti trovi in un istituto governativo, puoi essere visualizzato come "Cittadino" . Quindi si riduce a ciò che in quale contesto stiamo guardando un'entità / oggetto. Quindi, se modifico un Sistema di gestione stipendi , ti guarderò come un Dipendente (PRN, Full Time / Part Time, Designazione) . Se sto modellando un Sistema di iscrizione al corso , allora prenderò in considerazione i tuoi aspetti e le caratteristiche come uno Studente (Numero del rotolo, Età, Sesso, Corso iscritto) . E se modifico un sistema di sicurezza sociale allora vedrò i tuoi dati come un cittadino (come DOB, genere, Paese di nascita, ecc.)

Ricorda che l'astrazione (focalizzata sui dettagli necessari) è diversa dall'incapsulazione (nascondendo 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 sapere il mio nome, allora non può accedere direttamente alle mie cellule cerebrali per sapere quale sia il mio nome. Invece quella persona o chiederà il mio nome. Se un conducente vuole accelerare un veicolo, c'è un'interfaccia (pedale dell'acceleratore, cambio, ecc.) A tale scopo.

La prima def non è molto chiara. Def 2 è buono ma tende a confondere il principiante mentre tenta di collegare l'astrazione con l'incapsulamento e l'ereditarietà. Def 3 è la migliore delle 3 definizioni in quanto definisce chiaramente ciò che è precisamente l'Astrazione.

    
risposta data 26.02.2014 - 07:31
fonte
3

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

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

    
risposta data 26.02.2014 - 07:34
fonte
1

Ciascuna 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 dettagli particolari di una persona che serve al tuo scopo. In un altro programma potrebbe essere necessario concentrarsi su diversi dettagli. Queste sarebbero diverse astrazioni di una persona, e ciascuna può essere ugualmente valida nel loro contesto .

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

    
risposta data 26.02.2014 - 07:14
fonte

Leggi altre domande sui tag