classi, oggetti ed altro gennaio 2003 IGEA 02-03, (c) FdA 1

Documenti analoghi
introduzione alla programmazione in Java classi, oggetti ed altro

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Programmazione I - corso B a.a prof. Viviana Bono

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

Elementi di Base. Introduzione a Python.

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

Oggetti e dati primitivi 1

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Java e i Tipi di dati primitivi. Parte 3

Programmazione ad oggetti

Oggetti. Oggetti e classi. Utilizzo di classi. Classe

Usare e costruire oggetti. Concetti Fondamentali. Interfaccia Pubblica di una. Application Program Interface

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Java Classi wrapper e classi di servizio. Classi di servizio

Esonero di Informatica I. Ingegneria Medica

3) Descrivere l architettura di un elaboratore tramite astrazione a livelli

IL LINGUAGGIO JAVA. Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per scrivere frasi ben formate

Uso di metodi statici. Walter Didimo

Programmazione in Java e gestione della grafica. Lezione 6

Programmazione in Java (I modulo) Lezione 4

Introduzione al linguaggio C

Modulo 2: Strutture fondamentali della programmazione Java

Definizione di classi. Walter Didimo

JAVA IL LINGUAGGIO. Ogni valore nel linguaggio ha un tipo Ogni variabile deve essere dichiarata ed associata ad un tipo:

I L IN I GU G AGG G I G O

Linguaggio Macchina. Numeri binari. E il linguaggio che il microprocessore comprende. In Esadecimale

Java Classi wrapper e classi di servizio. Classi di servizio

Definiamo la prima classe vera. Concetti fondamentali 2. Il corpo del metodo. Definizione di un metodo

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Metodi e variabili istanza

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

TIPI PRIMITIVI E CLASSI WRAPPER

Riassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1.

Dati due punti sul piano calcolare la loro distanza

Tipi di dato semplici

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

Dichiarazioni e tipi predefiniti nel linguaggio C

Corso di Fondamenti di Informatica Università degli Studi di Cassino

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione Orientata agli Oggetti in Linguaggio Java

Informatica Applicata

Introduzione Programmazione Java

14 - Metodi e Costruttori

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Struttura dei programmi e Variabili

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

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

Oggetti. La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto.

Tipi di dato semplici

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Fondamenti di Informatica T-1

Costanti e Variabili

I Metodi. Fondamenti di Informatica A-K

Java. Java: compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Programmazione ad Oggetti. Java Parte II

Basi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi

Corso sul linguaggio Java

Questi lucidi provengono dal capitolo 2 di:

Tipi di dato e variabili. Walter Didimo

Le basi del linguaggio Java

Programmazione in Java (I modulo)

Elementi del linguaggio Python

Basi della programmazione in Java

Linguaggio C - sezione dichiarativa: costanti e variabili

Java secondo contatto. Nel tunnel una luce

Fondamenti di Informatica T-1. Introduzione al linguaggio Java Input/output, variabili, tipi

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Introduzione a Java. Riferimenti

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Il linguaggio Java è un linguaggio di programmazione ad alto livello

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

METODI in Java. Prof.Angela Bonifati. Metodi e Sottoprogrammi

Caratteristiche di un linguaggio ad alto livello

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Prima lezione di laboratorio. I mattoni di base di un programma Java. Comandi Unix. Riassunto. Oggi. Un programma complicato.

Fondamenti di Informatica T-1

Fondamenti di informatica T-1 (A K) Esercitazione 7: metodi, classi, oggetti

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Introduzione alla programmazione

Programmazione ad oggetti

Programmazione Orientata agli Oggetti in Linguaggio Java

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Corso sul linguaggio Java

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

Capitolo 2. Utilizzare oggetti

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Concetto di Funzione e Procedura METODI in Java

