Alcuni principi di progettazione
|
|
- Leonzio Longhi
- 8 anni fa
- Visualizzazioni
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 Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo
DettagliProgrammazione 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
DettagliProgrammazione 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 Slide 1 Paradigmi di Programmazione! Un linguaggio supporta uno stile di programmazione se
DettagliTipi 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
DettagliProgettazione : 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
Dettagli12 - 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,
DettagliOggetti 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
DettagliIntroduzione 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
DettagliObject 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
DettagliCorso 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
DettagliIndice 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)
DettagliProgrammare 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
DettagliParola 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
DettagliUso 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
DettagliJava: 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
DettagliSOMMARIO 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
DettagliTesto 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
Dettaglif(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
DettagliCorso 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
DettagliIntroduzione 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
DettagliEsercitazione 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:
Dettaglidesign 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
DettagliMain 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
DettagliStrutture. 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
DettagliFasi 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
DettagliFunzioni 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
Dettagli4 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
DettagliSviluppo 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
DettagliGenerazione 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:
DettagliUML 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
DettagliGESTIONE 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
DettagliArchitetture Applicative
Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture
Dettaglidall 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 È
DettagliCorrettezza. 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
DettagliLe 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.
DettagliAbstract 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
DettagliUno 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
DettagliLa 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,
DettagliUTILIZZATORI 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
DettagliUniversità 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
DettagliObiettivo 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:
DettagliDatabase. 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
DettagliLINGUAGGI 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
DettagliLinguaggi 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
DettagliSoluzione 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
DettagliInizializzazione, 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
DettagliLa 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.
DettagliElementi 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
DettagliSiti 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
DettagliCorso 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,
DettagliArchitettura 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
DettagliRealizzazione 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
DettagliTest 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
DettagliLa 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
DettagliAutomazione 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
DettagliLa 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
DettagliCorso 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
DettagliEsercitazione 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
DettagliConcetto 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
DettagliINVENTION 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
DettagliSistemi 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
DettagliMECCANISMI 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
DettagliJava: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
DettagliEVOLUZIONE 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
DettagliCorso 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
DettagliSupermarket 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
DettagliProva 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
DettagliLezione 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
DettagliGUIDA 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
DettagliIntroduzione 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
DettagliDESIGN 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
DettagliProgrammazione 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
Dettagli15 - 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
DettagliAutomatizzare 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
DettagliCapitolo 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
DettagliObject 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
DettagliFABBISOGNO 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à,
DettagliLezione 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)
Dettagli14 - 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
DettagliSommario. 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
DettagliCapitolo 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
DettagliCOS È 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
DettagliSiamo 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
DettagliProgettazione 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
DettagliDefinizione 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
DettagliUso 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
DettagliFondamenti 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
DettagliGuida 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
DettagliAnalisi 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
DettagliVariabili 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
DettagliLUdeS 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
DettagliLA 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
DettagliBDX 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
DettagliMANUALE 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
DettagliProgrammazione 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
DettagliModulo 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
DettagliCorso 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
DettagliConsidera 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
DettagliInformatica 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