Introduzione al corso Progettazione e Sviluppo del Software (PSS) a.a. 24-25

Progettazione e Sviluppo del Software

C.D.L. Tecnologie dei Sistemi Informatici

Gianluca Aguzzi — gianluca.aguzzi@unibo.it

Angelo Filaseta — angelo.filaseta@unibo.it

versione stampabile

Docenti

Sito del corso su virtuale.unibo.it

Contatti

Come contattare

  • Attraverso il Forum Studenti per domande la cui risposta è di interesse generale
  • Via email tenendo in copia tutti i docenti
    • Per questioni personali
    • Si usi e-mail istituzionale @studio.unibo.it
    • Si usi prefisso [LPTSI-PSS] nel subject della mail
  • Ricevimento
    • Si vedano le pagine web dei docenti

Organizzazione generale del corso

Lezioni aula (giovedì 13-15, venerdì 13-16) - prof. Aguzzi

  • Illustrano i concetti teorici, metodologici, e pratici
  • Basate su slide proiettate (ma non solo)

Laboratorio (martedì 9-12) - prof. Filaseta

  • Illustra ulteriori aspetti metodologici e pratici
  • Con esercizi (da svolgere in autonomia) necessari alla comprensione e alla sperimentazione
  • È parte integrante del corso

Studio a casa

  • Rilettura slide, esperimenti pre- e/o post-laboratorio
  • È praticamente obbligatorio se volete rimanere in pari…

Conoscenze e abilità da conseguire

Al termine del corso, lo studente possiede le conoscenze di base dei paradigmi di programmazione per software in-the-large, quali il paradigma object-oriented e alcuni aspetti di quello funzionale, dei suoi principali pattern di progettazione, della sua incarnazione in linguaggi moderni (Java) e relativi framework di sviluppo. È in grado quindi di progettare e sviluppare applicazioni complete di medio-piccole dimensioni, usando processi di sviluppo e tecniche agili, tra cui l’approccio DevOps alla conduzione del progetto.

Contenuti

Programma (di massima) del corso

  • Elementi base di programmazione object-oriented (OO) e Java
  • Incapsulamento, Ereditarietà, Polimorfismo
  • Programmazione generica (polimorfismo ad-hoc)
  • Librerie (e.g., testing, I/O, interfacce grafiche)
  • Integrazione col paradigma funzionale (Java 8 lambda)
  • Pattern e buone pratiche di programmazione (cf. agile)

Materiale

  • Slide (e codice sorgente) a cura dei docenti
    • messi a disposizione sul sito del corso su Virtuale
    • necessari e sufficienti per acquisire le competenze e superare l’esame

Testi di riferimento (non necessario l’acquisto)

Programmazione in Java

  • B.Eckel. Thinking in Java, 4th edition.
  • J.Block. Effective Java, 2nd edition.
  • R.Warburton. Java 8 Lambdas.

Altri riferimenti

  • E.Gamma et al. Design Patterns Elements of Reusable Object-Oriented Software.
  • R.Martin. Clean Code: A Handbook of Agile Software Craftsmanship
  • Java e C# online documentation (tutorials, Language Specification, APIs)

Software

Java

Istruzioni sull’installazione (sul PC di casa)

Sul ruolo di questo corso

Elementi essenziali

  • Costruzione del software, e quindi di sistemi
  • Analisi problemi, e organizzazione di soluzioni
  • Tecniche base ed (alcune) avanzate di programmazione ad oggetti
  • Introduzione al trend della programmazione moderna
  • Gestione del progetto
  • Utilizzo di strumenti integrati di sviluppo

L’importanza nel vostro percorso

  • Enfasi sull’approccio metodologico
  • Competenze a curriculum
  • Target di qualità piuttosto elevato
  • È cruciale dedicargli subito il tempo necessario

Esame

Sviluppo + Discussione progetto

  • Progetto sviluppato in gruppo (2-3 studenti)
  • Concordato col docente prima di iniziare
  • Da relazionare con qualità, poi discusso oralmente (su appuntamento)
    • I dettagli (cf. consegna, relazione etc.) discussi durante il corso

Prerequisiti

Buona conoscenza

  • tecniche di programmazione imperativa/strutturata
  • costruzione e comprensione di semplici algoritmi e strutture dati

Attenzione a chi è già “fluente” in linguaggi ad oggetti

  • Java o C#
  • è difficile disimparare le cattive abitudini!