Design by contract
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.
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.
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.
- continua...
- Visita la Categoria:Storia dell'informatica

Il Data Encryption Standard (DES) è un algoritmo di cifratura scelto come standard dal Federal Information Processing Standard (FIPS) per il governo degli Stati Uniti d'America nel 1976 e in seguito diventato di utilizzo internazionale. Si basa su un algoritmo a chiave simmetrica con chiave a 56 bit. Questo algoritmo all'inizio ha suscitato molte discussioni per via della sua chiave di codifica corta e per via di alcune scelte progettuali che erano segretate. Si supponeva che dietro queste scelte vi fosse la National Security Agency (NSA) e l'inserimento di una backdoor. Di conseguenza il DES è stato oggetto di un'intensa analisi di tipo accademico che ha contribuito in modo notevole allo sviluppo delle conoscenze che sono alla base dei moderni algoritmi di cifratura e delle moderne tecniche di crittoanalisi.
Attualmente DES è considerato insicuro per moltissime applicazioni. La sua insicurezza deriva dalla chiave utilizzata per cifrare i messaggi, che è di soli 56 bit. Nel gennaio del 1999 distributed.net e Electronic Frontier Foundation collaborarono per rompere pubblicamente una chiave di crittazione, e ci riuscirono in 22 ore e 15 minuti. Con le attuali potenze di calcolo si può forzare una chiave DES in poche ore esaminando tutte le possibili combinazioni. L'algoritmo è ritenuto sicuro reiterandolo 3 volte nel Triple DES, anche se in teoria così è esposto ad alcuni attacchi. Negli ultimi anni DES è stato sostituito dall'Advanced Encryption Standard (AES) un nuovo algoritmo che elimina molti dei problemi del DES.
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.
(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)
Altri progetti
Wikiversità contiene un corso d'informatica
Wikiversità contiene un corso d'ingegneria 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.
- Visita la categoria degli informatici
- Alder Lake
- Attachment Unit Interface
- AMD Radeon serie 600
- AVIF
- Codici di escape ANSI
- Radeon R200
- IBM Power Systems
- AMD Radeon serie RX 6000
- European Processor Initiative
- PLATO
Quando scrivi una nuova voce, sei pregato di metterla anche nella lista delle voci di informatica. Grazie.