2010-09-03 5 views
11

A cosa si riferisce l'astrazione dei dati? Si prega di fornire esempi di vita reale insieme.Che cosa significa esattamente "astrazione dati"?

+0

http://en.wikipedia.org/wiki/Abstraction_%28computer_science%29 –

+0

per legare nella risposta di seguito, se si dispone di un inventario di strumenti, martelli, cacciaviti, seghe, ecc ottenendo il numero di strumenti è un astrazione dal momento che non ti interessa che tipo di strumenti è –

risposta

18

Astrazione ha due parti:

  • Nascondi dettagli che non importa da un certo punto di vista
  • identificare i dettagli che contano da un certo punto di vista e considerano elementi per essere di il la stessa classe se possiedono quei dettagli.

Ad esempio, se sto progettando un programma per gestire l'inventario, vorrei essere in grado di scoprire quanti articoli di un certo tipo il sistema ha in magazzino. Dal punto di vista del sistema di interfaccia, non mi interessa se sto ottenendo queste informazioni da un database, un file CSV, un repository remoto tramite un'interfaccia SOAP o schede perforate. Mi interessa solo poter dire widget.get_items_in_stock() e sapere che restituirà un intero.

Se in seguito deciderò di voler registrare quel numero in un altro modo, la persona che progetta l'interfaccia non ha bisogno di sapere, preoccuparsi o preoccuparsi finché il widget ha ancora il metodo get_items_in_stock(). Come saggio, l'interfaccia non ha bisogno di preoccuparsi se io sottoclassi la classe del widget e aggiungo un metodo get_square_root_of_items_in_stock(). Posso passare anche un'istanza della nuova classe.

Quindi in questo esempio, abbiamo nascosti i dettagli di come i dati vengono acquisiti e abbiamo deciso che tutto ciò con un metodo get_items_in_stock() è un'istanza stessa classe (o una sottoclasse di esso) per determinati scopi.

9

L'astrazione dei dati è un dispositivo che consente di trattare i dati mentre gli utenti li incontrano anziché come sono memorizzati sulla macchina.

Al livello più basso, tutti i tipi di dati primitivi sono astrazioni: come programmatori, di solito non abbiamo a che fare con i dati a livello di bit (che è il modo in cui è in definitiva memorizzato) ma come numeri interi, numeri in virgola mobile , personaggi, ecc

poi aggiungiamo strati su quella astrazione - forse due interi rappresenta un Point, o noi e le enumerazioni di rappresentare i mesi dell'anno, i giorni della settimana, ecc

Con ogni strato di astrazione, ci allontaniamo dalla macchina e (si spera) più vicini alla comprensione umana dei dati. Questo può estrarre una penalizzazione delle prestazioni - potrebbe non essere sempre il caso che i punti possano essere rappresentati in modo più efficiente da due numeri interi. Ciò è compensato dal tempo di sviluppo (e manutenzione) più breve quando si utilizzano le astrazioni.

6

La tecnica di creazione di un nuovo tipo di dati che ben si adatta a un'applicazione da programmare è nota come astrazione dati.

+4

Grazie per la risposta. In futuro, si prega di non pubblicare in ** tutto in grassetto **; che sconfigge in primo luogo lo scopo dell'enfasi. –

0

È il sistema complesso che utilizza dettagli di dati che sono facili da interagire o incontrare con gli esseri umani, che differiscono dal modo in cui il sistema di computer memorizza, come nel sistema di numeri binari. Risposta da Neema, Rohan e Upendo (I programmatori)

0

La tecnica di limitare gli attributi dei dati in base a uno scenario specifico per lo sviluppo di software e la rimozione di tutti gli attributi irrilevanti. Ciò semplifica lo sviluppo del software.

