Agenda do Curso
-
20/02
- A disciplina
- O assunto
- Complexidade de softwares atuais
- Ciclo de vida de um software
- Histório de técnicas de programação
- Programação estruturada
- Orientação a objetos: encapsulação
21/02
- Mais sobre orientação a objetos:
- Composição
- Herança
- Polimorfismo
- O sistema binário
-
27/02
- Números em complemento de 2
- Ponto flutuante (IEEE-754)
- Ferramentas necessárias:
- Editor de código (sugestões: VSCode, Atom, emacs, vim)
- Compiladores (g++ e clang++)
- clang-tidy
- clang-format
- Exemplos de programas simples em C++
- Programa vazio
- Saudação
- Sintaxe básica:
- blocos
- comandos (terminados por ponto-e-vírgula)
- comentários
- Tipos e declaração de variáveis
- tipos básicos
- declaração de variávies
- constantes literais
- inicialização
28/02
- Conversão automática de tipos
- Dedução automática de tipos (auto)
- std::string e std::vector
- Operadores:
- Aritiméticos
- Atribuição
- Comparação
- Lógicos
-
05/03
- Operadores:
- Operadores bit a bit
- Auto-incremento e auto-decremento
- Estruturas de controle
- Predicados (pré-condições, pós-condições, invariantes)
- Condicionais
- Repetições
06/03
Três exemplos de programas com repetições (veja abaixo).
-
12/03
Exemplos de loop (ver abaixo)Exercícios.13/03
- Entradas e saídas
- Funções:
- Usos
- Definição
- Parâmetros e valores de retorno
- Parâmetros de referência
-
19/03
Primeira aula em videoconferência.
Tópicos:
- Protótipos de funções
- Parâmetros com valores assumidos
- Retorno de múltiplos valores
20/03
- Pliha de execução e a criação de variáveis. Relação com recursão.
- Sobrecarga de nome de função.
- Início da parte de funções anônimas.
Me esqueci de ligar a gravação da aula.
-
26/03
- Compilação separada
- Término da apresentação de funções lambda
27/03
Desenvolvimento de um código para cálculo de primos usando o crivo de Eratóstenes (código abaixo).
O código pode ser melhorado, tanto no cálculo dos primos como na formatação da saída.
-
02/04
Alguns tipos definidos pelo usuário
- Sinônimos
- Tipos enumerados
- Tipos estruturados
03/04
Exemplo: Uma implementação inicial de números racionais (código abaixo).
-
09/04
Semana Santa. Não há aula.
10/04
Semana Santa. Não há aula.
-
16/04
- Problemas com a separação entre dados e funções associadas.
- Invariante de objeto e encapsulação.
- Classes
- Construtores
17/04
- Inicialização de membros
- Métodos inline
- Funções amigas
-
23/04
- Exemplo de desenvolvimento de tipo de dados com encapsulação: Scoreboard
- Ponteiros brutos
24/04
Ponteiros inteligentes (smart pointers)
-
30/04
- Sobrecarga de operadores
- Conversão automática:
- De outro tipo para o seu tipo
- Do seu tipo para outro tipo
- Leitura e escrita com sobrecarga dos operadores de inserção e extração
- A palavra-chave this
01/05
Dia do Trabalho. Não há aula.
-
07/05
Términno do material de sobrecarga de operadores.
- Operador de indexação
- Operador de chamada de função
- Operadores de auto-incremento e auto-decremento
- Operadores de atribuição
08/05
Continuação do exemplo de sobrecarga de operadores para a classe Racional.
-
14/05
Início do desenvolvimento de um programa simples de jogo da velha.
15/05
Continuação do programa de jogo da velha.
-
21/05
Continuação do programa de jogo da velha
- Detecção de resultado e mensagem apropriada.
- Um método melhor de escolha de casas pelo computador
- Início da implementação da escolha de casas pela estratégia minmax.
22/05
Término do jogo da velha:
- Implementação da estratégia minmax.
- Algumas pequenas alterações
O código anexo é um pouco diferente do que fizemos na aula. Além de reorganização da ordem das funções e comentário, simplifiquei um pouco algumas duplicações de código.
-
28/05
Gerenciamento de recursos:
- Destruidor
- Construtor de cópia
- Operador de atribuição
- Construtor de movimento
- Operador de movimento
29/05
- Demonstração dos problemas com gerenciamento de recursos.
- Exemplo de leitura da documentação online (std::string).
-
04/06
Herança e polimorfismo:
- Composição
- Herança
- Hierarquias de classes
- Polimorfismo
- Compatibilidade de referências
- Métodos virtuais
- Herança múltipla
05/06
Continuação do exemplo de código com herança e polimorfismo.
Início de um exemplo com construtores e destruidores junto com herança.
-
11/06
Corpus Christi. Não há aula.
12/06
Recesso. Não há aula.
-
18/06
Templates
19/06
Lidando com erros, parte 1: Ignorar ou interromper execução.
-
25/06
Lidando com erros, parte 2:
- Estabelecendo pré-condições
- Retornando um código de erro.
- Colocando um código de erro em variável global.
- Retornando uma tupla com valor de retorno original + código de erro.
- Usando std::optional
- Usando tratamento de exceções
26/06
- Containers, iteradores e algoritmos
- std::vector
-
02/07
- Outros containers: array, forward_list, list, stack, queue, deque, map e set
- Alguns algoritmos de <algorithm>
03/07
- Mais alguns tópicos da biblioteca padrão de C++
- Término das aulas