Sei sulla pagina 1di 32

Corso di Laurea in Ingegneria Informatica e Automatica

A. A. 2017/2018

Programmazione orientata
agli oggetti
Paolo Liberatore, Massimo Mecella

L1.1
Introduzione OOP, Java,
classi e oggetti, classe String

Sommario

• Introduzione alla OOP


• Introduzione a Java
– Programmi Java
– Errori
• Classi e oggetti
• Invocazione di metodi
• Classe String

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 2

Funzioni o Oggetti ?
funzioni
Molte delle tecniche tradizionali sono
basate sull'idea di costruire un sistema orientazione
concentrandosi sulle funzioni alle funzioni
oggetti
manipolati

Le tecniche Object-Oriented (OO)


oggetti
rovesciano questo rapporto: un sistema
viene costruito partendo dalla orientazione
classificazione degli oggetti da agli oggetti
manipolare
funzioni di
manipolazione
L1.1 Introduzione OOP, Java, classi e oggetti, classe String 3
Approccio OO
La progettazione del SW con l'approccio OO è il metodo che
conduce a concentrarsi sugli oggetti che il sistema deve
manipolare piuttosto che sulle funzioni che deve realizzare.
Non chiederti cosa fa il sistema ma a cosa serve, di quali oggetti
è composto, e come si opera su di essi!

a cosa serve

cosa fa

come

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 4

Tecnica tradizionale: sviluppo funzionale


A

B C D

E F G H

• Introduzione di funzioni troppo astratte/innaturali


• Declassamento degli aspetti relativi ai dati
• Attenzione agli aspetti meno stabili (metodi di manipolazione) rispetto a
quelli più stabili (informazioni da gestire)
• Creazione di moduli validi solo in un contesto
• Estendibilità e riusabilità (qualità esterne) difficili da raggiungere

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 5

Principi di base dell'approccio OO

• Modellare gli aspetti della realtà di interesse nel modo più


diretto ed astratto possibile (strutturazione), mediante le
nozioni di oggetto, classi e relazioni
• Costruire il programma in termini di moduli, sulla base del
principio che ogni classe è un modulo (modularità)
• Legare gli aspetti comportamentali a quelli strutturali
• Proteggere le parti delicate del SW permettendo solo un
accesso controllato a dati e funzioni (concetto di interfaccia)

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 6


Concetti di base dell'approccio OO
• Incapsulamento dei dati
– Il processo di nascondere i dettagli di definizione di oggetti, solo le
interfacce con l'esterno sono visibili

• Ereditarietà
– Gli oggetti sono definiti in una gerarchia ed ereditano dall'immediato
parente caratteristiche comuni, che possono essere specializzate

• Astrazione
– Il meccanismo con cui si specifica le caratteristiche peculiari di un
oggetto che lo differenzia da altri

• Polimorfismo
– Possibilità di eseguire funzioni con lo stesso nome che pure sono
state specializzate per una particolare classe

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 7

Classi ed Oggetti

• Nella realtà, dato un insieme di “cose”, spesso


astraiamo dalle loro caratteristiche per arrivare a
definire un “concetto” che le rappresenta tutte
– Mario Rossi, Luisa Bianchi, etc. sono tutte Persone
– Microsoft Word, Open Office, etc. sono tutti Programmi
“word processor”

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 8

Classi ed Oggetti

• Il “concetto” unificante è la classe (anche detta


entità o concetto)
– Definisce l’insieme delle caratteristiche comuni a diverse
“cose”
– Caratteristiche “strutturali” (attributi) e “comportamentali”
(metodi/operazioni)
– Es.: PERSONA, WORD_PROCESSOR
• La singola “cosa” è l’oggetto
– Istanza di una classe
– Es.: Mario Rossi, Microsoft Word

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 9


Oggetti

• Una classe definisce le caratteristiche comuni a tutti


gli oggetti
– PERSONA presenta nome, cognome, data_nascita
(attributi) e calcolaEta() (metodo/operazione)
• Gli oggetti presentano differenti valori per le
caratteristiche strutturali
– L’istanza di PERSONA p assume i valori Mario, Rossi,
01/01/1990 (rispettivamente per gli attributi nome e
cognome ed il metodo calcolaEta())

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 10

Cosa “esiste” realmente ?

