Astrazione VS Informazioni che nascondono l'incapsulamento VS


167

Puoi dirmi qual è la differenza tra astrazione e nascondere le informazioni nello sviluppo del software?

Sono confuso. L'astrazione nasconde l'implementazione dei dettagli e le informazioni nascondono gli astratti dettagli di qualcosa.

Aggiornamento: ho trovato una buona risposta per questi tre concetti. Vedi la risposta separata di seguito per diverse citazioni prese da .


"L'incapsulamento è quindi la tecnica per impacchettare le informazioni in modo tale da nascondere ciò che dovrebbe essere nascosto e rendere visibile ciò che si intende sia visibile." ; ricordando che l'incapsulamento si ottiene nascondendo le informazioni.
wulfgarpro,


citazione spezzata
Rishi Dua

Risposte:


152

Vai alla fonte! Grady Booch afferma (in Object Oriented Analysis and Design, pagina 49, seconda edizione):

L'astrazione e l'incapsulamento sono concetti complementari: l'astrazione si concentra sul comportamento osservabile di un oggetto ... l'incapsulamento si concentra sull'implementazione che dà origine a questo comportamento ... l'incapsulamento viene spesso raggiunto attraverso il nascondimento delle informazioni, che è il processo per nascondere tutto i segreti dell'oggetto che non contribuiscono alle sue caratteristiche essenziali.

In altre parole: astrazione = l'oggetto esternamente; incapsulamento (ottenuto attraverso il nascondimento delle informazioni) = l'oggetto internamente,

Esempio: in .NET Framework, la System.Text.StringBuilderclasse fornisce un'astrazione su un buffer di stringhe. Questa astrazione del buffer consente di lavorare con il buffer senza tener conto della sua implementazione. Pertanto, è possibile aggiungere stringhe al buffer senza tener conto di come StringBuilderinternamente tiene traccia di cose come il puntatore al buffer e gestire la memoria quando il buffer si riempie (cosa che fa con l'incapsulamento tramite il nascondimento delle informazioni).

rp


5
diresti che, allo stesso modo, l'astrazione e l'incapsulamento sono complementari, l'incapsulamento e il nascondere le informazioni sono anche complementari? Certo, l'incapsulamento si ottiene nascondendo le informazioni, ma ... l'incapsulamento non è il meccanismo attraverso il quale si realizza il nascondimento delle informazioni?
wulfgarpro,

Un altro esempio del mondo reale per la definizione di Booch è disponibile qui
lifebalance

Potresti dirmi se sarebbe corretto affermare che l'astrazione è meglio compresa nella prospettiva del codice del cliente mentre l'incapsulamento è meglio compresa nella prospettiva del codice del servizio (cioè la stessa classe incapsulata)?
user1338998,

Real World Esempio di sopra definizione è spiegata qui: stackoverflow.com/a/635755/3181500
user3181500

84

L'OP ha aggiornato la sua domanda con diverse citazioni che aveva trovato, in particolare in un articolo di Edward V. Berard intitolato "Astrazione, incapsulamento e occultamento delle informazioni" . Sto ripubblicando una versione leggermente ampliata e riformattata dell'aggiornamento del PO, poiché dovrebbe essere una risposta a sé stante.

