Maurizio Cozzetto, Francesco Sarasini

Slides:



Advertisements
Presentazioni simili
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A2 Java: le basi del linguaggio.
Advertisements

Costruttori e Distruttori
Programmazione Ingegneria TLC
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 7 (5 novembre 2008) Programmazione in Java: lessico, variabili, tipi primitivi, assegnamento a variabile.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Oggetti e dati primitivi
Selezione (=scelta) con “if-else”
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
Java base IV: Java e la programmazione O.O.
Java Contardi Carlo A.S. 2008/09.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Esercitazione Ereditarietà Polimorfismo. Entita’ Geometrica PuntoCerchioPoligono TriangoloQuadrilatero Rettangolo Quadrato.
Introduzione a Javascript
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Programmazione in Java
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
Lezione 2 : Basi del linguaggio Variabili. Come visto nella lezione 1 le classi registrano il proprio stato nelle variabili  int cadenza = 0;  int velocita.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Input in Java. Uso Scanner Un oggetto per la lettura dalla tastiera Piuttosto, per rappresentare la tastiera del nostro calcolatore useremo un oggetto.
Introduzione alle Classi e agli Oggetti in Java 1.
Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Tecnologia OO.
Java World Introduzione.
Java: concetti e costrutti base
7. Strutture di controllo Ing. Simona Colucci
IL CONCETTO DI ALGORITMO
Approcci nella soluzione di un problema
Programmazione a oggetti
Unità didattica 1: Introduzione al linguaggio Java
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Corso Java Introduzione.
Corso Java Esercitazione.
Java World Cicli e Array.
Corso Java Cicli e Array.
iterazione o ricorsione nel pensare per OGGETTI
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Oggetti Java.
Ricorsione 16/01/2019 package.
Alberi n-ary Lezioni di C.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Eccezioni – Precisazioni e approfondimenti
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
Processi decisionali e funzioni di controllo
APPUNTI SUL LINGUAGGIO C
Java Introduzione.
Array Un array è un contenitore “contiene” al massimo un numero predefinito di oggetti dello stesso tipo. Ogni oggetto dell'array è detto “elemento” Ad.
UML Diagramma statico di una classe
Transcript della presentazione:

Maurizio Cozzetto, Francesco Sarasini Corso Base Geca Lezione 1 Maurizio Cozzetto, Francesco Sarasini

Breve storia del linguaggio Nasce nel 1995 per opera degli ingegneri della Sun Microsystem James Gosling è il team leader del linguaggio Attualmente Java è di proprietà di Oracle Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Logo e mascotte Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Caratteristiche del linguaggio E' orientato agli oggetti E' indipendente dalla piattaforma (portabilità) Contiene strumenti e librerie per il networking E' progettato per eseguire codice da sorgenti remote in modo sicuro (applet) E' semplice E' multithread Robusto Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Sviluppo di un programma Java Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Esecuzione di un programma Java Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Piattaforma Java Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Piattaforma Java in dettaglio Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Caratteristiche del linguaggio /** * HelloWorld.java */ package it.geca.corso.helloworld; * @author maurizio public class HelloWorld { * @param args public static void main(String[] args) { System.out.println("Ciao Raffaele!"); System.out.println("Benvenuto a Java!"); // commento inline } // fine metodo entry-point } // fine classe Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Programma HelloWorld Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Il computer Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

La memoria 1 2 ... 100 … 200 …. Indirizzi Locazioni di memoria 1 2 ... 100 … 200 …. Indirizzi Locazioni di memoria Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