• Nella realtà esistono solo gli oggetti


• Per rappresentare insiemi di oggetti (cioè, i concetti)
utilizzo le classi
– Non esistono le classi, esistono (i.e., “vivono” nel mondo,
“girano” nell’applicazione) solo istanze di classi

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 11

Ereditarietà

• E’ possibile dichiarare che una classe B eredita da


un’altra classe A
– Gli oggetti istanza di B presentano tutte le caratteristiche
tipiche degli oggetti istanza di A
– Possono inoltre avere ulteriori caratteristiche (che li
rendono più specifici)

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 12


Esempio di Ereditarietà

La classe STUDENTE (A) è in relazione di ereditarietà


con la classe PERSONA (B)
– A eredita da B
– A è una sottoclasse di B
– A è una classe derivata da B
– A è una specializzazione (è più specializzata) di B
– B è una superclasse di A
– B è una classe base di A
– B è una generalizzazione di A

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 13

Fondamenti della OOP


Elementi di base
oggetti

proprietà classi
ereditarietà
metodi

metaclassi
polimorfismo
Estensioni
oggetti complessi
information hiding

concorrenza

... altro ....

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 14

Fattori di qualità influenzati da OOP

Riusabilità
favorita dai concetti di classe e di ereditarietà
Modularità
favorita dai concetti di classe e incapsulamento
Estendibilità
favorita dal concetto di ereditarietà
Leggibilità e verificabilità
favorita dalla struttura vicina al modo in cui vediamo la realtà

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 15


Java

Java è un linguaggio di programmazione moderno (1995) ad alto


livello, orientato agli oggetti, ma che supporta anche il paradigma
imperativo e il paradigma funzionale.

Caratteristiche generali:
• semplice
• indipendente dalla piattaforma (lo stesso programma è eseguibile
in Windows, Unix, MacOS, ecc.)
• dispone di librerie di programma ricche e ben sviluppate
• progettato per Internet
• basato su una macchina virtuale (vedi dopo)
• sicuro (la macchina virtuale impedisce accessi indesiderati da
applicazioni via Internet)

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 16

Il primo programma Java

public class Primo {


public static void main(String[] args) {
System.out.println("Questo è il mio primo programma Java.");
}
}

public class Primo {...} definizione di una classe chiamata Primo


public static void main(String[] args) {...} definizione del metodo main
System.out oggetto/istanza predefinito della classe predefinita PrintStream
println metodo della classe PrintStream applicato all'oggetto System.out
"Questo e' il mio primo programma Java." oggetto della classe String

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 17

Il secondo programma Java

public class Secondo {


public static void main(String[] args) {
System.out.println("Questo è il mio secondo programma Java...");
System.out.println("... e non sarà l'ultimo.");
}
}

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 18


Struttura di un programma Java

• Ogni programma Java è una raccolta di una o più classi

• Una classe contiene uno o più metodi

• Un metodo contiene le istruzioni

• Ogni programma deve avere una e una sola classe


contenente il metodo speciale main

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 19

Struttura di un programma Java

// commenti sulla classe


public class MioProgramma
{
Intestazione della classe

Corpo della classe

I commenti possono essere aggiunti ovunque


}

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 20

Struttura di un programma Java

// commenti sulla classe


public class MioProgramma
{

// commenti sul metodo


public static void main (String[] args)
{
Intestazione del metodo
Corpo del metodo
}

}
21

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 21


Commenti

• I commenti di un programma sono spesso chiamati


documentazione inline
• Devono essere inclusi per documentare lo scopo e le
funzionalità del programma

• Non ne influenzano il funzionamento


• Vengono trascurati dal compilatore

• Possono avere due forme:

// commenti fino alla fine della riga


/* commento che
può stare su più righe */

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 22

Spazi vuoti

• Gli spazi, righe vuote e le tabulazioni sono chiamati spazi


bianchi

• Gli spazi bianchi sono usati per separare le parole e i simboli


di un programma

• Gli spazi bianchi vengono ignorati dal compilatore

• Un programma Java può essere formattato come si desidera


con gli spazi bianchi

• La formattazione migliora la leggibilità di un programma e va


usata in modo consistente

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 23

Scrivere, compilare ed eseguire

1. preparazione del testo del programma


(creazione di un file NomeClasse.java)

