In questo corso studieremo la teoria del ``linguaggi di programmazione'' che e' il fondamento della costruzione del software. Lo scopo principale e' quello di descrivere il comportamento dei programmi in modo preciso ma allo stesso tempo astratto. Saranno analizzati i costrutti dei linguaggi imperativi, funzionali e ad oggetti sia dal punto di vista della semantica statica (tipi) che dinamica (esecuzione) e la loro interazione.