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}}
La seguente definizione di astrazione aiuta a capire come questo termine viene applicato all'[[
▲: "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
=== Linguaggi di
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
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
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
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
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
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
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
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
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
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
'''Livello
'''Livello a
=== Architettura a
L'abilità nel fornire un design di livelli differenti di astrazione può:
Riga 174:
* [[Interfaccia (informatica)|Interfaccia]]
* l'astrazione nel [[Lambda calcolo]]
{{portale|informatica}}
|