2. compilazione del programma


(uso del compilatore java standard: javac NomeClasse.java,
genera un file con il bytecode NomeClasse.class)

3. esecuzione del programma compilato


(esecuzione tramite l’interprete Java Virtual Machine:
java NomeClasse )

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 24


Schema di funzionamento

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 25

Ambiente di programmazione

Esistono delle applicazioni chiamate ambienti di programmazione che


consentono di realizzare i passi di scrittura, compilazione, esecuzione (e
debugging) in maniera integrata.

Esempi: Eclipse, Netbeans.

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 26

Errori

public class Errori {


public static void main(String[] args) {
System.out.println("Questi sono i miei primi errori...")
Sistem.out.println("...e non saranno gli ultm!!!");
}
}

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 27


Errori

• Errori di sintassi e di semantica statica, che vengono


intercettati dal compilatore (errori di compilazione)
– Se c'è un errore durante la fase di compilazione, non viene creato un
programma eseguibile

• Errori di semantica dinamica generati durante l'esecuzione


(errori d'esecuzione)
– Errori che causano la fine anomala del programma (es. divisione per
zero, accesso a memoria non inizializzata)

• Errori che producono risultati diversi da quelli desiderati


(errori logici)

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 28

Classi e oggetti

• Tutti i programmi Java sono collezioni di classi

• Le classi caratterizzano gli oggetti dell’applicazione

• Durante l’esecuzione del programma “vivono” solo gli oggetti


(es. System.out)

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 29

Invocazione di metodi

Sintassi:

oggetto.nomeMetodo(parametri)

• oggetto è (un riferimento che denota) l'oggetto di invocazione


• nomeMetodo(...) è il metodo invocato
• parametri sono i parametri passati al metodo

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 30


Invocazione di metodi

Esempio:

System.out.println("Ciao!");

• System.out è (un riferimento che denota) l'oggetto di


invocazione
• println(...) è il metodo invocato
• "Ciao!" è il parametro passato al metodo

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 31

Invocazione di metodi

Esempio:

System.out.print("Ciao ");
System.out.println("Ciao!");
System.out.pippo("Ciao!");

• Possono essere applicati diversi metodi ad un oggetto (come


specificato nella classe a cui l’oggetto appartiene)
• Non possono essere applicati metodi inesistenti!

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 32

La classe String

• Gli oggetti che sono istanza di questa classe denotano


stringhe (cioè sequenze di caratteri).

• Espressioni racchiuse tra doppi apici, come "java" denotano


oggetti della classe String.

• La classe String mette a disposizione diversi metodi per la


manipolazione di stringhe.

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 33


La classe String

L’operatore + applicato ad oggetti della classe String ha il


significato di concatenazione di stringhe.

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 34

Esempio di uso dei metodi

public class ProvaStringhe1 {


public static void main(String[] args) {
System.out.println("java".toUpperCase());
}
}

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 35

Segnatura e intestazione di un metodo

segnatura di un metodo consiste nel nome del metodo e nella


descrizione (tipo, numero e posizione) dei suoi parametri.

intestazione di un metodo consiste nella segnatura più la


descrizione (il tipo) del risultato.

Es. String toUpperCase() - metodo della classe String


String concat(String s) - metodo della classe String
void println(String s) - metodo della classe PrintStream

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 36


Esempio di uso dei metodi

public class ProvaStringhe2 {


public static void main(String[] args) {
System.out.println("ja".concat("va").toUpperCase());
}
}

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 37

Esempio di uso dei metodi

public class ProvaStringhe3 {


public static void main(String[] args) {
System.out.println("JA".concat("V").concat("A"));
System.out.println("JA".concat("V".concat("A")));
}
}

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 38

Esercizio 1.1.1

Scrivere un programma Java che stampa due linee di testo: la


prima contiene il vostro nome e cognome separati da uno
spazio, la seconda la matricola.
Usare 3 diverse istruzioni di stampa.

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 39


Esercizio 1.1.2

Identificare e classificare gli errori del programma Java


presentato nella slide Errori.
Trascrivere il programma (contenente gli errori), e verificare la
segnalazione di errori da parte del compilatore.
Infine correggere tutti gli errori producendo un programma che
stampa ciò che è indicato nella slide (in maniera corretta).

L1.1 Introduzione OOP, Java, classi e oggetti, classe String 40


Corso di Laurea in Ingegneria Informatica e Automatica
A. A. 2017/2018

Programmazione orientata
agli oggetti
Paolo Liberatore, Massimo Mecella

L1.2
Variabili, tipi di dato e
istruzioni Java

Sommario

• Variabili
– dichiarazione e assegnazione
• Tipi di dato
• Riferimenti e oggetti
• Creazione di oggetti
• Garbage collection
• Tipi di dato primitivi
• Operatori, espressioni e conversioni esplicite
• Istruzioni

L1.2 Variabili, tipi di dato e istruzioni Java 2

Variabili Java

Variabili denotano i dati di un programma

• Nome (identificatore valido come in C/Python)


• Tipo (vedi dopo)
• Indirizzo di memoria
• Valore

public class Variabili {


public static void main(String[] args) {
int a,b,c;
a=5; b=2; c=a+b;
System.out.println("Il risultato è " + c);
}
}

L1.2 Variabili, tipi di dato e istruzioni Java 3


Tipi di dato in Java
Java è un linguaggio fortemente tipizzato.

Il tipo di una variabile o di una espressione è noto al momento


della compilazione.

Non si possono dichiarare e usare variabili a cui non è associato


un tipo di dato.

Due categorie

• Tipi di dato primitivi


(interi, reali, caratteri, booleani)

• Riferimenti ad oggetti
(classi predefinite del linguaggio, classi scritte dall'utente)

L1.2 Variabili, tipi di dato e istruzioni Java 4

Dichiarazioni di variabili

Sintassi

tipo nomeVariabile;

Esempi

int a;
String s;

L1.2 Variabili, tipi di dato e istruzioni Java 5

Assegnazione di variabili

Sintassi

nomeVariabile = espressione;

Esempi

a = b + 5;
s = "Ciao";

L1.2 Variabili, tipi di dato e istruzioni Java 6


Inizializzazione di variabili

Le variabili in Java devono essere sempre inizializzate.

Esempio di uso di variabile non inizializzata che provoca errore

String s;
System.out.println(s);

L1.2 Variabili, tipi di dato e istruzioni Java 7

Riferimenti e oggetti

In Java le variabili possono contenere solo riferimenti ad oggetti


(non gli oggetti stessi)

Gli oggetti sono costruiti e allocati in memoria indipendentemente


dalle variabili.

Gli oggetti hanno un tempo di vita diverso dalle variabili.

Esempio

String s;
s = "Ciao";

L1.2 Variabili, tipi di dato e istruzioni Java 8

Riferimenti e oggetti

Due variabili possono fare riferimento allo stesso oggetto.

Esempio

String s,t;
s = "Ciao";
t = s;

L1.2 Variabili, tipi di dato e istruzioni Java 9


Valore null

Le variabili che sono riferimenti ad oggetti possono assumere un valore


speciale: null.

Esempio

String s;
s = null;

L1.2 Variabili, tipi di dato e istruzioni Java 10

Notazione grafica per la rappresentazione


di variabili

L1.2 Variabili, tipi di dato e istruzioni Java 11

Programmi sulle stringhe

public class Hamburger {


public static void main(String[] args) {
String s,t,u,v,z;
s = "ham"; t = "burger";
u = s.concat(t); v = u.substring(0,3); z = u.substring(3);
System.out.println(u);
System.out.println(v);
System.out.print(z);
}
}

L1.2 Variabili, tipi di dato e istruzioni Java 12


Programmi sulle stringhe

public class JFK1 {


public static void main(String[] args) {
String first = "John", middle = "Fitzgerald", last = "Kennedy";
String initials;
String firstInit, middleInit, lastInit;
firstInit = first.substring(0,1);
middleInit = middle.substring(0,1);
lastInit = last.substring(0,1);
initials = firstInit.concat(middleInit).concat(lastInit);
System.out.println(initials);
}
}

L1.2 Variabili, tipi di dato e istruzioni Java 13

Programmi sulle stringhe

public class JFK2 {


public static void main(String[] args) {
String first = "John", middle = "Fitzgerald", last = "Kennedy";
String initials = first.substring(0,1).
concat(middle.substring(0,1)).
concat(last.substring(0,1));
System.out.println(initials);
}
}

L1.2 Variabili, tipi di dato e istruzioni Java 14

Programmi sulle stringhe

public class JFK3 {


public static void main(String[] args) {
String first = "John", middle = "Fitzgerald", last = "Kennedy";
String initials = first.substring(0,1) +
middle.substring(0,1) +
last.substring(0,1);
System.out.println(initials);
}
}

L1.2 Variabili, tipi di dato e istruzioni Java 15


Creazione di oggetti

Sintassi

new nomeClasse(parametri);

Esempio

String s;
s = new String("Ciao");

L1.2 Variabili, tipi di dato e istruzioni Java 16

Stringa vuota
Sintassi

new String()
""

Esempio

String s,t;
s = new String();
t = "";

Nota: stringa vuota è diversa da null.

L1.2 Variabili, tipi di dato e istruzioni Java 17

Accessibilità degli oggetti

Esempio

String s1 = new String("uno");


String s2 = new String("due");
s1 = s2;

Che fine fa l'oggetto "uno"?

L1.2 Variabili, tipi di dato e istruzioni Java 18


Garbage Collection

Garbage collection: operazione di recupero della memoria utilizzata dagli


oggetti che vengono persi (cioè non più riferiti) dal programma.

In Java, tale operazione viene svolta automaticamente dal sistema run-time


(la Java Virtual Machine).

Non esiste l'istruzione delete.

L1.2 Variabili, tipi di dato e istruzioni Java 19

Librerie di classi

• Una libreria è una collezione di classi che possono


essere usate nei programmi
• La libreria standard fa parte di ogni sistema di
sviluppo Java
• Le classi della libreria non fanno parte del linguaggio,
ma vengono usate continuamente
• La classe System e la classe String sono parte della
libreria standard di Java
• Altre librerie possono essere prodotte da terze parti o
sviluppate da voi stessi

L1.2 Variabili, tipi di dato e istruzioni Java 20

Packages

• Le classi della libreria standard sono organizzate in pacchetti

Package Scopo
java.lang supporto generale allo sviluppo
(importata automaticamente)
java.applet creare applet per il web
java.awt grafica e interfacce grafiche
javax.swing ulteriori componenti grafiche per GUI
java.io input/output
java.net comunicazione di rete
java.util utilità varie
java.text visualizzare testo formattato
...

L1.2 Variabili, tipi di dato e istruzioni Java 21


Dichiarazione di import

• Per usare una classe di un pacchetto


– si indica il suo nome per esteso
java.util.Random x = …

– oppure si importa la classe e quindi si indica solo il nome della classe


import java.util.Random;
Random x = …

• Per importare tutte le classi di un pacchetto si usa il carattere


‘jolly’ *
import java.util.*;
Random x = …

L1.2 Variabili, tipi di dato e istruzioni Java 22

Lettura di stringhe da tastiera


import java.io.*;

public static void main(String[] args) throws IOException


{
BufferedReader r = new BufferedReader(
new InputStreamReader(System.in));
String nome = r.readLine();

}

Note:
• Uso di classi BufferedReader e InputStreamReader (libreria java.io)
• Dichiarazione di presenza di eccezioni throws IOException

L1.2 Variabili, tipi di dato e istruzioni Java 23

Lettura/scrittura di stringhe tramite GUI

import javax.swing.JOptionPane;

public static void main(String[] args) {
String nome = JOptionPane.showInputDialog("Inserisci nome");
String cognome = JOptionPane.showInputDialog("Inserisci cognome");
JOptionPane.showMessageDialog(null,nome+" "+cognome);
System.exit(0);
}

Nota:
• Uso della classe JOptionPane (libreria javax.swing.JOptionPane)

L1.2 Variabili, tipi di dato e istruzioni Java 24


Tipi di dato primitivi
Insieme di valori e di operazioni associate
• Numerici
Interi Reali

int (32 bit) float (32 bit)


long (64 bit) double (64 bit)
short (16 bit)
byte (8 bit)

• Caratteri
char

• Booleani
boolean

L1.2 Variabili, tipi di dato e istruzioni Java 25

Operatori

Operatori matematici

+ somma
- sottrazione
* prodotto
/ divisione intera
% resto della divisione intera
/ divisione tra valori reali

L1.2 Variabili, tipi di dato e istruzioni Java 26

Espressioni
Combinazione di operazioni e uso di parentesi (come in C)

int a,b,c;
c = (a+b)*2-(a-b)/2;

a+b byte b short b int b long b float b double b

byte a byte short int long float double


short a short short int long float double
int a int int int long float double
long a long long long long float double
float a float float float float float double

double a double double double double double double

L1.2 Variabili, tipi di dato e istruzioni Java 27


Assegnazioni tra tipi diversi

a=b byte b short b int b long b float b double b

byte a OK ERRORE ERRORE ERRORE ERRORE ERRORE

short a OK OK ERRORE ERRORE ERRORE ERRORE

int a OK OK OK ERRORE ERRORE ERRORE

long a OK OK OK OK ERRORE ERRORE

float a OK OK OK OK OK ERRORE

double a OK OK OK OK OK OK

L1.2 Variabili, tipi di dato e istruzioni Java 28

Conversione esplicita (cast)

Sintassi

(tipo) espressione;

Esempio

double a = 3.14;
int x = (int) a;

L1.2 Variabili, tipi di dato e istruzioni Java 29

Nota su assegnazione di variabili


Variabili riferimento ad oggetti

L’assegnazione assegna il riferimento ad un oggetto ad una variabile.


Variabili diverse si riferiscono allo stesso oggetto.

Esempio
s = "Ciao"; t = s; // s e t sono riferimenti allo stesso oggetto

Variabili di tipo di dato primitivo

L’assegnazione assegna un valore ad una variabile. Il risultato sarà


una copia del valore nella variabile di assegnazione.

Esempio
a = 5; b = a; // b e a contengono il valore 5

L1.2 Variabili, tipi di dato e istruzioni Java 30


Tipo di dato primitivo char

char : rappresenta simboli alfanumerici (standard Unicode a16 bit)

Letterali definiti tra apici singoli (es. 'A')

Esempio

char c,d;
c = 'A';
d = '1';

L1.2 Variabili, tipi di dato e istruzioni Java 31

Conversioni char - int

char <-> int : codice ASCII del carattere

Esempio

char c; int d;
c = (char) 65;
d = (int) 'A';

L1.2 Variabili, tipi di dato e istruzioni Java 32

Tipo di dato primitivo boolean

boolean : rappresenta valori di verità

Letterali : true e false

Esempio

boolean b;
b = true;

L1.2 Variabili, tipi di dato e istruzioni Java 33


Operatori ed espressioni booleane

&& and
|| or
! not

Esempio

boolean b,c,d,e,f;
b = ! ( (c || d) && (e || f) );

L1.2 Variabili, tipi di dato e istruzioni Java 34

Operatori di confronto

== uguale
!= diverso
> maggiore
>= maggiore o uguale
< minore
<= minore o uguale

Esempio

boolean b;
int x,y,z;
b = (x>y) && (x>z);

L1.2 Variabili, tipi di dato e istruzioni Java 35

Espressione condizionale
Sintassi

(espressione booleana)?<valore1>:<valore2>

Semantica

Il risultato dell'espressione condizionale è dato dal primo valore se la


condizione booleana è vera, oppure dal secondo valore se la
condizione è falsa.
Esempio

int x,y; …. // x e y diversi


System.out.println((x<y?x:y)+" è minore di "+(x>y?x:y));

L1.2 Variabili, tipi di dato e istruzioni Java 36


Classi associate ai tipi primitivi

Per ogni tipo primitivo esiste la corrispondente classe associata


(denominata classe wrapper)

byte short int long float double char boolean

Byte Short Integer Long Float Double Character Boolean

L1.2 Variabili, tipi di dato e istruzioni Java 37

Conversione da stringhe a valori

Uso dei metodi delle classi wrapper per conversione da stringhe a


valori del tipo di dato primitivo

Esempio

String s = "123";
int x = Integer.parseInt(s);

L1.2 Variabili, tipi di dato e istruzioni Java 38

Lettura di valori primitivi

Lettura di una Stringa


Conversione da Stringa a dato primitivo

Esempio

String s = JOptionPane.showInputDialog("Inserisci un numero");


int x = Integer.parseInt(s);

L1.2 Variabili, tipi di dato e istruzioni Java 39


Scrittura di valori primitivi

Il metodo println applicato all'oggetto System.out consente la scrittura


di tutti i dati primitivi

L'operatore di concatenazione di stringhe + consente la


concatenazione di stringhe e dati primitivi

Esempio

String s = "Via Ariosto "; int x = 25;


System.out.print(s); System.out.println(x);
System.out.println(s+x);

L1.2 Variabili, tipi di dato e istruzioni Java 40

Istruzioni Java

• Istruzioni condizionali
– if
– switch

• Istruzioni di ciclo
– while
– for

L1.2 Variabili, tipi di dato e istruzioni Java 41

Istruzione condizionale if-else

Sintassi

if (condizione)
blocco_istruzioni
else
blocco_istruzioni

Esempio

if (a>b)
System.out.println(a);
else
System.out.println(b);

L1.2 Variabili, tipi di dato e istruzioni Java 42


Istruzione condizionale switch

Sintassi

switch (espressione) {
case etichetta1:
blocco_istruzioni

case etichettan:
blocco_istruzioni
}

L1.2 Variabili, tipi di dato e istruzioni Java 43

Esempio

int mese=…
int giorniDelMese;
switch (mese) {
case 4: case 6: case 9: case 11:
giorniDelMese = 30; break;
case 1: case 3: case 5: case 7: case 8:
case 10: case 12:
giorniDelMese = 31; break;
case 2:
giorniDelMese = 28;
break;
}

L1.2 Variabili, tipi di dato e istruzioni Java 44

Istruzione di ciclo while

Sintassi

while (condizione)
blocco_istruzioni

Esempio

int i=0;
while (i<10) {
System.out.print("*");
i++;
}

L1.2 Variabili, tipi di dato e istruzioni Java 45


Istruzione di ciclo for

Sintassi

for (inizializzazione; condizione; incremento)


blocco_istruzioni

Esempio

for (int i=0; i<10; i++) {


System.out.print("*");
}

L1.2 Variabili, tipi di dato e istruzioni Java 46

Esempio

// massimo comun divisore


int x = …;
int y = …;
while (x != y)
if (x > y)
x = x - y;
else
y = y - x;
System.out.println("MCD = "+x);

L1.2 Variabili, tipi di dato e istruzioni Java 47

Esercizio 1.2.1

Completare il programma seguente aggiungendo il codice


necessario a trasformare il primo carattere del nome e del cognome
in maiuscolo.

public class InizialiMaiuscole {


public static void main(String[] args) {
String first = "luca", last = "iocchi";
….
System.out.println(first+" "+last);
}
}

L1.2 Variabili, tipi di dato e istruzioni Java 48


Esercizio 1.2.2

Realizzare un programma simile all'esercizio 1.2.1 in cui i valori del


nome e del cognome siano forniti mediante input da tastiera (tramite
console o finestra). Rendere il programma robusto a qualsiasi tipo
di input fornito dall'utente: cioè qualsiasi combinazione di caratteri
minuscoli/maiuscoli in input devono essere convertiti in nome e
cognome con la prima lettera maiuscola e le altre minuscole.

L1.2 Variabili, tipi di dato e istruzioni Java 49

Esercizio 1.2.3

Scrivere un programma Java che legga in input (tramite console o


finestra) nome, cognome ed anno di nascita di una persona e stampi
su un'unica riga nome, cognome ed età della persona.
Si calcoli l'età semplicemente come differenza tra l'anno corrente e
l'anno di nascita.

Nota:
Questa implementazione risulterà non corretta rispetto alla
definizione consueta dell'età di una persona, in quanto non tiene
conto della data di nascita.

L1.2 Variabili, tipi di dato e istruzioni Java 50

Esercizio 1.2.4

L’esempio di programma per il calcolo del massimo comun divisore


non è robusta a tutti i valori possibili di dati in input.

Fornire una versione robusta del programma in modo da individuare


e segnalare situazioni in cui il calcolo non è possibile.

L1.2 Variabili, tipi di dato e istruzioni Java 51


Esercizio 1.2.5

Scrivere un programma che legga in input i coefficienti a,b,c di


una equazione di secondo grado

a x^2 + b x + c = 0

e stampi le relative soluzioni, trattando correttamente tutti i casi


possibili.

L1.2 Variabili, tipi di dato e istruzioni Java 52