+1

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post - puoi sempre commentare i tuoi post, e una volta che hai sufficiente [reputazione] (http://stackoverflow.com/faq#reputation) sarai in grado [commentare qualsiasi post] (http://stackoverflow.com/privileges/comment). – slm

0

Prendiamo un esempio di vita reale di un televisore che è possibile accendere e spegnere, cambiare canale, regolare il volume e aggiungere componenti esterni come altoparlanti, videoregistratori e lettori DVD MA non si conosce il suo dettaglio interno cioè, non sai come riceve segnali via etere o attraverso un cavo, come li traduce e infine li visualizza sullo schermo.

0

Essa si riferisce all'atto di rappresentare caratteristica essenziale senza includere dettaglio sfondo o la spiegazione

0

E 'difficile trovare giorno per esempio di vita giorno di astrazione dei dati. Tuttavia, tutti i tipi di dati in linguaggio di programmazione, tabelle e vista in DBMS, strutture dati come LinkedList, List, Queue, Stack sono astrazioni di dati. Queste astrazioni ti forniscono il modo di accedere ai dati in modo particolare.

This article può aiutare a comprendere l'astrazione dei dati e controllare l'astrazione in profondità. Ha anche alcuni degli esempi di vita reale di controllo e astrazioni di dati.

0

L'astrazione si riferisce all'atto di rappresentare le caratteristiche essenziali senza includere il dettaglio o la spiegazione dello sfondo.

1

Astrazione significa fornire solo le informazioni essenziali al mondo esterno e nascondere i loro dettagli di sfondo ... es. Nel tuo computer puoi vedere solo il monitor, la tastiera e il mouse ... non so nulla di cablaggio interno, questa è l'astrazione.

0

Simply Data Abstraction non è altro che nascondere dati inutili dall'utente. Esempio: la persona vuole semplicemente effettuare una chiamata, semplicemente seleziona o componi no. e clicca sul pulsante di chiamata questa informazione. è abbastanza per lui. Non voglio sapere come viene fatta la connessione e quale sia il processo che sta dietro la chiamata o come viene trasferita la voce.

1

L'astrazione dei dati sembra essere spiegata come dati di rottura fino a dove si può ottenere. il cibo sarebbe l'astrazione di mela, arancia, pizza. l'animale sarebbe l'astrazione di gatto, mucca, maiale. Un oggetto alimentare sarebbe qualcosa di simile a questo pseudo codice:

class food{ 

name; 
calories; 
weight; 

public eat(name); 

} 

tutti gli alimenti hanno un nome, una quantità di calorie e un peso. È piuttosto astratto.

Si potrebbe quindi creare oggetti che ereditano, che sarebbero un po 'meno astratti.

class pizza inherits food{ 

    toppings; 

    say_toppings(); 

} 

la pizza ora ha condimenti, ma eredita nome, calorie e peso dal cibo.

fondamentalmente l'astrazione è stata spiegata come raggiungere il livello più basso di ogni articolo e creare classi che si estendano da esse. Rende anche il tuo codice più riutilizzabile ... Se hai indicato la tua classe base di cibo abbastanza bene e includi tutto ciò che è astratto su di esso, chiunque lavori nell'industria alimentare potrebbe usare la tua classe.

-2

data hiding gestisce le funzionalità di sicurezza di oops. in base a questa proprietà, i membri dati privati ​​di una classe sono accessibili o visivi solo all'interno della classe non al di fuori della classe.

+0

incompleto. Con questo ragionamento, si può avere la funzione 'pippo' che utilizza una' bar' di funzione pubblica. La funzione pubblica 'bar' verrebbe utilizzata nell'implementazione interna di' foo', ma 'bar' può essere chiamata dal client. incompleto. –

0

So che questa domanda è stata posta molto tempo fa. Ma piace ancora condividere un esempio di vita reale che potrebbe aiutare gli altri a comprendere il concetto di abstraction molto facilmente.

Un'analogia mondo reale dell'astrazione potrebbe funzionare in questo modo:È (l'oggetto) sta organizzando per incontrare un appuntamento al buio e decide cosa dire loro in modo che possano riconoscerti nel ristorante. Decidi di includere le informazioni su dove ti troverai, la tua altezza, il colore dei capelli e il colore della tua giacca. Sono tutti dati che aiuteranno la procedura (la tua data a trovarti) a funzionare senza intoppi. Dovresti includere tutte queste informazioni. D'altra parte, ci sono un sacco di informazioni su di te che non sono rilevanti per questa situazione: il tuo numero di previdenza sociale, i tuoi giocatori di calcio preferiti sono tutti irrilevanti per questa particolare situazione perché non aiuteranno la tua data a trovare tu.

1

astrazione si nasconde lo scheletro del corpo umano. La pelle fa un ottimo modo di contenente it. (Vedi come sono astratto lì? Pun intended. I digress ...)

Se ho una bottiglia d'acqua, allora sono in grado di berlo aprendo il coperchio, ruotandolo finché non si apre .

bool lid_open = false; 
void open_water_bottle_by_twisting() { lid_open = true; } 

Ma le bottiglie d'acqua sono contenitori. I contenitori trattengono i liquidi fino a quando non si aprono e sono in grado di essere bevuti (assumendo che il liquido sia potabile).

class Container 
{ 
    bool lid_open = false; 

protected: 
    Container() {} 
    void open_by_twisting() 
    { 
     lid_open = true; 
    } 
public: 
    virtual ~Container(); 
}; 

class WaterBottle : public Container 
{ 
    WaterBottle() : Container() {} 
public: 
    ~WaterBottle(); 
}; 

Tuttavia, non tutti i contenitori vengono aperti allo stesso modo. Alcuni contenitori, come la bottiglia d'acqua, hanno coperchi che possono essere svitati. Altri non hanno coperchi, come i flaconi da palestra - quelli contengono cannucce pieghevoli che possono essere piegati per la conservazione o per essere bevuti.

class Container 
{ 
    bool lid_open; 
    bool straw_open; 

protected: 
    void TurnLid() { lid_open = true; } 
    void BendStraw() { straw_open = true; } 
    Container() : lid_open(false), straw_open(false){} 

public: 
    virtual void open() = 0; 
    virtual ~Container(); 
}; 

class WaterBottle : public Container 
{ 

public: 
    WaterBottle() : Container() {} 
    void open() 
    { 
     TurnLid(); 
    } 
    ~WaterBottle(); 
}; 

class ExerciseBottle : public Container 
{ 
public: 
    ExerciseBottle() : Container() {} 
    void open() 
    { 
     BendStraw(); 
    } 
    ~ExerciseBottle(); 
}; 

Ma il cliente non sa cosa 's implementazione di ExerciseBottle' ExerciseBottleopen() s è. Chiama BendStraw(), che quindi imposta straw_open su true. Ma ExerciseBottle chiama semplicemente una funzione per fare tutto questo lavoro. Il client non deve eseguire diverse azioni utilizzate nell'implementazione di open(). Il caso va allo stesso modo per WaterBottle. E questo è ciò che l'astrazione è: lasciando che il client sappia che il back-end farà tutto il lavoro per questo. Quando viene usato il termine "separare l'implementazione dall'interfaccia", questo è ciò che si intende.