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)
Estágio(s)
NAO
Bibliografia
Referências principais
Brokken, F. B. (2024). C++ Annotations Version 13.0.0, 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