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

Métodos de Avaliação – PT

 

A avaliação é composta por quatro componentes

i)                    Exame escrito – 11 valores

ii)                  Trabalho prático – 4 valores

iii)                Teste Escrito – 3 valores

iv)                Avaliação em aulas teóricas – 2 valores


i) Exame escrito: peso de 11 valores, de carácter obrigatório, com mínimos. Esta prova inclui as matérias das aulas teóricas e práticas.

  • Podem ser consultados apenas os materiais que tiverem sido previamente autorizados pelo docente.
  • Se o docente indicar um método de inscrição no exame, esta inscrição será obrigatória para aceder ao exame. A inscrição aqui referida não substitui a inscrição nos serviços académicos.
  • O exame tem mínimos de 35%. A não obtenção dos mínimos implica a reprovação.
  • Este exame escrito é o único componente de avaliação que é feito em épocas de exame (época normal, de recurso, especial, etc.). Os restantes componentes são feitos unicamente ao longo das aulas ou no final das aulas.

ii) Trabalho prático: peso de 4 valores, sem mínimos.

  • O trabalho deve ser feito em grupos de até dois alunos. A constituição do grupo é obrigatoriamente definida em plataforma eletrónica, até à data limite especificada no enunciado, após a qual os alunos que não se registaram farão o trabalho individualmente.
  • O trabalho é realizado ao longo do semestre não existindo nenhuma temporização alternativa nem forma de substituição. Se não for realizado, a sua cotação é perdida.
  • É entregue em duas metas: a meta intermédia ou M1, e a meta final ou M2, existindo requisitos específicos para ambas, a definir no enunciado.
  • A meta M1 ocorre a meio do semestre, em data definida no enunciado, e deve ser apresentada pelos alunos, através da qual estes demonstram o cumprimento dos objetivos propostos para essa meta. Da apresentação e da apreciação do trabalho entregue, resultará uma avaliação que, não tendo um peso em termos de nota final do trabalho, determina o acesso dos alunos ao teste. Esta avaliação poderá ser diferente dentro do mesmo grupo. A nota da M1 não condiciona a continuação do trabalho nem o acesso ao exame.
  • A meta 2 ocorre no final do semestre, em data definida no enunciado, e deve ser apresentada pelos alunos, através da qual estes demonstram o cumprimento dos objetivos propostos para essa meta e defendem a sua qualidade. A nota da meta 2 corresponde à nota final do trabalho, podendo ser diferente dentro do mesmo grupo.
  • É aproveitado o trabalho efetivamente realizado no ano imediatamente anterior desde que tenha tido 50% ou mais. Este aproveitamento confere acesso ao teste sem necessidade de apresentação. Este aproveitamento só é feito mediante inscrição em plataforma eletrónica a disponibilizar pelo docente.


ii) Teste escrito: peso de 3 valores, sem mínimos.

  • O teste escrito é realizado a meio do semestre, após a entrega da meta 1 do trabalho prático. O teste é realizado exclusivamente durante o semestre, não sendo substituído em mais nenhum momento de avaliação nem em épocas de exames. A não realização do teste implica a perda da sua cotação. A não realização do teste não impede a realização das restantes avaliações.
  • Tem acesso ao teste os alunos que entregarem a meta 1 do trabalho prático tendo cumprido 50% dos seus objetivos, ou que tenham sido dispensados do trabalho prático, de acordo com o referido no ponto anterior.
  • A matéria do teste incide sobre o conteúdo das aulas teóricas e práticas até à sua realização. Não existe nenhuma restrição quanto ao conteúdo da matéria do exame escrito em função do conteúdo do teste.

 

iv) Avaliação em aula teórica: peso de 2 valores.

  • Em algumas aulas teóricas será uma questão a responder de forma escrita por cada aluno. O conjunto das questões é valorizado para 2 valores, sendo o valor efetivamente obtido pelo aluno proporcional ao número de questões corretamente respondidas face ao total de questões colocadas.
  • A única calendarização das aulas em que serão colocadas questões é: a) na primeira semana não será colocada nenhuma questão; b) haverá no máximo 10 aulas com questão, podendo ser menos. Por semana, um aluno pode aceder, no máximo, a uma questão.
  • Podem responder às questões os alunos que estiverem presentes na aula e nela estiverem inscritos. Os alunos que tiverem o estatuto de trabalhador-estudante reconhecido podem, em alternativa, responder a uma questão adicional no exame da época normal, sendo esta alternativa mutuamente exclusiva: a resposta a uma questão na aula exclui o acesso do trabalhador-estudante à questão adicional no exame.
  • Excluindo o cenário do trabalhador-estudante já referido atrás, as questões em aula teórica não são opcionais: quem não responder perde os valores correspondentes sem qualquer forma de os recuperar.

A nota final da disciplina é o somatório do exame escrito, do teste escrito, do trabalho prático e da avaliação em aulas teóricas.

Os atos de avaliação são presenciais.


    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