Programming and Development paradigms 2016/2017

pagine
conoscenze e abilità da conseguire

Al termine del corso lo studente possiede conoscenze specialistiche su tecniche e metodologie di sviluppo software avanzate. In particolare:

  • conosce le principali metodologie di software engineering, dagli approcci a cascata a quelli agili, e le sa applicare allo sviluppo di sistemi software complessi;
  • conosce le principali tecniche di programmazione dichiarativa, funzionale e logica;
  • sa applicare tecniche di programmazione e sviluppo avanzate nel contesto di linguaggi di programmazione e sistemi moderni, con particolare riferimento alla combinazione di programmazione ad oggetti e funzionale;
  • sa applicare pattern di progettazione avanzata nel contesto dei vari paradigmi di programmazione.
contenuti
  • Qualità del Software
    • regole di "clean coding" e "effective programming"
    • il ruolo dei pattern di progettazione
    • refactoring
    • approcci agili
  • Programmazione funzionale
    • funzioni e programmazione funzionale
    • elementi di Haskell e Java 8 lambdas
    • il linguaggio Scala (layer OO, layer funzionale, typing avanzato, tecniche per costruzione di DSL)
  • Programmazione Logica
    • Prolog
    • interpretazione logica e relazionale
  • Software engineering
    • pattern di progettazione e architetturali
    • testing, unit testing, e test-driven development
    • il ruolo dei tool di software project management (DVCS e continuous integration)
    • rassegna delle metodologie di sviluppo del software
    • documentazione di un progetto
testi / bibliografia
  • Advanced OO programming techniques:
    • "Effective Java", Second Edition, Joshua Bloch
    • "Design Patterns: Elements of Reusable Object-Oriented Software", Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
    • "Java 8 Lambdas", Richard Warburton
  • Functional languages:
    • "Functional Programming in Scala", Paul Chiusano and Runar Bjarnason
    • "Programming in Scala", Bill Venners, Lex Spoon, and Martin Odersky
    • "Functional Programming Patterns in Scala and Clojure", Michael Bevilacqua-Linn
    • "Programming Scala: Scalability = Functional Programming + Objects", Alex Payne and Dean Wampler
  • Logic languages:
    • "The Art of Prolog", Second Edition, Leon S. Sterling and Ehud Y. Shapiro
  • Software Engineering:
    • "Fundamentals of Software Engineering", Giorgio Ghezzi, Dino Mandrioli and Mehdi Jazayeri
    • "Clean Code", Robert Cecil Martin
    • "The Art of Agile Development", James Shore
    • "Scrum and XP from the Trenches: How We Do Scrum", by Henrik Kniberg
    • "Test Driven Development: By Example", Kent Beck
    • "JUnit in Action", Second Edition, Petar Tahchiev, Felipe Leme, Vincent Massol and Gary Gregory
    • "Testing in Scala", Daniel Hinojosa
metodi didattici

Il corso si svolge con lezioni in aula sugli aspetti tecnici e metodologici, ed esercitazioni pratiche in laboratorio.

modalità di verifica e valutazione dell'apprendimento

Assignment in itinere e discussione progetto finale con orale

strumenti a supporto della didattica

Slides proiettate a lezione