Programação e Desenvolvimento de Software
Índice das Aulas
-
03/03 - Introdução
-
05/03 - Modelo de Memória
-
10/03 - Tipos Abstratos de Dados
-
12/03 - Boas Práticas de Programação
-
17/03 - Listas e Árvores
-
19/03 - Depuração de Código
-
24/03 - Exemplos de TADS
-
26/03
- Aula de exercícios
-
31/03 - Programação Orientada a Objetos
-
02/04 - Modelagem de Software
-
07/04 - Classes
-
09/04 - Encapsulamento
-
14/04 - Herança e Composição
-
16/04
- Aula de Revisão
-
21/04
- [Prova]
-
23/04 - Polimorfismo Paramétrico
-
28/04 - Polimorfismo de Sobrecarga
-
30/04 - Classes Abstratas
-
05/05 - Modularização de Código
-
07/05 - Construtores e Destrutores
-
19/05 - Tratamento de Exceções
-
14/05
- Aula de Exercícios
-
12/05 - Teste de Software
-
21/05 - Desenvolvimento Orientado a Testes
-
26/05 - Princípio da Substituição de Liskov
-
28/05 - Herança versus Composição
-
21/05 - Padrões de Projeto
-
02/06 - Funções de Alta Ordem
-
09/06
- Aula de Revisão
-
11/06
- [Prova]
Introdução
Conceitos que devem ser entendidos:
- Objetivos da disciplina
- Critérios de Avaliação
- A linguagem C++
Para saber mais:
Modelo de Memória
Conceitos que devem ser entendidos:
- Como C++ organiza a memória
- ponteiros
- passagem de parâmetros
Para saber mais:
Tipos Abstratos de Dados
Conceitos que devem ser entendidos:
- O conceito de TAD
- Implementação em C++ usando structs
- Contratos de software
Para saber mais:
Boas Práticas de Programação
Conceitos que devem ser entendidos:
- Características de um bom código
- Escolha de nomes
- Controle de Versão
Para saber mais:
Listas e Árvores
Conceitos que devem ser entendidos:
- Listas encadeadas
- Listas duplamente encadeadas
- Árvores
Para saber mais:
Depuração de Código
Conceitos que devem ser entendidos:
- Tipos de erro em C++
- Estratégias de depuração
- Uso de um depurador
Para saber mais:
Exemplos de TADS
Conceitos que devem ser entendidos:
- Bibliotecas vs Arcabouços
- A biblioteca padrão C++
- O reúso de código
Para saber mais:
Aula de exercícios
Conceitos que devem ser entendidos:
- Histogramas de caracteres
- Conjuntos implementados como bitmaps
- Implementação recursiva de árvores
Para saber mais:
Programação Orientada a Objetos
Conceitos que devem ser entendidos:
- Existem diferentes paradigmas de programação
- em POO o dado sabe fazer coisas
- POO facilita encapsulamento de dados
Para saber mais:
Modelagem de Software
Conceitos que devem ser entendidos:
- Diferentes formas de modelagem
- User stories
- Modelagem CRC
Para saber mais:
Classes
Conceitos que devem ser entendidos:
- Classe é a implementação de um TAD
- Objetos são instâncias de classes
- Membros de instâncias e membros de classes
Para saber mais:
Encapsulamento
Conceitos que devem ser entendidos:
- As vantagens do encapsulamento de dados
- Como encapsular dados em C++
- Inicialização de dados
Para saber mais:
Herança e Composição
Conceitos que devem ser entendidos:
- Superclasses e subclasses
- Implementação de herança simples e múltipla
- Escopo de dados herdados
Para saber mais:
Aula de Revisão
Conceitos que devem ser entendidos:
- Como usar TADs simples (map, vector, set)
- Como implementar um TAD
- Invocação Dinâmica de Métodos
- Reúso via Herança
- Diagrama de Classes (UML)
- Diferentes mecanismos de encapsulamento
Para saber mais:
Prova
Dicas para ir bem na prova:
- Leia as notas de aula
- Faça todos os VPLs
- Estude C++
Polimorfismo Paramétrico
Conceitos que devem ser entendidos:
- Tipos de polimorfismo
- Templates
- Funções Genéricas
Para saber mais:
Polimorfismo de Sobrecarga
Conceitos que devem ser entendidos:
- O conceito de sobrecarga
- O conceito de contrato de tipo
- Sobrecarga de operadores mais comuns
Para saber mais:
Classes Abstratas
Conceitos que devem ser entendidos:
- Classes Abstratas
- Coerção de Tipos
- Informação de Tipos em tempo de execução
Para saber mais:
Modularização
Conceitos que devem ser entendidos:
- O conceito de módulo de software
- Uso do Makefile
- Espaços de nomes
Para saber mais:
Construtores e Destrutores de Dados
Conceitos que devem ser entendidos:
- Criação de Objetos
- Destruição de Objetos
- Programação por contrato
Para saber mais:
Tratamento de Exceções
Conceitos que devem ser entendidos:
- O conceito de exceção
- Declaração e lançamento de exceções
- Captura e tratamento de exceções
Para saber mais:
Gerência de Memória
Conceitos que devem ser entendidos:
- Construtores
- Criação e destruição de objetos
- Smart Pointers
Para saber mais:
Aula de Exercícios
Conceitos que devem ser entendidos:
Para saber mais:
Teste de Software
Conceitos que devem ser entendidos:
- Tipos de teste
- Arcabouçoes para geração de testes
- Cobertura de código
Para saber mais:
Desenvolvimento Orientado a Testes
Conceitos que devem ser entendidos:
- Programação Ágil
- Teste primeiro
- Refatoração
Para saber mais:
Princípio da Substituição de Liskov
Conceitos que devem ser entendidos:
- Subtipagem Comportamental
- Problemas causados por mal uso de herança
- Como implementar herança corretamente
Para saber mais:
Herança versus Composição
Conceitos que devem ser entendidos:
- Quando usar herança
- Quando usar composição
Para saber mais:
Padrões de Projeto
Conceitos que devem ser entendidos:
- Problemas recorrentes em programação
- Soluções mais comuns
- Um catálogo de padrões
- Exemplos: Singleton e Command
Para saber mais:
Funções de Alta Ordem
Conceitos que devem ser entendidos:
- Passagem de funções como parâmetros
- Expressões lambda
- Objetos funcionais
Para saber mais:
Prova
Conceitos que devem ser entendidos:
Para saber mais: