- Docente: Mirko Viroli
- Crediti formativi: 6
- SSD: ING-INF/05
- Lingua di insegnamento: Italiano
- Modalità didattica: Convenzionale - Lezioni in presenza
- Campus: Cesena
- Corso: Laurea Magistrale in Ingegneria e scienze informatiche (cod. 8614)
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
- element di Haskell e Java 8 lambdas
- il linguaggio Scala (layer OO, layer funzionale, typing avanzato, techniche 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 tuolo dei tool di software project management (DVCS e continuous integration)
- rassegna delle methodologie di sviluppo del software
- documentazione di un progetto
Testi/Bibliografia
- "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
Orario di ricevimento
Consulta il sito web di Mirko Viroli