Java: introduzione. /** * CiaoMondoApp.java * La solita classe banale. import java.lang.*; // predefinita. class CiaoMondoApp

Programmazione. Tipi di dato primitivi. Francesco Tiezzi. Scuola di Scienze e Tecnologie Sezione di Informatica Università di Camerino

Transcript:

classi, oggetti ed altro gennaio 2003 IGEA 02-03, (c) FdA 1

file.java: sorgenti Java creati con editor javac.exe: compilatore Java es.: per compilare il sorgente in pippo.java usare javac pippo.java file.class: codice bytecode generati da compilatore Java java.exe: macchina virtuale Java es.: per eseguire il programma in pippo.class usare java pippo gennaio 2003 IGEA 02-03, (c) FdA 2

// tradizionale primo programma Java public class Ciao { public static void main(string[] args) { System.out.println("Ciao mondo!"); } } // deve essere nel file Ciao.java gennaio 2003 IGEA 02-03, (c) FdA 3

public class <nomeclasse> { public static void main(string[] args) { <istruzione1> <istruzione2> } } // ogni istruzione terminata da ; // salvato nel file <nomeclasse>.java gennaio 2003 IGEA 02-03, (c) FdA 4

componenti fondamentali che caratterizzano i linguaggi orientati agli oggetti (object-oriented) stretto legame: classe = fabbrica di oggetti gennaio 2003 IGEA 02-03, (c) FdA 5

componenti software che hanno proprietà specifiche contengono dati ed algoritmi per elaborarli offrono servizi agli utenti accesso ai dati elaborazione dei dati chi sono gli utenti? tipicamente, altri oggetti (è un mondo chiuso?) gennaio 2003 IGEA 02-03, (c) FdA 6

chi crea gli oggetti? le classi chi chiede a una classe di creare un oggetto? tipicamente, un altro oggetto tutti gli oggetti creati da una stessa classe appartengono alla stessa categoria ed hanno comportamento simile non sono eguali; es. le persone gennaio 2003 IGEA 02-03, (c) FdA 7

"Ciao mondo!" è un oggetto della classe String ogni stringa è un oggetto della classe String stringa = sequenza di caratteri scritti fra doppi apici "stringa di 23 caratteri" gli apici non vengono conteggiati gennaio 2003 IGEA 02-03, (c) FdA 8

fabbriche di oggetti ciascuna specializzata per una determinata categoria di oggetti definite dal programmatore riusabili esistono migliaia di classi già pronte, organizzate in package ogni package contiene molte classi gennaio 2003 IGEA 02-03, (c) FdA 9

public class Ciao { public static void main(string[] args) { System.out.println("Ciao mondo!"); } } la classe Ciao è in realtà molto particolare e non cattura lo spirito delle classi vere non ha neanche la capacità di fabbricare oggetti per definire classi più interessanti occorrono vari altri ingredienti gennaio 2003 IGEA 02-03, (c) FdA 10

Rectangle package java.awt abstract windowing toolkit costruisce oggetti Rectangle dati: coordinate (intere) del vertice nord-ovest base altezza algoritmi: modifica la dimensione/posizione del rettangolo confronta rettangolo con altre forme geometriche test di intersezione/contenimento ecc. accedi ai dati gennaio 2003 IGEA 02-03, (c) FdA 11

Rectangle import java.awt.rectangle; // per usare la classe public class Rettangolo { public static void main(string[] args) { System.out.println(new Rectangle(10, 20, 100, 40)); } } l istruzione import consente di (ri)utilizzare una classe preesistente l operatore new causa la costruzione di un oggetto output: java.awt.rectangle[x=10,y=20,width=100,height=40] significa: oggetto di tipo Rectangle contenente i dati specificati gennaio 2003 IGEA 02-03, (c) FdA 12

sintassi: new <nomeclasse>(<parametri>); parametri: n = 0 dati, separati da virgole se 0 parametri le parentesi tonde sono comunque richieste esempio new Rectangle(10, 20, 30, 40); esercizi: quali parametri hanno senso? new Persona( ); new Esame( ); gennaio 2003 IGEA 02-03, (c) FdA 13

nomi simbolici associati ad aree di RAM contenenti dati regole per i nomi: sequenze di caratteri alfanumerici (lettera o cifra) è ammesso il carattere non alfanumerico '_' il primo carattere non può essere cifra maiuscole e minuscole differiscono CASA è un nome differente da casa non sono ammesse le parole riservate o parole chiavi (es. new, class ) gennaio 2003 IGEA 02-03, (c) FdA 14

nomi legali pippo, Pluto, Zorro2, A25, b2b, casa_mia, Informatica_Grafica, system_var, MiNeSTRone, New nomi illegali 3volte, mamma mia, 007, public consuetudine (ma non regola): i nomi delle variabili iniziano con lettera minuscola gennaio 2003 IGEA 02-03, (c) FdA 15

ogni variabile è contraddistinta da un tipo che specifica quali categoria di dati può essere immagazzinata nella corrispondente area di RAM intero, reale, stringa ecc. per ogni variabile usata deve esserne dichiarato il tipo ogni variabile deve essere inizializzata deve esserle attribuito un valore mediante assegnazione gennaio 2003 IGEA 02-03, (c) FdA 16

esempi int voto; dichiarazione di variabile intera voto = 28; inizializzazione int eta = 22; dichiarazione + inizializzazione una variabile inizializzata può subire altre assegnazioni, purché non sia stata dichiarata final final int voto = 28; la variabile non potrà subire ulteriori assegnazioni gennaio 2003 IGEA 02-03, (c) FdA 17

<nometipo> <nomevariabile>; <nometipo> <nomevariabile> = <espressione>; esempio: String s = "Informatica grafica"; gennaio 2003 IGEA 02-03, (c) FdA 18

il tipo è una classe tengono traccia degli oggetti creati esempio: Rectangle cucina; cucina = new Rectangle(0, 0, 30, 40); Rectangle bagno = new Rectangle (40, 0, 30, 35); gennaio 2003 IGEA 02-03, (c) FdA 19

ogni variabile oggetto inizializzata è un riferimento ad uno specifico oggetto cucina Rectangle x=0 y=0 width=30 height=40 gennaio 2003 IGEA 02-03, (c) FdA 20

Rectangle k = cucina; cucina k Rectangle x=0 y=0 width=30 height=40 gennaio 2003 IGEA 02-03, (c) FdA 21

import java.awt.rectangle; public class Rettangolo { public static void main(string[] args) { Rectangle cucina = new Rectangle(0, 0, 30, 40); Rectangle k = cucina; System.out.println(cucina); System.out.println(k); k.translate(10, 10); // invocazione metodo System.out.println(cucina); System.out.println(k); } } gennaio 2003 IGEA 02-03, (c) FdA 22

java.awt.rectangle[x=0,y=0,width=30,height=40] java.awt.rectangle[x=0,y=0,width=30,height=40] java.awt.rectangle[x=10,y=10,width=30,height=40] java.awt.rectangle[x=10,y=10,width=30,height=40] NB La maniera standard di invocare un algoritmo (metodo) su un oggetto è scriverne il nome subito dopo il riferimento all'oggetto, usando un punto separatore gennaio 2003 IGEA 02-03, (c) FdA 23

specificatore di accesso public, o altro nome classe per convenzione, inizia per lettera maiuscola (ma non è una regola!) costruttore/i (da sviluppare successivamente) operazioni che vengono svolte nelle creazioni di oggetti (istanziazioni) variabili istanza (o campi, field) dati contenuti negli oggetti metodi algoritmi che si possono invocare su ciascun oggetto (istanza) gennaio 2003 IGEA 02-03, (c) FdA 24

public chiunque può chiedere alla classe di costruire oggetti per poi utilizzarli esistono anche protected e private nome: stesse regole per la definizione dei nomi di variabili public class Contatore { } gennaio 2003 IGEA 02-03, (c) FdA 25

variabili contenute in ogni istanza dovrebbero essere incapsulate fisicamente nascoste all'utente dell'oggetto, il quale sa che esistono ma non può accedervi direttamente (ma allora come fa ad usarle?) incapsulamento = principio fondamentale dell'ingegneria del software, su cui si basa la programmazione o-o in pratica, spesso private: in tal caso, solo la classe stessa può accedervi direttamente gennaio 2003 IGEA 02-03, (c) FdA 26

si dichiarano all'interno della classe rispettando la sintassi della dichiarazione variabili sintassi: <specificatorediaccesso> <tipovariabile> <nomevariabile>; gennaio 2003 IGEA 02-03, (c) FdA 27

public class Contatore { } private int valore; una classe può contenere un qualunque numero (anche nullo) di variabili istanza gennaio 2003 IGEA 02-03, (c) FdA 28

specificatore di accesso public o altro specifica chi può invocare il metodo un metodo pubblico può essere invocato da tutti tipo restituito tipologia dell'output dell'algoritmo, ovvero tipo di informazione (numero, stringa, o altro) restituita dal metodo alla sua terminazione istruzione return return <espressione>; fa terminare il metodo in esecuzione e restituisce il risultato specificato gennaio 2003 IGEA 02-03, (c) FdA 29

nome solite regole parametri formali lista di variabili separate da virgole per ciascuna variabili si specifica il tipo costituiscono di fatto l'input dell'algoritmo corpo o implementazione istruzioni Java che realizzano l'algoritmo o che consentono l'accesso alle varabili istanza gennaio 2003 IGEA 02-03, (c) FdA 30

<specificatorediaccesso> <tiporestituito> <nomemetodo> (<tipoparametro1> <nomeparametro1>, <tipoparametro2> <nomeparametro2>, ) { } <istruzioni del corpo> gennaio 2003 IGEA 02-03, (c) FdA 31

public class Contatore { private int valore = 0; // var. istanza public int getvalore() { // no parametri return valore; } public void contasu() {// non restituisce info valore = valore + 1; // valore++; } } gennaio 2003 IGEA 02-03, (c) FdA 32

sintassi accesso a variabili istanza (se consentito) <riferimentooggetto>.<nomevari abileistanza> invocazione metodo (se consentito) <riferimentooggetto>.<nomemeto do>(<listaparametri>) parentesi obbligatorie, anche se non vi sono parametri da specificare gennaio 2003 IGEA 02-03, (c) FdA 33

Contatore contascatti = new Contatore(); System.out.println (contascatti.getvalore()); contascatti.contasu(); System.out.println (contascatti.getvalore()); gennaio 2003 IGEA 02-03, (c) FdA 34

definizione di una seconda classe che esegua istruzioni di collaudo scriveremo una classe TestContatore non istanzia oggetti! public class TestContatore { public static void main(string[] args) { Contatore uso di un contascatti ambiente = new di collaudo Contatore(); System.out.println(contaScatti.getValore()); interattivo (avanzato) contascatti.contasu(); System.out.println(contaScatti.getValore()); } } ad esempio, BlueJ (http://www.bluej.org) gennaio 2003 IGEA 02-03, (c) FdA 35

un costruttore è un metodo il cui nome è eguale a quello della classe in cui è definito automaticamente eseguito quando una classe istanzia un oggetto new <nomeclasse>(<parametri>) attiva il costruttore della classe <nomeclasse> attivazione diversa dai metodi "normali", invocati tramite nome gennaio 2003 IGEA 02-03, (c) FdA 36

debbono la denominazione "costruttore" alla loro attivazione in fase di "costruzione" di un oggetto contengono istruzioni per inizializzare gli oggetti esistono in ogni classe anche se non li definiamo esplicitamente? gennaio 2003 IGEA 02-03, (c) FdA 37

<specificatorediaccesso> <nomeclasse> (<tipoparametro1> <nomeparametro1>, <tipoparametro2> <nomeparametro2>, ) { <istruzioni> } la sintassi è leggermente differente da quella di un metodo "normale" manca il tipo restituito gennaio 2003 IGEA 02-03, (c) FdA 38

determinano l'uso di new new <nomeclasse>(<e1>,,<ek>) se e solo se il costruttore <nomeclasse> ha k = 0 parametri formali i k valori sono detti parametri attuali i tipi dei k parametri formali corrispondono ordinatamente ai tipi dei k parametri attuali gennaio 2003 IGEA 02-03, (c) FdA 39

public Contatore(int inizio) { valore = inizio; } inizio è il parametro del metodo la variabile istanza valore dell'oggetto creato viene inizializzata con il valore contenuto nel parametro inizio new Contatore(<espressione>) <espressione> stabilisce il valore di inizio gennaio 2003 IGEA 02-03, (c) FdA 40

static benché le classi siano primariamente "fabbriche di oggetti" esse possono anche contenere variabili e metodi metodi e variabili statiche (static) sono risorse di classe: la classe, invece di un oggetto, può contenere, eccezionalmente, variabili e metodi è un uso "improprio" motivazioni discusse più avanti nel corso esempio rilevante: la classe Math gennaio 2003 IGEA 02-03, (c) FdA 41

Math classe standard di Java: java.lang.math non necessita import è automaticamente importata, come altre classi fondamentali (tutte quelle del package java.lang) contiene un gran numero di metodi numerici potenze reali, esponenziali, logaritmi, funzioni trigonometriche ecc. contiene le costanti matematiche e (costante di Nepero) e p gennaio 2003 IGEA 02-03, (c) FdA 42

costanti (variabili final) <nomeclasse>.<nomevariabile> es.: Math.E e Math.PI metodi <nomeclasse>.<nomemetodo> (<parametri>) es.: Math.sqrt(<espressione>), Math.cos(<espressione>) gennaio 2003 IGEA 02-03, (c) FdA 43

calcolo delle radici di un'equazione di 2 grado delta = b*b 4*a*c; r = Math.sqrt(delta); x1 = (-b + r) / (2*a); x2 = (-b r) / (2*a); se delta < 0? gennaio 2003 IGEA 02-03, (c) FdA 44

area del cerchio di raggio r r * r * Math.PI esponenziale e x Math.exp(x) log 10 x Math.log(x) / Math.log(10) gennaio 2003 IGEA 02-03, (c) FdA 45

tipi numerici interi, reali tipo booleano true, false caratteri simboli 'a', 'B', '$' stringhe "questa è una stringa" variabili oggetto riferimenti ad oggetti le variabili stringa sono riferimenti ad oggetti della classe String gennaio 2003 IGEA 02-03, (c) FdA 46

Keyword byte short int long float double char boolean Description (integers) Byte-length integer Short integer Integer Long integer (real numbers) Single-precision floating point Double-precision floating point (other types) A single character A boolean value (true, false) Size/Format 8-bit two's complement 16-bit two's complement 32-bit two's complement 64-bit two's complement 32-bit IEEE 754 64-bit IEEE 754 16-bit Unicode character true or false

int e double sono i più usati int: 32 bit in complemento a due double: 64 bit in virgola mobile le costanti numeriche sono di norma int o double 123456 è int 1.23456 è double 1.0 è double 3000000000 (3 miliardi) non è int, perché? gennaio 2003 IGEA 02-03, (c) FdA 48

+, -, *, /, % % definito fra interi: resto della divisione intera se operandi omogenei (stesso tipo), risultato omogeneo int + int dà int (rischio overflow) int / int dà int (inaspettato!) se operandi eterogenei si applica il principio della "conservazione dell'informazione" int * double dà double gennaio 2003 IGEA 02-03, (c) FdA 49

errore classico int a = 1; int b = 1; int c = 2; correzione: double media = (a+b+c) / 3; // assegna 1 double media = (a+b+c) / 3.; // assegna 1.3333333333 gennaio 2003 IGEA 02-03, (c) FdA 50

sintassi <nomevariabile> = <espressione>; i tipi debbono essere compatibili e non deve essere persa informazione tipi identici sono compatibili <variabile_double> = <valore_int>; (va bene) <variabile_int> = <valore_double>; (non va bene) gennaio 2003 IGEA 02-03, (c) FdA 51

boolean ammette i valori true (vero) e false (falso) esempio boolean pari = true; gennaio 2003 IGEA 02-03, (c) FdA 52

standard di documentazione: premettere ad ogni classe pubblica e a ciascun suo metodo pubblico un commento che ne descriva l'uso /** Il metodo serve a */ è possibile fare riferimento ai parametri (@param) e al valore restituito (@return) gennaio 2003 IGEA 02-03, (c) FdA 53

/** Il costruttore richiede la specifica della inizializzazione della variabile di conteggio @param start il valore iniziale del conteggio */ public Contatore(int start) { // costruttore inizio = start; valore = inizio; memoria = inizio; } gennaio 2003 IGEA 02-03, (c) FdA 54

javadoc sfrutta i commenti nel formato /** */ e costruisce automaticamente documentazione HTML delle classi e dei metodi uso: javadoc *.java aprire il file index.html gennaio 2003 IGEA 02-03, (c) FdA 55

This document was created with Win2PDF available at http://www.daneprairie.com. The unregistered version of Win2PDF is for evaluation or non-commercial use only.