Svigruppo. Monga. Il modello di. Asserzioni. What & How Contratti ed ereditarietà Eccezioni Qualche dettaglio in più sul linguaggio. Svigruppo.
|
|
- Vittoria Speranza
- 5 anni fa
- Visualizzazioni
Transcript
1 Sviluppo software in gruppi di lavoro complessi 1 Mattia Lezione VIII: Design by Contract Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it Anno accademico 2018/19, I semestre 1 cba 2018 M.. Creative Commons Attribuzione Condividi allo stesso mo 4.0 Internazionale Un linguaggio object-oriented che introduce i contratti nell interfaccia delle classi. Il contratto di default per un meto ( feature ) F è {True}F {True}. feature decrement is -- Decrease counter by one. item > 0 -- pre-condition item := item implementation item = old item post-condition è esplicitamente progettato come linguaggio di progetto, non solo di programmazione : specify, design, implement and modify quality software [Ecma standard 367] Programmazione in grande con oggetti, derivati da classi organizzate in gerarchie di e raggruppate in cluster, che forniscono feature (command o query) ai loro client
2 Organizzazione delle asserzioni Il supporto del linguaggio pre/post-condizioni sulle feature (, ) Invarianti di classe (invariant) asserzioni (check) invariant (from invariant until variant ) invarianti di classe sono condizioni che devono essere vere in ogni momento critico, ossia osservabile dall esterno. In pratica e come se facessero parte di ogni pre- e post-condizione. è possibile avere un supporto run-time alle violazioni: se una condizione non vale viene sollevata un eccezione L eccezione porta il sistema nel precedente stato stabile ed è possibile terminare con un fallimento riprovare Demo Demo I class ROOT_TEST_STABLE_STATES create make feature {NONE} secret: BOOLEAN feature {ANY} make -- root class cannot have preconditions -- ok_pre("make") print("executing make%n") mycommand; secret := TRUE ok_post("make") mycommand ok_pre("mycommand") print("executing mycommand%n") secret := FALSE; myother("1"); secret := TRUE -- But what happens if myother is a "client"? -- secret := FALSE; Current.myother("2"); secret := TRUE ok_post("mycommand") myother (s: STRING) ok_pre("myother") print("executing myother " + s + "%N") ok_post("myother") ok_inv: BOOLEAN print("checking ok_inv!%n"); Result := secret; ok_pre (w: STRING): BOOLEAN print("checking " + w + "%N"); Result := True; ok_post (w: STRING): BOOLEAN print("checking " + w + "%N"); Result := True; invariant ok_inv 107 class GCD create make feature gcd (x: INTEGER; y: INTEGER): INTEGER positive_parms: x >= 0 and y >= 0 not_zero: x /= 0 or y /= 0 local t: INTEGER if x = 0 or y = 0 then Result := x.max (y) from Result := x; t := y invariant positive_result: Result > 0 positive_t: t > 0 gcd_inv: mathgcd(x, y) = mathgcd(result, t) until Result = t if Result > t then Result := Result - t t := t - Result variant t.max(result) positive_ris: Result > 0 dividex: x = 0 or x.integer_remainder(result) = 0 dividey: y = 0 or y.integer_remainder(result) = 0 Result = x.min(y) or across ((Result+1).to_integer x.min(y)) as ic all (x.integer_remainder(ic.item) /= 0 or y.integer_remainder(ic.item) /= 0) 108
3 Demo II Procedurale vs. Dichiarativo make print("ris: " + gcd(126,294).out + " %N") print("ris: " + gcd(0,294).out + " %N") mathgcd(x,y: INTEGER):INTEGER from Result := x.min(y) until y.integer_remainder(result) = 0 and then x.integer_remainder(result) = 0 Result := Result - 1 Spesso si scrivono le stesse cose due volte: balance := balance - x balance = old balance - x Implementazione e specifica How & What Il client è responsabile delle precondizioni, il fornitore di postcondizioni e invarianti Principio di sostituibilità Le due condizioni sono quindi: Il principio di sostituzione di Liskov stabilisce che, perché un oggetto di una classe derivata soddisfi la relazione is-a, ogni suo meto: deve essere accessibile a pre-condizioni uguali o piú deboli del meto della superclasse; deve garantire post-condizioni uguali o piú forti del meto della superclasse; Altrimenti il figlio non può essere sostituito al padre senza alterare il sistema. PRE parent = PRE derived (1) POST derived = POST parent (2) (1) in un programma corretto non può succedere che PRE parent valga e PRE derived no; l oggetto evoluto deve funzionare in ogni stato in cui funzionava l originale: non può avere obbligazioni piú stringenti, semmai piú lasche. (2) in un programma corretto non può succedere che valga POST derived ma non POST parent ; un stato corretto dell oggetto evoluto deve essere corretto anche quan ci si atte i benefici dell originale
4 Principio di sostituibilità (cont.) Contratti astratti Un mo per garantire che le condizioni (1) e (2) siano automaticamente vere consiste nell assumere implicitamente che, se la classe evoluta specifica esplicitamente una precondizione P e una postcondizione Q, le reali pre- e post-condizioni siano: PRE derived = PRE parent P (3) POST derived = POST parent Q (4) In : e then PRE parent = PRE derived POST derived = POST parent ext (x: G) -- Add `x' at of list. space_available: not full deferred one_more: count = old count + 1 full: BOOLEAN -- Is representation full? -- (Default: no) Result := False Stronger precondition... ma weaker (uguali in realtà) in astratto full: BOOLEAN -- Is representation full? -- (Answer: if and only if -- number of items is equal -- to capacity) Result := (count = capacity) Problema: i parametri... Trattamento delle situazioni anomale Animale mangia Cibo (is a Cosa) Mucca (is a Animale) mangia Erba (is a Cibo) Ma questa covarianza è contraria al principio di Liskov perché restringe le precondizioni. La controvarianza (Mucca mangia Cosa, Sather) e l invarianza (Mucca mangia Cibo, Java) vanno bene. invece è covariante... (il che, impeden un controllo di conformità statico, introduce parecchie complicazioni CATcall, run time type identification... ). Nel modello di hanno un ruolo importante le eccezioni, che vengono trattate in un mo differente da quello dei piú diffusi linguaggi di programmazione (Ada-like). Exception An exception is a run-time event that may cause a routine call to fail (contract violation). A failure of a routine causes an exception in its caller
5 Anti-pattern Il trattamento delle eccezioni in sqrt (n: REAL): REAL if x < 0.0 then raise Negative normal_square_root_computation exception when Negative => print("negative argument%n") return when others => Due modalità: 1 Failure (organized panic): clean up the environment, terminate the call and report failure to the caller. 2 Retry: attempt to change the conditions that led to the exception and to execute the routine again from the start. Per trattare il secon caso, introduce il costrutto rescue/retry. Se il corpo del rescue non fa retry, si ha un failure. In questo caso il meccanismo delle eccezioni è usato come strumento di controllo del flusso! Esempio Correttezza div (num: REAL, denom: REAL): REAL denom /= 0 deferred quasi_inverse (x: REAL): REAL -- div(1, x) if possible, otherwise 0 local division_tried: BOOLEAN if not division_tried then Result := div (1, x) Result := 0 rescue division_tried := True retry 119 Per ogni feature (pubblica) f : {PRE f INV } body f {POST f INV } {True} rescue f {INV } {True} retry f {INV PRE f } 120
6 Hello world! Caratteristiche di note description: "Esempio base per iniziare" author: "Mattia " class HELLO create make feature -- sezione: puo` contenere molte feature make local s: STRING s := "Hello" print (s + " World%N") io.put_string ("Hello World"); io.put_new_line Si può compilare senza Studio: ec -class_file.e hello.e 121 Le variabili (entities) possono essere reference (default) o expanded Void, True, False, Result, Current, Precursor, ANY, NONE assegnamento :=, clone x := y.twin (o x := y.deep_twin) reference x = y, expanded x ~ y, equal(x, y) funziona anche se x è Void gli attributi sono feature in sola lettura 122 Strutture di controllo Particolarità if then if then inspect exp when v1 then inst when v2 then inst2 inst0 from my_list.start until my_list.off print (my_list.item) my_list.forth -- command across my_list as ic print (ic.item) -- query across my_list as ic all ic.item > 3 -- query across my_list as ic some ic.item > multipla rename, export, undefine, redefine (Precursor), select (utile solo nel caso di diamond inheritance) ereditarità non conforme inherit {NONE}: senza polimorfismo, riuso puro: analogo al copia e incolla
Sviluppo software in gruppi di lavoro complessi 1
Sviluppo software in gruppi di lavoro complessi 1 Mattia lab Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it Anno accademico 2016/17, I semestre 1 cba 2016 M.. Creative
Svigruppo. Monga. Il modello di. Asserzioni. What & How Contratti ed ereditarietà Eccezioni. Svigruppo. Monga. Il modello di.
Sviluppo software in gruppi di lavoro complessi 1 Mattia Lezione VI: Design by Contract Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it Anno accademico 2017/18, I semestre
Prova di esame del 19 giugno 2017
Prova di esame del 19 giugno 2017 Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere un qualunque numero naturale di affermazioni vere. Vengono assegnati 0.5 punti
Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 24 settembre 2015
Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A. 2014-15 Prova di esame del 24 settembre 2015 Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere
Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 19 luglio 2014
Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A. 2013-14 Prova di esame del 19 luglio 2014 Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere un
Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 18 giugno 2013
Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A. 2012-13 Prova di esame del 18 giugno 2013 Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere un
Prova di esame del 22 luglio 2016
Esercizio 1) [10 punti] Prova di esame del 22 luglio 2016 Marcare le affermazioni che si ritengono vere. Ogni manda può avere un qualunque numero naturale di affermazioni vere. Vengono assegnati 0.5 punti
Prova di esame del 1 luglio 2019
Prova di esame del 1 luglio 2019 Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere un qualunque numero naturale di affermazioni vere. Vengono assegnati 0.5 punti
Uso di Asserzioni alla Hoare nei Linguaggi O.O. Java Modeling Language
Uso di Asserzioni alla Hoare nei Linguaggi O.O. Java Modeling Language Gennaio 2002 NB: tutti gli esempi in JML NON sono stati testati quindi non garantisco sulla sintassi! Scopo: descrivere in modo astratto
Prova di esame del 16 giugno 2016
Esercizio 1) [10 punti] Prova di esame del 16 giugno 2016 Marcare le affermazioni che si ritengono vere. Ogni manda può avere un qualunque numero naturale di affermazioni vere. Vengono assegnati 0.5 punti
SOLUZIONE: come antenato comune. Fondamenti della Programmazione: Metodi Evoluti - A.A Prova d esame del 24 febbraio 2014
Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere un qualunque numero naturale di affermazioni vere. Vengono assegnati 0.5 punti sia per ogni affermazione vera
Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio
Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica Introduzione Ereditarietà in Sintesi È uno dei concetti chiave della programmazione orientata agli
Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 24 settembre 2013
Compito di Prova di esame del 24 settembre 2013 Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni domanda può avere un qualunque numero naturale di affermazioni vere. Vengono
Prova di esame del 21 giugno 2018
Prova di esame del 21 giugno 2018 Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere un qualunque numero naturale di affermazioni vere. Vengono assegnati 0.5 punti
INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione
INTRODUZIONE ALLA LOGICA DI HOARE Corso di Logica per la Programmazione INTRODUZIONE Dall inizio del corso ad ora abbiamo introdotto, un po alla volta, un linguaggio logico sempre più ricco: connettivi
Prova di esame del 19 luglio 2019
Prova di esame del 19 luglio 2019 Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere un qualunque numero naturale di affermazioni vere. Vengono assegnati 0.5 punti
Conoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione
1 Conoscere l uso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali classi di Collection usare in casi specifici Conoscere
FUNZIONI PARAMETRI DEFINIZIONI DI PROCEDURE PROCEDURE
FUNZIONI PARAMETRI function nome [ (parametri) ] return tipo; Definizione: function nome [ (parametri) ] return tipo is dichiarazioni; comandi; gestori; Il corpo contiene uno o più comandi return expr
FUNZIONI. Dichiarazione: Definizione:
FUNZIONI Dichiarazione: function nome [ (parametri) ] return tipo; Definizione: function nome [ (parametri) ] return tipo is dichiarazioni; begin comandi; exception gestori; end [nome]; Il corpo contiene
Logica per la Programmazione
Logica per la Programmazione Lezione 12 Linguaggio di Programmazione Imperativo: Sintassi e Semantica Concetto di Tripla di Hoare Soddisfatta pag. 1 Introduzione Dall inizio del corso ad ora abbiamo introdotto,
Python. Loriano Storchi.
Python Loriano Storchi loriano@storchi.org http:://www.storchi.org/ I linguaggi di programmazione Abbiamo visto che i linguaggi di programmaione sono: Dichiarativi Logici Funzionali Imperativi Procedurali
Logica per la Programmazione
Logica per la Programmazione Lezione 11 Linguaggio di Programmazione Imperativo: Sintassi e Semantica Concetto di Tripla di Hoare Soddisfatta pag. 1 Introduzione Dall inizio del corso ad ora abbiamo introdotto,
Basi di Dati: Corso di laboratorio
Basi di Dati: Corso di laboratorio Lezione 9 Raffaella Gentilini 1 / 41 Sommario 1 DBMS Attivi e Triggers 2 2 / 41 DBMS Attivi DBMS Attivi I DBMS tradizionale sono passivi: Eseguono delle operazioni solo
Semantiche dei linguaggi di programmazione
Semantiche dei linguaggi di programmazione By Giulia Costantini (819048) e Giuseppe Maggiore (819050) Contents La semantica del linguaggio... 1 Tipi di semantica... 1 Esempio di semantica operazionale...
Controllo del flusso. Laboratorio di Sistemi Operativi primavera if/else. if/else
Laboratorio di Sistemi Operativi primavera 2009 Controllo del flusso Il controllo del flusso dà al programmatore la possibilità di scegliere che solo una parte del codice venga eseguita o che un altra
Sistemi Operativi 1. Mattia Monga. a.a. 2010/11. Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia
1 Mattia Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2010/11 1 c 2011 M.. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia
Linguaggi di programmazione: sintassi e semantica Sintassi fornita con strumenti formali: Semantica spesso data in modo informale
LOGICA DI HOARE INTRODUZIONE Linguaggi di programmazione: sintassi e semantica Sintassi fornita con strumenti formali: es. grammatica in BNF Semantica spesso data in modo informale di stile operazionale
OOP: Object Oriented Programming
OOP: Object Oriented Programming Riferimenti per questa parte: 1. Capitoli 7 e 8 del testo di riferimento 2. https://docs.python.org/3.6/tutorial/classes.html OOP: Idea Principale L idea principale della
SOMMARIO Tipo di dato astratto (ADT) : Interfacce: interface. TIPI DI DATI ASTRATTI. Polimorfismo: Tipo class. Tipo interface. Tipi run-time: is e as.
SOMMARIO Tipo di dato astratto (ADT) : Interfacce: interface. Polimorfismo: Tipo class. Tipo interface. Tipi run-time: is e as. Confronto tra oggetti: Equals(). IComparable. IComparer. TIPI DI DATI ASTRATTI
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
Stringhe. Prof. Lorenzo Porcelli
Stringhe Prof. Lorenzo Porcelli definizione Una stringa è un vettore di caratteri terminato dal carattere nullo \0. Il carattere nullo finale permette di determinare la lunghezza della stringa. char vet[32];
Progettazione By Contract
Progettazione By Contract Documentazione di progetto Contratti per i metodi Correttezza dell implementazione invarianti per le classi Verifica asserzioni Eccezioni Progettazione By Contract Contratti per
Richiami Java e Arrays
Richiami Java e Arrays concetti base G.T. 1 casting G.T. 1.3.3 e 2.5 uso array G.T. 3.1 lista semplice G.T. 3.2 1 Concetti base Oggetto istanza (di una classe) classe (tipo di un oggetto) variabili di
PROGRAMMAZIONE Nomi, binding, regole di visibilità (scope)
PROGRAMMAZIONE 2 19. Nomi, binding, regole di visibilità (scope) PR2 2017-2018 1 Nomi Un nome in un linguaggio di programmazione è esattamente quello che immaginate o la maggior parte dei nomi sono definiti
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA
Problema: stampa degli interi compresi tra n e m
Costrutti imperativi Problema: stampa degli interi compresi tra n e m http://caml.inria.fr/pub/docs/manual-ocaml/libref/pervasives.html Output functions on standard output val print_string: string -> unit
Esercitazione di lunedì - TUTTE LE MATRICOLE -
1 Esercitazione di lunedì - TUTTE LE MATRICOLE - 2 Pre-esercitazione - Prova a fare il primo esercizio guidato in modo da riprendere le fila del discorso fatto a lezione su come strutturare un progetto.
Sistemi Operativi 1. Lezione III: Concetti fondamentali. Mattia Monga. 7 marzo 2008
1 Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it 7 marzo 2008 1 c 2008 M. Monga. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia
Sistemi Operativi 1. Mattia Monga. 7 marzo Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia
1 Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it 7 marzo 2008 1 c 2008 M. Monga. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia
Asserzioni in Java fondamenti
Asserzioni in Java fondamenti Cosa è un asserzione? Una assertion è una espressione booleana che deve essere true se e solo se il codice sta funzionando correttamente. Se l asserzione risulta falsa, viene
Le basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
UML: Aggregazione. class A { int s; public void sets(int){ }; public int gets() { }; class B {A ob; public void usea() { }; }
UML: Aggregazione class A { int s; public void sets(int){ ; public int gets() { ; class B {A ob; public void usea() { ; Aggregation - Composition Use aggregation (has-a) when the lifecycle of the partecipating
College Algebra. Logarithms: Denitions and Domains. Dr. Nguyen November 9, Department of Mathematics UK
College Algebra Logarithms: Denitions and Domains Dr. Nguyen nicholas.nguyen@uky.edu Department of Mathematics UK November 9, 2018 Agenda Logarithms and exponents Domains of logarithm functions Operations
Programmazione lato client. JavaScript. Applicazioni di Rete M. Ribaudo - DISI. JavaScript
Programmazione lato client Netscape: Microsoft: JScript ECMAScript (ECMA-262) (European Computer Manufactures Association) 1 Linguaggio di script interpretato con alcune caratteristiche Object Oriented
A.A. 2006/2007 Laurea di Ingegneria Informatica. Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio
A.A. 2006/2007 Laurea di Ingegneria Informatica Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio Obbiettivi Acquisire familiarità con la nozione di oggetto Apprendere le proprietà
Polimorfismo parametrico vs polimorfismo per inclusione
Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico
public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;
Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i
Istruzioni condizionali di diramazione in Fortran 90
Istruzioni condizionali di diramazione in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: Istruzioni di diramazione DIS - Dipartimento
Sistemi Operativi. Bruschi Martignoni Monga. Le astrazioni del s.o. MINIX syscall. Shell Esercizi Shell programming Esercizi.
1 Mattia Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it Lezione V: 1 a.a. 2008/09 1 c 2009 M.. Creative Commons Attribuzione-Condividi allo stesso modo
JavaScript JavaScript Programmazione lato client JScript JavaScript ECMAScript
Programmazione lato client Netscape: Microsoft: JScript ECMAScript (ECMA-262) (European Computer Manufactures Association) Linguaggio di script interpretato con alcune caratteristiche Object Oriented HTTP
Logica per la Programmazione
Logica per la Programmazione Lezione 12 Linguaggio di Programmazione Imperativo: Sintassi e Semantica Tripla di Hoare soddisfatta A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione a.a.
PL/SQL e PLpgSQL. Audiolezione 28b. Necessità. Soluzioni. Embedded SQL. Alfio Ferrara - Stefano Montanelli. Estensioni procedurali di SQL
Audiolezione 28b Corso di Basi di Dati e Laboratorio PL/SQL e PLpgSQL Alfio Ferrara - Stefano Montanelli A.A. 2005/2006 Basi di Dati e Laboratorio 1 Estensioni procedurali di SQL Necessità Disporre di
PROGRAMMAZIONE II Seconda Valutazione Intermedia 29 Maggio Si consideri la specifica parziale di una gerarchia di classi:
Es1. PROGRAMMAZIONE II Seconda Valutazione Intermedia 29 Maggio 2013 Si consideri la specifica parziale di una gerarchia di classi: class Set { private int size \\numero degli elementi : public void add(object
Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica. Programmazione orientata agli Oggetti
Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Programmazione orientata agli Oggetti OOP L 06b 1 L06b: Metamorfosi 2 Metamorfosi? Vuol dire che
Laboratorio di PL/SQL
Laboratorio di PL/SQL Prof. Alessandra Lumini Alma Mater Studiorum - Università di Bologna Per la sintassi PL/SQL: ORACLE 11g Rel. 2 PL/SQL Language Reference 1 Schema DB 2 1 Procedure: definizione e call
Sistemi Operativi 1. Mattia Monga. a.a. 2015/16. Dip. di Informatica Università degli Studi di Milano, Italia
1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2015/16 1 cba 2008 16 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo 4.0 Internazionale.
Sistemi Operativi. Bruschi Monga Re. Shell Esercizi Shell programming Esercizi I/O. Sistemi Operativi. Bruschi Monga Re
1 Mattia Monga Lezione XI: Processi, shell, file Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 201/16 1 cba 2008 16 M. Monga. Creative Commons Attribuzione Condividi
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e Polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
Programmazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
Ingegneria del Software L-A
Principi e concetti object-oriented Dal caos iniziale Variabili globali Programmazione strutturata Goto 2 1.1 Dal caos iniziale Fortran (versione iniziale) Caos nel flusso di controllo IF(espressione logica)
La classe java.lang.object
La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita
Programmazione a Oggetti. Astrazione sui Dati e Iteratori
Programmazione a Oggetti Astrazione sui Dati e Iteratori Sommario Astrazione sui dati Specifica di classi Invariante di rappresentazione Funzione di astrazione Iteratori inner classes astrazione sul controllo
A review of some Java basics. Java pass-by-value and List<> references
A review of some Java basics Java pass-by-value and List references Java is always pass-by-value Java is always pass-by-value. Unfortunately, they decided to call the location of an object a reference.
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo 1 Esempio 1: Costruttori ed ereditarietà Costruttori ed ereditarietà 2 Introduzione Java prevede due automatismi legati
Java thread, concorrenza
Java thread, concorrenza laboratorio 1 A.Memo febbraio 2004 il thread principale in Java ogni programma in esecuzione è un thread il metodo main() è associato al main thread per poter accedere alle proprietà
Progettazione By Contract
Progettazione By Contract Documentazione di progetto Contratti per i metodi Correttezza dell implementazione invarianti per le classi Verifica asserzioni Eccezioni Progettazione By Contract Contratti per
Ereditarietà e Polimorfismo
Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le
Corso di laurea triennale in Informatica Turno A
Corso di laurea triennale in Informatica Turno A Docente: Anna Morpurgo Tutor: Stefano Sambruna Dipartimento di Informatica Università degli Studi di Milano A.A. 2018-2019 Programma svolto a lezione 24/10/18:
Design by contract. Angelo Gargantini
Design by contract Angelo Gargantini Design by contract Segue questa idea, soprattutto valida per l OO: L interfaccia di un modulo definisce un contratto Cosa è un contratto? Un accordo tra cliente e contrattore
Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore
Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Elementi del linguaggio e primi programmi
ECOLE POLYTECHNIQlE FEDERALE DE LAUSANNE
).> ECOLE POLYTECHNIQlE.>.> FEDERALE DE LAUSANNE case class : Int : Int : Boolean : String : String : Boolean : Boolean val = case class : Int : Boolean : Boolean : Boolean : Int val = val = val = =>
Catia Trubiani. Laboratorio di Ingegneria del Software a.a
Università degli Studi dell Aquila Laboratorio di Ingegneria del Software a.a. 2013-2014 Catia Trubiani Dipartimento di Ingegneria e Scienze dell'informazione e Matematica (DISIM) - Università degli Studi
Corso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 19 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Informatica Università degli Studi di Milano 14 Maggio 2013 Idea Programma = Algoritmi + Strutture
Fondamenti di Informatica
Fondamenti di Informatica (L-Z) Corso di Laurea in Ingegneria Gestionale Object Oriented Programming: Fondamenti Prof. Stefano Mariani Dott. Alket Cecaj Indice Introduzione all OOP Classi vs. oggetti Campi
Indice generale Introduzione...vii Parte I Concetti e costrutti fondamentali... 1 Capitolo 1 Introduzione al linguaggio... 3
Introduzione...vii Organizzazione del libro... viii Struttura del libro e convenzioni... ix Codice sorgente e progetti... x Compilare ed eseguire direttamente i listati e gli snippet di codice... x Compilare
IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma
IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma
Finite Model Theory / Descriptive Complexity: bin
, CMPSCI 601: Recall From Last Time Lecture 19 Finite Model Theory / Descriptive Compleity: Th: FO L DSPACE Fagin s Th: NP SO. bin is quantifier-free.!#"$&% ('*), 1 Space 0 1 ) % Time $ "$ $ $ "$ $.....
Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30
Paradigma a oggetti Programmazione orientata agli oggetti Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30 Programmazione ad oggetti. Si estendono i tipi di dati astratti che permettono:
Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice
Programmazione ad oggetti. Paradigma a oggetti Programmazione orientata agli oggetti Si estendono i tipi di dati astratti che permettono: information hiding e incapsulamento nascondo la rappresentazione
ereditarietà e polimorfismo
ereditarietà e polimorfismo Java ereditarietà o l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza o la nuova classe viene definita esprimendo solamente le differenze
Corso di Laurea in INFORMATICA
Corso di Laurea in INFORMATICA INGEGNERIA DELLA CONOSCENZA E SISTEMI ESPERTI (a.a. 2010-2011) MODULO 1 Parte I 1.4 CLIPS: C Language Integrated Production System Introduzione all'ambiente CLIPS. Claudia
Downloading and Installing Software Socio TIS
Object: Downloading and Installing Software Socio TIS compiler: L.D. Date Revision Note April 17 th 2013 --- For SO XP; Win 7 / Vista step Operation: Image A1 Open RUN by clicking the Start button, and
Graphs: Cycles. Tecniche di Programmazione A.A. 2012/2013
Graphs: Cycles Tecniche di Programmazione Summary Definitions Algorithms 2 Definitions Graphs: Cycles Cycle A cycle of a graph, sometimes also called a circuit, is a subset of the edge set of that forms
Ing. Lorenzo Vismara
Ing. Lorenzo Vismara ! "# #!$#%&# '(!)&!*)&#*$# +!, +$-.(( #!((%&#, #!& %&) /$#01&! 0#( 3452 $ 6#( 1 2 &## #!7 #89): #;##( 1? )#&)< $9): #@82 #)AA)#&#&$( #7)& @B && ##@A&#C 7 $C#&7 @B A&#)@#7&#
Basi di Dati Attive. Basi di Dati Attive
Basi di Dati Passive le politiche di reazione nei vincoli d integrità referenziale sono il primo esempio della necessità di introdurre un comportamento reattivo nelle basi di dati mettendo a fattor comune
Corso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 9 Alberto Ceselli ceselli@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 01 Aprile 2008 ADT param. in C ADT param.
IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore
Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza
Introduzione al VHDL Lezione 3
Introduzione al VHDL Lezione 3 Cristina Silvano Università degli Studi di Milano Dipartimento di Scienze dell Informazione Via Comelico 39/41, I-20135 Milano (Italy) Tel.: +39-2-5835-6306 e-mail: silvano@elet.polimi.it
Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A
Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Ingegneria del software A Collezioni di oggetti (in Java) Michele Tomaiuolo Framework Framework
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi
Università degli Studi di Bologna Facoltà di Ingegneria Fondamenti di Informatica T2 Modulo 2 Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009 Enumerativi Finora abbiamo creato enumerativi
Collezioni, mappe e iteratori (a cura del Prof. Marco Patella)
, mappe e iteratori (a cura del Prof. Marco Patella) 1 Introduzione al Java Collections Framework Una collezione (o contenitore) consente di organizzare e gestire un gruppo di oggetti collezioni (vere
Le gerarchie di tipi: implementazioni multiple e principio di sostituzione
Le gerarchie di tipi: implementazioni multiple e principio di sostituzione 1 Come si può utilizzare una gerarchia di tipi implementazioni multiple di un tipo i sottotipi non aggiungono alcun comportamento
INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2013/14
INTRODUZIONE ALLA LOGICA DI HOARE Corso di Logica per la Programmazione A.A. 2013/14 INTRODUZIONE Dall inizio del corso ad ora abbiamo introdotto, un po alla volta, un linguaggio logico sempre più ricco: