generalita'
concetti base di programmazione:
-algoritmi
-tipi di dato: primitivi e strutturati
-linguaggi interpretati e compilati, compilazione e runtime
paradigmi di programmazione: la programmazione strutturata
-i diagrammi di flusso: istruzioni, cicli e condizioni
-la pseudocodifica
-il teorema di Jacopini-Bohm
-algoritmi di sort
-algoritmi tipici per il trattamento dei file sequenziali: rotture e bilanciamenti
paradigmi di programmazione: la programmazione modulare
-package
paradigmi di programmazione: la programmazione ad oggetti (OOP)
-definizione di classi, variabili e funzioni
-istanze di oggetti
-costruttori
-overload di funzioni
caratteristiche fondamentali OOP:
-incapsulamento
-ereditarieta': superclassi e sottoclassi, override di funzioni
-polimorfismo
caratteristiche avanzate OOP:
-interfacce
paradigmi di programmazione: la programmazione generica
-template

cobol
struttura di un programma cobol, le quattro division
tipi di dati, numerici ed alfanumerici
tabelle di working storage
routine, cicli e condizioni in cobol
sintassi delle istruzioni principali
copy
call statiche e dinamiche

mvs/tso
data set: librerie e membri, allocazione, cancellazione, copia, rename
browsing ed editing di membri
compare, ricerca stringhe
stampa di data set
jcl: compilazione, esecuzione di programmi
sdsf: gestione dei processi
ftp tra ambienti e file transfer
applicativi di versionamento: endevor, changeman, roscoe
debug batch e tp: xpediter

programmazione concorrente su mainframe
transazioni cics, autorestart
il comando new copy
display in un programma tp
mappe BMS
istruzioni cics dentro un programma cobol

database relazionali: sql
select, insert, delete, update
subquery, join
ddl: create, alter, truncate, drop, creazione indici

database relazionali: db2
spufi: opzioni principali ed esecuzione
qmf: funzioni principali ed avanzate, gestione data set
sqlcodes
unload, load: sysrec e syspunch
db2 commands: restart del tablespace & indici
istruzioni sql dentro un programma cobol
cursori: dichiarazione, fetch

database relazionali: oracle
tora e toad
gestione delle date e dei timestamp in oracle

unix/linux
kernel, shell, directory tree
sintassi tipica di un comando unix
utenti, gruppi, permessi su file e directory
editor di testo: vi
esecuzione di processi, fork
parsing di comandi, metacaratteri, caratteri speciali, globbing, escaping, quoting
variabili, tipi di variabili, variabili d'ambiente
bash initialization
aritmetica su interi
test, operatori di confronto
parametri
condizioni: if, case
file redirection
mkpipe
tar
grep, sed, espressioni regolari
exit, exit status
printf, read, select
here document
cicli: for, while, until, break, continue
and/or logici
declare
processi: foreground & background, crontab, terminazione di processi
demoni
funzioni
array
trap
awk

C
tipi di dati, costanti
operatori di assegnazione, aritmetici, di confronto, logici
condizioni
cicli
tipi speciali di variabile
array
stringhe con terminatore
funzioni, dichiarazione, librerie esterne
-input/output
-accesso a file esterni
-funzioni matematiche
puntatori, operatori relativi a puntatori
funzioni per la gestione della memoria, sizeof(), malloc(), free()
passaggio di variabili nelle funzioni
array multidimensionali

C++
classi e oggetti
gestione della memoria in C++, new, new[], delete, delete[]
template di classi e di funzioni
namespaces
standard library
-input/output
-string
-stl containers: vector, map, set..
-exception

assembly
linguaggio macchina
assembly: sintassi AT&T e sintassi Intel
processore x86, registri: eax, ecx, edx, ebx, esp, edp, esi, edi, eip, eflags
disassembler: objdump
debugger: gdb (examine, info register, print, nexti)
istruzioni assembly: mov, sub, cmp, jle, jmp, call, lea, inc
prologo di una funzione
DWORD, ordinamento little-endian
java
JDK, scrittura, compilazione ed esecuzione di classi
tipi primitivi: interi, in virgola mobile, char, booleani, letterali
la classe String
operatori: incremento, decremento, logici, matematici, precedenza tra operatori
conversioni di tipi, casting
array mono e multidimensionali
condizioni: if, switch
cicli: while, do-while, for
istruzioni di controllo: break, continue, return
richiami di programmazione ad oggetti (OOP):
-definizione di classi, proprieta' e metodi
-istanze di oggetti
variabili locali e globali: occultamento di variabili
garbage collection e metodo finalize()
metodi costruttori
overload di metodi
caratteristiche fondamentali OOP:
-incapsulamento
-ereditarieta': superclassi e sottoclassi, override di metodi
-polimorfismo
modificatori di visibilita': public, private e protected
modificatore final
modificatore static
modificatore abstract
classe Vector
casting di classi
side effect
classe Iterator
classi per la data
classe String e Stringbuffer
gestione delle eccezioni
gestione di file
interfacce
interfaccia Comparable
package, modificatori
classe Object
wrapper di tipi semplici
classe Math
thread
sincronizzazione dei thread
modificatore volatile
eventi: modello di delega
classi di eventi
sorgenti e listener di eventi
classi interne
classi adapter
classi anonime
tools: auto-comment, javadoc
interfacce utente
awt
classi Panel e Window
menu
etichette, pulsanti e caselle di testo
gestori di layout: FlowLayout, BorderLayout, GridLayout
swing
file properties
file jar
database e jdbc
programmazione dinamica: reflection

programmazione web
www: gli standard w3c
server web: apache
protocollo http

xml
xhtml
css

javascript
ajax
jquery

applet java
-init()
-start()
-paint()
-stop()
-destroy()

j2ee
-server j2ee:apache tomcat
-jsp
-servlet
-framework struts: form, servlet, tag

php
CMS
-joomla
-drupal
-magento

web service
-soap
-wsdl
-ws java: axis & axis2
-ws php: nusoap

bpel & soa
-partner & partnerlink
-attivita' di base: receive, reply, invoke, assign
-attivita' strutturate: sequence, flow, if, while, scope, throw
-motore bpel: apache ode

appendici teoriche
teoria degli insiemi
teoremi di Godel
macchina di Turing e calcolabilita'
realizzazioni della macchina di Turing, automi a stati finiti, algoritmi

teoria dell'informazione di Shannon
entropia e informazione

crittografia
crittosistemi a blocchi:
la chiave e' fissa di una certa lunghezza
crittosistemi a flusso:
la chiave varia in funzione del testo
crittosistemi simmetrici (a chiave privata):
la chiave per la decifratura e' la stessa di quella della cifratura
la sicurezza dipende dalla segretezza e dalla complessita' della chiave
esempi: DES & Triple DES, Blowfish, IDEA, RC4, Safer
crittosistemi asimmetrici (a chiave pubblica):
la chiave per la decifratura e' diversa da quella con cui e' effettuata la cifratura
la sicurezza dipende dalla difficolta' di invertire una certa funzione matematica (solitamente la scomposizione in fattori primi di un numero estremamente grande)
esempi: RSA, Diffie-Hellman, DSS, ElGamal, LUC, Crittosistemi con curve ellittiche
firma digitale: esempio di utilizzo di algoritmi a chiave pubblica che certifica l'identita' di un soggetto
la firma digitale consiste in un messaggio cifrato mediante una chiave privata: se la firma si decifra con la chiave pubblica si e' sicuri che e' stata cifrata da chi possiede la corrispondente chiave privata
la sicurezza dipende dalla segretezza della chiave privata (non necessaria per verificare l'autenticita' della firma): solo chi possiede la chiave privata puo' firmare messaggi, mentre chiunque puo' verificare l'autenticita' della firma
hash functions
pseudorandom number generators

intelligenza artificiale
connessionismo, reti neurali, calcolo parallelo
applicazioni: data mining, sistemi esperti

interpretazione quantistica di Zeilinger, qubits
quantum information & cryptography
automi a stati finiti, macchine di Turing e sistemi dinamici
teoria del caos
fuzzy logic