(Tutte le citazioni sono tratte dall'articolo sopra citato.)

Astrazione:

"Un punto di confusione per quanto riguarda l'astrazione è il suo uso sia come processo che come entità. L'astrazione, come processo, indica l'estrazione dei dettagli essenziali di un oggetto, o un gruppo di oggetti, ignorando i dettagli inessenziali. Astrazione, come un entità, indica un modello, una vista o un'altra rappresentazione focalizzata per un oggetto reale. "

Informazioni nascoste:

"La sua interfaccia o definizione è stata scelta per rivelare il meno possibile sui suoi meccanismi interni." - [Parnas, 1972b]

"L'astrazione può essere [...] utilizzata come tecnica per identificare quali informazioni dovrebbero essere nascoste."

"La confusione può verificarsi quando le persone non riescono a distinguere tra il nascondere le informazioni e una tecnica (ad esempio, l'astrazione) che viene utilizzata per aiutare a identificare quali informazioni devono essere nascoste."

incapsulamento:

"[…] Si riferisce alla costruzione di una capsula, nel caso di una barriera concettuale, attorno ad alcune raccolte di cose." - [Wirfs-Brock et al, 1990]

"Come processo, incapsulamento significa l'atto di racchiudere uno o più articoli all'interno di un contenitore […]. L'incapsulamento, come entità, si riferisce a un pacchetto o un contenitore che contiene (contiene, racchiude) uno o più articoli."

"Se l'incapsulamento fosse" la stessa cosa del nascondere le informazioni ", allora si potrebbe sostenere che" anche tutto ciò che è stato incapsulato è stato nascosto ". Questo ovviamente non è vero. "

Conclusione:

"Astrazione, occultamento delle informazioni e incapsulamento sono concetti molto diversi, ma altamente correlati. Si potrebbe sostenere che l'astrazione è una tecnica che ci aiuta a identificare quali informazioni specifiche dovrebbero essere visibili e quali informazioni dovrebbero essere nascoste. L'incapsulamento è quindi la tecnica per impacchettare le informazioni in modo tale da nascondere ciò che dovrebbe essere nascosto e rendere visibile ciò che si intende sia visibile. "


ottima spiegazione praticamente. sarebbe bello fornire esempi concreti in Java. mi sembra che setter / getter in java nascondano l'implementazione, quindi raggiungendo Information Hiding(o nascondendo l'implementazione), mentre un generico classraggiunge l'incapsulamento e l'astrazione si ottiene attraverso l' privateaccesso
abarik,

57

Abstraction sta nascondendo i dettagli di implementazione fornendo un livello sulla funzionalità di base.

Information Hidingsta nascondendo i dati che sono interessati da tale implementazione. L'uso di privatee publicrientra in questo. Ad esempio, nascondere le variabili delle classi.

Encapsulationsta semplicemente mettendo tutti i dati e le funzioni simili in un gruppo, ad esempio Classin programmazione; Packetin rete.

Attraverso l'uso di classi, implementiamo tutte le tre concetti - Abstraction, Information HidingeEncapsulation


33

Per favore, non complicare i concetti semplici.

Incapsulamento : il confezionamento di dati e metodi in una singola unità è Incapsulamento (ad es. Classe)

Astrazione : è un atto di rappresentare solo le cose essenziali senza includere dettagli di fondo. (es. interfaccia)

PER ESEMPI E MAGGIORI INFORMAZIONI GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

Definizioni approvate qui

PS: Ricordo anche la definizione di un libro chiamato C ++ di Sumita Arora che leggiamo in 11 ° classe;)


6

Il significato di astrazione dato dall'Oxford English Dictionary (OED) più vicino al significato qui inteso è "L'atto di separarsi nel pensiero". Una migliore definizione potrebbe essere "Rappresentare le caratteristiche essenziali di qualcosa senza includere lo sfondo o i dettagli non essenziali".

Il nascondimento delle informazioni è il principio secondo cui gli utenti di un componente software (come una classe) devono conoscere solo i dettagli essenziali su come inizializzare e accedere al componente e non devono conoscere i dettagli dell'implementazione.

Modifica : mi sembra che l'astrazione sia il processo di decidere quali parti dell'implementazione dovrebbero essere nascoste .

Quindi la sua non astrazione VERSUS nasconde informazioni. Sono informazioni che nascondono l'astrazione VIA.


4

Astrazione

