Programma - Dipartimento di Matematica e Informatica UNICAL

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