95648 - Software Design and Development

Course Unit Page

Academic Year 2022/2023

Learning outcomes

At the end of the course, students will be acquainted with basic knowledge of the object-oriented paradigm of software construction, of its basic techniques and design patterns, its incarnation in the Java programming language and the corresponding framework, including advanced aspects like graphical user interfaces (GUIs). The students will be able to design and develop complete, small-to-medium software applications, using agile methods, including basic DevOps techniques. 

Course contents

  • Basic elements of object-oriented (OO) analysis, design, and programming
  • The Java programming language (PL): overview and development tools
  • Basic elements of OOPLs: classes, objects, methods, fields, and instantiation
  • Polimorphism, inheritance, reuse: interfaces and abstract classes
  • An overview of advanced aspects: generic programming, annotations, exceptions, elements of functional programming (lambda expressions)
  • Basic libraries for program construction
  • I/O handling
  • Programming of graphical user interfaces (GUIs)
  • Basics of concurrency
  • Brief overview of design patterns and techniques of effective programming
  • Development tools and basics of DevOps: JDK, IntelliJ Idea, git, Gradle, continuous integration
  • Overview of the C# programming language

Readings/Bibliography

Reference book:

  • Bruce Eckel. Thinking in Java -- Fourth Edition

Additional books:

  • Joshua Block. Effective Java -- Second Edition
  • Erich Gamma, Richard Elm, Ralph Johnson, John Vlissides. Design Patterns

The course will also rely on tutorials and documentation available on the Web.

Teaching methods

The pedagogical setup of the course will leverage lectures from the professor and practical activity at the lab. 

In class, we will illustrate object-oriented programming techniques and details of the Java programming language, and conduct exercises to stimulate a critical attitude in students.

In lab, we illustrate various development tools, e assign development tasks to exercise practical abilities of students, using active didactic approaches.

Assessment methods

The assessment will be based on the following:

Oral exam based on presentation of a cooperative project. In 3-persons teams, students build a software application in Java, producing documentation of requirements, design, and implementation. Assessment includes check of software quality and discussions of design choices.

Teaching tools

Learning material will be provided by the professor (in particular, slides and exercises). Lab activities will support learning of practical abilities. A tutor will support the students throughout the activity in lab. 

Office hours

See the website of Roberto Casadei

See the website of Danilo Pianini

See the website of Sara Montagna