Programação Orientada a Objeto com C++ (2024)
Apresentação da Disciplina e Objetivos
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: 3
Carga Horária: 57h (3*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
Comunicação
Classroom da disciplina 2024/1
Telegram da disciplina 2024/1
Objetivos
Após aprovação na disciplina o aluno deve saber:
Desenvolver soluções de softwares utilizando orientação a objetos e modelagem UML.
Usar conceitos básicos e intermediários de C++.
Usar bibliotecas padrões de C++.
Usar compiladores (g++).
Usar sistemas de controle de versões (git/github).
Idealmente já deve ter um rascunho do projeto que será desenvolvido na disciplina de "Projeto de Software Aplicado à Engenharia"
Material de ajuda disponibilizado via github
Repositório com material de ajuda sobre softwares e sistemas utilizados aqui.
Modelos de documentos e projetos
Para uso dos modelos é necessário conhecimentos básicos de git/github/lyx, apresentados em sala de aula.
Os modelos são disponibilizados no repositório do ldsc: https://github.com/ldsc.
A metodologia para desenvolvimento do projeto é descrita aqui (inclui lista de projetos desenvolvidos).
O modelo de desafio tecnológico pode ser obtido aqui.
O modelo de projeto pode ser obtido aqui.
Resumo da Ementa
Introdução ao C++; História, Modern C++/C++2; Etapas de compilação; Diretrizes de pré-processador; Módulos; Conceitos básicos de C++, sintaxe, escopo; Operadores; Estruturas de controle e repetição; Referências; Funções; Sobrecarga de funções; Tipos(padrões, do usuário, de bibliotecas); Gerenciamento de memória; Estruturas de dados; Funções lambda; Orientação a Objetos com C++; classes, objetos, atributos; Métodos e sobrecarga de métodos; Construtor e destrutor, Associações, amizade/friend, herança, [herança múltipla], polimorfismo; Sobrecarga e de operadores; A biblioteca de entrada e saída de dados (streams), redirecionamento, acesso a arquivos de disco (filesystem); A biblioteca de gabaritos de C++ (a STL), iteradores, containers(<<vector>>, <<deque>>, <<list>>, <<stack>>, <<queue>>, <<set>>, <<map>>), objetos funções e funções genéricas; As bibliotecas numéricas de C++: cmath, numbers, <<random>>, <<complex>>, <<random>>; Bibliotecas úteis: <<pair>>, <<tuple>>, <<variant>>, <<optional>>, <<any>>. Ensino por metodologia tradicional (teoria/aplicação prática) ou através do uso de projetos de engenharia.
Nota: A parte de introdução a projetos, modelagem tradicional e agil, modelagem orientada a objeto, além das ferramentas de modelagem foram transferidas para disciplina de Introdução ao Projeto de Engenharia. Um projeto completo é desenvolvido na disciplina "Projeto de Software Aplicado à Engenharia";
Nota: As ferramentas a serem utilizadas podem mudar, os nomes são apenas indicativos/ilustrativos.
Conteúdo Programático
Apresentação da ementa e metodologia da disciplina.
Introdução ao C++:
Porque C++; História; Modern C++/C++2; Ansi ISO C++;
Conceitos básicos de C++:
Palavras chave, declaração, definição, sintaxe, escopo, operadores;
Etapas de compilação; Tempo de compilação e execução;
Diretrizes de pré-processador; Módulos; Namespace; static_assert;
Estruturas de controle e repetição;
Referências; Funções; Sobrecarga de funções; Funções lambda; std::function;
Apresenta 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 de usuário, como vetores, estruturas e 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, constinit. Vantagem da tipificação forte.
Gerenciamento de memória:
Ponteiros, nullptr, smarth pointer (shared_ptr, unique_ptr), [rvalue reference];
Classes em C++:
Protótipo; Controle de acesso; 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);
Construtores e destrutor:
Tipos de construtores
Herança:
Como implementar associações, herança simples, [a herança múltipla], o uso do polimorfismo;
Sobrecarga operadores:
O uso de friend, a sobrecarga de operadores; Exemplo a classe <<complex>>
Biblioteca entrada e saída:
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 e print. 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.
Standart Template Library (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>, <variant>, <<optional>>, <<any>> ); Uso de funções genéricas;
Bibliotecas e classes matemáticas:
Classes matemáticas para tratar números complexos, a classe <complex>;
A classe <bitset>;
Uso de classes e funções utilitárias como <chrono>, <<random>>, <<regex>>.
Opcional:
Os tipos genéricos (templates);
Concepts;
Exceções;
Coroutines;
Expressões regulares;
Noções de processamento paralelo (threads) e de cluster de computadores;
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.
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 (diversos exemplos de projetos desenvolvidos por alunos)
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).