Astrazione (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
fix
Riga 27:
 
== Caratteristiche dei linguaggi ==
 
=== Linguaggi di programmazione ===
 
Diversi linguaggi di programmazione offrono diversi tipi di astrazione, in base alle applicazioni destinate per il linguaggio. Ad esempio:
 
Line 37 ⟶ 35:
 
=== Metodi di specificazione ===
 
Gli analisti hanno sviluppato diversi metodi per specificare formalmente sistemi software. Alcuni metodi conosciuti includono:
 
Line 47 ⟶ 44:
 
=== Linguaggi di specificazione ===
 
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 controllo astratte ==
 
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>".
Per un uomo, questo sembra un semplice e ovvio calcolo (''"uno più due fa tre, per cinque fa quindici"''). Comunque, i passaggi a basso livello necessari per arrivare a questa conclusione, ritornare il valore "15", e assegnarlo alla variabile "a", sono invece più complesse. I valori devono essere convertiti in rappresentazione binaria (un processo più complicato di quanto si possa pensare) e i calcoli devono essere scomposti (dal compilatore o dall'interprete) in istruzioni in assembly (che sono molto meno intuitive al programmatore). Alla fine, assegnare il valore risultante "15" alla variabile chiamata "a", in modo che possa essere utilizzata successivamente, implica altri passaggi "dietro le quinte", come cercare la locazione di memoria dove inserire il valore "15", e così via.
Line 60 ⟶ 55:
 
=== Programmazione strutturata ===
 
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".
 
Line 68 ⟶ 62:
 
== Strutture di dati astratte ==
 
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.
 
Line 76 ⟶ 69:
 
== Astrazione nella programmazione orientata agli oggetti (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 (informatica)|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.
 
Line 138 ⟶ 130:
 
== Considerazioni ==
 
Quando si discute di [[semantica dei linguaggi di programmazione]], [[metodi formali]] o [[interpretazioni astratte]], con '''astrazione''' ci si riferisce a una meno dettagliata, ma sicura, definizione dei comportamenti di un determinato programma. Per esempio, è possibile osservare solo il risultato finale del programma, a meno che non si considerino tutti i passaggi intermedi dell'esecuzione. L'astrazione è definita per un '''concreto''' (più preciso) modello di esecuzione.