L'astrazione è un atto di rappresentazione dei dettagli di Essentail senza includere i dettagli di sfondo. Una classe astratta ha solo firme di metodo e la classe di implementazione può avere una propria implementazione, in questo modo i dettagli complessi saranno nascosti all'utente. L'astrazione si concentra sulla vista esterna. In altre parole, l'astrazione è la separazione delle interfacce dall'attuazione effettiva.

incapsulamento

L'incapsulamento spiega il legame dei membri e dei metodi dei dati in una singola unità. Il nascondere le informazioni è lo scopo principale dell'incapsulamento. L'incapsulamento viene realizzato utilizzando specificatori di accesso come privati, pubblici, protetti. Le variabili dei membri della classe sono rese private in modo che non possano essere accessibili direttamente al mondo esterno. L'incapsulamento si concentra sulla vista interna. In altre parole, l'incapsulamento è una tecnica utilizzata per proteggere le informazioni in un oggetto dall'altro oggetto.


3

L'astrazione nasconde i dettagli dell'implementazione mentre la metti.

Sottragga qualcosa a un livello abbastanza alto che dovrai fare solo qualcosa di molto semplice per eseguire un'azione.

L'occultamento delle informazioni nasconde i dettagli di implementazione. La programmazione è difficile. Puoi avere un sacco di cose da affrontare e gestire. Possono esserci variabili che vuoi / devi tenere molto vicino. Nascondere le informazioni garantisce che nessuno rompa accidentalmente qualcosa usando una variabile o un metodo che hai esposto pubblicamente.

Questi 2 concetti sono strettamente legati insieme nella programmazione orientata agli oggetti.


3

Astrazione - È il processo di identificazione delle caratteristiche essenziali di un oggetto senza includere i dettagli irrilevanti e noiosi.

Incapsulamento - È il processo di racchiudere dati e funzioni che manipolano questi dati in una singola unità.

Astrazione ed incapsulamento sono concetti correlati ma complementari.

  1. L'astrazione è il processo. L'incapsulamento è il meccanismo mediante il quale viene implementata l'astrazione.

  2. L'astrazione si concentra sul comportamento osservabile di un oggetto. L'incapsulamento si concentra sull'implementazione che dà origine a questo comportamento.

Informazioni nascoste: è il processo per nascondere i dettagli di implementazione di un oggetto. È il risultato dell'incapsulamento.


2

Incapsulamento: l'associazione dei membri dei dati e delle funzioni dei membri viene chiamata incapsulamento. l'incapsulamento avviene attraverso la classe. astrazione: nascondere i dettagli dell'implementazione dall'uso o dalla vista si chiama astrazione. es: int x; non sappiamo come int funzionerà internamente. ma sappiamo che int funzionerà. questa è astrazione.


2

Astrazione: astrazione è il concetto / tecnica utilizzata per identificare quella che dovrebbe essere la vista esterna di un oggetto. Rendere disponibile solo l'interfaccia richiesta.

Nascondersi informazioni: è complementare all'astrazione, poiché attraverso l'occultamento delle informazioni si ottiene l'astrazione. Nascondendo tutto tranne la vista esterna.

Incapsulamento: associazione di dati e funzioni correlate in un'unità. Facilita l'astrazione e il nascondimento delle informazioni. Consentire all'unità di applicare funzioni come l'accesso dei membri per ottenere l'astrazione e il nascondimento delle informazioni


2

Vedi il post di Joel sulla Legge delle astrazioni perdenti

JoelOnsoftware

Fondamentalmente, l'astrattismo ti dà la libertà di pensare a concetti di livello superiore. Un'analogia non di programmazione è che la maggior parte di noi non sa da dove viene il nostro cibo o come viene prodotto, ma il fatto che (di solito) non dobbiamo preoccuparci di ciò ci libera di fare altre cose, come programmazione.

Per quanto riguarda il nascondere le informazioni, sono d'accordo con l'inceppamento.


2

In breve

incapsulamento : - Nascondere le informazioni

Astrazione : - Implementazione nascosta

Abstractionti permette di concentrarti what the object doesmentre significa incapsulamentohow an object works


