Programação Orientada a Objetos

Conhecimentos de Base Recomendados

Programação em linguagem C e algoritmia. É importante os alunos terem obtido aprovação nas unidades curriculares de Introdução à Programação e Programação do 1º ano.

Métodos de Ensino

As aulas são teóricas e práticas. Nas aulas teóricas, é utiIizada uma metodologia expositiva para a apresentação dos fundamentos teóricos da matéria com exempIos de aplicação, sendo incentivada a participação dos alunos vom vista a um ensino participativo. Nas aulas práticas os alunos aplicam os conhecimentos das aulas teóricas, desenvolvendo aplicações, com a supervisão dos docentes, sendo necessária a participação dos alunos na aula. Fora das aulas, os alunos desenvolvem, em grupos de dois, um projecto para aplicação e aprofundamento dos assuntos das aulas, sendo o projeto alvo de avaliação.

Resultados de Aprendizagem

1. Adquirir competências de programação orientada a objectos.

2. Adquirir competências de programação orientada a objectos em C++.

3. Adquirir a capacidade de desenvolver aplicações para ambiente consola em C++.

4. Adquirir a capacidade de desenvolver aplicações baseadas em estruturas de dados encapsuladas e polimórficas.

5. Aperfeiçoar a capacidade de organização, pesquisa, planeamento, justificação de soluções e documentação de projetos de software.

6. Aperfeiçoar a capacidade de pesquisa autónoma de informação.

Programa

Introdução geral aos conceitos de orientação a objetos e à linguagem C++

               Conceitos gerais sobre Programação Orientada ao Objecto

               Encapsulamento, Polimorfismo, Herança

               Princípios SOLID

Algumas diferenças entre C e C++

               Entrada e saída de dados standard

               Estruturação de projetos em .h e .cpp

               Comentários em C++

               Definição de variáveis locais

               Tipos pré-definidos

               Cast

               Referências

               Constantes

Funções

               Funções overloaded

               Funções com argumentos por omissão

               Situações de ambiguidade em overloading

Classes

               Sintaxe de definição de classes

               Classes como evolução de estruturas

               Funções membros

               O ponteiro this

               Funções inline

               Visibilidade (acessibilidade)

               Construtores

               Sintaxe de inicialização () e {}

               initializer_list

               Arrays não-dinâmicos de objetos

               Destrutores

               Funções membros inline

               dados e funções membros estáticos

               Funções membros constantes

               Funções friend

Ciclo de vida dos objetos

                Destrutor

                Introdução à construção por cópia

                atribuição. Introdução ao operador de atribuição

Objetos dinâmicos

               Os operadores new e delete

               Arrays dinâmicos de objetos

Redefinição de operadores

               Introdução geral à redefinição de operadores

               Funções operadores

               Operadores unários e binários

               Opção de operadores membro vs. operadores não membro

               Conversões

Composição e agregação

               Significado de composição por oposição a agregação

               Composição sem memória dinâmica – sintaxe, requisitos de inicialização. Ordem de chamada construtores e de destrutores

               Agregação por referência e por ponteiro

Composição através de memória dinâmica

               Conceito de gestão de recursos próprios em classes

               Membros variáveis que são ponteiros para memória dinâmica

               Destrutor, Operador atribuição, Construtor por cópia

Composição de objectos

               Composição de objectos e construtores

               Tipos básicos na lista de inicialização

               Composição de objectos e destrutores

Herança em C++

               Classes derivadas

               Composição vs. derivação

               Formas de derivação e acessibilidade     

               Construtores e destrutores

               Construtor por cópia e operador atribuição em classesderivadas

               Herança e funções overloaded

Polimorfismo

               Upcasting

               Funções virtuais

               Classes abstractas e funções virtuais puras

               Funções virtuais overloaded e redefinição em classes derivadas

               Destrutores virtuais

Mecanismo de excepções em C++

Introdução à biblioteca STL

               Noção de contentor e de iterador

               Classes de contentores. Manipulação de contentores. Classe vector.

               classes de suporte a manipulação de strings. string, e ostringstream.

               Classes para suporte a E/S por stream istringstream e ostringstream

Introdução a smartpointers em C++

                unique pointer

                shared pointer

Introdução aos templates e biblioteca STL

               Templates de classes

               Argumentos de templates

               Templates de funções

Docente(s) responsável(eis)

João António Pereira Almeida Durães

Métodos de Avaliação

A avaliação é constituída por duas componentes: exame e trabalho prático.

