Università degli Studi Guglielmo Marconi

Insegnamento
Fondamenti di informatica
Docente
Prof. Lunghi Massimiliano
Settore Scientifico Disciplinare
ING-INF/05
CFU
12
Descrizione dell'insegnamento

Il corso di Fondamenti di Informatica si propone l'obiettivo di fornire una preparazione organica e omogenea sui principi di funzionamento e della programmazione di un calcolatore elettronico. Il corso ha carattere introduttivo al mondo della programmazione in generale e a quella ad oggetti in particolare, alla rappresentazione dei dati ed alle strutture dati fondamentali nella scienza dell'informazione.

Obiettivi formativi (espressi come risultati di apprendimento attesi)
Al termine di questo corso, lo studente sarà in grado di:
  • comprendere i concetti e le componenti alla base dell’architettura dei moderni calcolatori elettronici;
  • comprendere i concetti di base sui fondamenti della rappresentazione delle informazioni e degli algoritmi;
  • comprendere i concetti fondamentali dei linguaggi di programmazione in generale e sulla programmazione ad oggetti (OOP Object Oriented Programming) in particolare;
  • comprendere i fondamenti della programmazione del linguaggio JAVA;
  • sviluppare semplici programmi per l’esecuzione di algoritmi;
  • sviluppare semplici programmi secondo il paradigma dell’ Object Oriented Programming;
  • valutare in autonomia la corretta esecuzione di un programma;
  • valutare in autonomia l’utilizzo dei migliori costrutti sintattici per la realizzazione di un programma in ambito di performance e leggibilità del codice;
  • apprendere e integrare le conoscenze da varie fonti sulla programmazione al fine di valutare attraverso una visione più ampia le diverse possibilità di implementazione di uno stesso algoritmo e/o programma inteso in senso più ampio del termine;
  • esprimere con opportuno linguaggio gli argomenti del corso.
Prerequisiti

Non sono richiesti requisiti specifici.

Contenuti dell'insegnamento
  • Introduzione al corso: i computer, i Sistemi Operativi e le applicazioni
  • Le basi della programmazione: i linguaggi di programmazione; i numeri binari e l´algebra booleana
  • Algoritmi e Linguaggi di modellazione: definizione di algoritmo; lo pseudocodice e i flow chart
  • Introduzione a JAVA: la piattaforma di sviluppo JAVA; installazione dell´ambiente di esecuzione JAVA; scrittura ed esecuzione del primo programma utilizzando la JDK
  • Java Integrated Development Environment: descrizione di un Integrated Development Environment; processo di scrittura, compilazione ed esecuzione di un programma Java con un IDE; ispezione delle parti di un programma JAVA; definizione delle tipologie di errore in JAVA
  • Le basi della programmazione in Java 1: differenze tra linguaggi imperativi, procedurali e ad oggetti; le variabili (visibilità, casting); i tipi di dati di base; gli operatori (aritmetici, relazionali, bit a bit, logici, regole di precedenza)
  • Le basi della programmazione in Java 2: le dichiarazioni di controllo (IF-ELSE, SWITCH, WHILE, DO-WILE, FOR, etc.)
  • Le basi della programmazione in Java 3: gli Array
  • Gli Oggetti e le Classi 1: Overview sui concetti di oggetti e classi; definizione di variabili nelle classi; i metodi; i costruttori
  • Gli Oggetti e le Classi 2: concetti di Incapsulazione, Ereditarietà e Polimorfismo; le classi Astratte e le Interfacce
  • Gli Oggetti e le Classi 3: variabili e metodi statici; la classe Object; le Enumerazioni; le Stringhe
  • Eccezioni and Multithreading: gestione delle eccezioni; gestione del Multithreading
  • Collections Framework: interfacce; classi; iteratori
  • Streams, File I/O: Streams; File I/O; Regular Expression
  • Generic: teoria ed utilizzo dei Generic
  • Concetti di Base sulle reti: Internet; Indirizzi IP; L´architettura Client Server
  • Concetti Base sulle interfacce grafiche ; Le Applet: implementazione e deployment
  • Java Networking: Sockets; Applicazioni client server in Java; URL
