Design by contract or DBC (in italiano, progettazione per contratto) è una metodologia per progettare il software. Prescrive che i progettisti di software debbano definire specifiche precise e verificabili delle interfacce dei componenti software, basandosi sulla teoria dei tipi di dati astratti e sulla metafora di un contratto legale.

L'idea centrale del DBC è che le entità software hanno degli obblighi nei confronti di altre entità in base a regole formalizzate fra di essi. Una specifica funzionale, o 'contratto', viene creato per ogni modulo nel sistema prima che sia codificato. L'esecuzione del programma è quindi vista come l'interazione fra i vari moduli vincolati da questi contratti.

In generale, le routine hanno precondizioni esplicite che il chiamante deve soddisfare prima di chiamare la routine, e postcondizioni esplicite che descrivono le condizioni che la routine garantirà essere vere nel momento in cui la routine finisce. Così, un contratto assume la seguente forma generale: "Se tu, il chiamante, predisponi certe precondizioni, allora io stabilirò certi altri risultati quando ti avrò terminato. Se tu violi le precondizioni, allora non ti prometto niente." L'implementazione di ogni modulo può allora essere scritta assumendo la correttezza dei moduli che usa (i suoi subappaltatori), purché soddisfi le loro precondizioni.

Molti linguaggi forniscono la possibilità di fare asserzioni come queste. Tuttavia, il DBC è innovativo nel riconoscere che questi contratti sono così cruciali per la correttezza del software da dover far parte del processo di progettazione. In effetti, se si vogliono usare le asserzioni come garanzia del fatto che l'implementazione svolta rispetta tutte le specifiche funzionali descritte in fase di analisi, tali asserzioni dovrebbero essere scritte prima del codice.

Il concetto di contratto si estende verso il basso fino al livello dei metodi/routine; il contratto per ogni metodo conterrà normalmente le seguenti informazioni:

  • Input accettabili e inaccettabili
  • Valori resi, e il loro significato
  • Condizioni erronee o eccezionali che possono avvenire
  • Effetti collaterali
  • Precondizioni
  • Postcondizioni
  • Invarianti
  • (Raramente) Garanzie di prestazioni, cioè sul tempo e lo spazio utilizzati

Usando la metodologia DBC, in caso di codice scritto a malo modo, il codice stesso del programma presumibilmente non verificherà le condizioni del contratto; la codifica in tal caso fallirà, avendo la verifica del contratto come rete di sicurezza. (Questo si pone in netto contrasto con la metodologia della programmazione difensiva.) Questo facilita molto il debugging, perché il comportamento inteso di ogni routine viene specificato chiaramente.

Portale Informatica

Il Portale Informatica è un punto di raccolta per le voci riguardanti l'informatica, lo studio dei fondamenti teorici dell'informazione e della computazione e delle tecniche pratiche per la loro implementazione e applicazione nei sistemi informatici. L'informatica è frequentemente descritta come lo studio sistematico dei processi algoritmici che descrivono e trasformano l'informazione. È il punto di incontro di almeno due discipline autonome: il progetto, la realizzazione e lo sviluppo di macchine rappresentatrici ed elaboratrici di numeri e i metodi di risoluzione algoritmica di problemi dati.

Storia dell'informatica

L'informatica ha radici molto antiche, in quanto sistemi per automatizzare il trattamento dei dati e delle operazioni aritmetiche erano noti già ai Babilonesi intorno al X secolo a.C., in India e in Cina forse addirittura prima. L'informatica in senso moderno, però, nasce soprattutto dal lavoro di precursori quali Pascal e Gottfried Leibniz, iniziatori come Babbage, Ada Lovelace, Zuse, Atanasoff, ancora Alan Turing, Stibitz e Howard Aiken, creatori dei primi progetti computazionali di vasto respiro come de Finetti, von Neumann e Wiener.


Voci in vetrina

Ubuntu ([uːˈbuːntuː], [ùbúntú] in zulu, termine etico di area culturale africana) è un sistema operativo Linux nato nel 2004, basato su Debian, che si focalizza sull'utente e sulla facilità di utilizzo. Ubuntu è orientato all'utilizzo desktop e pone una grande attenzione al supporto hardware. È prevista una nuova versione ogni sei mesi.