1

L'astrazione consente di trattare un processo complesso come un processo semplice. Ad esempio, l'astrazione standard "file" tratta i file come una matrice contigua di byte. L'utente / sviluppatore non deve nemmeno pensare a problemi di cluster e frammentazione. (L'astrazione appare normalmente come classi o subroutine.)

Nascondere informazioni significa proteggere le tue astrazioni da utenti malintenzionati / incompetenti. Limitando il controllo di alcuni stati (allocazioni del disco rigido, ad esempio) allo sviluppatore originale, enormi quantità di gestione degli errori diventano ridondanti. Se nessun altro oltre al driver del file system può scrivere sul disco rigido, allora il driver del file system sa esattamente cosa è stato scritto sul disco rigido e dove. (La solita manifestazione di questo concetto è privatee protectedparole chiave nelle lingue OO.)


1

Per astrarre qualcosa dobbiamo nascondere il dettaglio o per nascondere il dettaglio di qualcosa che dobbiamo astrarre. Ma entrambi possono essere raggiunti per incapsulamento.

Quindi, nascondere le informazioni è un obiettivo, l'astrazione è un processo e l'incapsulamento è una tecnica.


Puoi fornire un esempio Java per lo stesso?
Chinmay,

1

Astrazione significa semplicemente la tecnica in cui solo i dettagli essenziali del software sono resi visibili all'utente per aiutare l'utente a utilizzare o operare con il software, pertanto i dettagli di implementazione di quel software non sono mostrati (sono resi invisibili). L'incapsulamento è la tecnica che ha un pacchetto che contiene uno o più elementi e quindi alcune informazioni (in particolare i dettagli del programma) sono diventate visibili e alcune non visibili all'utente, quindi l'incapsulamento è ottenuto nascondendo le informazioni. In sintesi. L'astrazione è per il comportamento osservabile (esternamente) e l'incapsulamento è per l'invisibilità (internamente) ma questi due sono davvero complementari.


1

Basta aggiungere ulteriori dettagli su InformationHiding , trovato Questo link è davvero un'ottima fonte con esempi

InformationHiding è l'idea che una decisione di progettazione debba essere nascosta al resto del sistema per evitare accoppiamenti involontari. Il nascondere le informazioni è un principio progettuale. InformationHiding dovrebbe informare il modo in cui incapsuli le cose, ma ovviamente non è necessario .

L'incapsulamento è una funzione del linguaggio di programmazione.


1

Sia Abstraction che Encapsulation sono due dei quattro concetti base di OOP che consentono di modellare le cose del mondo reale in oggetti in modo da poterle implementare nel programma e nel codice. Molti principianti si confondono tra Astrazione ed Incapsulamento perché entrambi sembrano molto simili. Se chiedi a qualcuno cos'è l'astrazione, ti dirà che si tratta di un concetto di OOP che si concentra su informazioni rilevanti nascondendo dettagli non necessari, e quando chiedi dell'incapsulamento, molti diranno che è un altro concetto di OOP che nasconde i dati dall'esterno. Le definizioni non sono sbagliate poiché sia ​​Astrazione che Incapsulamento nascondono qualcosa, ma la differenza chiave sta nell'intento.

L'astrazione nasconde la complessità dandoti un'immagine più astratta, una sorta di 10.000 piedi di vista, mentre l'incapsulamento nasconde il lavoro interno in modo da poterlo modificare in seguito. In altre parole, l'astrazione nasconde i dettagli a livello di progettazione, mentre l'incapsulamento nasconde i dettagli a livello di implementazione.


0

Dopo aver letto tutte le risposte di cui sopra una per una, non riesco a impedirmi di pubblicarlo

l'astrazione implica la possibilità di definire oggetti che rappresentano "attori" astratti che possono eseguire lavori, riferire e cambiare il loro stato e "comunicare" con altri oggetti nel sistema.

L'incapsulamento è abbastanza chiaro dall'alto tuttavia ->

Il termine incapsulamento si riferisce al nascondere i dettagli dello stato, ma l'estensione del concetto di tipo di dati dai linguaggi di programmazione precedenti per associare il comportamento più fortemente ai dati e standardizzare il modo in cui i diversi tipi di dati interagiscono, è l'inizio dell'astrazione.

wiki di riferimento


0

Anch'io ero molto confuso riguardo ai due concetti di Astrazione ed Incapsulamento. Ma quando ho visto l' articolo di astrazione su myjavatrainer.com, mi è diventato chiaro che Astrazione ed Incapsulamento sono Mele e Arance, non puoi davvero confrontarle perché sono necessarie entrambe.

L'incapsulamento è il modo in cui l'oggetto viene creato e l'astrazione è il modo in cui l'oggetto viene visto nel mondo esterno.


0

Incapsulamento: dati vincolanti e metodi che agiscono su di esso. ciò consente di nascondere i dati da tutti gli altri metodi in altre classi. Esempio: MyListclasse che può aggiungere un elemento, rimuovere un elemento, e rimuovere tutti gli elementi del metodo add, removee removeAllagire sulla lista (una matrice privata), che non si può accedere direttamente dall'esterno.

Astrazione: nasconde comportamenti e dati non rilevanti. Il modo in cui gli elementi vengono effettivamente archiviati, aggiunti o eliminati viene nascosto (estratto). I miei dati possono essere conservati in array semplici, ArrayList, LinkedList e così via. Inoltre, come vengono implementati i metodi è nascosto dall'esterno.


0

Incapsulamento: imporre l'accesso ai dati interni in modo controllato o impedire l'accesso diretto ai membri.

Astrazione: nascondere i dettagli di implementazione di alcuni metodi è noto come astrazione

Comprendiamo con l'aiuto di un esempio: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

ora per l'astrazione definire un metodo a cui è possibile accedere solo e l'utente non sa quale sia il corpo del metodo e come funziona Consideriamo l'esempio sopra, possiamo definire un'area del metodo che calcola l'area del rettangolo.

 public int area()
 {
  return length*breadth;
 }

Ora, ogni volta che un utente utilizza il metodo sopra, otterrà l'area non nel modo in cui viene calcolata. Possiamo considerare un esempio del metodo println (), sappiamo solo che è usato per la stampa e non sappiamo come stampa i dati. Ho scritto un blog in dettaglio, puoi vedere il link qui sotto per ulteriori informazioni astrazione vs incapsulamento


0

Vale la pena notare che questi termini hanno definizioni IEEE standardizzate, che possono essere cercate su https://pascal.computer.org/ .

astrazione

  1. vista di un oggetto che si concentra sulle informazioni rilevanti per uno scopo particolare e ignora il resto delle informazioni
  2. processo di formulazione di una vista
  3. processo di soppressione dei dettagli irrilevanti per stabilire un modello semplificato o il risultato di tale processo

nascondere informazioni

  1. tecnica di sviluppo software in cui le interfacce di ciascun modulo rivelano il meno possibile sui meccanismi interni del modulo e agli altri moduli viene impedito di utilizzare informazioni sul modulo che non sono nelle specifiche dell'interfaccia del modulo
  2. contenimento di una decisione di progettazione o implementazione in un singolo modulo in modo tale che la decisione sia nascosta da altri moduli

incapsulamento

  1. tecnica di sviluppo software che consiste nell'isolare una funzione di sistema o un insieme di dati e operazioni su tali dati all'interno di un modulo e fornire specifiche precise per il modulo
  2. concetto che l'accesso ai nomi, significati e valori delle responsabilità di una classe è completamente separato dall'accesso alla loro realizzazione
  3. idea che un modulo ha un esterno distinto dal suo interno, che ha un'interfaccia esterna e un'implementazione interna
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.