Objectivos
Os principais objectivos desta disciplina são:
- Dotar os alunos com aptidões para decomporem, modelarem (de uma forma
simples) e codificarem problemas computacionais segundo o paradigma de
orientação por objectos (POO).
- Sensibilizá-los, através de exemplos práticos, da importância actual
deste paradigma.
Para tal, serão introduzidas as características gerais da programação
modular e da POO, noções introdutórias de modelação em UML e apresentada de
uma forma exaustiva a linguagem C++.
Programa
-
Introdução
- Motivação e enquadramento: "porquê objectos?", "quais os conceitos
realmente novos e distintos?", "que vantagens tem esta tecnologia?".
- Tipos abstractos.
- Conceitos principais: encapsulamento, herança, polimorfismo; classes
e objectos; métodos e dados; interfaces e implementação.
- Modelação usando a linguagem gráfica UML (Unified Modeling
Language): Componentes básicos da UML; diagramas de classes;
generalização e especialização; herança simples e múltipla; várias
alternativas para a herança (delegação, agregação, programação
genérica); associação e agregação; diagramas CRC
(Class-Responsibility-Collaboration); diagramas de colaboração e de
sequência.
- Regras básicas de construção de software orientado por objectos.
- Vantagens/Dificuldades da programação orientada por objectos.
-
Programação por Objectos em C++
- Conceitos principais: classes e objectos (encapsulamento); herança e
polimorfismo.
- Novas possibilidades: entrada e saída de dados, sobrecarga de nomes
de funções; valores, ponteiros e referências; argumentos por defeito;
operadores new e delete.
- Classes e objectos: atributos e métodos; sobrecarga de nomes de
métodos; palavras chave inline, this, const e friend; construtores e
destrutores; atributos e funções estáticas; alocação estática e
visibilidade restrita.
- Herança: classes base e derivadas; polimorfismo dinâmico e funções
virtuais; chamada de funções virtuais e tabelas virtuais; ponteiros para
classes; classes abstractas; herança múltipla; classes base virtuais.
- Sobrecarga de operadores (operator overloading).
- Modelos (Templates): modelos para funções e para classes; passagem
de operações como argumentos da função; modelos e herança; modelos para
listas ligadas (list templates); iteração; contentores.
- Tratamento de excepções: ideias e regras gerais; as palavras chave
throw, try e catch; tipos de excepções e herança de excepções; as
funções pré-definidas terminate e unexpected; passagem de excepções como
valor, ponteiro ou referência (o processo "stack unwinding", smart
pointers).
- Complementos sobre a entrada e saída de dados: biblioteca iostream;
estados de streams; formatação; ficheiros e cadeias de caracteres
(string).
-
Um exemplo complexo: The Mark IV Special Coffee Maker - Robert C. Martin
Designing Object-Oriented C++ Applications Using the Booch Method,
Prentice Hall, 1995, pp. 60-105.
-
Outras Linguagens de Programação Orientadas por Objectos.
|