Finanziato dalla società Canonical Ltd (registrata nell'Isola di Man), questo sistema è rilasciato come software libero sotto licenza GNU GPL ed è gratuito e liberamente modificabile. L'ideatore dell'iniziativa è Mark Shuttleworth, un giovane imprenditore sudafricano diventato sostenitore del software libero al cui servizio ha posto le sue risorse. Ubuntu infatti, prende il nome da un'antica parola africana che significa "umanità agli altri", oppure "io sono ciò che sono per merito di ciò che siamo tutti".

Il 1º luglio 2005 è nata la Fondazione Ubuntu con un fondo iniziale di 10 milioni di dollari, il cui scopo è lo sviluppo della distribuzione nel caso in cui Canonical Ltd dovesse cessare le attività. La fondazione è al momento dormiente.


continua...
Voce della settimana

Il C++ è un linguaggio di programmazione orientato agli oggetti, con tipizzazione statica. È stato sviluppato (in origine col nome di "C con classi") da Bjarne Stroustrup ai Bell Labs nel 1983 come un miglioramento del linguaggio C. Il miglioramento iniziale è stata l'aggiunta delle classi, seguito, tra le altre cose, dalle funzioni virtuali, overloading degli operatori, ereditarietà multipla, template e gestione delle eccezioni.

Calendario voce della settimana

Citazioni

(da Informatica su Wikiquote)

  • L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi. (Edsger Wybe Dijkstra)
  • Errare è umano, ma per incasinare davvero tutto ci vuole un computer. (Legge di Murphy- Quinta legge dell'inattendibilità)
  • I computer sono inutili, possono dare solo risposte. (Pablo Picasso)
  • Il calcolatore è straordinariamente veloce, accurato e stupido. L'uomo è incredibilmente lento, impreciso e creativo. L'insieme dei due costituisce una forza incalcolabile. (Albert Einstein)
  • La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
  • Non ho paura dei computer, ma della loro eventuale mancanza. (Isaac Asimov)
  • Il testing non può mai rivelare l'assenza di bug. (Edsger Wybe Dijkstra)
  • Computer: cretino ad alta velocità in dotazione, spesso, a cretini molto lenti. (Stefano Benni)
  • Sono convinto che l'informatica abbia molto in comune con la fisica. Entrambe si occupano di come funziona il mondo a un livello abbastanza fondamentale. La differenza, naturalmente, è che mentre in fisica devi capire come è fatto il mondo, in informatica sei tu a crearlo. Dentro i confini del computer, sei tu il creatore. Controlli - almeno potenzialmente - tutto ciò che vi succede. Se sei abbastanza bravo, puoi essere un dio. Su piccola scala.ra invenzione dell'uomo - con l'eccezione forse delle armi da fuoco e della tequila. (Mitch Ratcliffe)
  • Mai fidarsi di un computer che non è possibile gettare dalla finestra. (Steve Wozniak)
  • Ogni buon lavoro software nasce da un problema personale di uno sviluppatore. (Eric Steven Raymond)
  • I bravi programmatori sanno cosa scrivere, i migliori sanno cosa riscrivere (e riusare). (Eric Steven Raymond)
  • È meglio usare programmi di alta qualità senza costi di licenza, che costosi programmi proprietari di scarso valore. (Walter Bender, direttore del Media Lab del MIT)
  • Il computer non è una macchina intelligente che aiuta le persone stupide, anzi è una macchina stupida che funziona solo nelle mani delle persone intelligenti. (Umberto Eco)
Portali correlati
  Portale Telematica: accedi alle voci di Wikipedia che parlano di reti, telecomunicazioni e protocolli di rete
  Portale Apple: accedi alle voci di Wikipedia che trattano di Apple
  Portale Microsoft: accedi alle voci di Wikipedia che trattano di Microsoft
  Portale Google: accedi alle voci di Wikipedia che trattano di Google
  Portale Internet: accedi alle voci di Wikipedia che trattano di Internet
  Portale Software libero: accedi alle voci di Wikipedia che trattano di Software libero
  Portale Videogiochi: accedi alle voci di Wikipedia che trattano di Videogiochi
  Portale Sicurezza informatica: accedi alle voci di Wikipedia che trattano di Sicurezza informatica

Altri progetti

Personaggi legati all'informatica

Sir Timothy John Berners-Lee (Londra, 8 giugno 1955) è un informatico britannico, co-inventore insieme a Robert Cailliau del World Wide Web.

Nel 1980 trascorse sei mesi, da giugno a dicembre, al CERN come consulente nel campo dell'ingegneria del software. Lì realizzò, per uso privato, il primo software per immagazzinare informazioni usando associazioni casuali. Tale programma (chiamato Enquire e mai pubblicato) formerà la base concettuale per il futuro sviluppo del World Wide Web.

Dal 1981 al 1984 lavorò al John Poole's Image Computer Systems Ltd. Nel 1984 ritornò al CERN con una borsa di studio per lavorare sui sistemi distribuiti sistema real-time per l'acquisizione di dati scientifici e sistemi di controllo.

Nel 1989 propose un progetto globale sull'ipertesto, poi noto come World Wide Web.


Categorie