Astrazione (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m ortografia
le altre wikipedie non sono utilizzabili come fonti
Riga 1:
{{F|informatica|luglio 2011}}
In Nell'[[Informaticainformatica]], l'utilizzo dell''''Astrazioneastrazione''' riduce i dettagli, in modo che ci si possa concentrare su pochi concetti alla volta.
 
La seguente definizione di astrazione aiuta a capire come questo termine viene applicato all'[[Informaticainformatica]].:
: "{{q|Astrazione - Un concetto o un'idea non associata a nessuna istanza specifica."}}
 
: "Astrazione - Un concetto o un'idea non associata a nessuna istanza specifica."
 
Il concetto è originato mediante l'analogia con l'astrazione in [[matematica]]. La tecnica matematica dell'astrazione comincia con [[definizione|definizioni]] matematiche; Ad esempio, sia in [[Informatica]] che in [[Matematica]] i numeri sono concetti nei linguaggi di programmazione. I dettagli dell'implementazione dipendono dall'[[hardware]] e dal [[software]], ma non è una restrizione, poiché il concetto di [[numero]] in [[Informatica]] è ancora basato sul concetto matematico.
Riga 23:
Alcune astrazioni provano a limitare la larghezza dei concetti di cui un programmatore ha bisogno nascondendo completamente le astrazioni sulle quali a loro volta sono costruite. [[Joel Spolsky]], comunque, afferma che nessuna astrazione può completamente nascondere tutti i dettagli: ad ogni modo, questo non nega l'utilità dell'astrazione. Alune astrazioni sono designate per interagire con altre, ad esempio un linguaggio di programmazione potrebbe contenere una [[Foreign Function Interface|FFI]] (Foreign Function Interface) per effettuare chiamate a linguaggi di basso livello.
 
== Caratteristiche dei Linguaggilinguaggi ==
 
=== Linguaggi di Programmazioneprogrammazione ===
 
Diversi linguaggi di programmazione offrono diversi tipi di astrazione, in base alle applicazioni destinate per il linguaggio. Ad esempio:
Riga 33:
* Il linguaggio [[Linda]] permette l'astrazione di alcuni concetti come quello di ''server'' per facilitare la programmazione distribuita.
 
=== Metodi di Specificazionespecificazione ===
 
Gli analisti hanno sviluppato diversi metodi per specificare formalmente sistemi software. Alcuni metodi conosciuti includono:
Riga 43:
* Tecniche basate sulla conoscenza (Refine, Gist).
 
=== Linguaggi di Specificazionespecificazione ===
 
I linguaggi di specificazione spesso fanno affidamento su un tipo di astrazione o un altro, visto che le specificazioni sono tipicamente definite all'inizio di un progetto (ad un livello più astratto). Il linguaggio UML, ad esempio, permette di definire classi astratte, che rimangono astratte durante l'architettura e la fase di specificazione del progetto.
 
== Strutture di Controllocontrollo Astratteastratte ==
 
I linguaggi di programmazione permettono astrazioni di strutture di controllo come uno dei loro compiti principali. I computer eseguono operazioni ad un livello molto basso, ad esempio muovendo alcuni [[bit]] da una locazione di memoria ad un'altra, producendo la somma di due sequenze di bit. I linguaggi di programmazione permettono che questo sia fatto ad un livello più alto. Consideriamo ad esempio questo codice scritto in Pascal: "<code>a := (1 + 2) * 5;</code>".
Riga 56:
# Forza il programmatore a programmare per uno specifico set di hardware e istruzioni (si parla quindi di linguaggi legati alla macchina)
 
=== Programmazione Strutturatastrutturata ===
 
La [[programmazione strutturata]] implica la suddivisione di complessi compiti di un programma in pezzi più piccoli con lo scopo di semplificarli ed evitare "effetti collaterali".
 
In un programma semplice, questo potrebbe servire per assicurarsi che un ciclo abbia un singolo o più ovvi punti di uscita e, dove possibile, per assicurarsi che funzioni e procedure ne abbiano solo uno.
Riga 64:
In un sistema più grande, invece, potrebbe implicare la suddivisione di compiti complessi in tanti moduli diversi. La programmazione orientata agli oggetti (OOP) ha abbracciato e esteso questo concetto.
 
== Strutture di Datidati Astratteastratte ==
 
Le strutture di dati astratte rinforzano una chiara separazione tra le proprietà astratte di un tipo di dati e i dettagli concreti della sua implementazione. Le proprietà astratte sono quelle che sono visibili a colui che fa uso del tipo di dati - l'interfaccia del tipo di dati - mentre l'implementazione concreta è completamente mantenuta privata, e ovviamente può cambiare per implementare migliorie di efficienza nel tempo. L'idea è che questi cambiamenti non devono avere alcun impatto, e non devono creare differenze nell'aspetto astratto.
Riga 72:
I linguaggi che implementano le strutture di dati astratte includono [[Ada]] e [[Modula-2]].
 
== Astrazione nella Programmazioneprogrammazione Orientataorientata agli Oggettioggetti (OOP) ==
 
