Introduzir princípios avançados de desenvolvimento de software multiplataforma e orientado a objetos, conceitos e boas práticas de modelagem e projeto de software.
Princípios avançados de programação orientada a objetos. Conceitos de modelagem de sistemas orientados a objetos. Técnicas para construção de software robusto. Introdução à programação concorrente.
Conceitos de orientação a objetos e suas aplicações em linguagens de programação orientadas a objetos. Princípios de análise e projeto orientados a objetos (UML e Princípios SOLID). Tratamento de exceções. Tipos genéricos. Arcabouço de coleções. Fluxos de entrada e saída de dados. Ferramentas de apoio ao desenvolvimento. Noções de programação concorrente.
Livros texto: Sestoft, P. Java Precisely, MIT Press, 3rd edition, 2016. Bloch, J. Java Efetivo. Alta Books, 3ª edição, 2019. Deitel, H.M.; Deitel P.J. Java: Como Programar, Pearson, 10ª edição, 2016. Larman, C. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development. Prentice Hall, 3rd edition, 2004. Bibliografia complementar: Goetz, B.; Peierls, T.; Bloch, J.; Bowbeer, J.; Holmes, D.; Lea, D. Java Concurrency in Practice. Addison-Wesley Professional, 2006. Fowler, M. Refactoring: Improving the Design of Existing Code. Addison-Wesley Professional, 2nd edition, 2018.