Alcuni principi di progettazione

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Alcuni principi di progettazione"

Transcript

1 Alcuni principi di progettazione Principio Open-Closed Un modulo dovrebbe essere aperto alle estensioni, ma chiuso alle modifiche Derivato dal lavoro di Bertrand Meyer, in sostanza, dice Dovremmo sempre scrivere le nostre classi in modo che siano estendibili, senza che debbano essere modificate Vogliamo essere capaci di cambiare il comportamento delle senza cambiarne il codice sorgente Il vantaggio in manutenzione è ovvio: se non modifico, non faccio errori Principi base: ereditarietà, overriding, polimorfismo e binding dinamico 1

2 Esempio ben noto: C Figura Cerchio Rettangolo Triangolo Trapezio Figura figure[100]; figure[1] = rettangolo ; figure[2] = triangolo ; figure[3] = cerchio ; void disegnatutto(figura figure[]) { for (i= 0; i<100; i++) { if (figure[i] è rettangolo ) disegna rettangolo if (figure[i] è triangolo ) disegna triangolo if (figure[i] è cerchio ) disegna cerchio if (figure[i] è trapezio ) disegna trapezio Il codice già definito per disegnatutto deve cambiare per potere supportare il nuovo tipo!!! Open/closed? Quindi la progettazione tradizionale non verifica open-closed Il modulo disegnatutto è aperto a estensioni, ma solo tramite modifica: non è chiuso rispetto alle modifiche Come si può fare a rispettare open/closed? 2

3 Aggiungiamo la classe Trapezio Figura[] figure = new Figura[100]; Figura Cerchio Rettangolo Triangolo Trapezio figure[1] = new Rettangolo(); figure[2] = new Triangolo(); figure[3] = new Cerchio(); figure[4] = new Trapezio(); disegnatutto(figure); public static void disegnatutto(figura[] figure) { for (i= 0; i<100;i++) figure[i].disegna(); Il Codice definito per Figura non cambia!!! Estendibilità tramite ereditarietà è garantita solo se possiamo usare oggetti di una classe che sono sostituibili a quelli della sopraclasse Ad esempio, la disegna() deve contenere codice che disegna l oggetto this sullo schermo Ogni sottoclasse di Figura deve definire una disegna() che abbia lo stesso effetto! Ma se si definisse disegna() in modo diverso? Ad esempio, se disegna() di Trapezi fosse definita in modo che disegna this solo se l area è maggiore di 20? Va ancora bene? 6 3

4 Liskov Substitution Principle Gli oggetti della sottoclasse devono rispettare il contratto (ossia la specifica) della superclasse Significa che il comportamento della sottoclasse deve essere compatibile con la specifica della sopraclasse Ma la classe può essere estesa con nuovi metodi, o anche un metodo ereditatato può essere esteso per coprire ulteriori casi Moduli che usano oggetti di un tipo devono potere della differenza Il contratto della superclasse deve essere onorato da tutte le sottoclassi Ci ritorneremo in seguito per formalizzare meglio Esempio Classe Imperial ha costruttore e metodo calcolo che accetta valori in piedi e restituisce valori in pollici. Riusare questa classe, ma con parametri e risultati espressi nel sistema Metrico. 4

5 Soluzione errata public class Metrico extends Imperial { public Metrico (double x) {//x in metri super(x/0.3048); //converte x in feet public double calcolo(double x) {//x in metri return super.calcolo(x/ )*0.0254; Metric viola il principio di sostituzione public static usacalcolo(imperial imp) { System.out.println("calcolo per 10 feet»); System.out.println(imp.calcolo(10); Se ora qualcuno scrive: usacalcolo(new Metric (1)); usacalcolo puo- essere totalmente errato (calcola con 30 feet al posto di 10 e poi scala il risultato) Quindi un oggetto di tipo Metric non potrebbe essere usato dove è previsto un oggetto di tipo Imperial. 5

6 Soluzione corretta: Composition public class Metrico { protected Imperial i; public Metrico (double x) {//x in metri i=new Imperial (x/0.3048); public double calcolo(double x) {//x in metri return i.calcolo(x/0.3048)*0.0254; Ereditarietà e delega: «favour composition over inheritance» List List + a d d () + re mo ve () + a d d () + re mo ve () 1 Sta c k Sta c k + p u sh () + p o p () + t o p () + p u sh () + p o p () + t o p () Si vuole implementare Stack con una List: sbagliato ereditare! 6

7 Dependency Inversion Principle Dipendere dalle astrazioni, non dagli elementi concreti «Inversione» nel senso che le «in alto» nelle gerachia di ereditarietà non devono dipendere da classi «in basso», ma al contrario. Quindi dipendere da interfacce e classi astratte, non da metodi e classi concrete Principio fondante del concetto di progettazione per componenti (component design) CORBA, EJB, etc. Conseguenze: «Coding to an interface» Ogni classe C che si ritiene possa essere estesa in futuro, dovrebbe essere definite come sottotipo di un'interfaccia o di una classe astratta A Tutte le volte che non è strettamente indispensabile riferirsi ad oggetti della classe concreta C, è meglio riferirsi invece a oggetti il cui tipo statico è la classe astratta A, non C In questo modo, sarà più facile in seguito modificare il codice client per utilizzare invece di C altre classi concrete sottotipi di A Es. la disegnatutto() era definita in termini dei metodi della classe astratta Figura, non delle singole classi concrete Così continua a funzionare correttamente anche aggiungendo nuovi tipi di figura. 7

8 Ulteriori principi The Interface Segregation Principle: Many client specific interfaces are better than one general purpose interface The Reuse/Release Equivalency Principle: The granule of reuse is the same as the granule of release. Only components that are released through a tracking system can be effectively reused The Acyclic Dependencies Principle: The dependency structure for released components must be a directed acyclic graph. There can be no cycles The Stable Dependencies Principle: Dependencies between released categories must run in the direction of stability. The dependee must be more stable than the depender The Stable Abstractions Principle: The more stable a class category is, the more it must consist of abstract classes. A completely stable category should consist of nothing but abstract classes Valutazione di qualità di un Progetto un progetto è fondamentale ma possiamo anche valutarlo rispetto a requisiti Ma anche rispetto a requisiti modificabilità e stabilità. Possiamo valutare gli aspetti strutturali un progetto usando Accoppiamento, coesione e principio open-closed 8

9 Accoppiamento (coupling) Cattura il grado di interconnessione tra classi Un alto grado di accoppiamento significa Alta interdipendenza tra le classi Difficoltà di modifica della classe singola Un basso accoppiamento è requisito fondamentale per creare un sistema comprensibile e modificabile Nel mondo ad oggetti abbiamo tre tipi di coupling: interaction, component e inheritance Interaction coupling Si ha quando metodi di una classe chiamano metodi di altre classi Le forme da evitare si hanno quando un metodo Manipola direttamente le variabili di stato di altre classi Scambia informazioni attraverso variabili temporanee Altre forme accettabili: quando i metodi comunicano direttamente via parametri passare la minor quantità di informazione possibile attraverso il minor numero di parametri 9

10 Component coupling Una classe A è accoppiata classe se possiede: Attributi di tipo C, oppure Parametri di tipo C, oppure Metodi con variabili locali di tipo C Quando A è accoppiata a C, è accoppiata anche a tutte le sue sottoclassi Component coupling solitamente implica anche la presenza di interaction coupling Inheritance coupling La forma da evitare è quando una sottoclasse cambia la segnatura di un metodo ereditato Impossibile in java Meglio se la segnatura resta la stessa, ma Ancor meglio se la sottoclasse aggiunge solo metodi e attributi, ma non non fa override dei metodi modifica nulla 10

11 Coesione Concetto intra-modulo Si concentra sul perché gli elementi stanno nello stesso modulo Solo gli elementi fortemente correlati dovrebbero stare nello stesso modulo Il modulo rappresenterebbe una chiara astrazione e sarebbe più semplice da capire Alta coesione solitamente porta a basso accoppiamento Tre tipi di coesione: method, class e inheritance Method cohesion La forma migliore (massima coesione) si ha quando un metodo implementa una funzione singola e chiaramente definita Si dovrebbe poter descrivere il compito del metodo con una sola (semplice) frase 11

12 Class cohesion Una classe dovrebbe rappresentare un solo concetto e tutte le proprietà dovrebbero contribuire alla sua rappresentazione Se si incapsulano concetti diversi (nella stessa classe), la coesione diminuisce Gruppi di metodi diversi che accedono a gruppi di attributi disgiunti rappresentano un chiaro sintomo di bassa coesione Inheritance cohesion necessità di Generalizzazione/specializzazione Riuso La coesione è maggiore se la gerarchia viene usata per gestire la generalizzazione/specializzazione 12

13 Metriche del software possibile definire delle misure (dette metriche) di queste caratteristiche Weighted Methods per Class (WMC) Numero dei metodi pesati per la loro complessità Depth of Inheritance Tree (DIT) Number of Children (NOC) Coupling Between Classes (CBC) Response for a Class (RFC) Il numero totale di metodi che possono essere invocati da un oggetto della classe Lack of Cohesion in Methods (LCOM) Dato un programma, è possibile calcolare questi valori Gli studi condotti su sw professionale dicono che (I) Weighted Methods per Class (WMC) La maggior parte delle classi ha un numero limitato di metodi Le classi sono semplici e forniscono astrazioni e operazioni specifiche Solo un numero limitato di classi ha molti metodi Valore elevato ha correlazione significativa con propensione agli errori Depth of Inheritance (DIT) DIT massimo vicino a 10 La maggior parte delle classi ha DIT uguale a 0 (sono la radice) quindi sacrificano la riusabilità a favore della comprensibilità Number of Children (NOC) Le classi spesso hanno numero limitato di figli; in molti casi NOC vale 0 13

14 Gli studi dicono che (II) Coupling Between Classes (CBC) La maggior parte delle classi sono auto-contenute (CBC = 0), ovvero non sono accoppiate con nessuno Gli oggetti di interfaccia tendono ad avere un CBC più grande Response for a Class (RFC) La maggior parte delle classi usa/invoca pochi metodi di altre classi Le classi degli oggetti di interfaccia hanno un RFC maggiore Lack of Cohesion in Methods (LCOM) Non molto utile per predire la propensione alla difettosità Sintomi di un progetto fatto Rigidità: la tendenza del software ad essere difficile da cambiare, anche in modo semplice Ogni cambiamento provoca una cascata di cambiamenti in sequenza nei moduli dipendenti Fragilità: volta che viene cambiato Spesso il problema si verifica in parti del programma non logicamente correlate al cambiamento Immobilità altre parti dello stesso progetto Viscosità: hack metodi che rispettano il progetto È facile fare la cosa sbagliata, difficile fare quella giusta inefficiente 14

15 Gestione delle dipendenze I quattro sintomi elencati nel lucido precedente sono causati, direttamente o indirettamente, da dipendenze improprie tra i moduli del software Quando si ha un degrado nella struttura (architettura) del software, si ha anche un degrado della sua manutenibilità Le dipendenze tra moduli devono essere gestite attraverso appositi firewall (ossia classi ad hoc) Le dipendenze non devono propagarsi oltre i firewall Suggerimenti 15

16 Minimizzazione dell interfaccia Se non esiste una ragione forte per dire che un metodo è pubblico, lo dichiariamo privato Definiamo solo metodi getter (e non setter) per i campi della classe se possibile Non dobbiamo replicare completamente la struttura dati contenuta in una classe nella sua interfaccia Di solito è assurdo fornire un getter per ogni attributo Metodi con pochi parametri Oltre i tre o quattro si rischia che i programmatori non se li ricordino Nonostante l assistenza fornita dagli IDE, i metodi con troppi parametri rimangono incomprensibili Particolarmente pericolose sono le liste di parametri dello stesso tipo Un inversione non genera errori di compilazione ma provoca malfunzionamenti difficilmente diagnosticabili 16

17 Metodi con pochi parametri Un metodo che richiede molti parametri può generalmente essere spezzato in metodi che richiedono ciascuno meno parametri Possiamo creare classi ausiliarie che contengano gli aggregati dei parametri Questa tecnica è raccomandabile quando si hanno sequenze di parametri ricorrenti che rappresentano sempre la stessa entità Esempio public void Cerchio(double x, double y, double z, double raggio) public void Quadrato(double x, double y, double z, double lato) Meglio: Class Punto private double x; private double y, private double z) public void Cerchio(Punto centro, double raggio) public void Quadrato(Punto vertice, double lato) 17

18 Anti-pattern Un anti-pattern è una soluzione usata spesso, ma che dovrebbe essere evitata È un errore comune Dovrebbe fornire suggerimenti su come migliorare il codice o evitare errori noti Gli anti-pattern non si applicano solo alla progettazione a oggetti Classe Blob Esempio Una sola classe enorme che contiene la maggior parte della logica applicativa La classe opera su oggetti di classi che contengono solo dati, non operazioni. procedurale, stile C, in un linguaggio a oggetti. 18

19 Problemi noti (I) Codice duplicato Estrarlo, parametrizzarlo e farlo diventare un metodo di servizio Codice simile in sottoclassi correlate Spostare il codice comune come metodo della superclasse Metodi lunghi Se il codice di un metodo diventa troppo lungo per poterlo capire facilmente, bisogna estrarne delle parti come metodi di servizio Metodi di piccole dimensioni Metodi di dimensioni limitate possono essere letti e compresi in modo abbastanza agevole Metodi brevi e chiari richiedono pochi commenti o possono non richiederne affatto Di solito si riesce a mantenere la maggior parte dei metodi al di sotto delle 20 righe di codice Raramente è necessario scrivere metodi più lunghi di 40 righe, salvo il caso di algoritmi particolari. 19

20 Es. Non mischiare livelli public void dothedomesticthings() { takeoutthetrash(); walkthedog(); for (Dish dish : dirtydishstack) { sink.washdish(dish); teatowel.drydish(dish); public void dothedomesticthings() { takeoutthetrash(); walkthedog(); dothedishes(); Es: Ogni metodo una cosa sola public bool isedible() { if (this.expirationdate > Date.Now && this.approvedforconsumption == true && this.inspectorid!= null) { return true; else { return false; 1. Controlla la scadenza spezione 4. Risponde alla richiesta 20

21 Meglio così public bool isedible() { return isfresh() && isapproved() && isinspected(); Ora il metodo fa una cosa sola Un cambiamento nella specifica richiederebbe un solo cambiamento nel codice Funzionalità e dati Problemi noti (II) classe, bisogna spostare il metodo nella classe in cui sono definiti i dati Uso del costrutto switch Spesso lo switch indica un tipo di oggetti tipi richiede la modifica degli switch relativi Bisognerebbe usare ereditarità, enum, pattern (State) piuttosto dei switch 21

22 Es. Switch e polimorfismo public Money calculatepay(employee e) throws InvalidEmployeeType{ switch(e.type){ case COMMISSIONED: return calculatecommissionedpay(e); case HOURLY: return calculatehourlypay(e); case SALARIED: return calculatesalariedpay(e); default: throw new InvalidEmployeeType(e.type); public abstract class Employee { public abstract Money calculatepay(); Problemi noti (III) Blocchi di dati Dati che sono solitamente usati insieme Potrebbero portare a una lunga lista di parametri (altro problema) Bisognerebbe introdurre una classe per contenere i dati correlati Commenti Parti di codice con commenti significativi potrebbero diventare metodi con un nome autoesplicativo 22

23 Es. Blocchi di dati (con tipi primitivi) public Class Car{ private int red, green, blue; public void paint(int red, int green, int blue){ this.red = red; this.green = green; this.blue = blue; public Class Car{ private Color color; public void paint(color color){ this.color = color; Altri errori comuni Crescita del codice Metodi lunghi e classi grandi Violazione del principio della responsabilità singola Ossessione per i tipi primitivi e troppi parametri Sinonimo di cattiva progettazione Statement switch su oggetti Meglio usare il polimorfismo Classi alternative con interfacce diverse Sinonimo di cattiva progettazione della gerarchia delle classi 23

24 Es. Cattivo uso Alcune sottoclassi non usano i metodi e gli attributi della superclasse Es: Quota non riguarda Engineer Dovrebbe essere solo parte di Salesman public abstract class Employee{ private int quota; public int getquota();... public class Salesman extends Employee{... public class Engineer extends Employee{... public int getquota(){ throw new NotSupportedException(); Ancora errori comuni Alcune classi sono troppo accoppiate Intimità non appropriata Una classe dovrebbe conoscere il meno possibile delle altre classi Abuso di proprietà altrui Responsabilità mal distribuite Catene di invocazioni Accesso ai dati troppo complesso Le eccezioni sono usate poco 24

25 Es. Abuso di proprietà altrui public class Customer{ private PhoneNumber mobilephone;... public String getmobilephonenumber(){ return ( + mobilephone.getareacode() + ) + mobilephone.getprefix() mobilephone.getnumber(); public String getmobilephonenumber(){ return mobilephone.toformattedstring(); Es. Catene di invocazioni a.getb().getc().getd().gettheneededdata() a.gettheneededdata() 25

26 Es. Non uso eccezioni Gli errori devono essere codificati I controlli richiedono codice Es: Codice difficile da estendere public int foo(){... public void bar(){ if(foo() == OK)... else // error handling Es. Con le eccezioni Non si mischiano valori restituiti e di controllo Sintassi più chiara Codice facile da estendere public void foo() throws FooException{... public void bar(){ try{ foo();... catch(fooexception){ // error handling 26

27 Refactoring È abbastanza difficile fare la cosa giusta al primo colpo Spesso le soluzioni trovate richiedono refactoring Ovvero il miglioramento del progetto del codice esistente senza cambiarne il comportamento Miglioramenti al codice/architettura Piccoli miglioramenti Test di regressione continuo Framework Junit Refactoring Il tempo e la manutenzione potrebbero rendere disordinato il codice Codice disordinato riduce le possibilità di manutenzione Il refactoring rinfresca/pulisce il codice senza cambiarne le funzionalità Applica i pattern Rimuove gli anti-pattern Ottimizza le prestazioni (velocità e memoria) Aggiunge commenti (magari attraverso JavaDocs) 27

28 Quando fare refactoring Non esiste regola precisa Quando si intravedono problemi Parti di codice particolarmente difficili Parti troppo complesse Parti con anti-pattern evidenti Meglio fare refactoring prima di aggiungere nuove funzionalità o cambiare le esistenti Stile di Programmazione e Commenti Codice riusabile, manutenibile ed estendibile 28

29 Pattern stilistici Sono pratiche riguardanti la scrittura del codice, non la progettazione Es. convenzioni come identazione, scelta dei nomi delle variabili, ecc. Spesso, sono supportati dall IDE Spesso, sono verificabili È bene prendere le buone abitudini subito È giusto concordare alcune pratiche nel gruppo di lavoro Commenti Il codice è spesso scritto a un livello per essere una buona descrizione I commenti possono essere usati per chiarire il significato del codice o per renderlo ancora più oscuro! I commenti che ripetono il codice sono inutili I commenti che contraddicono il codice indicano che probabilmente sia codice che commenti sono scorretti I commenti possono indicare il significato del codice in modo parzialmente indipendente da cambiamenti I commenti devono indicare cosa il codice si propone di fare 29

30 Esempi Commento inutile: i++; // Increment i Commento utile: i++; // Increment the card counter. Qui non c è bisogno di commento: cardcounter++; Una buona scelta dei nomi delle variabili, dei metodi, ecc. rende il codice largamente autocommentato Dove/cosa commentare Cosa commentare dipende da molteplici fattori, in particolare dall espressività del linguaggio In Java generalmente non è il caso di avere un commento per ogni riga di codice Nei linguaggi OO è generalmente una buona idea fornire un commento all inizio di ogni metodo, che dettagli il significato del metodo, eventuali vincoli, requisiti ecc. Può essere utile riportare anche riferimenti a documentazione esterna Al solito, dare un nome significativo ai metodi può semplificare il commento 30

31 Quando commentare Occorre commentare quando è necessario dire qualcosa con maggiore chiarezza di quanto non possa fare il codice Se si può rendere il codice abbastanza chiaro da poterlo considerare autocommentato, questo è ciò che va fatto! Valutare sempre la conoscenza di chi leggerà il codice Se l informazione per comprendere il codice si trova vicino allora il codice può essere considerato comprensibile Nomi e maiuscole Si può fare in modo che il nome di un elemento indichi la natura dell elemento Questo effetto si ottiene mediante delle convenzioni di programmazione, solitamente stabilite a livello aziendale In modo più artigianale, si possono usare le maiuscole in modo convenzionale per comunicare informazioni 31

32 Maiuscole e Java Nomi di classi e interfacce hanno l iniziale maiuscola: Stack Nomi di variabili e metodi iniziano sempre con una minuscola: push(...). I nomi delle costanti sono completamente maiuscoli: java.lang.math.pi; I nomi di package sono scritti in minuscolo: java.lang Se il nome è composto da più parole, ciascuna di queste è scritta con l iniziale maiuscola: mustcopytorunstack(...) L uso di underscore (must_copy_to_runstack) non è consigliato Uso consistente dei nomi I nomi delle classi dovrebbero essere singolari: Stack I metodi void dovrebbero avere per nome dei predicati verbali che descrivono cosa fanno: openfiles() I metodi e le variabili boolean dovrebbero avere nomi che iniziano con una declinazione di essere : isfinished contains» nelle Collections di java!) Gli altri metodi non void dovrebbero avere nomi che suggeriscono cosa restituiscono: sizeoffigure() Variabili non boolean dovrebbero avere nomi costituiti da sostantivi (eventualmente con aggettivo): age 32

33 Codice comprensibile Codice semplice, ma cosa fa? public List<int[]> getthem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : thelist) if (x[0] == 4) list1.add(x); return list1; Meglio? public List<int[]> getflaggedcells() { List<int[]> flaggedcells = new ArrayList<int[]>(); for (int[] cell : gameboard) if (cell[status_value] == FLAGGED) flaggedcells.add(cell); return flaggedcells; 33

34 Così? public List<Cell> getflaggedcells() { List<Cell> flaggedcells = new ArrayList<Cell>(); for (Cell cell : gameboard) if (cell.isflagged()) flaggedcells.add(cell); return flaggedcells; Abbiamo Usato nomi significativi per spiegare le intenzioni flaggedcells invece di list1 Sostituito numeri magici con costanti cell[status_value] invece di x[0] Creato un ADT opportuno Cell cell invece di int[] cell 34

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4: Ereditarietà, interfacce e clonazione Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione

Dettagli

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

!#$%&&'()#*%+%+!#$',,'()#*%+ -)%*&'&'+'$.)+-$$%&&) !#$%&&'(%)'*+%,#-%#.'%&'#/0)-+#12+3,)4+56#7+#.')8'9 !"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&)!"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9 Slide 1 Paradigmi di Programmazione! Un linguaggio supporta uno stile di programmazione se

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Progettazione : Design Pattern Creazionali

Progettazione : Design Pattern Creazionali Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Object Oriented Software Design

Object Oriented Software Design Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Object Oriented Software Design Corso di Tecniche di Programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T1 B2 Significato e proprietà della OOP 1 Prerequisiti Concetto ed elementi della comunicazione Allocazione e deallocazione della memoria Compilazione di un programma Spazio

Dettagli

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi Indice generale OOA Analisi Orientata agli Oggetti Introduzione Analisi Metodi d' analisi Analisi funzionale Analisi del flusso dei dati Analisi delle informazioni Analisi Orientata agli Oggetti (OOA)

Dettagli

Programmare in Java. Olga Scotti

Programmare in Java. Olga Scotti Programmare in Java Olga Scotti Linguaggi di programmazione linguaggio macchina assembler linguaggi ad alto livello Linguaggi ad alto livello istruzioni comprensibili linguaggio simile a quello naturale

Dettagli

Parola chiave extends

Parola chiave extends Il Linguaggio Java Ereditarietà Ereditarietà L'ereditarietà permette di creare nuove classi sulla base di classi esistenti In particolare, permette di riusare il codice (metodi e campi); aggiungere nuovi

Dettagli

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

Dettagli

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche. Testo Esercizio Si consideri la realizzazione di un semplice programma grafico per il disegno di figure geometriche in due dimensioni. Si analizzino i requisiti e se ne rappresentino i risultati in UML

Dettagli

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede

Dettagli

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP Accademia Futuro info@accademiafuturo.it Programma Generale del Corso Analista Programmatore Web PHP Tematiche Trattate

Dettagli

Introduzione ai tipi di dato astratti: applicazione alle liste

Introduzione ai tipi di dato astratti: applicazione alle liste Universitàdegli Studi di L Aquila Facoltàdi Scienze M.F.N. Corso di Laurea in Informatica Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2005/2006 Introduzione ai tipi di dato astratti: applicazione

Dettagli

Esercitazione n 4. Obiettivi

Esercitazione n 4. Obiettivi Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:

Dettagli

design patterns e GRASP

design patterns e GRASP design patterns e GRASP 1 design patterns una coppia / particolarmente importante a cui viene dato un nome vengono espressi in un formato molto rigido, ad es. nome descrizione sintetica della descrizione

Dettagli

Main System Monitor Keyboard

Main System Monitor Keyboard Composite 57 8. Composite (Gof pag. 163) 8.1. Descrizione Consente la costruzione di gerarchie di oggetti composti. Gli oggetti composti possono essere conformati da oggetti singoli, oppure da altri oggetti

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto)

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto) Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Sede di Latina Laurea in Ingegneria dell Informazione Fasi del ciclo di vita del software (riassunto) Corso di PROGETTAZIONE DEL SOFTWARE

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 11 + Credits I lucidi di questa lezione sono stati preparati da: Professor Stefano Mizzaro Professor Paolo Coppola e sono stati modificati e completati dal Dr. Paolo

Dettagli

Generazione Automatica di Asserzioni da Modelli di Specifica

Generazione Automatica di Asserzioni da Modelli di Specifica UNIVERSITÀ DEGLI STUDI DI MILANO BICOCCA FACOLTÀ DI SCIENZE MATEMATICHE FISICHE E NATURALI Corso di Laurea Magistrale in Informatica Generazione Automatica di Asserzioni da Modelli di Specifica Relatore:

Dettagli

UML Diagrammi delle classi. UML Diagramma classi 1

UML Diagrammi delle classi. UML Diagramma classi 1 UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio

Dettagli

GESTIONE DEI PROCESSI

GESTIONE DEI PROCESSI Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto

Dettagli

Architetture Applicative

Architetture Applicative Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture

Dettagli

dall argomento argomento della malloc()

dall argomento argomento della malloc() Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È

Dettagli

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: Javadoc Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: /* commenti */ // commenti /** commenti documentazione */ Questi ultimi generano automaticamente

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI Un utilizzatore a valle di sostanze chimiche dovrebbe informare i propri fornitori riguardo al suo utilizzo delle sostanze (come tali o all

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione

Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione 4 LEZIONE: Programmazione su Carta a Quadretti Tempo della lezione: 45-60 Minuti. Tempo di preparazione: 10 Minuti Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione SOMMARIO:

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Programmazione Object Oriented in Java

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

Elementi di Psicometria con Laboratorio di SPSS 1

Elementi di Psicometria con Laboratorio di SPSS 1 Elementi di Psicometria con Laboratorio di SPSS 1 29-Analisi della potenza statistica vers. 1.0 (12 dicembre 2014) Germano Rossi 1 germano.rossi@unimib.it 1 Dipartimento di Psicologia, Università di Milano-Bicocca

Dettagli

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Il meccanismo dell ereditarietà a.a. 2008/2009 Claudio De Stefano 1 L ereditarietà consente di definire nuove classi per specializzazione o estensione di classi preesistenti,

Dettagli

Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

Test di unità con JUnit4

Test di unità con JUnit4 Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso

Dettagli

La manutenzione come elemento di garanzia della sicurezza di macchine e impianti

La manutenzione come elemento di garanzia della sicurezza di macchine e impianti La manutenzione come elemento di garanzia della sicurezza di macchine e impianti Alessandro Mazzeranghi, Rossano Rossetti MECQ S.r.l. Quanto è importante la manutenzione negli ambienti di lavoro? E cosa

Dettagli

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it Automazione Industriale (scheduling+mms) scheduling+mms adacher@dia.uniroma3.it Introduzione Sistemi e Modelli Lo studio e l analisi di sistemi tramite una rappresentazione astratta o una sua formalizzazione

Dettagli

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete La prima applicazione Java Programma MyFirstApplication Il programma visualizza una finestra vuota sullo schermo. Importo il package delle classi usate nel seguito. Dichiaro la classe MyFirstApplication

Dettagli

Corso di Laurea Specialistica in Ingegneria Informatica. Corso di Ingegneria del Software A. A. 2008-2009. Class Discovery E.

Corso di Laurea Specialistica in Ingegneria Informatica. Corso di Ingegneria del Software A. A. 2008-2009. Class Discovery E. Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Class Discovery E. TINELLI Contenuti Classi di analisi: definizione ed esempi Tecniche per la definizione

Dettagli

Esercitazione di Basi di Dati

Esercitazione di Basi di Dati Esercitazione di Basi di Dati Corso di Fondamenti di Informatica 6 Maggio 2004 Come costruire una ontologia Marco Pennacchiotti pennacchiotti@info.uniroma2.it Tel. 0672597334 Ing.dell Informazione, stanza

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

INVENTION AND TECHNOLOGY DISCLOSURE FORM SCHEDA DI RICHIESTA PER L APERTURA DI UNA PRATICA DI BREVETTO

INVENTION AND TECHNOLOGY DISCLOSURE FORM SCHEDA DI RICHIESTA PER L APERTURA DI UNA PRATICA DI BREVETTO INVENTION AND TECHNOLOGY DISCLOSURE FORM UFFICIO TRASFERIMENTO TECNOLOGICO SCHEDA DI RICHIESTA PER L APERTURA DI UNA PRATICA DI BREVETTO Mittente: Prof./Dott Dipartimento di Via.. 4412. Ferrara Al Magnifico

Dettagli

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1 MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati

Dettagli

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1 MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati

Dettagli

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015 Java:Struttura di Programma Fabio Scanu a.s. 2014/2015 Altre Attenzioni da riservare Java è Case Sensitive: La variabile «a» e la variabile «A» sono diverse Java ha alcune regole di scrittura: I nomi delle

Dettagli

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO Linguaggi di programmazione classificati in base alle loro caratteristiche fondamentali. Linguaggio macchina, binario e fortemente legato all architettura. Linguaggi

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio

Dettagli

Supermarket Progetto di Programmazione Febbraio 2010

Supermarket Progetto di Programmazione Febbraio 2010 Supermarket Progetto di Programmazione Febbraio 2010 1 Supermercato Dovete realizzare un insieme di classi e interfacce che riguardano la gestione di un supermercato. nella Sezione 2 verranno descritte

Dettagli

Prova di Laboratorio di Programmazione

Prova di Laboratorio di Programmazione Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA BOZZA 23/07/2008 INDICE 1. PERCHÉ UNA NUOVA VERSIONE DEI MODULI DI RACCOLTA DATI... 3 2. INDICAZIONI GENERALI... 4 2.1. Non modificare la struttura dei fogli di lavoro... 4 2.2. Cosa significano

Dettagli

Introduzione all Information Retrieval

Introduzione all Information Retrieval Introduzione all Information Retrieval Argomenti della lezione Definizione di Information Retrieval. Information Retrieval vs Data Retrieval. Indicizzazione di collezioni e ricerca. Modelli per Information

Dettagli

DESIGN PATTERNS Parte 6. State Proxy

DESIGN PATTERNS Parte 6. State Proxy DESIGN PATTERNS Parte 6 State Proxy STATE Il Design Pattern State nasce dall'esigenza di poter gestire gli stati di una classe senza dover usare dei costrutti come gli Enum e quindi delle switch. Prendiamo

Dettagli

Programmazione Java: Variabili membro, Metodi La parola chiave final

Programmazione Java: Variabili membro, Metodi La parola chiave final Programmazione Java: Variabili membro, Metodi La parola chiave final romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave

Dettagli

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 15 - Packages Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento

Dettagli

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

Dettagli

Object Oriented Programming

Object Oriented Programming OOP Object Oriented Programming Programmazione orientata agli oggetti La programmazione orientata agli oggetti (Object Oriented Programming) è un paradigma di programmazione Permette di raggruppare in

Dettagli

FABBISOGNO DI FINANZIAMENTO

FABBISOGNO DI FINANZIAMENTO FABBISOGNO DI FINANZIAMENTO Fonti interne: autofinanziamento Fonti esterne: capitale proprio e capitale di debito Capitale proprio: deriva dai conferimenti dei soci dell azienda e prende il nome, in contabilità,

Dettagli

Lezione 4. Modello EER

Lezione 4. Modello EER Lezione 4 Modello EER 1 Concetti del modello EER Include tutti i concetti di modellazione del modello ER Concetti addizionali: sottoclassi/superclassi, specializzazione, categorie, propagazione (inheritance)

Dettagli

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 14 - Packages Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Capitolo 13. Interrogare una base di dati

Capitolo 13. Interrogare una base di dati Capitolo 13 Interrogare una base di dati Il database fisico La ridondanza è una cosa molto, molto, molto brutta Non si devono mai replicare informazioni scrivendole in più posti diversi nel database Per

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Progettazione di Basi di Dati

Progettazione di Basi di Dati Progettazione di Basi di Dati Prof. Nicoletta D Alpaos & Prof. Andrea Borghesan Entità-Relazione Progettazione Logica 2 E il modo attraverso il quale i dati sono rappresentati : fa riferimento al modello

Dettagli

Definizione di nuovi tipi in C

Definizione di nuovi tipi in C Definizione di nuovi tipi in C typedef Ancora sui tipi di dato Ogni elaboratore è intrinsecamente capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe

Dettagli

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Paradigma OO Incapsulamento Polimorfismo e Overloading Ereditarietà e Overriding Esercizi svolti Esercizi proposti Paradigma OO Le

Dettagli

Guida all uso di Java Diagrammi ER

Guida all uso di Java Diagrammi ER Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con

Dettagli

Analisi e diagramma di Pareto

Analisi e diagramma di Pareto Analisi e diagramma di Pareto L'analisi di Pareto è una metodologia statistica utilizzata per individuare i problemi più rilevanti nella situazione in esame e quindi le priorità di intervento. L'obiettivo

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014 LUdeS Informatica 2 EXCEL Seconda parte AA 2013/2014 STAMPA Quando si esegue il comando FILE STAMPA, Excel manda alla stampante tutte le celle del foglio di lavoro corrente che hanno un contenuto. Il numero

Dettagli

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 I CODICI 1 IL CODICE BCD 1 Somma in BCD 2 Sottrazione BCD 5 IL CODICE ECCESSO 3 20 La trasmissione delle informazioni Quarta Parte I codici Il codice BCD

Dettagli

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software BDX 3D Editor è un programma che permette di navigare ed editare texture in un qualsiasi modello 3D.E compatibile con i software in grado di esportare

Dettagli

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE 1/6 MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE Per prima cosa si ringrazia per aver scelto ImmobiPhone e per aver dato fiducia al suo autore. Il presente documento istruisce l'utilizzatore sull'uso del programma

Dettagli

Programmazione Java Avanzata Concetti su Java

Programmazione Java Avanzata Concetti su Java Programmazione Java Avanzata Concetti su Java Ing. Giuseppe D'Aquì Testi di Riferimento Java ( R. Liguori, P. Liguori), O'Reilly Hops Tecniche Nuove (2008) Java Virtual Machine Il codice scritto in Java

Dettagli

Modulo didattico sulla misura di grandezze fisiche: la lunghezza

Modulo didattico sulla misura di grandezze fisiche: la lunghezza Modulo didattico sulla misura di grandezze fisiche: la lunghezza Lezione 1: Cosa significa confrontare due lunghezze? Attività n 1 DOMANDA N 1 : Nel vostro gruppo qual è la matita più lunga? DOMANDA N

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 12 ADT: Lista, Pila, Coda A. Miola Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti!Tipo

Dettagli

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Progettazione OO E. TINELLI Punto di Partenza Il modello di analisi E una rappresentazione minima del

Dettagli

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1) Informatica 3 LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1) Modulo 1: Introduzione: oggetti e classi Modulo 2: Link e associazioni Modulo 3: Aggregazione Informatica 3 Lezione 7 -

Dettagli