Nella teoria della [[programmazione orientata agli oggetti]], l'astrazione implica la facilità di definire oggetti che rappresentino "attori" che possono svolgere lavori, riportare e cambiare il loro stato, e comunicare con gli altri oggetti nel sistema. Il termine [[incapsulamento]] si riferisce al nascondere i dettagli di stato, ma estendere il concetto di ''tipo di dato'' dai primi linguaggi di programmazione, e standardizzare il modo in cui i diversi tipi di dati interagiscono, è l'inizio dell'astrazione. Si parla di [[polimorfismo (informatica)|polimorfismo]] quando l'astrazione consente a oggetti di diverso tipo di venire sostituiti. Si parla di [[ereditarietà]] quando più tipi o classi vengono strutturati per semplificare un set complesso di relazioni.
 
Vari linguaggi di programmazione orientata agli oggetti offrono simili agevolazioni per l'astrazione, per supportare tutti insieme una strategia generale di polimorfismo, che implica la sostituzione di un tipo in uno che abbia lo stesso ruolo o uno simile.
Riga 129:
Una astrazione del genere rimuoverebbe il bisogno di specificare il tipo di cibo, in modo da concentrarsi invece sulla pianificazione del nutrimento. Le due classi potrebbero essere legate usando [[ereditarietà]] o potrebbero essere da sole, e il programmatore potrebbe definire vari gradi di polimorfismo tra i due tipi. Queste agevolazioni tendono a variare drasticamente tra un linguaggio e l'altro, ma in generale ciò che riesce a fare uno può essere fatto con tutti gli altri.
 
=== Design Orientatoorientato agli Oggettioggetti ===
Le decisioni su cosa rendere astratto e cosa no è diventata la maggiore preoccupazione del design orientato agli oggetti e dell'analisi dei domini - ciò che invero determina le relazioni rilevanti nel mondo reale è ciò che riguarda l'analisi orientata agli oggetti.
 
Riga 148:
L'astrazione è il concetto principale dell'interpretazione astratta. Il [[Model Checking]] generalmente prende luogo su versioni astratte dei sistemi studiati.
 
== Livelli di Astrazioneastrazione ==
 
L'informatica presenta comunemente ''livelli'' (o meno comunemente, ''strati'') di astrazione, dove ogni livello rappresenta un diverso modello della stessa informazione o processo, ma usa un sistema di espressione che implica un diverso set di oggetti e composizioni che si applicano solo ad un particolare dominio. I livelli più "alti" di astrazione tendono a costruirsi su qualcosa di relativamente concreto, mentre quelli più "bassi" tendono a dare progressivamente una rappresentazione più "granulare". Ad esempio, le porte costruite mediante circuiti elettronici, il linguaggio macchina binario, linguaggi di programmazione basati sul linguaggio binario, applicazioni e sistemi operativi basati su linguaggi di programmazione. Ogni livello è incorporato, ma non determinato, dal livello sotto di esso, rendendolo un linguaggio di descrizione che è in un certo senso autocontenuto.
 
=== Sistemi di Databasedatabase ===
 
Poiché molti utenti di sistemi di [[database]] hanno molta familiarità con le strutture di dati, gli sviluppatori di database spesso nascondono le complessità attraverso i seguenti livelli:
 
'''Livello Fisicofisico:''' Il livello più basso di astrazione descrive ''come'' un sistema immagazzini i dati. Il livello fisico descrive dettagliatamente le strutture di dati a basso livello.
 
'''Livello Logicologico:''' Il livello superiore di astrazione descrive ''quali'' dati immagazzina il database, e quali relazioni ci sono tra questi dati. Il livello logico quindi descrive un intero database in termini di piccoli numeri e strutture relativamente semplici. Anche se l'implementazione delle semplici strutture a livello logico potrebbe implicare complesse strutture a livello fisico, gli utilizzatori dei livelli logici non devono preoccuparsi di queste complessità. Gli amministratori dei database, che devono decidere quali informazioni tenere in un database, usano il livello di astrazione logico.
 
'''Livello a Visteviste:''' Il livello più alto di astrazione descrive solo parte dell'intero database. Anche se il livello logico usa struttura più semplici, rimane la complessità a causa della varietà di informazioni immagazzinata in un grande database. Ad alcuni utenti di sistemi di database non servono tutte queste informazioni; invece, hanno solo bisogno di accedere a una parte del database. Il livello di astrazione a [[vista (database)|viste]] esiste per semplificare la loro interazione con il sistema. Il sistema potrebbe anche fornire più viste per lo stesso database.
 
=== Architettura a Stratistrati ===
 
L'abilità nel fornire un design di livelli differenti di astrazione può:
Riga 174:
* [[Interfaccia (informatica)|Interfaccia]]
* l'astrazione nel [[Lambda calcolo]]
 
== Note ==
 
''Questa voce è basata sulla voce di Wikipedia Inglese "Abstraction (computer science)"''
 
# http://en.wikipedia.org [[:en:Abstraction (computer science)]] ''Abstraction (Computer Science)''.
 
{{portale|informatica}}