Trabalho prático:

  • Pode ser realizado individualmente ou em grupos de dois alunos do mesmo laboratório.
  • É realizado exclusivamente durante o semestre. Os alunos que não realizarem o trabalho durante o semestre ficam definitivamente sem a classificação que lhe corresponde, não podendo substituí-lo por outros meios ou pelo exame, em nenhuma época de avaliação.
  • É descrito por um ou mais enunciados, que serão divulgados na altura própria e que conterão os detalhes dos requisitos e regras aplicáveis.
  • Está sujeito a três momentos de acompanhamento e apresentação, a realizar em aulas indicadas no enunciado. Cada apresentação não realizada acarretará a perda definitiva de parte da valorização do trabalho, a especificar no enunciado. O acompanhamento e a apresentação são realizados na aula do laboratório em que o aluno está inscrito.
  • Os alunos com estatuto de trabalhador-estudante formalmente registado no NONIO podem optar por realizar os momentos de acompanhamento fora da aula, em horário a definir com o professor.
  • A valorização do trabalho pode ser feita segundo dois perfis alternativos: o perfil A, em que o trabalho vale 2,5 valores, e o perfil B, em que vale 4 valores. O exame valerá os restantes valores necessários para perfazer o total de 20 valores.
  • No perfil A, o trabalho vale 2,5 valores e a avaliação compreende apenas os três momentos de acompanhamento, nos quais se verificam o progresso, o cumprimento dos requisitos e os aspetos de qualidade da solução, com maior ênfase no 3.º momento. Após o 3.º momento de avaliação, é comunicada a classificação ao aluno.
  • No perfil B, o trabalho vale 4 valores e implica uma defesa adicional, de natureza semelhante a uma avaliação oral, na qual se averigua detalhadamente o domínio da matéria envolvida. O resultado desta defesa pode baixar a classificação já obtida no 3.º momento de avaliação.
  • Todos os alunos estão, por omissão, no perfil A. No final do 3.º momento de acompanhamento, o aluno pode optar por passar para o perfil B. Se o fizer, deverá inscrever-se num horário para a defesa, sendo a classificação final do trabalho determinada a partir da classificação que já possui e da prestação na defesa.
  • A opção pelo perfil B é individual, mesmo no caso de trabalhos realizados por grupos de dois alunos. A passagem para o perfil B é voluntária, mas definitiva.
  • Trabalhos de anos anteriores: podem ser aproveitados os trabalhos realizados no ano letivo de 2025/2026, e apenas esses. A participação num momento de acompanhamento do trabalho do presente ano letivo elimina a possibilidade de optar pelo aproveitamento do trabalho do ano anterior.O aproveitamento do trabalho do ano anterior é valorizado em 4 valores.
  • Presume-se que os alunos que não entreguem trabalho nem optem pelo aproveitamento do trabalho do ano anterior se encontram no perfil A, perdendo, por isso, os 2,5 valores correspondentes ao trabalho prático.

Exame:

  • Prova escrita, a realizar nas épocas regulamentares e nas datas definidas pela Escola.
  • O exame vale os restantes valores necessários para perfazer o total de 20 valores, em função do perfil de trabalho prático do aluno.
  • A classificação do exame está sujeita a uma nota mínima de 35%.
  • No exame, os alunos têm acesso apenas aos materiais estipulados pelos docentes.
  • Poderá ser necessária a inscrição para participação no exame da época normal. Esta inscrição não substitui a inscrição na disciplina ou no exame efetuada nos Serviços Académicos e destina-se apenas à otimização da atribuição de salas e vigilantes.

Validação oral:

  • Qualquer ato de avaliação poderá ser sujeito a validação oral. A realização desta prova será determinada pelos docentes, podendo abranger qualquer ato de avaliação, incluindo exames, e ser aplicada a todos ou apenas a parte dos alunos. A sua realização será comunicada aos alunos envolvidos.

    Estágio(s)

    NAO

    Bibliografia

    Referências principais

    Brokken, F. B. (2024).  C++ Annotations Version 13, University of Groningen publishing, http://www.icce.rug.nl/documents/cplusplus/   –  Online

    Stroustrup, B. (2000). A linguagem de programação C++, Bookman – 1ª-1-359

     

    Referências complementares

    Lippman, S.B., Lajoie, J., Moo B. E. (2013).  C++ Primer (5th ed.), Addison-Wesley

    Eckel, B. (2000). Thinking in C++  Vol.1 (2nd ed.), Prentice Hall Inc., http://www.bruceeckel.com/  –  1A-1-380 / Online

    Deitel, P. J., Deitel, H. M. (2010). C++ How to Program (7th edition), Prentice Hall Inc. – 1A-1-425