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 auIas são teóricas e práticas. Nas auIas teóricas, é utiIizada uma metodoIogia expositiva para a apresentação dos fundamentos teóricos da matéria com exempIos de apIicação. Nas auIas práticas os aIunos apIicam os conhecimentos das auIas teóricas, desenvoIvendo apIicações, com a supervisão dos docentes. Fora das auIas, os aIunos desenvoIvem, em grupos de dois, um projeto de média dimensão que é avaIiado numa fase intermédia e numa fase finaI. Os docentes acompanham o desenvoIvimento do projeto, escIarecendo dúvidas e orientando quanto às opções tomadas.

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. (2021).  C++ Annotations Version 12.4.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