Il corso introduce all’informatica e, in particolare ai concetti base della programmazione e delle basi di dati. Nella prima parte del corso verranno presentati i concetti base della programmazione utilizzando il linguaggio di programmazione Python. In tale ambito verranno introdotte le strutture dati fondamentali, quali gli array e le matrici e le principali tecniche di programmazione. Nella seconda parte del corso saranno presentati i concetti fondamentali delle basi di dati, con particolare riguardo al modello relazionale, le metodologie di progettazione, i linguaggi di interrogazione, ed i sistemi di gestione di basi di dati.
Il corso mira a fornire solide basi in merito alla programmazione dei calcolatori elettronici per risoluzione di problemi ed alla gestione di grandi moli di dati strutturati. Competenze specifiche: • comprensione dei principi della programmazione dei calcolatori; • comprensione dei principi dell’architettura dei calcolatori elettronici; • comprensione dei principi della rappresentazione dell’informazione digitale; • capacità di utilizzo degli strumenti linguistici di base del linguaggio Python; • abilità di progettare la risoluzione di problemi mediante un approccio algoritmico; • abilità di realizzare una soluzione algoritmica in linguaggio Python; • abilità di verificare la correttezza di un programma per la risoluzione di un problema dato. • comprensione di algoritmi basati su ricorsione; • capacità di utilizzo di strutture ad array e stringhe; • Comprensione dell'architettura, delle funzionalità, e degli ambiti applicativi dei sistemi per la gestione delle basi di dati. • Capacità di progettare una base di dati secondo delle specifiche date. • Capacità di interpretare il progetto di una base di dati già esistente. • Capacità di interrogare una base di dati per estrarre informazioni di interesse. • Capacità di utilizzare un sistema di gestione di basi di dati. Competenze trasversali: • abilità nella risoluzione di problemi, in particolare attraverso lo sviluppo di algoritmi; • abilità alla collaborazione in piccoli gruppi ed alla condivisione e presentazione del lavoro svolto; • autonomia nella ricerca di librerie utili alla risoluzione di homework, anche su siti internazionali (e quindi solitamente in lingua inglese).
PARTE 1 Introduzione ai calcolatori, alla rappresentazione dell’informazione e alla programmazione: Introduzione all’Informatica. La rappresentazione binaria dell’informazione: caratteri, numeri naturali, interi, reali. Algebra di Boole. Organizzazione di un computer e il modello di von Neumann. Il linguaggio macchina. Macchina RASP. Il sistema operativo. I linguaggi di programmazione ad alto livello. Compilazione e interpretazione. Le applicazioni informatiche. Problemi, algoritmi e programmi: Le nozioni di problema, algoritmo ed esecutore. Risoluzione algoritmica di un problema. Correttezza ed altre proprietà degli algoritmi. Esempi di algoritmi. Cenni alla valutazione dell’efficienza degli algoritmi. Algoritmi e programmi. I concetti di variabile e tipo di dato. Introduzione alla programmazione in Python: Il linguaggio Python. Codifica di algoritmi in programmi Python. Variabili. Operatori. Istruzioni semplici. Stringhe. Strutture di controllo del flusso di elaborazione. Cicli. Operatori di ingresso/uscita. Sviluppo incrementale di programmi. Funzioni: Definizione e chiamata di funzioni. Campo di azione di un identificatore. Modello di esecuzione delle funzioni e passaggio dei parametri. Aspetti semantici e strutture di supporto all’esecuzione delle funzioni: lo stack ed i record di attivazione. Programmazione con array: Uso di array mediante le liste Python. Array monodimensionali. Array multidimensionali. Cenni all’allocazione dinamica della memoria e gestione dello heap. Aliasing tra variabili di tipo array. Manipolazione di array. Richiami di algebra lineare. Modellazione e gestione di vettori e matrici mediante array. Tecniche di programmazione: Altri tipi composti Python: tupla, insieme e dizionario. Algoritmi di ricerca e ordinamento su array: ricerca lineare, selection sort, insertion sort, bubble sort. Cenni alla libreria standard di Python. PARTE 2 Introduzione. Sistemi informativi, informazioni e dati. Basi di dati e sistemi di gestione di basi di dati. Modelli dei dati. Metodologie e modelli per il progetto. Il ciclo di vita dei sistemi informativi. Metodologie di progettazione. Il modello Entità-Relazione: Entità, Relazioni, Cardinalità, Attributi, Gerarchie. Documentazione di schemi E-R. Il modello relazionale. Modello logico. Schema e istanza di una base di dati. Informazione incompleta e valori nulli. Chiave, Superchiave. Vincoli di integrità (di dominio, di tupla). Vincoli di integrità referenziale. La progettazione logica. Ristrutturazione di schemi E-R. Analisi delle ridondanze. Eliminazione delle gerarchie. Partizionamento/accorpamento di concetti. Scelta degli identificatori principali. Traduzione verso il modello relazionale. Documentazione di schemi logici. Esempi di progettazione logica. Algebra relazionale. Operatori insiemistici: unione, intersezione, differenza, prodotto cartesiano. Ridenominazione. Selezione. Proiezione. Join. Interrogazioni in algebra relazionale. SQL. Definizione dei dati in SQL. I domini elementari. Definizione di schema. Specifica di valori di default. Vincoli intrarelazionali. Vincoli interrelazionali. Modifica degli schemi. Interrogazioni in SQL. Interrogazioni semplici. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni nidificate. Manipolazione dei dati in SQL. Inserimento. Cancellazione. Modifica. Viste.
Lezioni frontali ed esercitazioni in aula, svolte anche con l’ausilio di un calcolatore. In tal modo è possibile mostrare direttamente agli studenti come implementare gli algoritmi ed eseguire i programmi. La maggior parte del materiale didattico è disponibile in forma interattiva: gli studenti leggendo il libro possono direttamente sperimentare gli esempi proposti e modificarli a proprio piacere. E' inoltre previsto lo svolgimento e discussione di progetti didattici di gruppo. Qualora, nel rispetto di eventuali indicazioni fornite dall'Ateneo e dal Dipartimento, il corso dovesse essere erogato a distanza o in formula mista, le lezioni si terranno in modalità sincrona in streaming nei tempi fissati dall’orario ufficiale.
L’esame consiste di una prova scritta e di una prova orale. Il voto finale è in trentesimi e si ottiene calcolando la media del voto dello scritto e dell'orale.
Materiale didattico messo a disposizione dal docente. Il materiale include il testo “Think Python – How to Think Like a Computer Scientist” (“Pensare da informatico: guida alla programmazione in Pyhton”) di A. B. Downey in versione interattiva, il tutorial ufficiale “The Python Tutorial” e la documentazione “The Python Standard Library”. Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone, “Basi di Dati”, IV edizione. McGraw-Hill Libri Italia.
Valeria Fionda
PARTE 1 ARGOMENTI: Introduzione ai calcolatori e alla rappresentazione dell’informazione. MATERIALE: Dispense del docente, 20 pagine LEZIONI: 6 STUDIO: 12 ARGOMENTI: Problemi, algoritmi e programmi. Introduzione alla programmazione in Python. MATERIALE: Libro: Pensare da informatico: guida alla programmazione in Pyhton, capitoli 1—6, 68 pagine LEZIONI: 12 STUDIO: 24 ARGOMENTI: Programmazione con array. MATERIALE: Libro: Pensare da informatico: guida alla programmazione in Pyhton, 20 pagine LEZIONI: 14 STUDIO: 28 PARTE 2 1: Introduzione alle Basi di Dati. MATERIALE: Testo di riferimento, Capitolo 1 LEZIONI: 2 STUDIO: 4 ARGOMENTI: Metodologie e modelli per il progetto MATERIALE: Testo di riferimento, Capitolo 6 LEZIONI: 6 STUDIO: 12 ARGOMENTI: Il modello relazionale MATERIALE: Testo di riferimento, Capitolo 2 LEZIONI: 4 STUDIO: 8 ARGOMENTI: Algebra relazionale MATERIALE: Testo di riferimento, Capitolo 3. Dispense del docente LEZIONI: 4 STUDIO: 8 ARGOMENTI: SQL MATERIALE: Testo di riferimento, Capitolo 4. Dispense del docente LEZIONI: 10 STUDIO: 20 ARGOMENTI: SQLite MATERIALE: Dispense del docente LEZIONI: 5 STUDIO: 10 ARGOMENTI: Tesine/altri homework/Esame. STUDIO: 16 ESAME: 20
The course aims at introducing to computer science and, in particular, to the basic concepts of programming and databases. In the first part, we introduce the basic concepts of programming using the language Python. In this context data structures and programming techniques are presented. In the second part we introduce the basics of database concepts, with particular focus on the relational model, methodologies for database design, query languages, and database management systems.
None
The course aims at providing a solid knowledge of computer programming for the resolution of problems and of database management. Specific skills: • understanding of the principles of computer programming; • understanding of basic notions of computer architectures; • understanding of basic notions of digital encoding of information; • ability to use basic Python constructs; • ability to use arrays and strings; • ability to design problem solutions through an algorithmic approach; • ability to implement algorithms in Python and Java; • ability to check whether a given algorithm actually solves a given problem. • Understanding of the architecture, the functionalities, and the application domains of database management systems. • Ability to design a database complying with given requirements. • Ability to interpret a database design. • Ability to query databases to extract information of interest. • Ability to use a database management system. Soft skills: • ability to design problem solutions through an algorithmic approach; • ability to cooperate in small groups and to share and present the work done; • autonomy in searching for libraries that are useful to complete homework assignments, also on international websites (thus usually in English).
PART 1 Introduction to computers, to the representation of information and to programming: Introduction to computer science. Binary representation of information: characters, natural numbers, integers, reals. Boolean algebra. Organization of a computer and Von Neumann’s model. Machine language. RASP machine. Operating system. High-level programming languages. Compilation and interpretation. Computer applications. Problems, algorithms and programs: The notion of problem, algorithm, and executor. Algorithmic resolution of problems. Correctness and other properties of algorithms. Examples of algorithms. Introduction to the evaluation of the efficiency of algorithms. Algorithms and programs. The concepts of variable and data type. Introduction to Python programming: The Python language. Coding algorithms as Python programs. Variables. Operators. Simple instructions. Strings. Structures for controlling the flow of programs. Loops. Input/output operators. Incremental development of programs. Functions: Definition of functions and function calls. Scope of identifiers. Execution model and parameter passing. Semantic aspects and structures for function execution: the stack and activation records. Programming with arrays: Python lists as arrays. Monodimensional arrays. Multidimensional arrays. Dynamic memory allocation and heap management. Aliasing between array variables. Manipulation of arrays. Modeling and managing vectors and matrices through arrays. Programming techniques: Other composite Python types: tuple, set, and dictionary. Searching and sorting algorithms over arrays: linear search, selection sort, insertion sort, bubble sort. The Python standard library. PART 2 Introduction. Information systems, information and data. Databases and database management systems. Data models. Methodologies and models for database design. The life cycle of information systems. Methodologies for database design. The Entity-Relationship model: Entity, Relationship, Cardinality, Attributes, Hierarchy. Documentation of E-R schemas. The relational model. Logical model. Database schemas and instances. Incomplete information and null values. Keys and super-keys. Integrity constraints. Referential constraints. Logical design. Restructuring of E-R schemas. Redundancy analysis. Removing generalizations. Entity/relationship partitioning and merging. Selecting primary identifiers. Translation into the relational model. Documentation of logical schemas. Examples of logical design. Relational algebra. Set operators: union, intersection, difference, Cartesian product. Renaming. Selection. Projection. Join. Relation algebra queries. SQL. Data definition in SQL. Elementary domains. Schema definition. Default domain values. Intra-relational constraints. Inter-relational constraints. Schema updates. SQL queries. Simple queries. Aggregates. Group by queries. Nested queries. Data modification in SQL. Insertions. Deletions. Updates. Views.
Both class and exercise hours are done either using the blackboard or using a computer. In the latter case, it is possible to show students how to implement algorithms and execute programs. The majority of the references are available in an interactive form: students that read the textbook can directly experiment with the proposed examples and modify them at their will. Students, organized in groups, must also develop and discus a project implementing a case study. In case the University and the Department will request to deliver the course remotely or in a hybrid way, classes will be delivered synchronously in streaming following the official schedule
The exam consists of a written exercise and an oral discussion. The result of the exam is in the range [18..30] and it is assigned at the end of the oral discussion
Reference materials provided by the teacher. The references include the interactive textbook “Think Python – How to Think Like a Computer Scientist” by A. B. Downey, the official “Python Tutorial”, and the documentation “The Python Standard Library”. Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone, “Database”, IV edition. McGraw-Hill.
Valeria Fionda
PART 1 TOPICS: Introduction to computers and to the representation of information. REFERENCES: Briefs provided by the teacher, 20 pages CLASS HOURS: 6 STUDY HOURS: 12 TOPICS: Problems, algorithms and programs. Introduction to Python programming. REFERENCES: Textbook “Think Python – How to Think Like a Computer Scientist”, chapters 1—6, 68 pages CLASS HOURS: 12 STUDY HOURS: 24 TOPICS: Programming with arrays. REFERENCES: Textbook “Think Python – How to Think Like a Computer Scientist”, 20 pages CLASS HOURS: 14 STUDY HOURS: 28 PART 2 TOPICS: Introduction. REFERENCES: Textbook, Chapter 1 CLASS HOURS: 2 STUDY HOURS: 4 TOPICS: Methodologies and models for database design REFERENCES: Textbook, Chapter 6 CLASS HOURS: 6 STUDY HOURS: 12 TOPICS: The relational model REFERENCES: Textbook, Chapter 2 CLASS HOURS: 4 STUDY HOURS: 8 TOPICS: The relational algebra REFERENCES: Textbook, Chapter 3. Briefs provided by the teacher CLASS HOURS: 4 STUDY HOURS: 8 TOPICS: SQL REFERENCES: Textbook, Chapter 4. Briefs provided by the teacher CLASS HOURS: 10 STUDY HOURS: 20 TOPICS: SQLite REFERENCES: Briefs provided by the teacher CLASS HOURS: 5 STUDY HOURS: 10 TOPICS: Small dissertations/other homework/Examination. STUDY HOURS for homework: 16 EXAMINATION: 20