- Docente: Alessandro Ricci
- Credits: 6
- SSD: ING-INF/05
- Language: Italian
- Teaching Mode: In-person learning (entirely or partially)
- Campus: Cesena
- Corso: Second cycle degree programme (LM) in Computer Science and Engineering (cod. 8614)
Learning outcomes
The course introduces the main aspects concerning advanced
programming paradigms that are relevant nowadays for software
development and problem solving, besides the object-oriented one.
In particular upon completing this course, a student will have a
basic knowledge of declarative paradigms - functional programming
and logic programming - and a solid knowledge of concurrent
programming (multi-threaded, based on message passing,
actor-based).
Course contents
The course is organized in the following main parts:
PART 1:
- Overview on programming paradigms:
-- imperative, functional, logic, object-oriented,
aspect-oriented
-- concurrent programming: multi-threaded, event-driven/reactive,
actors
- Focus on functional programming
-- Overview of the main characteristics and features of functional
programming and related programming languages
-- Haskell as reference
- Foundations: lambda calculus - introduction
- Integration with OOP
-- mainstream language support (C#, Java 8, JavaScript, Scala) -
Java, JavaScript, Scala as main case studies
In lab:
- functional programming Haskell
- OOP and functional programming in Java 8
PART 2 - Concurrent programming - base concepts and models
- introduction - main concepts and aspects
- modelling a concurrent program/system
-- specifying liveness and safety properties in LTL
-- verifying properties with model-checking - pragmatics
- design and development of concurrent programs
-- methods, architectures
- interaction models and mechanisms
-- shared memory
--- semaphores, monitors
In lab:
- multi-threaded programming in Java
-- basic mechanisms and libraries
-- implementing monitors in Java
PART 3 - Task-oriented design and development
- task-oriented patterns and architectures for the design and
development of concurrent programs
- visual formalism - Petri Nets, Statecharts
In lab:
- framework task-oriented in Java - Executors
PART 4 - Concurrent programming - advanced
- message passing
-- channels, actors
-- asynchronous and synchronous
- asynchronous programming
-- based on future/task
-- based on Continuation Passing style (CPS): events and
event-loop
--- promise mechanism
- reactive programming e reactive extension (Rx)
- data parallelism
-- based on GPGPU
-- for BigData - MapReduce, Lambda Architecture
In lab:
- programming actors with Akka framework
- asynchronous programming in JavaScript
- Reactive Programming in RxJava
Readings/Bibliography
- Concepts, Techniques and Models of Computer Programming (Van Roy,
Haridi) - MIT Press
- Principle of Concurrent and Distributed Programming (Ben-Ari) -
Addison Wesley
- Programming Languages: Principles and Paradigms - Gabbrielli,
Martini - Springer
- Concepts in Programming Languages - Mitchell - MIT Press
- Java Concurrency in Practice - Brian Goetz, Doug Lea et al -
Addison Wesley
- Foundations of Multithreaded, Parallel, and Distributed
Programming - Gregory R. Andrews - Addison-Wesley
- Concurrency - State Models & Java Programs - Jeff Magee &
Jeff Kramer - Wiley
- Introduction to Functional Programming using Haskell - Richard
Bird - Prentice Hall
- Seven Concurrency Models in Seven Weeks -
Paul Butcher
Teaching methods
Three credits (about 30 hours) are devoted to theory and
exercises in the classroom and three credits (about 30 hours) to
practice in the lab.
Assessment methods
The final assessment is composed by due parts:
- a set of programming assignments, assigned during the course
- oral discussion, with questions about the theory and the lab
Teaching tools
- slides projected during the lectures, available on the course web
site
- scientific papers and articles, available on the Internet
Links to further information
https://elearning-cds.unibo.it/course/view.php?id=4063
Office hours
See the website of Alessandro Ricci