A. A. 2017/2018
Programmazione orientata
agli oggetti
Paolo Liberatore, Massimo Mecella
L1.1
Introduzione OOP, Java,
classi e oggetti, classe String
Sommario
Funzioni o Oggetti ?
funzioni
Molte delle tecniche tradizionali sono
basate sull'idea di costruire un sistema orientazione
concentrandosi sulle funzioni alle funzioni
oggetti
manipolati
a cosa serve
cosa fa
come
B C D
E F G H
• 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
Classi ed Oggetti
Classi ed Oggetti
Ereditarietà
proprietà classi
ereditarietà
metodi
metaclassi
polimorfismo
Estensioni
oggetti complessi
information hiding
concorrenza
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à
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)
}
21
Spazi vuoti
Ambiente di programmazione
Errori
Classi e oggetti
Invocazione di metodi
Sintassi:
oggetto.nomeMetodo(parametri)
Esempio:
System.out.println("Ciao!");
Invocazione di metodi
Esempio:
System.out.print("Ciao ");
System.out.println("Ciao!");
System.out.pippo("Ciao!");
La classe String
Esercizio 1.1.1
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
Variabili Java
Due categorie
• Riferimenti ad oggetti
(classi predefinite del linguaggio, classi scritte dall'utente)
Dichiarazioni di variabili
Sintassi
tipo nomeVariabile;
Esempi
int a;
String s;
Assegnazione di variabili
Sintassi
nomeVariabile = espressione;
Esempi
a = b + 5;
s = "Ciao";
String s;
System.out.println(s);
Riferimenti e oggetti
Esempio
String s;
s = "Ciao";
Riferimenti e oggetti
Esempio
String s,t;
s = "Ciao";
t = s;
Esempio
String s;
s = null;
Sintassi
new nomeClasse(parametri);
Esempio
String s;
s = new String("Ciao");
Stringa vuota
Sintassi
new String()
""
Esempio
String s,t;
s = new String();
t = "";
Esempio
Librerie di classi
Packages
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
...
Note:
• Uso di classi BufferedReader e InputStreamReader (libreria java.io)
• Dichiarazione di presenza di eccezioni throws IOException
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)
• Caratteri
char
• Booleani
boolean
Operatori
Operatori matematici
+ somma
- sottrazione
* prodotto
/ divisione intera
% resto della divisione intera
/ divisione tra valori reali
Espressioni
Combinazione di operazioni e uso di parentesi (come in C)
int a,b,c;
c = (a+b)*2-(a-b)/2;
float a OK OK OK OK OK ERRORE
double a OK OK OK OK OK OK
Sintassi
(tipo) espressione;
Esempio
double a = 3.14;
int x = (int) a;
Esempio
s = "Ciao"; t = s; // s e t sono riferimenti allo stesso oggetto
Esempio
a = 5; b = a; // b e a contengono il valore 5
Esempio
char c,d;
c = 'A';
d = '1';
Esempio
char c; int d;
c = (char) 65;
d = (int) 'A';
Esempio
boolean b;
b = true;
&& and
|| or
! not
Esempio
boolean b,c,d,e,f;
b = ! ( (c || d) && (e || f) );
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);
Espressione condizionale
Sintassi
(espressione booleana)?<valore1>:<valore2>
Semantica
Esempio
String s = "123";
int x = Integer.parseInt(s);
Esempio
Esempio
Istruzioni Java
• Istruzioni condizionali
– if
– switch
• Istruzioni di ciclo
– while
– for
Sintassi
if (condizione)
blocco_istruzioni
else
blocco_istruzioni
Esempio
if (a>b)
System.out.println(a);
else
System.out.println(b);
Sintassi
switch (espressione) {
case etichetta1:
blocco_istruzioni
…
case etichettan:
blocco_istruzioni
}
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;
}
Sintassi
while (condizione)
blocco_istruzioni
Esempio
int i=0;
while (i<10) {
System.out.print("*");
i++;
}
Sintassi
Esempio
Esempio
Esercizio 1.2.1
Esercizio 1.2.3
Nota:
Questa implementazione risulterà non corretta rispetto alla
definizione consueta dell'età di una persona, in quanto non tiene
conto della data di nascita.
Esercizio 1.2.4
a x^2 + b x + c = 0