Attività didattiche
Didattica Erogativa
L'insegnamento prevede, per ciascun CFU, 5 ore di Didattica Erogativa, costituite da 2,5 videolezioni (tenendo conto delle necessità di riascolto da parte dello studente). Ciascuna videolezione esplicita i propri obiettivi e argomenti, ed è corredata da materiale testuale in pdf ed ha dei riferimenti bibliografici che permettono allo studente di approfondire in autonomia l’argomento trattato a lezione. Alcune video lezioni sono più teoriche ed hanno lo scopo di far conoscere, ad esempio, le principali componenti di una architettura di un calcolatore e/o particolari algoritmi. Altre video lezioni hanno un carattere più pratico al fine di favorire la capacità di applicare le conoscenze teoriche da parte dello studente, presentando anche esempi pratici di implementazione di algoritmi e programmi. A tal riguardo, nelle lezioni sono presenti inoltre molteplici esempi di confronti di diverse tipologie di implementazione di uno stesso algoritmo/programma al fine favorire l’apprendimento e di rendere autonomo lo studente nella selezione delle migliori soluzioni per la realizzazione degli stessi. In entrambi i casi si farà uso di una terminologia adeguata agli argomenti trattati.

Didattica Interattiva
L'insegnamento segue quanto previsto dalle Linee Guida di Ateneo sulla Didattica Interattiva e l'interazione didattica, e propone, per ciascun CFU, 1 ora di Didattica Interattiva dedicata alle seguenti attività: lettura area FAQ, partecipazione ad e-tivity strutturata costituita da attività finalizzate alla restituzione di un feedback formativo e interazioni sincrone dedicate a tale restituzione.
Modalità di verifica dell'apprendimento
Tutte le prove di verifica e autoverifica intermedie previste dai Corsi ed erogate in modalità distance learning sono da considerarsi altamente consigliate e utili ai fini della preparazione e dello studio individuali. Le prove di verifica e autoverifica intermedie non sono obbligatorie ai fini del sostenimento della prova d´esame, la quale deve essere svolta in presenza dello studente davanti ad apposita Commissione ai sensi dell´art. 11 c.7 lett.e) del DM 270/2004.

L’esame si svolge in forma scritta. Il punteggio della prova è espresso in trentesimi. La prova scritta consiste nella risoluzione di 3 domande aperte (scrittura di programmi)  riguardanti i concetti e gli argomenti trattati nell’intero corso. La prova ha una durata massima di 120 minuti.

Le domande richiedono di norma la conoscenza di argomenti ben precisi trattati durante il corso, che mirano a dimostrare la conoscenza e comprensione dell’implementazione di un algoritmo, nonché la comprensioni dei requisiti di un programma e della relativa scrittura del programma stesso secondo la sintassi e la semantica del linguaggio di programmazione JAVA. La scrittura di tali programmi richiede altresì allo studente di applicare tali conoscenze attraverso opportuni ragionamenti che portano o meno un programma ad essere più efficiente, leggibile e manutenibile. Di solito le difficoltà presenti (e di conseguenza il punteggio massimo conseguibile, se non diversamente esplicitato) sono equidistribuite tra le varie domande.

Tuttavia, al fine di valutare il conseguimento degli obiettivi formativi del corso, il docente terrà conto nella valutazione finale dell’esame:
-     del grado di conoscenza dell’argomento teorico relativo alla domanda;
-     della capacità di applicare la corretta semantica e sintassi del linguaggio JAVA;
-     della capacità dello studente di organizzare il programma secondo una logica ben strutturata;
-     della capacità di dello studente di comprendere appieno i requisiti espressi nelle tracce delle domande e nella loro corretta e completa implementazione.

Per superare l’esame, lo studente deve dimostrare di aver acquisito conoscenze sufficiente sui concetti di base della programmazione e dei concetti teorici trattati a lezione. Per conseguire un punteggio pari a 30/30 e lode, lo studente deve invece dimostrare di aver acquisito una conoscenza eccellente di tutti gli argomenti trattati durante il corso e di essere in grado di applicare i concetti teorici e pratici, legati più strettamente alla scrittura di un programma, andando oltre le richieste (requisiti) espresse nelle domande gestendo anche casi eccezionali che normalmente non sarebbero gestiti, o proponendo soluzioni alternative particolarmente eleganti ed efficienti.
Libri di testo

Oltre alle lezioni e alle dispense realizzate dal Docente ed ai materiali didattici pubblicati in piattaforma, è obbligatorio lo studiodei seguenti testi:

  • Herbert Schildt , Java - La Guida Completa 8/ed , McGraw-Hill

Testi di approfondimento:

  • Thinking In Java - Bruce Eckel - http://mindviewinc.com/Index.php
  • JAVA MATTONE DOPO MATTONE - Tarquini Massimiliano; Ligi Alessandro

I testi di approfondimento, non obbligatori, sono distribuiti dagli autori in forma gratuita su internet. Al termine di ogni lezione sono indicate una o più risorse di approfondimento fruibili gratuitamente tramite internet.

Ricevimento studenti

Previo appuntamento (m.lunghi@unimarconi.it)