5.18k likes | 5.36k Views
Curso Professional. Lucas Euzébio Machado. Tópicos do Curso. C++, Algoritmos e Estruturas de Dados (36) Computação Gráfica (36) Programação Distribuída (6) Física (6) Inteligência Artificial (6) Fundamentos de Programação de Jogos (6) Projeto Final (24).
E N D
Curso Professional Lucas Euzébio Machado
Tópicos do Curso • C++, Algoritmos e Estruturas de Dados (36) • Computação Gráfica (36) • Programação Distribuída (6) • Física (6) • Inteligência Artificial (6) • Fundamentos de Programação de Jogos (6) • Projeto Final (24)
Tópicos para C++, Algoritmos e Estruturas de Dados • Variáveis, Ponteiros, Referência, Alocação e Liberação de Memória • Testes de condições • Loops • Funções • Módulos, Compilação e Link-Edição • Orientação a Objetos • Classes e Structs • Encapsulamento, Herança e Polimorfismo • Construtores e Destrutores • Exceções • Funções e Variáveis estáticas • Recursão • Lista Encadeada, Fila e Pilha • Árvore Binária • Grafo • Hashtable • Templates • Operator Overloading • Lendo e Gravando Arquivos • Multithreading
Ponteiros • Ponteiros são variáveis que armazenam endereços de memória.
Variáveis de referência • Referências servem como um segundo nome para um objeto. Elas permitem acesso indireto de forma semelhante a ponteiros.
Alocação de Memória • Para alocar memória da heap:
Vetores • Vetores são agregações de elementos de um mesmo tipo que ocupam a memória de forma sequencial e adjacente.
Vetores • Uma variável vetor armazena na realidade o endereço de memória do primeiro elemento do vetor.
Vetores • Vetores podem ser multidimensionais
Loops • Instruções usada para causar repetições de trechos de código
Exercício • Crie um programa que gera um buffer de inteiros de 10 posições. Cujos valores sofrem um decremento de 10 até 1. • Adicione um trecho de código que busca pelo numero 4 no vetor e salva o endereço da posição do vetor em um ponteiro.
Exercício • Crie um programa que crie uma matriz 4x4 identidade usando um buffer bidimensional.
Funções • Funções são subprogramas que realizam operações definidas por usuários. • Ferramenta fundamental para redução de complexidade e reuso de código. • Em qualquer projeto, funções serão utilizadas sem que se conheça suas implementações internas.
Exercício • Crie uma função que adiciona dois vetores de 4 elementos e retorna o resultado em um terceiro vetor
Módulos, Compilação e Link-Edição • Módulos permitem a divisão de um sistema em diferentes partes, cada uma responsável por uma tarefa específica. • Um módulo para nós será definido como um .h e um .cpp. • O arquivo .h possui declarações. • O arquivo .cpp possui implementações.
Exemplo de um modulo Vector3.h Vector3.cpp
Usando Módulos • Ao usar include é incluído todo o arquivo de texto na linha chamada.
Compilação • Ao compilar um arquivo de implementação .cpp é gerado um arquivo .obj com código binário e tabelas com referências externas ainda não resolvidas e símbolos públicos.
Link-Edição • A link edição resolve referências externas e junta todo o código em um só código binário gerando assim o arquivo executável.
Exercício • Implemente um módulo Vector4.h e Vector4.cpp que possui as funções de adição, subtração e multiplicação de vetores de 4 elementos e salvando o resultado em um outro vetor. • Crie um arquivo .cpp com a main e inclua o header do Vector4.h. Compile ambos arquivos .cpp e gere o executável.
Orientação a Objeto • Um objeto é uma entidade(podendo se basear em algo concreto ou abstrato) que possui um comportamento ou representa algo. • Você interage com um objeto através de uma interface formada por funções. Isso permite uma interação bem comportada. • A divisão de um sistema em objetos permite uma enorme redução em complexidade e aumento em reusabilidade.
Classes • Objetos são representados em software através de classes
Encapsulamento • Apenas os membros públicos de uma função podem ser acessados por outros objetos.
Encapsulamento • Fundamental para redução de complexidade. • Você chama um método de uma classe e um problema é resolvido para você. Não há necessidade de saber como o problema foi resolvido. • Permite interação comportada. Como você controla o acesso às variáveis através de funções não é possível partes externas do programa agirem de forma errada com suas variáveis.
Exercício • Implemente a classe AIManager. Essa classe possui duas funções. AddObject e Think. A função AddObject recebe uma string com um nome, uma posição x e uma posição y. A função Think mostra na tela os objetos adicionados.
Herança • Certos objetos compartilham características porém possuem particularidades suficientes de forma que precisam de novos objetos para serem apropriadamente representados.
Herança • O objeto Person e o objeto Stone são ambos objetos de cena que podem ser desenhados na tela. Então ambos podem pertencer à mesma classe de objetos SceneObject. • Se por exemplo um SceneObject possuir uma posição 3d. Tanto Person quanto Stone possuirão essa variável de posição pois a posição é uma variável que existe em todo objeto da classe SceneObject.
Exercício • Reimplemente o exercício anterior fazendo o AIManager ter funções para adicionar Dragon e Orc que são classes derivadas de AIEntity. A classe AIEntity possui membros públicos para armazenar um nome e uma posição x e y. • A classe Dragon tem uma string com o tipo de baforada do dragão e a classe Orc possui um inteiro que indica a arma sendo usada. • Implemente a função Think para tratar dos tipos específicos e desenhar suas partes específicas.
Polimorfismo • Quando um conjunto de classes deriva de uma mesma classe base, todo o conjunto compartilha uma interface. • É possível escrever partes de código levando em consideração apenas classes base de determinados objetos. • Isso é vantajoso para aumentar o reúso no código.
Exercício • Reimplemente o AIManager para receber objetos AIEntity. Crie uma função virtual pura em AIEntity chamada Think que imprime os dados da entidade. Faça a classe Orc e Dragon implementarem a função Think. • Mude o AIManager para fazer uso das funções Think dos objetos.
Construtores e Destrutores • Construtores são métodos de uma classe chamada para “construir” a classe. Todo objeto criado tem seu construtor chamado.
Construtores e Destrutores • É possível definir diferentes tipos de construtores
Construtores e Destrutores • Destrutores fazem o trabalho inverso dos construtores. Eles fazem a destruição do objeto, liberando recursos adquiridos como memória alocada, arquivos abertos, etc.
Construtores e Destrutores • Em classes base use destrutores virtuais. Ao deletar um objeto usando um ponteiro base o comportamento é indefinido caso o destrutor da classe base não seja virtual.
Exceções • Eventos anormais são normais. • Programas executam normalmente até que algum problema ocorra como falta de memória, acesso à uma área de memória ilegal, etc etc etc etc etc etc etc etc etc etc..... • É possível testar esses problemas ou exceções usando ifs ou fazendo uso de ferramentas de C++ criadas específicamente para tratar de exceções.
Exceções • Ao detectar uma anomalia, você gera uma exceção através da operação throw.
Exceções • Um exceção é uma classe
Exceções • Para capturar uma exceção deve-se usar o operador try e catch.