Programação Orientada a Objetos

Conhecimentos de Base Recomendados

Nenhuns em especial.

Métodos de Ensino

Nas aulas é feita a exposição teórica dos temas recorrendo a pequenos exemplos, seguidos da resolução de exercícios práticos que consistem na elaboração de código.

Resultados de Aprendizagem

Objetivos:

  • Adquirir conhecimentos sobre os conceitos de programação orientada a objectos;
  • Adquirir a capacidade de desenvolver estratégias de resolução de problemas;
  • Ser capaz de codificar as estratégias de resolução de problemas na linguagem de programação C++.

 

Competências a desenvolver:

  • Simular a execução passo-a-passo de programas simples;
  • Escrever programas para resolver problemas simples (exemplos: cálculo numérico, processamento de texto);
  • Decompor problemas em sub-tarefas passíveis de implementação como funções reutilizáveis;
  • Testar e corrigir erros em programas.

Programa

1. Introdução à programação orientada a objectos e à linguagem C++
1.1 Conceitos gerais
1.2 Encapsulamento, polimorfismo e herança

2. Principais diferenças entre C e C++
2.1 Entrada e saída de dados padrão
2.2 Organização de programas em ficheiros
2.3 Comentários
2.4 Definição de variáveis locais
2.5 Tipos pré-definidos
2.6 Cast
2.7 Referências
2.8 Constantes

3. Funções
3.1 Overload de funções
3.2 Argumentos por omissão

4. Classes
4.1 Sintaxe de definição de classes
4.2 Classes como evolução de estruturas
4.3 Funções membros
4.4 Funções membros inline
4.5 O ponteiro this
4.6 Visibilidade de variáveis e funções membro de uma classe
4.7 Construtores
4.8 Vectores e matrizes não-dinâmicas de objetos

5. Ciclo de vida dos objetos
5.1 Destrutor
5.2 Construção por cópia
5.3 Operador de atribuição

6. Objetos dinâmicos
6.1 Os operadores new e delete
6.2 Vectores e matrizes dinâmicas de objetos

7. Redefinição de operadores
7.1 Introdução à redefinição de operadores
7.2 Funções operadores
7.3 Operadores unários e binários
7.4 Opção de operadores membro vs. operadores não membro
7.5 Conversões

8. Composição e agregação
8.1 Composição por oposição a agregação
8.2 Composição sem memória dinâmica
8.2.1 Sintaxe, requisitos de inicialização
8.2.2 Ordem de chamada construtores e de destrutores
8.2.3 Agregação por referência e por ponteiro
8.3 Composição através de memória dinâmica
8.3.1 Conceito de gestão de recursos próprios em classes
8.3.2 Variáveis membro que são ponteiros para memória dinâmica
8.3.3 Destrutor, operador atribuição, construtor por cópia

9. Herança em C++
9.1 Classes derivadas
9.2 Composição vs. derivação
9.3 Formas de derivação e acessibilidade     
9.4 Construtores e destrutores
9.5 Construtor por cópia e operador atribuição em classesderivadas
9.6 Herança e funções overloaded

10. Polimorfismo
10.1 Upcasting, downcasting e dynamic casting
10.2 Funções virtuais
10.3 Classes abstractas e funções virtuais puras
10.4 Funções virtuais overloaded e redefinição em classes derivadas
10.5 Destrutores virtuais

Docente(s) responsável(eis)

Jorge Miguel Tavares Couceiro de Sousa

Métodos de Avaliação

  • A avaliação é efectuada por exame final, de acordo com as regras vigentes no IPC/ISEC.
  • O acesso à avaliação está dependente da presença a pelo menos 50% das horas totais de contacto, monitorizada pelo registo de presenças efectuado durante as aulas.

    Estágio(s)

    NAO

    Bibliografia

    • Rodrigues, P, Pereira, P, & Sousa, M. Programação em C++ : conceitos básicos e algoritmos (Qualquer Edição). FCA – Editora de Informática, Lda..
      Cotas na biblioteca do ISEC: 1A-1-288 (ISEC) – 09519, 1A-1-357 (ISEC) – 11130, 1A-1-173 (ISEC) – 11802, 1A-1-213 (ISEC) – 11803, 1A-1-426 (ISEC) – 16023, 1A-1-324 (ISEC) – 19320.
    • Stroustrup, B (2013). The C++ Programming Language (4th Edition).  ‎ Addison-Wesley Professional.