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ãesMé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