03.06.2013 Views

Elementi di Programmazione: con Java dal - Matematica - Università ...

Elementi di Programmazione: con Java dal - Matematica - Università ...

Elementi di Programmazione: con Java dal - Matematica - Università ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!