Elementi di Programmazione: con Java dal - Matematica - Università ...
Elementi di Programmazione: con Java dal - Matematica - Università ...
Elementi di Programmazione: con Java dal - Matematica - Università ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Minicorso tematico:<br />
“<strong>Elementi</strong> <strong>di</strong> <strong>Programmazione</strong>:<br />
<strong>con</strong> <strong>Java</strong> <strong>dal</strong> Computer,<br />
al Web, al Cellulare”<br />
Dott. Francesco Ricca<br />
Dipartimento Di <strong>Matematica</strong><br />
<strong>Università</strong> della Calabria<br />
ricca@mat.unical.it
Presentiamoci<br />
Mi chiamo Francesco Ricca<br />
Ricercatore presso il Dip. Di <strong>Matematica</strong><br />
Mi occupo <strong>di</strong>:<br />
Intelligenza Artificiale<br />
<strong>Programmazione</strong> Logica<br />
Insegno:<br />
Introduzione all’Informatica<br />
Ingegneria del Software<br />
<strong>Programmazione</strong> ad Oggetti
Programma del Corso<br />
Introduzione all’Informatica<br />
Problemi, Algoritmi e Programmi<br />
Fondamenti <strong>di</strong> <strong>Programmazione</strong><br />
… <strong>con</strong> il linguaggio <strong>Java</strong><br />
Siti <strong>di</strong>namici <strong>con</strong> <strong>Java</strong><br />
J2ME: <strong>Java</strong> per i cellulari
Materiale Didattico<br />
Luci<strong>di</strong> delle Lezioni<br />
Guide rapide<br />
http://www.html.it<br />
http://java.sun.com<br />
Libri<br />
L. Nigro, “Introduzione alla programmazione orientata agli<br />
oggetti in <strong>Java</strong>”, E<strong>di</strong>zioni Luim<br />
L.Cabibbo, “Fondamenti <strong>di</strong> Informatica: Oggetti e <strong>Java</strong>”,<br />
McGraw-Hill<br />
C.S. Horstmann – G. Cornell, “Core <strong>Java</strong> 2”, Prentice Hall
Orario ed Esame<br />
Esame Finale giorno 9 Maggio:<br />
Facoltativo<br />
Chi lo supera <strong>con</strong>segue un attestato per riscattare 1CFU<br />
L’attestato <strong>di</strong> frequenza valido per l’esame <strong>di</strong> stato<br />
non è <strong>con</strong>nesso all’esame
Introduzione<br />
All’Informatica<br />
Nozioni <strong>di</strong> base
Cosa è l’Informatica?<br />
Scienza degli elaboratori elettronici<br />
Computer Science<br />
Scienza dell’informazione<br />
rappresentazione<br />
memorizzazione<br />
elaborazione e trasmissione dell’informazione<br />
Parente stretta della <strong>Matematica</strong><br />
2 anime: teorica, tecnico-pratica
Il Computer<br />
Elaboratore elettronico (o “calcolatore”)<br />
E’ uno strumento per la rappresentazione,<br />
la memorizzazione e l’elaborazione delle<br />
informazioni.<br />
E’ programmabile: può essere pre<strong>di</strong>sposto<br />
per eseguire un particolare insieme <strong>di</strong><br />
azioni, allo scopo <strong>di</strong> risolvere un problema.
Cosa possiamo fare <strong>con</strong> un<br />
calcolatore?
Cosa possiamo fare <strong>con</strong> un<br />
calcolatore?
Utilizzo <strong>di</strong> un elaboratore<br />
Come utente:<br />
Uso software applicativo esistente per creare<br />
documenti e interfacce grafiche, effettuare<br />
calcoli, navigare in rete<br />
Come sviluppatore:<br />
Creo nuovi programmi sullo strato del software<br />
esistente<br />
Nuovi programmi applicativi<br />
Nuovi programmi <strong>di</strong> sistema (cioè che fanno funzionare il<br />
calcolatore)
Cosa possiamo fare <strong>con</strong> un<br />
calcolatore?<br />
Word Processing. Memorizzare, elaborare testi.<br />
Basi <strong>di</strong> Dati. Memorizzare grossi archivi <strong>di</strong> dati, recupero<br />
veloce, produrre informazioni globali.<br />
Accesso Remoto. Trasmissione e recupero <strong>di</strong><br />
informazioni.<br />
Calcolo. Risolvere problemi matematici.<br />
Simulazioni. Rappresentare e elaborare informazioni<br />
che simulano l’ambiente reale.
Parole chiave:<br />
Hardware<br />
Software
Hardware<br />
Contenitore <strong>con</strong><br />
CPU, RAM<br />
Memoria Centrale<br />
Fisso<br />
Unità per Dischi - CD/DVD<br />
Monitor<br />
Tastiera<br />
Ecc.
Hardware<br />
Unità <strong>di</strong> Elaborazione (Processore o CPU):<br />
Svolge le elaborazioni<br />
Coor<strong>di</strong>na il trasferimento dei dati<br />
Cioè ‘esegue’ i programmi<br />
Memoria Centrale<br />
Memorizza dati e programmi per l’elaborazione<br />
Volatile<br />
Accesso rapido<br />
Capacità limitata
Hardware<br />
Memoria Se<strong>con</strong>daria (es. Hard<strong>di</strong>sk,floppy)<br />
Grande capacità<br />
Persistente<br />
Accesso piu lento della RAM<br />
Unità Periferiche<br />
Interfaccia verso l’esterno<br />
Terminali (tastiera, video)<br />
Stampanti
Software<br />
Software <strong>di</strong> base:<br />
De<strong>di</strong>cato alla gestione dell’elaboratore<br />
Esempio: Sistema Operativo (Windows, Linux, etc)<br />
Software applicativo:<br />
De<strong>di</strong>cato alla realizzazione <strong>di</strong> specifiche applicative<br />
Esempio: programmi per scrittura, gestione<br />
azien<strong>dal</strong>e, navigazione su internet, ecc
Problemi, Algoritmi<br />
e Programmi<br />
I <strong>con</strong>cetti fondamentali dell’Informatica
Il problema<br />
Abbiamo un problema quando ci poniamo un obiettivo<br />
da raggiungere e per raggiungerlo dobbiamo mettere a<br />
punto una strategia<br />
Problema Strategia Obiettivo
Esempi <strong>di</strong> problemi<br />
Trovare il numero <strong>di</strong> telefono <strong>di</strong> una persona<br />
In<strong>di</strong>viduare il numero più piccolo <strong>di</strong> una sequenza<br />
Stabilire se una parola precede alfabeticamente<br />
un’altra<br />
Calcolare il costo totale <strong>di</strong> un certo numero <strong>di</strong><br />
prodotti<br />
Trovare perimetro e area <strong>di</strong> una figura geometria<br />
…
Risolvere un problema<br />
Come si costruisce la soluzione a un problema?<br />
Qual è il giusto “punto <strong>di</strong> partenza” per<br />
pensare la soluzione a un problema?<br />
Quali metodologie e tecniche usare?
Risolvere un problema<br />
Problema<br />
Interpretazione<br />
Modello Proce<strong>di</strong>mento<br />
risolutivo<br />
Verifica dei risultati<br />
Esecuzione
Algoritmo<br />
Un algoritmo è una sequenza finita <strong>di</strong><br />
operazioni elementari che porta alla<br />
risoluzione in un tempo finito una classe <strong>di</strong><br />
problemi.<br />
In generale un algoritmo può essere visto come una<br />
funzione da un dominio d’ingresso ad uno d’uscita<br />
Dati(INPUT)<br />
X<br />
Algoritmo<br />
Risultati(OUTPUT)<br />
f(X)
Algoritmi: proprietà fondamentali<br />
Eseguibilità: ogni azione deve essere<br />
eseguibile da parte dell’esecutore<br />
dell’algoritmo in un tempo finito<br />
Non-ambiguità: ogni azione deve essere<br />
univocamente interpretabile <strong>dal</strong>l'esecutore<br />
Finitezza: il numero totale <strong>di</strong> azioni da<br />
eseguire, per ogni insieme <strong>di</strong> dati <strong>di</strong><br />
ingresso, deve essere finito.
Algoritmi equivalenti<br />
fornis<strong>con</strong>o lo stesso risultato<br />
ma possono avere <strong>di</strong>versa efficienza<br />
e possono essere profondamente <strong>di</strong>versi !<br />
Esempio: moltiplicare tra loro due numeri<br />
Algoritmo 1: Somme successive:<br />
12x12 = 12+12+…+12=144<br />
Algoritmo 2<br />
12x<br />
12=<br />
24<br />
12=<br />
144
Esecuzione
Algoritmi e programmi<br />
Algoritmo<br />
Sequenza finita <strong>di</strong> passi che risolve in tempo finito un problema.<br />
Co<strong>di</strong>fica<br />
Fase <strong>di</strong> scrittura <strong>di</strong> un algoritmo in un qualche linguaggio <strong>di</strong><br />
programmazione, che specificano le azioni da compiere.<br />
Programma<br />
Testo scritto in accordo <strong>con</strong> la sintassi e la semantica <strong>di</strong> un<br />
linguaggio <strong>di</strong> programmazione.<br />
PROBLEMA ALGORITMO PROGRAMMA
Linguaggi <strong>di</strong> <strong>Programmazione</strong><br />
Linguaggi per esprimere in maniera rigorosa<br />
un algoritmo<br />
Linguaggio macchina (seq. Istruzioni)<br />
Linguaggi ad alto livello<br />
(vicini al ling. naturale)<br />
Pascal, C e C++, Basic, Cobol<br />
<strong>Java</strong>
Esempio: potenza<br />
Problema: Calcolare a n<br />
Algoritmo:<br />
Fino a che N>0<br />
Calcola Ris*a e memorizzalo in Ris<br />
Decrementa N<br />
Nota che:<br />
Al termine Ris=a n
Esempio …in <strong>Java</strong><br />
int potenza(int a, int n)<br />
{ int ris = 1;<br />
}<br />
while ( n > 0 ) {<br />
}<br />
ris = ris * a; n = n-1;<br />
return ris;
Riassumendo…<br />
Un algoritmo è il processo risolutivo <strong>di</strong> un problema<br />
Ogni elaboratore è una macchina in grado <strong>di</strong><br />
eseguire azioni elementari su dati dette istruzioni<br />
Le istruzioni sono espresse attraverso frasi <strong>di</strong> un<br />
opportuno linguaggio <strong>di</strong> programmazione<br />
Un programma è la formulazione testuale <strong>di</strong> un<br />
algoritmo in un linguaggio <strong>di</strong> programmazione
Esistono problemi che un<br />
elaboratore non può risolvere?<br />
Sì. Ci sono problemi non calcolabili da<br />
nessun modello <strong>di</strong> calcolo reale o<br />
astratto<br />
Esempio: data una funzione f : N N,<br />
stabilire se f(x) è costante per ogni<br />
valore <strong>di</strong> x
Fondamenti <strong>di</strong><br />
<strong>Programmazione</strong><br />
…<strong>con</strong> <strong>Java</strong>
Linguaggi <strong>di</strong> <strong>Programmazione</strong><br />
Linguaggi per esprimere in maniera rigorosa<br />
un algoritmo<br />
La “lingua del Computer”<br />
Diversi tipi <strong>di</strong> linguaggi:<br />
Imperativi<br />
Dichiarativi<br />
Ad Oggetti
Linguaggi Imperativi<br />
“Comandano” il computer in<strong>di</strong>cando le azioni da<br />
compiere<br />
Si specificano le azioni da fare per ottenere il risultato<br />
Algoritmo = “insieme <strong>di</strong> operazioni da compiere sui dati”<br />
Algoritmo = DATI + Controllo
Linguaggi Dichiarativi<br />
“Chiedono” al computer <strong>di</strong> trovare una soluzione<br />
Si specifica quello che si vuole e non come deve essere<br />
calcolato<br />
Linguaggi Funzionali: Lisp<br />
Linguaggi Logici: Prolog<br />
Questo è stato espresso da Robert Kowalski <strong>con</strong> la<br />
formula:<br />
Algoritmo = Logica + Controllo
Linguaggi ad Oggetti<br />
Sono basati sul <strong>con</strong>cetto <strong>di</strong> oggetto software<br />
Un oggetto software rappresenta un oggetto del mondo reale<br />
un numero, un archivio, un testo, una matrice, una persona...<br />
I dati sono rappresentati come oggetti<br />
Le azioni da compiere come operazioni da effettuare sugli<br />
oggetti.<br />
Di solito sono realizzati come estensione dei linguaggi<br />
imperativi.<br />
Un programma modella un problema reale come una<br />
collezione <strong>di</strong> oggetti software che interagis<strong>con</strong>o.
Ma è davvero questa<br />
la lingua del computer?<br />
Questi sono linguaggi ad alto livello<br />
Più simili al nostro modo <strong>di</strong> esprimerci<br />
Il computer “<strong>con</strong>osce” solo i bit e le operazioni<br />
elementari su questi (linguaggio a basso livello)<br />
C’è bisogno <strong>di</strong> un traduttore!!!<br />
Il Compilatore traduce un programma scritto in un<br />
linguaggio <strong>di</strong> programmazione ad alto livello in bit e<br />
operazioni elementari<br />
Si trovano negli ambienti <strong>di</strong> sviluppo: e.s. JDK e/o Eclipse
Dal programma all’esecuzione…<br />
Scrivo il<br />
programma<br />
In JAVA<br />
Il<br />
compilatore<br />
lo traduce<br />
Il Computer lo<br />
ESEGUE<br />
Se è scritto male,<br />
saranno segnalati gli errori<br />
(attenti, è molto pignolo!)
Concetti <strong>di</strong> base della POO<br />
POO = <strong>Programmazione</strong> Orientata agli Oggetti
Il <strong>con</strong>cetto <strong>di</strong> Classe<br />
Una classe è un insieme <strong>di</strong> oggetti che hanno le stesse<br />
caratteristiche e lo stesso comportamento<br />
Definire una classe =<br />
Elencarne le caratteristiche (~ definire i dati)<br />
Specificarne il comportamento (~ definire le operazioni)<br />
Una classe definisce il “progetto” <strong>di</strong> un oggetto<br />
software<br />
Quando un oggetto software appartiene ad una classe<br />
ha tutte le caratteristiche ed il comportamento<br />
specificate per questa.
Esempio: la classe dei libri<br />
Ogni libro ha:<br />
un titolo<br />
un numero <strong>di</strong> pagine<br />
un elenco numerato <strong>di</strong> pagine<br />
…<br />
Su ogni libro possiamo operare<br />
Leggiamo il titolo<br />
Ve<strong>di</strong>amo quante pagine ha<br />
Cerchiamo una pagina<br />
Stampiamo una pagina o tutto il libro<br />
…<br />
Caratteristiche:<br />
Dati<br />
Un’altra<br />
classe!!!<br />
Comportamento:<br />
Operazioni o<br />
Meto<strong>di</strong>
La visibilità<br />
Un po <strong>di</strong> “privacy”<br />
Non tutti possono vedere tutte le caratteristiche <strong>di</strong> un<br />
oggetto: Information Hi<strong>di</strong>ng<br />
Il mago Silvan non rivela a tutti il trucco <strong>con</strong> cui ha fatto<br />
comparire un <strong>con</strong>iglio o sparire l’assistente<br />
Mostrereste dove si trova la cassaforte a casa vostra?<br />
Dareste a tutti il PIN del vostro cellulare?<br />
Tre parole chiave per proteggere o meno le<br />
caratteristiche e i meto<strong>di</strong> <strong>di</strong> una classe:<br />
public, private, protected
La classe Diamo libro il nome<br />
in <strong>Java</strong><br />
class Libro {<br />
}<br />
// Caratteristiche<br />
private Titolo nomeLibro;<br />
private Numero numeroDiPagine;<br />
private Lista pagine;<br />
// Meto<strong>di</strong><br />
public Titolo dammiTitolo();<br />
public Numero dammiNumeroDiPagine();<br />
…<br />
In<strong>di</strong>chiamo la<br />
classe ed il<br />
nome della<br />
proprietà<br />
In<strong>di</strong>chiamo il<br />
nome del metodo<br />
e il tipo <strong>di</strong> oggetti<br />
che calcola
Il <strong>con</strong>cetto <strong>di</strong> variabile<br />
Come manipoliamo un oggetto software?<br />
Gli oggetti software “vivono” nella memoria del computer<br />
Abbiamo bisogno <strong>di</strong> nomi che riferis<strong>con</strong>o <strong>di</strong>rettamente<br />
gli oggetti per “manipolarli”<br />
Es. somma 3 al numero X<br />
X = X + 3<br />
X è una variabile, che <strong>con</strong>sente <strong>di</strong> manipolare un certo tipo<br />
<strong>di</strong> oggetti (in questo caso dei numeri)<br />
Le variabili associano nome e tipo ad un oggetto nella<br />
memoria
Manipolazione <strong>di</strong> oggetti<br />
Se vogliamo ottenere il titolo <strong>di</strong> un libro dobbiamo chiamare<br />
il metodo dammiTitolo()<br />
Supponiamo che la variabile l riferisca un libro<br />
Titolo t = l.dammiLibro();<br />
Si usa la notazione col punto (dot notation)<br />
VARIABILE . PROPRIETÀ<br />
VARIABILE . METODO( PARAMETRI )<br />
Pagina p = l.dammiPagina( 33 );
Il mio primo programma<br />
Stampiamo “ciao” sullo schermo.<br />
class StampaCiao {<br />
}<br />
public static void main(String args []) {<br />
System.out.println(“Ciao”);<br />
}<br />
Oggetto<br />
sistema<br />
Ha la<br />
proprietà out<br />
che è lo<br />
schermo<br />
Il sistema si aspetta<br />
un metodo così fatto:<br />
Main = Principale<br />
Chiamiamo il metodo<br />
Println = stampa linea
Scriviamo davvero<br />
i Programmi<br />
L’ambiente <strong>di</strong> sviluppo Eclipse<br />
Tanti, tanti esempi