La variabile è un contenitore di dati Variabili (1/5) La variabile è un contenitore di dati Variabili di tipo primitivo Variabili di tipo riferimento Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Variabili di tipo primitivo 100 è l'indirizzo di memoria della variabile int eta; // Dichiaro eta, eta vale 0 eta = 8; // Assegno a eta il valore 8 eta = eta + 1; // Incremento di 1, quindi eta vale 9 int eta = 8; // Dichiarazione e assegnamento int eta 8 100 Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Variabili di tipo riferimento JButton bottone; // Dichiaro un riferimento (vale null) bottone null Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Variabili di tipo riferimento JButton bottone; // Dichiaro un riferimento (vale null) // Creo l'oggetto in memoria e gli assegno un riferimento bottone = new JButton(“Saluta”); bottone 200 JButton Saluta 250 ... text 200 x y Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Variabili di tipo riferimento // Dichiaro il riferimento e creo l'oggetto in memoria con una sola istruzione JButton bottone = new JButton(“Saluta”); Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Riferimenti e puntatori In Java non esistono puntatori ma riferimenti. Un riferimento contiene qualcosa del tipo it.geca.corso.progetto.JButton@558ee9d6 it.geca.corso.progetto è il package JButton è la classe 558ee9d6 è l'hashing dell'indirizzo di memoria 558ee9d6 JButton …. bottone Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Variabili stringa (1/2) // Creazione usando il costruttore String nome = new String(“Raffaele”); nome String Raffaele Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Variabili stringa (2/2) // Assegnamento “diretto” String nome = “Raffaele”; String Raffaele nome Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Variabili data (1/2) // Creo una data GregorianCalendar miaDataDiNascita = new GregorianCalendar(1959, 3, 1); GregorianCalendar 1959 YEAR 3 MONTH 1 DAY miaDataDiNascita Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Variabili data (2/2) // Semplifichiamo la rappresentazione ma non il codice GregorianCalendar miaDataDiNascita = new GregorianCalendar(1959, 3, 1); GregorianCalendar 1959-3-1 miaDataDiNascita Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Variabili Variabili di istanza Variabili di classe Variabili locali Variabili parametro Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Funzioni (1/2) Si chiamano anche metodi Definiscono le funzionalità di un oggetto o di un programma Metodi di istanza Metodi di classe Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Funzioni (2/2) public double computePayment( double loanAmt, double rate, double futureValue, int numPeriods) { double interest = rate / 100.0; double partial1 = Math.pow((1 + interest), - numPeriods); double denominator = (1 - partial1) / interest; double answer = (-loanAmt / denominator) - ((futureValue * partial1) / denominator); return answer; } Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Regole per il naming (Camel Notation) Iniziale minuscola per le variabiliQualsiasi Tutte lettere MAIUSCOLE per le costanti Iniziale Maiuscola per le classi Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Tipi primitivi Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Classi wrapper Classe Integer ... int ... String toBinaryString(int i) int parseInt(String s) Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Tipi derivati e classi di utilità String è una classe per le sequenze di caratteri GregorianCalendar è una classe per le date JOptionPane è una classe dotata di metodi statici per la lettura e la stampa dei dati (package javax) System è usata anche per l'output su Console Scanner è una classe usata anche per la lettura dei dati da Console Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Controllo del flusso (1/2) Struttura di sequenza Struttura condizionale Con un ramo Con due rami Struttura switch Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Controllo del flusso (2/2) Cicli Ciclo while Ciclo do-while Ciclo for Ciclo infinito Ciclo infinito con break Ciclo infinito con variabile booleana Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Sequenza Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Sequenza in Java { <istruzione1>; <istruzione2>; ... } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura condizionale con un ramo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura condizionale con un ramo in Java if (<cond>) { <istruzione1>; <istruzione2>; <istruzione3>; ... } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura condizionale con due rami Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura condizionale con due rami in Java if (<cond>) { <istruzione11>; <istruzione12>; <istruzione13>; ... } else { <istruzione21>; <istruzione22>; } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura ciclica while Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura ciclica while in Java while (<cond>) { <istruzione1>; <istruzione2>; <istruzione3>; ... } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura ciclica do-while Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura ciclica do-while in Java <istruzione1>; <istruzione2>; <istruzione3>; ... } while (<cond>); Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura ciclica for Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura ciclica for in Java (1/2) for (int i = 0; i < n; i++) { // Esegue i comandi n volte <istruzione1>; <istruzione2>; <istruzione3>; ... } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura ciclica for in Java (2/2) while (i < n) { <istruzione1>; <istruzione2>; <istruzione3>; i++; // Equivale a i = i + 1 } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Ciclo infinito Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Ciclo infinito in Java while (true) { <istruzione1>; ... } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Cicli generici Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura ciclica generica (1/2) while (true) { <istruzione1>; if (<cond>) break; // Salta alla prima istruzione fuori dal ciclo <istruzione2>; ... } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Struttura ciclica generica (2/2) boolean finito = false; while (!finito) { <istruzione1>; if (<cond>) finito = true; else { <istruzione2>; ... } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Array (1/6) Un array è un oggetto contenitore che mantiene un numero fisso di elementi tutti dello stesso tipo (primitivo, derivato o user-defined) Primo indice 3 6 1 -1 2 4 5 elementi Elemento (alla posizione 3) Indici Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Array (2/6) Dichiarazione int[] a; // Significa a = null null a Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Array (3/6) Allocazione di memoria a = new int[5]; // Trova lo spazio necessario int[] 1 2 3 4 a Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Array (4/6) Assegnamenti a[0] = 2; a[1] = 4; a[2] = 6; a[3] = 8; int[] 2 4 1 6 8 3 10 a Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Final e static Final denota che “qualcosa” non è ulteriormente modificabile - Se applicata ad una classe indica che essa non è più estendibile Static denota “qualcosa” che è invocabile indipendentemente dall'esistenza di oggetti istanza della classe - Il calcolo della radice quadrata di un numero non dipende da oggetti istanza della classe Math - Math.sqrt() è un metodo statico Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Array (5/6) Dichiarazione e caricamento con un ciclo final static int MAX = 5; int[] a = new int[MAX]; // Dichiarazione (allocazione) // Caricamento dei dati for (int i = 0; i < a.length; i++) // length numero di elem. a[i] = 2 * i; Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Array (6/6) Dichiarazione e assegnamento int[] a = {2,4,6,8,10}; // Attenzione! Non si può “spezzare” // oppure // int a[] = new int[]{2,4,6,8,10}; Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Classi (1/5) Una classe definisce un tipo (user-defined) Esiste un costruttore - Metodo speciale per allocare gli oggetti - Non restituisce nessun tipo di ritorno, neanche void Esiste un metodo toString() Serve a rappresentare l'oggetto in forma testuale E' possibile l'overloading del costruttore Esistono altri metodi importanti - equals() - clone() - finalize() Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Classi (2/5) Persona nome: stringa cognome: stringa dataNascita: data Nome della classe Persona nome: stringa cognome: stringa dataNascita: data cittaResidenza: stringa Persona() Persona(nome: stringa, …, cittaResidenza: stringa) toString(): stringa eta(): intero Variabili di istanza Metodi Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Classi (3/5) public class Persona { String nome; String cognome; GregorianCalendar dataNascita; String cittaResidenza; // costruttore di default public Persona() { // una persona “precisa” } ... Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Classi (4/5) // Overloading del costruttore public Persona(String n, String c, GregorianCalendar d, String r) { nome = n; cognome = c; dataNascita = d; cittaResidenza = r; } public int eta() { return (new GregorianCalendar()).get(Calendar.YEAR) - this.dataNascita.get(Calendar.YEAR); ... Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Classi (5/5) // Metodo che deriva dalla classe Object public String toString() { return cognome + “ “ + nome + “ “ + eta(); } // Idem public boolean equals(Persona p) { // Due persone sono “uguali” quando tutti i dati // coincidono” return nome.equals(p.nome) && cognome.equals(...) && dataNascita.equals(p.dataNascita) && ...; } // fine classe Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Oggetti (1/3) Un oggetto è un rappresentante della classe La creazione avviene mediante il richiamo di un costruttore I valori degli attributi sono tutti inizializzati a 0 se interi, a false se booleani ecc I valori degli oggetti attributo della classe sono inizializzati a null Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Oggetti (2/3) // Costruttore di default Persona raffaeleTomasini = new Persona(); raffaeleTomasini Persona Raffaele nome Tomasini cognome 1988-3-17 dataNascita Brescia cittaResidenza Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Oggetti (3/3) // Uso il costruttore “sovraccaricato” Persona maurizioCozzetto = new Persona(“Maurizio”, ”Cozzetto”, new GregorianCalendar(1959, Calendar.APRIL, 1), “Roncadelle”); maurizioCozzetto Persona Maurizio nome Cozzetto cognome 1959-3-1 dataNascita Roncadelle cittaResidenza Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Ereditarietà (1/4) E' un meccanismo di astrazione che consente Il riutilizzo del codice La creazione di gerarchie di classi Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Ereditarietà (2/4) Veicolo è detta superclasse e Automobile è detta classe derivata Automobile eredita gli attributi e i metodi della classe padre (solo attributi e metodi pubblici e protected) La relazione tra Automobile e Veicolo è detta relazione ISA Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Ereditarietà (3/4) public class Veicolo extends Object { String targa; int ruote; int cilindrata; String aziendaProduttrice; String modello; public String toString() return targa + “ “ + modello; } Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Ereditarietà (4/4) public class Automobile extends Veicolo { int posti; int classe; // Rappresenta Euro1, Euro2, Euro3 ... int potenza; public double bollo() double d = 0.0; // Si fanno i calcoli necessari... return d; } Demo Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Override Consiste nella ridefinizione in una classe derivata di metodi già definiti nella superclasse public class Automobile extends Veicolo { int posti; // Altre variabili di istanza @Override // Ridefinisco le funzionalità di toString() del padre public String toString() { return super.toString() + “ “ + posti } Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Super Parola chiave che permette di far riferimento ai metodi e agli attributi definiti nella superclasse nel codice dei metodi di una classe derivata public class Automobile extends Veicolo { int posti; // Altre variabili di istanza @Override // Ridefinisco le funzionalità di toString() del padre public String toString() { return super.toString() + “ “ + posti } Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Polimorfismo Capacità di un “oggetto” di assumere forme “differenti” - In una gerarchia di classi, la possibilità di adottare il “binding dinamico” Automobile ferrariF40 = new Automobile("KU737WE","Ferrari F40 rosso metallizzato", “Coupè”,2936); // 2936 è la cilindrata // ferrariF40 è un anche un oggetto di tipo Veicolo Veicolo ferrariF40 = new Automobile(...); Proprietario me = new Persona(...); // Richiamo un metodo della classe padre System.out.println(ferrariF40.setProprietario(me)); Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Maurizio Cozzetto, Francesco Sarasini Corso Base 5 minuti di pausa Maurizio Cozzetto, Francesco Sarasini