Programação Orientada a Objeto com C++ (2023)
Apresentação da Disciplina
LEP - 01447: Programação Orientada a Objeto em C++ (Graduação)
Pré-requisito:
MAT 01207 (Cálculo Numérico) ;
MAT 01102 (Fundamentos da Ciência da Computação) ou
LEP01580 (Fundamentos de Programação em C++).
Créditos: 4
Carga Horária: 68h (4*17)
Horários das aulas
Segunda e quarta das 10:00h às 12:00h
Sala
Sala de aula do LDSC.
Equipamentos
Computadores com sistema operacional Gnu/Linux - Fedora.
Monitoria
Nome do monitor:
Atualmente sem monitor.
Horário de monitoria:
Quinta feira: 10:00 - 12:00 hs
Segunda a sexta: 13:00 - 14:00 hs
Quarta feira: 18:00 - 20:00 hs
Projetos
Projetos disponibilizados no site: github.com/ldsc
Resumo da Ementa
Filosofia, modelagem e conceitos chaves de programação orientada a objeto (POO); Modelagem UML; Engenharia de Software(software ágil); Projeto de Engenharia: i) Ciclo Concepção e Análise (especificação, requisitos, elaboração, AOO - análise orientada a objeto, projeto do sistema, projeto orientado a objeto, testes lógicos), ii) Ciclo Planejamento e Detalhamento (revisão e lista de características), iii) Ciclo Construção (implementação, testes, depuração, manutenção e documentação); História de C++, Modern C++, Sintaxe de C++, tipos, classes, objetos, atributos, métodos, herança, herança múltipla, polimorfismo, sobrecarga de funções e de operadores, conversão de tipos, tipos genéricos (templates), especializações, concepts; A biblioteca de entrada e saída de dados (streams), redirecionamento, acesso a arquivos de disco (filesystem); As classes string, complex e bitset; A biblioteca de gabaritos de C++ (a STL), containers, iteradores, objetos funções e funções genéricas; Noções de processamento paralelo (threads) e de cluster de computadores; Diretrizes de pré-processador, módulos, classes de armazenamento e modificadores de acesso, funções, funções lambda, ponteiros, smarth pointers, referências, estruturas, uniões; Ensino por metodologia tradicional (teoria/aplicação prática) ou através do uso de projetos de engenharia.
Conteúdo Programático
Parte 0- Conceitos básicos de programação:
Revisão de conceitos vistos na disciplina MAT 01102 - FCC ou LEP01580 Fundamentos de Programação em C/C++. A revisão poderá ser feita no formato de videoaulas distribuídos aos alunos e/ou aulas presenciais.
Introdução à programação; Noções de algoritmos; Conceitos básicos de paradigmas de programação; Introdução ao C/C++; etapas de pré-processamento, compilação e linkagem; Classes de armazenamento e modificadores de acesso; Operadores; Estruturas de controle e repetição; Funções; Exemplos aplicados.
Parte I- Programação Orientada a Objeto (POO):
Se destina a transmitir os conceitos básicos de POO, a idéia, a filosofia e a nomenclatura utilizada; Nesta parte descreve-se alguns exemplos de objetos, o que a POO representa em relação ao passado/presente e futuro da programação; Os mecanismos básicos e os conceitos chaves de POO; Apresenta-se conceitos de Engenharia de Software(software tradicional, software ágil, scrum, FDD) e a modelagem orientada a objeto usando UML; Mostra-se como montar os diagramas de uma análise orientada a objeto (AOO) usando a modelagem UML; Apresenta-se as etapas de desenvolvimento de um programa: Ciclo Concepção e Análise (especificação, análise orientada a objeto, projeto do sistema, projeto orientado a objeto) e ciclos de planejamento e detalhamento iterativos de features(implementação, teste, entrega), incluindo a manutenção e a documentação de um software; O uso de sistema de controle de versões (como ex: Git).
Parte II -Programação orientada a objeto usando C++:
Apresenta Modern C++; a programação orientada a objeto em C++; Quais as características de um programa orientado a objeto usando C++; Introdução ao conceito de tipos: o que é um tipo. O uso dos tipos predefinidos de C++, incluindo o consumo de memória e valores limites dos tipos predefinidos, exemplos de uso de caracteres, números inteiros, flutuantes e unsigned. O uso de auto. Usando sufixos para os tipos predefinidos. A definição de tipos do usuário, como vetores no estilo de C, como estruturas, uniões, enumerações.
A classe de strings padrões de C++ a <string>. A classe <vector>. Os tipos definidos em bibliotecas externas. Introdução aos gabaritos - template, e a biblioteca STL. Como manipular os tipos de C++, typedef, size_t(), sizeof(), typeid(), constexpr, consteval. Vantagem da tipificação forte.
Classes em C++: Protótipo, Controle de acesso, Diretrizes de pré-processador, Escopo.
Atributos normais, estáticos e constantes.
Métodos normais, constantes, estáticos e inline. Sobrecarga de métodos.
Como declarar, definir e usar; classes, objetos, atributos e métodos(delete, default, override, final); Como implementar a herança simples, a herança múltipla, o uso do polimorfismo;
A biblioteca-padrão para entrada e saída de dados (a classe ios_base), os manipuladores de <iomanip>, a classe <ios>, a classe <ostream>, a classe <istream> e as classes istringstream e ostringstream localizadas em <sstream>. O uso de format. Como criar e usar objetos da classe <fstream> para acessar arquivos de disco. O uso de redirecionamento de entrada e saída. O acesso a dispositivos externos como a impressora e a saída auxiliar, a criação e uso de arquivos de disco binários. Como executar e enviar comandos para outros programas usando as classes de <pstream.h>. Como manipular sistemas de arquivos com Filesystem. Classes para path, diretórios, iteradores, pipes, etc.
Namespace; Ponteiros, nullptr, smarth pointer(shared_ptr, unique_ptr), referencias, rvalue reference; Funções, funções lambda, std::function, constexpr, static_assert;
A sobrecarga de operadores, a conversão de tipos, o uso de friend, exceções, os tipos genéricos (templates);
Classes matemáticas para tratar números complexos <complex>, a classe <bitset>;
[Apresentação de classes e exemplo básico de programação com interface gráfica usando Qt, inclui entrada e saída e uso de diálogos e gráficos - QCustomPlot].
Parte III- Introdução a STL:
Apresenta-se a Standart Template Library (STL), que é uma biblioteca de objetos em C++; Descreve-se os conceitos básicos de containers e iteradores; Uso de <vector> para vetores, <list> para listas duplamente encadeadas, initializer_list, <queue> que representa uma fila, <stack> que representa uma pilha (como em uma calculadora HP), uma <deque> que é uma fila com duas extremidades e classes para tratamento de conjunto de dados (<pair>, <tuple>, <set>, <multi_set>, <map>, <multi_map> ); Uso de funções genéricas;
Parte IV- Programação multiplataforma com ferramentas de software livre (GNU):
Apresenta as ferramentas de programação da GNU, cobrindo g++, make, automake/autoconf/libtool ou cmake, documentação com doxygen, controle de versões com cvs/git e programas como diff, patch, indent; Como montar bibliotecas estáticas e dinâmicas; Uso das bibliotecas regex, thread; Uso de classes e funções utilitárias como <chrono>.
PS: O item IV e itens dentro de [] são opcionais, sua apresentação depende do desempenho; A avaliação será realizada através de testes, provas e trabalhos de aula; Os exercícios e trabalhos de aula serão relacionados as áreas de métodos numéricos, análise de imagens e de engenharia de petróleo; Fazendo-se um link com as disciplinas de métodos numéricos, análise de imagens e conceitos básicos de engenharia;
Avaliações
Exercícios
O arquivo de apresentação de cada aula inclui uma seção exercícios. Os exercícios passados em uma semana devem ser entregues no primeiro dia de aula da próxima semana (de cada grupo de 3 exercícios o aluno é obrigado a fazer 1. Por exemplo: exercícios 1, 4, 7, 10, 13, etc).
Testes
Os testes são realizados no início da aula e tem duração de até 20 minutos.
Abordam temas já vistos e o material da aula presente. De cada 10 testes a pior nota é desconsiderada.
Provas
Três provas teóricas.
Nas provas são incluídos pontos extras. Mas os pontos extras só serão contabilizados para quem passar na média final, isto é, primeiro calcula a média final, aqueles que passaram terão contabilizados os pontos extras.
Lista de Programas a Serem Utilizados
Material Extra
Material da disciplina (apresentação das aulas), material extra e fontes relacionadas a disciplina são disponibilizados aos alunos via compartilhamento do dropbox.
Site com Softwares:
Apostilas:
Apostila: Modelo de IC/MSC/DSC os arquivos para o modelo podem ser baixados no link Github.
Apostila: Calculadoras Científicas RPN Programáveis - Breve Histórico e Exemplos de Uso.
Veja na página de softwares desenvolvidos um emulador para calculadoras HP.
Apostila: Provas e Provas Resolvidas de C++ versão de 2018 (entre em contato para dados atuais).
Apostila: Metodologia Científica em Engenharia (versão bem preliminar em desenvolvimento, disponibiliza apenas para alunos).
Aulas que podem ser uteis:
Livro
Github:
Github do LDSC: https://github.com/ldsc
Exemplo Software modo terminal: Simulat - Simulador Transf. Calor e Massa em Telhas
Links úteis
Bibliografia
Veja lista de referências bibliográficas em: Bibliografia Programação
Exemplo
No exemplo a seguir, extraído do site cppreference.com, temos o cálculo do polinômio de Legendre.
Exemplo
No exemplo a seguir, temos um extrato de código, a função calcula a autocorrelação de imagens usando múltiplas threads (processamento paralelo).