| Código | 16223 | 
                        
                            | Ano | 2 | 
                        
                            | Semestre | S1 | 
                        
                            | Créditos ECTS | 6 | 
                        
                            | Carga Horária | PL(30H)/T(30H) | 
                        
                            | Área Científica | Informática | 
                        
                        
                        
                        
                        
	| Objectivos de Aprendizagem | Esta Unidade Curricular tem como objetivo a aprendizagem dos conceitos fundamentais da Programação Orientada a Objetos e a introdução às correspondentes metodologias e técnicas de desenvolvimento de programas/aplicações. No final o aluno deve ser capaz de entender e aplicar os princípios e técnicas da Programação Orientada a Objetos e de desenvolver programas numa linguagem Orientada a Objetos (e.g. Java).
 O aluno deve ficar a perceber os conceitos de objeto, classe e instanciação de objectos.
 O aluno deve ficar a conhecer os conceitos de hierarquias de classes e interfaces, os diferentes tipos de relações entre objectos, os conceitos de polimorfismo e programação genérica.
 Deverá ser capaz de construir pequenos programas, aplicando os conceitos enumerados acima.
 O aluno deverá perceber os princípios da Análise e Projeto Orientados a Objetos. No final deverá ser capaz de implementar um projeto onde aplicará de forma integrada os conceitos apreendidos ao longo da UC.
 
 | 
                        
                        
                        
                        
                        
	| Conteúdos programáticos | 1. Introdução ao paradigma da Programação Orientada a Objetos 1.1 Perspetiva histórica
 1.2 Características da programação orientada a objetos (encapsulamento, partilha de comportamento, evolução)
 2. Objetos (noção de Objeto e identidade; protocolo de utilização de um Objeto; mensagens e métodos; noção de estado e comportamento.
 3. Linguagens baseadas em classes; instanciação de Objetos
 4. Hierarquias de Objetos: Mecanismos de herança; Reutilização de código; Sistemas reflexivos; Polimorfismo.
 5. Interfaces: Separação entre interface e implementação de interfaces.
 6. Relações entre Objetos: Extensão, generalização e especialização; Associação, agregação e composição; Coesão e acoplamento.
 7. Automatização de testes e geração de documentação.
 8. Análise, Projeto e Implementação Orientada a Objetos: Linguagens e ambientes de desenvolvimento; Análise, Projeto e Implementação.
 
 | 
                        
                        
                        
                        
	| Metodologias de Ensino e Critérios de Avaliação | Aulas teóricas: Exposição dos conceitos. Aulas práticas: Resolução de fichas de trabalho no computador.
 Estas fichas contêm exemplos a completar pelo aluno e propostas de problemas para o aluno resolver, podendo recorrer aos apontamentos e ao Professor.
 Nas aulas práticas verificar-se-á se os alunos apreenderam os conceitos apresentados nas aulas teóricas e se são capazes de os implementar usando uma linguagem Orientada a Objetos (e.g. Java).
 As últimas semanas do semestre são dedicadas à implementação de um projeto a realizar em grupo fora do tempo de aulas, servindo as aulas práticas para discussão das opções tomadas e resolução de dúvidas colocadas pelos grupos.
 Avaliação:
 Avaliação de conhecimentos teóricos e práticos através de testes individuais.
 Trabalho prático, a realizar em grupo, com defesa individual.
 Avaliação de exercícios realizados em contexto de aula prática.
 | 
                        
                        
                        
                        
	| Bibliografia principal | Java A Beginner’s Guide Sixth Edition, 2014 , Herbert Schildt , Oracle Press JAVA8 – POO + Construções Funcionais, F. Mário Martins, FCA, 2017.
 Projetos de POO em JAVA, F. Mário Martins, FCA, 2014.
 Thinking in Java, 4 th Edition, Bruce Eckel, 2005.
 | 
                        
                        
                        
                        
                        
                        
                            | Língua | Português |