Planeamento
Aulas Laboratoriais
AP01: Análise, modelação e implementação de tipos abstractos de dados em C
Exercícios Práticos: Animal simples.
Exercício de Avaliação.
AP02: Análise, modelação e implementação de classes simples em Java
Exercícios Práticos: Gato simples.
Exercício de Avaliação.
AP03: Análise, modelação e implementação de classes com herança.
Exercícios Práticos: AndGate2; AndGate3 (com herança); Energia v2.0: Cão, Gato, Rato e Pássaro (com herança).
Exercício de Avaliação.
AP04: Concepção, Modelação e Implementação em Java
Utilização dos conceitos abordados até à data: classes, herança, polimorfismo, composição, packages, redefinição de métodos, entre outros.
Exercício Prático: 'Arabian Nights' - herança (Genie, FriendlyGenie, GrumpyGenie e RecyclableDemon), redefinição de métodos e composição.
Exercício de Avaliação.
AP05: Interfaces, classes abstractas e Polimorfismo
Exercícios Práticos: Predadores e Presas; Procura num Vector com Predicados de Selecção - Table, SelectionPredicate, GreaterThan e EqualTo.
Exercício de Avaliação.
AP06: Comparação de objectos e Iteração de Colecções
Exercícios Práticos: Extensão de classes por implementação da interface java.lang.Comparable<T>. Implementação de classes (internas) auxiliares java.util.Comparator<T> e java.util.Iterator<E>.
Exercício de Avaliação.
AP07: Uso de excepções e colecções
Exercícios Práticos: Caderneta de Cromo (Coleções) e Arabian Nights (uso de Excepções)
Exercício de Avaliação.
AP08: Entradas e Saídas de dados em Java (I/O)
Exercícios Práticos: Entradas (Input) e Saídas (Output) de dados - leitura e escrita de ficheiros de texto, de dados e de objectos; Serialização de objectos em Java. Excepções associadas.
Exercício de Avaliação.
AP09: Padrão de Desenho 'Composite'
Exercícios Práticos: Verifier - NonZeroLength, LengthIsOdd, LengthIsOdd, LengthGreaterThan, LengthLesserThan, LengthEqualTo, IntegerComparisonOperator, And, Or, BinaryOperator, Not,UnaryOperator; Cobrador de Impostos - Contribuintes Individuais (Pessoas e Empresas), Regiões Geográficas (Províncias, Distritos e Cidades); Construção e Visualização de Páginas - Imagens, Blocos de Texto, Parágrafos, Página.
Exercício de Avaliação.
AP10: Padrões de Desenho 'Strategy' e 'State'
Exercícios Práticos: Ordenação de Collection<T> através do método Collections.sort e de classes T Comparable<T> e classes auxiliares Comparator<T> - CatAgeComparator; Semáforo e seus estados -TrafficLight, State, Red, Yellow, Green, Blink e Panic.
Exercício de Avaliação.
AP11: Padrão de Desenho 'Visitor'
Exercício Prático: Cálculo de Impostos - TaxPayer, Person, Company, Region, FriendlyIRS, VanillaTaxes, BecauseWeCare.
Exercício de Avaliação.
AP12: Padrões de Desenho 'Decorator' e 'Adapter'
Exercício Prático: Textos Formatados: Span, Bold, Italic e Underline; Stream de Cats: CatOutputChannel que adapta java.io.DataOutputStream.
Exercício de Avaliação.
AP13: Diagramas de sequência UML
Exercício Prático: Diagramas de sequência - Page, Book, Album, Paragraph, Image e Printable; GhostInTheShell: Shell, Ghost, A, B e C.
Exercício de Avaliação.
AP14: Aula de dúvidas
Aula destinada ao esclarecimento de dúvidas sobre a matéria leccionada durante o semestre.
Aulas Teóricas
Aula T01: Apresentação da Disciplina; Introdução
Apresentação da disciplina: objectivos; programa; avaliação. Apresentação de alguns requisitos. Introdução aos objectos e à programação com objectos. Tipos de dados abstractos e "objectos" em C. Evolução para objectos em C++ e Java. Exemplos: http://goo.gl/YIgjF
Aula T02: Introdução aos Objectos
O que é um objecto? Tipos: introdução. Tipos básicos e tipos compostos. Aspectos de abstração e de captura de características. Definição de classe simples: conceitos de variável e método. Classe "Object". Exemplos simples. Métodos "equals", "toString", "hashCode" e o processo de redefinição. O processo de construção (construtores) e de destruição (GC e "finalize" em Java e destrutores em C++). Paralelo com o processo de gestão de memória e inicialização em C (malloc/free). "Overloading" de métodos. Múltiplos construtores. Cuidados na escrita de destrutores.
Aula T03: Herança, Polimorfismo, UML
Introdução à herança. A relação is-a. Discussão de aspectos relacionados com a modelação de hierarquias de classes. Os problemas da reutilização e do desenvolvimento incremental. Exemplos simples: classe Animal e subclasses. Métodos e classes abstractas. Interfaces e implementações. A relação has-a. Representação UML para relações de herança e associações. Polimorfismo de inclusão: introdução.
Aula T04: Herança e Polimorfismo; Composição; Abstracção
Construção de objectos na presença de herança ("this" e "super"). Cadeias de chamada de construtores na hierarquia de classes. Processos de inicialização com herança simples (Java e C++) e múltipla (C++). Continuação da discussão dos aspectos do polimorfismo. Early binding (static) e late binding (dynamic): selecção do método a invocar; discussão de aspectos de binding em várias linguagens (Java, C++). Polimorfismo e organização de código. Controlo de acesso e impacto na redefinição/chamada de métodos e acesso a atributos e métodos: public, protected, private, friend (C++), "package" (Java) (apenas aspectos introdutórios). Aspectos introdutórios de abstracção. Reutilização de código da superclasse ("super" em Java; explicitação em C++). A palavra chave "virtual" em C++. Exemplos simples. Composição vs. herança.
Aula T05: Organização de Código
Packages em Java. Bibliotecas. Localização de classes: CLASSPATH (Java). Carregamento e inicialização de classes (máquina virtual Java). Controlo de acesso: public, protected, private, "package" (Java). Espaços de nomes em C++ (namespace). Diferenças entre os métodos de organização (import vs. #include). Desambiguação de nomes. Herança na presença de fronteiras de packages.
Aula T06: Revisões; Apresentação do Projecto
Revisões sobre os conceitos iniciais. Modelação, herança, polimorfismo, binding, overriding e overloading de métodos. Aspectos específicos de Java e C++. As palavras chave "final" e "const". Esclarecimento de dúvidas. Apresentação preliminar do projecto.
Aula T07: Polimorfismo, Classes Abstractas e Interfaces
Separação de interface e implementação. Noção de interface. Princípios e propriedades. Polimorfismo e interfaces. Exemplos simples. Exemplo: interface Comparable (Java). Classes abstractas vs. interfaces. Discussão de aspectos problemáticos. Interfaces e implementações. Exemplo: Cão, Vigilante, CãoDeGuarda, CãoPastor, Chihuahua, Robot, XP e XP2003.
Aula T08: Classes Internas
Organização de interfaces e classes e acesso ao código. Classes internas e os vários aspectos de definição: classes internas simples; implementação de interfaces. Partilha de acesso entre classe externa e interna. Ligação implícita entre objectos de classes internas e a instância da classe externa. Sintaxe. Classes internas locais (métodos e blocos). Classes anónimas. Exemplos ilustrativos dos tópicos apresentados: Gato e Estômago. Discussão. Revisões de conceitos de modelação.
Aula T09: Revisões
Revisões sobre conceitos de herança, redefinição e despacho (binding) de métodos. Exemplos simples em C++ (para demonstrar os aspectos de early binding). Paralelo com Java. Esclarecimento de dúvidas sobre aspectos relacionados do projecto.
Aula T10: Classes Internas; Classes Paramétricas/Genéricas
Classes internas e implementação de interfaces. Separação de interfaces e implementações. Introdução à programação paramétrica. Exemplo de lista, iteradores. Exemplo de utilização de iteradores. A interface Iterable e o uso de foreach: iteração implícita. Apresentação e discussão de exemplos básicos. Utilização de comparadores (ordem natural em Java). Apoio ao projecto.
Aula T11: Excepções (Java); Enumerações (Java)
Introdução às excepções. Uso do mecanismo de excepções no controlo da execução de programas. Mecanismo de excepções em Java. Excepções e erros. Classes de suporte às excepções: Throwable, Exception, Error. Tipos de excepções: checked exceptions (verificadas em tempo de compilação) e excepções durante a execução (RuntimeException). Hierarquias de excepções. Cadeias de excepções. Apresentação e discussão de exemplos. Exemplos simples de utilização de excepções. Uso de finally. Enumerações. Enumerações em Java e uso de classes internas. Exemplos (Estações, Planetas). Apoio ao projecto.
Aula T12: Organização de Objectos em Colecções
Organização de objectos em colecções. Apresentação de interfaces de topo na hierarquia das colecções em Java: Collection, Set, List. Critérios para selecção de estruturas de dados. Breve comparação com as bibliotecas de C++ (STL) (contraste e semelhanças de desenho e filosofia). Apoio ao projecto.
Aula T13: I/O Java
Introdução às entradas e saídas em Java. Conceitos abstractos de topo. Modelo geral de entradas e saídas. Mecanismos de entradas e saídas em Java. Streams, Readers, Writers. Composição de canais: uso dos padrões de desenho Decorator e Adapter. Serialização de tipos primitivos e de objectos: interfaces Serializable e Externalizable. Elementos não serializáveis: a palavra chave transient. Excepções associadas a entradas e saídas. Apresentação e discussão de exemplos. Apoio ao projecto.
Aula T14: Fábricas Simples; Introdução à RTTI; Revisões
Fábricas simples (conversão de strings em objectos). Aplicação ao projecto, na sequência do processamento do ficheiro de entrada para interpretação e armazenamento (revisões de colecções e canais de I/O Java). Introdução à classes da representação de tipo em tempo de execução (reflexão: java.lang.reflect). Exemplo de fábrica simples com reflexão. Discussão de vantagens e inconvenientes (relativamente a uso de if-then-else). Sugestões para desenvolvimento do projecto: String.split. Revisões.
Aula T15: UML: Diagramas de Classe (revisões) e de Sequência; Introdução aos Padrões de Desenho
UML: revisão sobre diagramas de classes. Diagramas de sequência: princípios e conceitos. Apresentação e discussão de casos. Introdução aos padrões de desenho: catálogos de padrões, cuidados na selecção e utilização. O padrão de desenho Singleton. Discussão. Breve revisão sobre o padrão Command e a sua relação com o projecto.
Aula T16: Composite
Composite (padrão de desenho). Princípios, estrutura, propriedades, aplicações, aspectos positivos e negativos. Exemplo: rebanhos e ovelhas; entradas (projecto). Apoio ao projecto. Revisões.
Aula T17: Strategy e State (padrões de desenho)
Padrão de desenho Strategy. Príncipios, estrutura, propriedades, aplicações, vantagens, inconvenientes. Apresentação e discussão de exemplos práticos: tabela e predicados, comparadores. Discussão sobre a aplicabilidade do padrão. Padrão de desenho State. Príncipios, estrutura, propriedades, aplicações, vantagens, inconvenientes. Apresentação e discussão de exemplos práticos: porta automática, cartão de compras. Discussão das semelhanças e diferenças entre os dois padrões.
Aula T18: Revisões
Revisões gerais da matéria. Preparação para o 1º teste. Apoio ao projecto.
Aula T19: Visitor (padrão de desenho)
Visitor: princípios, estrutura, propriedades, aplicações, vantagens, inconvenientes. Apresentação e discussão de exemplos práticos: árvore sintáctica. Discussão de aspectos relativos à aplicabilidade ao projecto.
Aula T20: Visitor (cont.), Factory Method, Abstract Factory (padrões de desenho); Null Objects
Continuação da aula anterior. Exemplo completo de uso do padrão Visitor. Padrões de desenho Factory Method e Abstract Factory. Relação entre os padrões. Princípios, estrutura, propriedades, aplicações, vantagens, inconvenientes. Apresentação e discussão de exemplos práticos: aula com professor e alunos; ambiente de jogo; compilador. Revisões sobre padrões de desenho. Discussão de aspectos potencialmente ambíguos na utilização de padrões de desenho. Constraste entre padrões semelhantes. Null Object: estrutura, propriedades, aplicações, vantagens, inconvenientes. Discussão de exemplos.
Aula T21: Decorator & Adapter (padrões de desenho)
Decorator & Adapter: princípios, estrutura, propriedades, aplicações, vantagens, inconvenientes. Apresentação, contraste e discussão de exemplos práticos: entradas e saídas em Java; elementos de página. Adaptação de classe e de objectos. Apresentação e discussão de exemplos simples: pato e peru; streams e readers. Apoio ao projecto.
Aula T22: Apoio ao projecto
Apoio ao projecto.
Aula T23: Template Method; Façade (padrões de desenho);
Padrão de desenho Template Method. Príncipios, estrutura, propriedades, aplicações, vantagens, inconvenientes. Apresentação e discussão de exemplos práticos. Aplicação e cenário de refactorização: Cafe, Chá, BebidaQuente. Comparação com uso simples de herança. Génios revisitados. Façade: princípios, estrutura, propriedades, aplicações. Discussão de casos práticos. Aplicação ao projecto.
Aula T24: Teste prático
Realização do teste prático do projecto.
Aula T25: Observer; Proxy (padrões de desenho)
Padrão de desenho Observer: princípios, estrutura, propriedades, aplicações, vantagens, inconvenientes. Apresentação e discussão de exemplos práticos: estação meteorológica; produtos, consumidores e fornecedores. Discussão. Padrão de desenho Proxy. Princípios, estrutura, propriedades. Apresentação e discussão de exemplos práticos: desenho de imagens.
Aula T26: Bridge (padrão de desenho); Apresentação da resolução do projecto
Padrão de desenho Bridge: princípios, estrutura, propriedades, aplicações. Apresentação e discussão de exemplos práticos: aplicações gráfica e ambiente gráfico. Comparação e discussão. Apresentação da resolução do projecto. Discussão de opções.
Aula T27: Avaliação do Projecto
Avaliação do projecto. Atendimento de alunos.
Aula T28: Avaliação do Projecto
Avaliação do projecto. Atendimento de alunos.