Programação Avançada

Conhecimentos de Base Recomendados

  • Esta disciplina pressupõe conhecimentos lecionados na disciplina de Programação Orientada a Objetos.

Métodos de Ensino

  • A unidade curricular possui auIas teóricas e práticas
    • Nas auIas teóricas é utiIizada uma metodoIogia expositiva para a apresentação dos conceitos teóricos da matéria com exempIos de apIicação
    • Nas auIas práticas os aIunos apIicam os conhecimentos adquiridos nas auIas teóricas e/ou aulas práticas e exercitam as competências desenvoIvendo pequenas apIicações e um projeto, em grupos de três elementos. Os docentes acompanham o desenvoIvimento, escIarecendo dúvidas e orientando quanto às opções tomadas.

Resultados de Aprendizagem

  • Adquirir competências de programação em Iinguagem Java, consoIidando os conhecimentos fundamentais de programação orientada a objetos adquiridos anteriormente.
  • Adquirir conhecimentos sobre Software Design Patterns no desenvoIvimento de apIicações.
  • Adquirir a capacidade de desenvoIver apIicações para ambiente consoIa e também para ambiente gráfico, baseado em eventos.
  • Desenvolver capacidades de organização das estruturas de dados, conseguindo aplicá-las adequadamente em apIicações de média dimensão, estruturando-as de uma forma extensíveI e racionaI, separando os dados da sua forma de representação na interação com o utilizador.

Programa

  • Principais características da linguagem Java
  • Transição de C/C++ para Java
    • Tipos primitivos
    • Arrays de tipos primitivos
    • Operadores
    • Instruções de controlo de execução
  • Classes
    • Objetos e referências
    • Garbage collector
    • Construtores
    • A palavra chave this
    • Construtores que chamam construtores
    • Membros static
    • Métodos overloaded
    • O método finalize()
    • Arrays de objetos
    • Classes interiores
  • Packages
    • Organização de componentes
    • Especificadores de acesso
  • Composição e herança
    • Composição
    • Herança
    • Escolher entre composição e derivação
    • A palavra-chave super
    • A palavra-chave final
  • Polimorfismo
    • Upcasting
    • A classe Object
    • Classes abstratas
    • Interfaces
  • Colecções
    • Principais Interfaces derivados de Collection
    • Algumas implementações concretas
  • Excepções
  • Ficheiros
  • Interface gráfica
    • Introdução ao JavaFX
    • Aplicações com interface gráfico
    • Programação baseada em eventos
    • Componentes, eventos e listeners
  • Padrões de programação
    • MVC, MVP e MVVM
    • Máquinas de estados
    • Singleton
    • Fábrica de objetos
    • Command
    • Memento
    • Facade
    • Outros padrões
  • Introdução ao teste de software
    • Testes unitários
    • Injeção de dependências nos testes

 

Docente(s) responsável(eis)

Álvaro Nuno Ferreira Silva Santos

Métodos de Avaliação

Frequência 1:

  - Frequência sobre Java
  - Realizada em data a definir, preferencialmente entre a 7ª e a 9ª semana de aulas
  - Nota: 6 valores

 

Frequência 2:

  - Frequência sobre padrões (em Java) e JavaFX
  - Final do semestre, preferencialmente na última semana de aulas
  - Nota: 6 valores

 

Trabalho:

  - Grupos de máx. 3 alunos, da mesma turma
      - Excepto se forem trabalhadores-estudantes ou alunos de Erasmus, os quais podem fazer grupo com outros estudantes com o mesmo estatuto independentemente da turma
      - A constituição dos grupos deverá ser indicada até à quarta semana de aulas
  - Realizado por etapas e parcialmente em sala de aula
  - As notas das etapas terão em consideração a qualidade do trabalho, a participação dos alunos nas tarefas e presenças nas aulas
  - A apresentação final do trabalho, relatório e respetiva defesa decorrerá na última semana de aulas
  - Nota: 6 valores

 

Aulas teóricas:

  - Mini-atividades
      - Nota: até 0.2 por atividade, até um máximo de 2 valores
      - As mini-atividades só poderão ser realizadas por alunos presentes nas aulas ou que possuam o estatuto de trabalhador-estudante, Erasmus ou equivalente
          
Nota: O estatuto de trabalhador-estudante ou similar será verificado através da informação do Nónio


    Estágio(s)

    NAO

    Bibliografia

    • Bibliografia Principal:
      • Eck, D. (2020). Introduction to Programming Using Java (8th Edition). Disponível em math.hws.edu/javanotes/
      • Eckel, B. (2006). Thinking in Java (4th Edition). Prentice Hall. (Cota: 1A-1-448 (ISEC) – 14372).
      • Deitel, P.,Deitel, H. (2007). Java How to Program (7th Edition). Prentice Hall. (Cota: 1A-1-146 (ISEC) – 14445).
      • Gamma, E., Helm, R., Johnson, R., Vlissides, J. (1995). Design Patterns: Elements of Reusable Object Oriented Software. Addison-Wesley. (Cota: 1A-7-97 (ISEC) – 15112).
      • Freeman, E., Freeman, E. (2004). Head First Design Patterns. O’Reilly Media. (Cota: 1A-7-75 (ISEC) – 14706).
      • Grand, M.(1998). Patterns in Java Volume 1 : a catalog of reusable design patterns illustrated with UML. John Wiley. (Cota: 1A-1-305 (ISEC) V.1o v. – 09760).
    • Bibliografia Complementar:
      • Savitch, W.(2018). Java: An Introduction to Problem Solving and Programming (8th Edition). Pearson.
      • Horstmann C., Cornell, G. (2015). Core Java, Volume I – Fundamentals (11th Edition). Prentice-Hall.