Softwares Didáticos
Apresenta-se aqui uma lista de Softwares Didáticos, desenvolvidos para ensino de algoritmos, métodos numéricos, conceitos básicos de programação (estruturas de dados, estruturas de controle, estruturas de repetição, fluxogramas, etc). Conceitos associados a engenharia de software (incluindo UML e paradigmas de programação), além de programação orientada a objeto(objetos, atributos, métodos, classes, polimorfismo, relacionamentos de amizade, associação, herança, composição, etc). Linguagem de Programação C++(tipos - numéricos e strings, entrada e saída, variáveis, funções, ponteiros, sobrecarga operadores, alocação de memória, templates, biblioteca STL - vector), como acessar programas externos (ex: gnuplot), como acessar dispositivos externos (ex: balança), como usar bibliotecas (ex: Qt, QCustomPlot, CGnuplot, Boost), como construir suas bibliotecas, finalizando com processamento paralelo e processamento gráfico. Maiores detalhes veja as páginas de Ensino. Uso de ferramentas como controle de versões (cvs,github), montadores (cmake, autoconf, autoliib, libbtoll), compiladores (g++), debuger (gdb,ddd), profiler (gp, kacachekring), documentação (javadoc, doxygen), entre outros.
Sumário:
Códigos do Livro de Programação Orientada a Objeto com C++ - 1Ed
Nome do Software (ou Biblioteca):
Códigos do Livro de Programação Orientada a Objeto com C++ - 1Ed
Versão:
1.0.1.
Autor de Contato:
André Duarte Bueno <andreduartebueno@gmail.com>
Lista dos Autores;
André Duarte Bueno <andreduartebueno@gmail.com>.
Áreas de pesquisa vinculadas:
Engenharia de Software
Programação Orientada a Objeto
UML
C++
STL
Modelagem Matemática Computacional
Programação Software Livre (GNU/Linux, Windows)
Vinculo com:
Disciplinas ministradas;
Projeto de Pesquisa;
Orientações de IC, TCC, Mestrado, Doutorado.
Paradigmas:
POO - Programação Orientada a Objeto;
Tipo de Interface:
Terminal
Plataformas Suportadas:
Windows; GNU/Linux; Mac OS X
Linguagens Utilizadas:
C++
Bibliotecas Utilizadas (dependências):
Boost
Grau de Sofisticação dos Modelos Numéricos:
Iniciante e Intermediário
Grau de Sofisticação dos Modelos Computacionais:
Iniciante e Intermediário
Grau de Sofisticação da Documentação para o Desenvolvedor (código):
Ensina a documentar os códigos com Javadoc/Doxygen
Grau de Sofisticação da Documentação para o Usuário (manual do software):
Dá dicas para uso do LyX/TeX/LaTeX.
Grau de Sofisticação dos Testes:
Dá dicas para implementação e uso de testes.
O Livro foi registrado:
Sim
Tipo de Licença:
Proprietária
Links:
Github do LDSC: https://github.com/ldsc
Apostila: Provas e Provas Resolvidas de C++ versão de 2018 (entre em contato para dados atuais).
Comentário e/ou informação extra:
Livro do Professor André D. Bueno usado nas disciplinas de programação.
Uma terceira edição esta em desenvolvimento (vide projetos).
Cálculo Integral (Passo a Passo)
Nome do Software (ou Biblioteca):
Cálculo Integral (Passo a Passo)
Versão:
O software apresenta em 6/2020 treze versões, mostrando a evolução da complexidade. Vide no final desta descrição um resumo das versões.
Autor de Contato:
André Duarte Bueno <andreduartebueno@gmail.com>
Lista dos Autores;
André Duarte Bueno <andreduartebueno@gmail.com>
Áreas de pesquisa vinculadas:
Ensino de Programação
Ensino de Cálculo Numérico
Modelagem Matemática Computacional
Vinculo com:
Disciplinas de Programação Orientada a Objeto com C++; Programação Prática;
Disciplinas de Cálculo Numérico
Paradigmas:
Estruturada (v1,v2,v3)
POO - Programação Orientada a Objeto (v4 para frente)
Tipo de Interface:
Terminal com geração de gráficos (CGnuplot/gnuplot)
Plataformas Suportadas:
Windows e GNU/Linux; Mac OS X (não testada)
Linguagens Utilizadas:
C++
Bibliotecas Utilizadas (dependências):
Requer software CGnuplot instalado
Grau de Sofisticação dos Modelos Numéricos:
Inciante/Intermediário
Grau de Sofisticação dos Modelos Computacionais:
Inciante/Intermediário
Grau de Sofisticação da Documentação para o Desenvolvedor (código):
Leiame e Diagramas UML
A documentação gerada pelo doxygem/javadoc está nos subdiretórios html e latex.
Tem uma apostila que mostra passo a passo o desenvolvimento do software aqui.
Grau de Sofisticação da Documentação para o Usuário (manual do software):
Não tem manual do usuário; mas conta com pdf que explica a construção das diferentes versões passo a passo
Grau de Sofisticação dos Testes:
Não tem sistemas de teste;
O Software foi registrado:
Não
Tipo de Licença:
GNU General Public License (GPL)
Links:
Github do LDSC: https://github.com/ldsc
Comentário e/ou informação extra:
Objetivo: Trata-se de um projeto de ensino de programação orientada a objeto com C++.
O software foi construído em 11 etapas, cada etapa mostra como resolver o problema do cálculo da integral numérica.
O que é? Um programa simples para cálculo da Área de Funções. Na prática cria-se uma biblioteca de funções e métodos de integração numérica e um simulador que usa as classes criadas.
Como foi modelado? É criada uma hierarquia de classes de funções, e uma hierarquia de classes de integração. Também é criada uma classe CSimulador, usada para gerenciar a simulação. Os arquivos de modelagem, feitos usando o programa umbrello, estão no subdiretório uml. Também acrescentei imagens dos diagramas.
E a documentação? A documentação gerada pelo doxygem/javadoc está nos subdiretórios html e latex.
Posso atualizar/ampliar? Sim. O usuário/programador pode adicionar novas classes funções e novas classes de integração, basta usar herança das classes existentes.
Porque tem vários diretórios com diferentes números de versões? Mostra a evolução do programa, começando com três versões estruturadas (v.1,v.2,v.3) e a seguir versões orientadas a objeto, e, finalmente versões usando programação genérica.
Como são gerados gráficos faz uso da biblioteca CGnuplot e do software Gnuplot.
Sobre as versões disponibilizadas
ProgramacaoDesorganizada - v0.1
Código no estilo de C, mas usando conceitos de C++, como cin/cout;
Uso de std:: ;
Tudo dentro da função int main();
Note que a definição da função esta misturada com definição do método de integração;
ProgramacaoDesorganizada - v0.2
Otimização do uso de memória
Nesta versão declaramos as variáveis perto de onde serão utilizadas.
Otimização do tempo de processamento
Uso de arquivo Makefile
ProgramacaoEstruturada -v0.3
Código semi estruturado - Usando uma função.
Parte do código que calcula a integral foi separada e colocada na função AreaFuncao2G.
A função AreaFuncao2G recebe os parâmetros por cópia.
Note que estamos começando a usar conceitos do paradigma de programação estruturada, em que os códigos são organizados em funções.
Note que ainda temos mistura do código do método de integração com código da função específica.
Também estamos usando: using namespace std; que permite trocar std::cout por cout.
ProgramacaoEstruturada -v0.4
Código estruturado - Usando duas funções.
Em relação a versão anterior parte do código que calcula a função do segundo grau foi separada da função que calcula a Area.
Este tipo de separação deixa o código mais organizado e legível, mas com a chamada extra de função pode ficar mais lento.
Declarei a função usando inline para evitar esta perda de desempenho.
Também usei referências (&) para evitar cópia dos parâmetros, o que implicaria em maior tempo de processamento.
ProgramacaoEstruturada -v0.4-2
A única mudança é o uso de argc e argv possibilitando que o usuário passe informações via linha de comando. O usuário pode passar os coeficientes da função.
ProgramacaoEstruturada -v0.5
Uso das variáveis globais c0,c1,c2, limInf, limSup, numInt, para mostrar redução passagem de parâmetros.
Usa ponteiro para função, cuja grande vantagem é permitir o calculo da integral de qualquer função do tipo "double f(double x);"
Adição de duas funções para entrada de dados.
Nesta versão as variáveis e funções que manipulam as variáveis estão visualmente próximas.
ProgramacaoEstruturadaComUsoDeDiálogos -v0.5b
Nesta versão o que muda é a forma de interação do usuário com o programa, pois o mesmo disponibiliza diálogos para entrada de dados.
Uso da biblioteca gráfica Qt5, uma biblioteca gráfica bastante amigável que funciona no GNU/Linux, Windows e Mac-OS-X, sendo multiplataforma.
ProgramacaoEstruturadaComUsoDeDiálogoseGraficos
Inclui o uso de gráficos gerados com a biblioteca QCustomPlot
ProgramacaoOrientadaObjeto - v0.6
Nos exemplos que vimos até aqui usamos programação estruturada. Na versão v0.5 tivemos alguns avanços, como a possibilidade de calcular a área de qualquer função do tipo "double funcao(double);". Mas temos alguns problemas: As variáveis da função do segundo grau c0, c1, c2, são globais e podem ser utilizadas por qualquer função que venha ser criada. Se quisermos ter, simultaneamente, duas funções, teremos de refazer todo código. Isto ocorre porque na programação estruturada não existe um vínculo direto entre os coeficientes da função (c0, c1, c2) e a função em si. Mesmo sendo a relação de fato muito próxima e direta.
Programa em C++ com duas classes. Foram criadas as classes CFun2G e CIntTrapezio, as mesmas representam uma função de segundo grau e o método de integração do trapézio. Os atributos estão públicos e o acesso é direto. Os métodos foram declarados e definidos dentro das classes (nos arquivos .h). Adicionado método Entrada(), para entrada de dados do objeto.
Como passaremos a ter um grande número de arquivos .h e .cpp, os códigos estão dentro do diretório src.
O controle ainda esta dentro de main().
Também passamos a usar o programa cmake ([https://cmake.org/]) para gerenciar a construção/compilação do software.
ProgramacaoOrientadaObjeto - v0.7
Métodos: Adicionados métodos get/set para leitura e modificação dos atributos. Adicionados construtores. Uso da palavra chafe default para indicar construtor default. Adicionados exemplos com criação dos objetos de integração usando os construtores.
ProgramacaoOrientadaObjeto - v0.8
Foi criada hierarquia de funções: classes CFuncao, CFun1G, CFun2G, CFunExp. Foi criada hierarquia de métodos de integral: classes CIntegral, CIntTrapezio. Usa métodos virtuais. Usa palavras chaves do C++11 como override;
ProgramacaoOrientadaObjeto - v0.9
Acrescenta sobrecarga operadores. Acrescenta sobrecarga operator(). Acrescenta sobrecarga operadores operator>> e operator<<.
Acrescenta classe CSimulador com conteúdo de main(). Note que o conteúdo de main() é quase sempre pequeno, normalmente criamos um simulador e executamos a simulação.
ProgramacaoOrientadaObjeto - v1.0
Acrescenta polimorfismo, permitindo a definição de qual função e qual método de integração serão utilizados em tempo de execução. Ou seja, o usuário irá selecionar a função e o método de integração.
Note que este exemplo conclui a parte de orientação a objeto tradicional.
Programação Genérica - v1.1
Acrescenta uso algoritmo genérico - <vector> da stl; Uso de iteradores (iterator); Uso de friend std::istream& operator>>(std::istream& in, CFuncao& funcao); Dentro de CSimulador::Executar duas formas de uso: Mostra uso de vector, new, push_back, size, iterator no formato de C++03; Mostra uso de vector, new, auto, for_each e funções lambda de C++11 (note redução número linhas!)
Programação Genérica - v1.2 (C++11/14)
Inclui mecanismos de programação genérica de C++11. Novos conceitos de C++11 como unique_ptr e make_ptr.
Função Area() recebe ponteiro do tipo: unique_ptr<CFuncao> * ;
Funções Entrada e Saida recebem stream, permitindo uso de Saida(cout) ou Saida(fout).
Programação Genérica - v1.3 (C++17)
Inclui mecanismos de programação genérica de C++17. IMPLEMENTAR!
Ver http://en.cppreference.com/w/cpp/numeric/special_math – http://en.cppreference.com/w/cpp/filesystem
Controle Amostras (Comunicação com Dispositivos Externos)
Nome do Software (ou Biblioteca):
Controle Amostras
Versão:
0.5
Autor de Contato:
André Duarte Bueno <andreduartebueno@gmail.com>
Lista dos Autores;
André Duarte Bueno <andreduartebueno@gmail.com>
Áreas de pesquisa vinculadas:
Ensino de Programação
Modelagem Matemática Computacional
Vinculo com:
Disciplinas de Programação Orientada a Objeto com C++; Programação Prática e Processamento Paralelo e Concorrente
Paradigmas:
POO - Programação Orientada a Objeto
Tipo de Interface:
Terminal com geração de gráficos (CGnuplot/gnuplot)
Plataformas Suportadas:
Windows e GNU/Linux; Mac OS X (não testada)
Linguagens Utilizadas:
C++
Bibliotecas Utilizadas (dependências):
Requer software CGnuplot instalado
Grau de Sofisticação dos Modelos Numéricos:
Iniciante/Intermediário
Grau de Sofisticação dos Modelos Computacionais:
Iniciante/Intermediário
Grau de Sofisticação da Documentação para o Desenvolvedor (código):
Leiame e Diagramas UML
Códigos parcialmente documentados
Grau de Sofisticação da Documentação para o Usuário (manual do software):
Não tem manual do usuário;
Grau de Sofisticação dos Testes:
Não tem sistemas de teste;
O Software foi registrado:
Não
Tipo de Licença:
GNU General Public License (GPL)
Links:
Github do LDSC: https://github.com/ldsc
Comentário e/ou informação extra:
Objetivo: Mostrar a comunicação com outros dispositivos, no caso uma balança digital.
Programa simples para controle de amostras.
Armazena informações das amostras (dados das amostras e massa das mesmas).
Realiza interação via porta de comunicação com balança digital.
Interpolação (Gráficos Utilizando Gnuplot)
Nome do Software (ou Biblioteca):
Interpolação
Versão:
0.5
Autor de Contato:
André Duarte Bueno <andreduartebueno@gmail.com>
Lista dos Autores;
André Duarte Bueno <andreduartebueno@gmail.com>
Áreas de pesquisa vinculadas:
Ensino de Programação
Modelagem Matemática Computacional
Vinculo com:
Disciplinas de Programação Orientada a Objeto com C++; Programação Prática e Processamento Paralelo e Concorrente
Paradigmas:
POO - Programação Orientada a Objeto
Tipo de Interface:
Terminal com geração de gráficos (CGnuplot/gnuplot)
Plataformas Suportadas:
Windows e GNU/Linux; Mac OS X (não testada)
Linguagens Utilizadas:
C++
Bibliotecas Utilizadas (dependências):
Requer software CGnuplot instalado
Grau de Sofisticação dos Modelos Numéricos:
Iniciante/Intermediário
Grau de Sofisticação dos Modelos Computacionais:
Iniciante/Intermediário
Grau de Sofisticação da Documentação para o Desenvolvedor (código):
Leiame e Diagramas UML
Códigos parcialmente documentados
Grau de Sofisticação da Documentação para o Usuário (manual do software):
Não tem manual do usuário;
Grau de Sofisticação dos Testes:
Não tem sistemas de teste;
O Software foi registrado:
Não
Tipo de Licença:
GNU General Public License (GPL)
Links:
Github do LDSC: https://github.com/ldsc
Comentário e/ou informação extra:
Objetivo: Mostra a implementação de classe de interpolação simples, a leitura de dados de arquivo de disco e a geração de gráficos utilizando o software externo Gnuplot.
Emulador Calculadoras HP (Sistema Script Programação)
Nome do Software (ou Biblioteca):
Emulador Calculadoras HP
Versão:
0.9
Autor de Contato:
André Duarte Bueno <andreduartebueno@gmail.com>
Lista dos Autores;
André Duarte Bueno <andreduartebueno@gmail.com>
Áreas de pesquisa vinculadas:
Ensino de Programação
Modelagem Matemática Computacional
Vinculo com:
Disciplinas de Programação Orientada a Objeto com C++; Programação Prática e Processamento Paralelo e Concorrente
Paradigmas:
POO - Programação Orientada a Objeto
Tipo de Interface:
Terminal com geração de gráficos (CGnuplot/gnuplot)
Plataformas Suportadas:
Windows e GNU/Linux; Mac OS X (não testada)
Linguagens Utilizadas:
C++
Bibliotecas Utilizadas (dependências):
Requer software CGnuplot instalado
Grau de Sofisticação dos Modelos Numéricos:
Intermediário
Grau de Sofisticação dos Modelos Computacionais:
Intermediário
Grau de Sofisticação da Documentação para o Desenvolvedor (código):
Leiame e Diagramas UML
Códigos parcialmente documentados
Grau de Sofisticação da Documentação para o Usuário (manual do software):
Não tem manual do usuário;
Grau de Sofisticação dos Testes:
Não tem sistemas de teste;
O Software foi registrado:
Não
Tipo de Licença:
GNU General Public License (GPL)
Links:
Github do LDSC: https://github.com/ldsc
Comentário e/ou informação extra:
A primeira versão, bastante simples, foi utilizada em prova aplicada aos alunos. Posteriormente foram adicionadas algumas funcionalidades extras como geração de gráficos e adição de capacidade de programação. Ou seja, o software permite a execução de programas escritos usando a linguagem de programação da HP (comandos restritos aos implementados e alguns comandos novos associados a parte gráfica). Permite criar scripts e salvar os mesmos para posterior execução.
Veja em apostilas desenvolvidas uma descrição detalhada das calculadoras científicas da HP, incluindo breve histórico e exemplos de uso. Note que na apostila temos exemplos de códigos.
AIS - Análise de Imagens Simples (Processamento Paralelo Básico)
Nome do Software):
AIS - Análise de Imagens Simples
Versão:
0.5
Autor de Contato:
André Duarte Bueno <andreduartebueno@gmail.com>
Lista dos Autores;
André Duarte Bueno <andreduartebueno@gmail.com>
Áreas de pesquisa vinculadas:
Ensino de Programação
Processamento de Imagens
Modelagem Matemática Computacional
Vinculo com:
Disciplinas de Programação Orientada a Objeto com C++; Programação Prática e Processamento Paralelo e Concorrente
Disciplinas de Análise e Processamento de Imagens
Paradigmas:
POO - Programação Orientada a Objeto
Tipo de Interface:
Terminal com geração de gráficos (CGnuplot/gnuplot)
Plataformas Suportadas:
Windows e GNU/Linux; Mac OS X (não testada)
Linguagens Utilizadas:
C++
Bibliotecas Utilizadas (dependências):
Requer software CGnuplot instalado
Grau de Sofisticação dos Modelos Numéricos:
Inciante/Intermediário
Grau de Sofisticação dos Modelos Computacionais:
Inciante/Intermediário
Grau de Sofisticação da Documentação para o Desenvolvedor (código):
Leiame e Diagramas UML
Códigos parcialmente documentados
Grau de Sofisticação da Documentação para o Usuário (manual do software):
Não tem manual do usuário;
Grau de Sofisticação dos Testes:
Não tem sistemas de teste;
O Software foi registrado:
Não
Tipo de Licença:
GNU General Public License (GPL)
Links:
Github do LDSC: https://github.com/ldsc
Comentário e/ou informação extra:
As primeiras versões foram desenvolvidas de forma isolada para provas da disciplina de programação. Por exemplo, classe de binarização, classe para cálculo da porosidade, classe para cálculo da função autocorrelação, classe de filtros de passa-baixa e passa-alta. Posteriormente os códigos foram unificados num programa único.
Apresenta versão com processamento paralelo simples usando múltiplas threads.
Versões mais elaboradas destes códigos estão disponibilizadas nos softwares SAIL, LVP, o que se apresenta aqui tem fins didático pedagógicos, ou seja, são versões mais simples mas funcionais.
Como são gerados gráficos faz uso da biblioteca CGnuplot e do software Gnuplot.
ATCS - Cálculo do Ranking da ATCS (Interação com Sistemas da Google)
Nome do Software):
ATCS - Cálculo do Ranking da ATCS
Versão:
0.5
Autor de Contato:
André Duarte Bueno <andreduartebueno@gmail.com>
Lista dos Autores;
André Duarte Bueno <andreduartebueno@gmail.com>
Áreas de pesquisa vinculadas:
Ensino de Programação
Extensão - Apoio a comunidade de tenistas da região de Costa do Sol
Vinculo com:
Disciplinas de Programação Orientada a Objeto com C++; Programação Prática e Processamento Paralelo e Concorrente
Paradigmas:
POO - Programação Orientada a Objeto
Tipo de Interface:
Terminal com geração de gráficos (CGnuplot/gnuplot)
Site com informações
Formulários do Google Forms
Plataformas Suportadas:
Windows e GNU/Linux; Mac OS X (não testada)
Linguagens Utilizadas:
C++
Google Sites
Google Forms
Bibliotecas Utilizadas (dependências):
Requer software CGnuplot instalado
Grau de Sofisticação dos Modelos Numéricos:
Inciante/Intermediário
Grau de Sofisticação dos Modelos Computacionais:
Inciante/Intermediário
Grau de Sofisticação da Documentação para o Desenvolvedor (código):
Leiame e Diagramas UML
Códigos parcialmente documentados
Grau de Sofisticação da Documentação para o Usuário (manual do software):
Tem vídeo explicando o funcionamento.
Grau de Sofisticação dos Testes:
O software é rodado todo mês para cálculo do Ranking da Associação
O Software foi registrado:
Não
Tipo de Licença:
GNU General Public License (GPL)
Links:
Github do LDSC: https://github.com/ldsc
Comentário e/ou informação extra:
Objetivo: O Software foi desenvolvido para atender demanda dos tenistas da região, para detalhes da ATCS veja Site da ATCS.
Inclui:
Site da ATCS (maiores detalhes no Site da ATCS).
Conjunto de Formulários do Google Forms para registro de informações de profissionais, tenistas, resultados de jogos, etc.
Aplicativo desenvolvido em C++ que calcula o Ranking de Desafios da ATCS por categoria, com possibilidade filtrar jogadores, fazer análises estatísticas, gráficos e comparações entre tenistas.
Gráficos gerados pelo gnuplot.
Um manual que explica a modelagem do sistema, o funcionamento do programa e uso esta disponibilizado Manual do desenvolvedor do Software de Calculo do Ranking da ATCS.
Também temos alguns vídeos que explicam o uso do site e dos softwares nesta Lista Vídeos ATCS.
Ensino:
Apresenta um exemplo bastante interessante de relacionamento de sistemas online (Google Sites, Google Forms) com aplicativos offline(desenvolvido em C++ com acesso ao gnuplot). A grande vantagem é a possibilidade de desenvolver várias estatísticas e análises comparativas.
A seguir algumas imagens. Note que temos um board do trello, o mesmo é usado para gestão do desenvolvimento do software. A seguir diagramas de caso de uso, diagrama de sequência e diagrama de classes da versão 0.5. Imagem do site, formulário de entrada de resultado de desafio. Algumas imagens rodando o software - entrada de dados e resultados obtidos (rankings e gráficos). Muitas outras opções estão disponibilizadas.
Referências Bibliográficas
Algumas referencias para disciplinas de Programação, Projeto Engenharia, Trabalho de Conclusão de Curso, Metodologia Científica e Processamento de Imagens.
Engenharia de software, especificação, elaboração, análise, projeto, teste, debugagem.
Sommerville, Ian. Engenharia de Software. Addison-Wesley. 8nd. 2007.
Denis Alcides Rezende. Engenharia de Software e Sistemas de Informação. 2ed. Brasport. 2002.
Roger S. Pressman. Engenharia de Software. 5ed. McGrawHill, 6nd. 2006.
Blaha, Michael; Rumbaugu, James. Modelagem e projetos baseados em objetos com UML2. 2.ed. Rio de Janeiro: Elsevier, 2006. 496p. ISBN 85-352-1753-3.
Eric Frieman. Use a cabeça! padrões de projeto. 2ed. 2007.
Robert C. Myers . Essential Test-Driven Development 1st Edition.Addison-Wesley Professional; 1 edition. 2018.
Jorge Audy. Desenvolvimento distribuido de software. Campus. 2008.
Ann R. Ford. Practical debugging in C++. Prentice hall. 2002.
André Koscianski. Qualidade de software. Novatec. 2006.
Leonardo Molinari. Teste de software. Erica. 2003.
Michal Young. Teste e analise de software. Bookman. 2008.
Trayahur. M. F. e Emerson Rios. Projeto e Engenharia de Software: Teste de Software. Alta Books. 2003.
UML
Martim Fowler. UML Essencial – Um breve guia para a linguagem-padrão de modelagem de objetos. Bookman, Porto Alegre, 2000.
Martim Fowler. UML Destiled – a brief guide to the standart object modeling language. 3N,.2003.
Gilleanes T.A.Guedes. UML 2 uma abordagem prática. Novatec. 2008.
Bret Mclaughin. Use a cabeça! análise e projeto orientado a objeto. Altabook/oreilly.
Alistair Cockburn. Escrevendo casos de uso eficazes. Bookman.
Booch, G., Rumbaugh, J., and Jacobson, I. UML - Guia do Usuário. Edit. Campus, Rio de Janeiro, 2000.
C++
Stroustroup. Programming principles and pratice using C++. 2nd. 2014.
Deitel, H. and Deitel, P. C++ How to Program. Pearson; 10 edition; 2016
Bjarne, Stroustrup. C++ The Programming Language. Addison-Wesley, 4 edition. 2013.
Siddhartha Rao. C++ in One Hour a Day, Sams Teach Yourself. Sams Publishing; 8 edition; 2017.
Marius Bancila. Modern C++ Programming Cookbook. Packt Publishing. 2017
Josuttis, N. M. Object Oriented Programming in C++. John Wiley & Sons. 2002.
Tony Gaddis; Starting Out with C++: From Control Structures through Objects; Addison Wesley; 2008.
Malik . C++ Programming: From Problem Analysis to Program Design; Fourth Edition (Paperback D.S. (Course Technology); 2008.
Malik . C++ Programming: Program Design Including Data Structures; 5 Edition (Paperback D.S. (Course Technology); 2010.
Tony Gaddis. Starting Out with C++: Early Objects. Addison Wesley; 2010.
Davis. Beginning Programming With C++ for Dummies. John Wiley & Sons. 2010.
C++ Avançado
Scott Meyers. Effective Modern C++ : 42 Specific Ways to Improve Your Use of C++11(1rd Edition). Oreilly (2014).
Marc Gregoire. Professional C++. 4nd. wrox. 2018.
Nicholas A. Solter. Professional C++. 3nd. Wrox. 2014.
Boris Schalingl. The Boost C++ Libraries; 2nd; 2014
Herb Sutter. C++ Coding Standards.Pearson. 2005.
Scott Meyers. More Effective C++. Adison-Wesley. 1996 (2006).
Scott Meyers. Effective C++ : 55 Specific Ways to Improve Your Programs and Designs (3rd Edition). Addison-Wesley (2005).
STL e Templates
Jacek Galowicz. C++17 STL Cookbook. Packt Publishing. 2017.
David R. Musser. STL Tutorial and Reference Guide: C++ Programming with the Standard Template Library. Addison-Wesley, 2010.
Nicolai M. Josuttis. The C++ Standard Library: A Tutorial and Reference. Addison-Wesley Pub Co; 1st edition. 1999.
Pete Becker. C++ Standart Library Extensions. Addison-Wesley. 2007.
Bjorn Larlsson. Beyond the C++ standart library. Addison-Wesley. 2006.
David Vandevoorde. C++ templates meta programming. Addison-Wesley. 2005
Andrei Alexandrescu. Modern C++ Design. Addison-Wesley. 2001.
Angelika Langer. Standart C++ iostreams and locales. Adison-Wesley. 2000.
Multiplataforma (GNU/Linux)
Cederqvist, P. Version Management with CVS. Free Software Foundation. 1993.
Bibliotecas e interfaces gráficas
Mark Summerfield. Advanced Qt Programming: Creating Great Software with C++ and Qt 4. Addison-Wesley Professional, 2010.
Manual do pacote libtool. Acesso via internet.
Jasmim Blanchete. C++ GUI Programming With Qt 4. Prentice Hall. 2006.
Alan Ezust. An introduction to design patterns in C++ with Qt 4. Prentice Hall. 2006.
Jasmin Blanchette and Mark Summerfield. “C++ GUI Programming With QT 3”. Prentice Hall. 2004.
Marcelo Cohen. Open GL uma abordagem prática. Novatec. 2006.
Otimização e processamento paralelo e distribuído
Anthony Williams. C++ Concurrency in Action: Practical Multithreading (Paperback) . Manning Publications; 2nd. 2017.
Maya Posch ; Mastering C++ Multithreading; Packt Publishing; 2017.
Viktor Sehr; C++17 High Performance; Packt Publishing; 2018.
Cameron Hughes e Tracey Hughes. “Professional Multicore Programming”. Wrox, 2008.
Cameron Hughes e Tracey Hughes. “Parallel and Distributed Programming Using C++”. Addison-Wesley, 2004.
H.S. Stone, "High performance computer architecture", Addison-Wesley.
Foster, "Designing and building parallel programs", Massashusetts: Addison Wesley, 3.ª edição, 1993.
(http://www-unix.mcs.anl.gov/dbpp/).
Peter Pacheco, “Parallel Programming With MPI”. Morgan Kaufmann Publishers. 1996.
David R. Butenhof. Programming with POSIX(R) Threads. Addison-Wesley, 1987.
George Em Karniadakis , Robert M. Kirby II . Parallel Scientific Computing in C++ and MPI: A Seamless Approach to Parallel Algorithms and their Implementation. Cambridge University Press. 2003.
Yair Shapira. Solving PDEs in C++. SIAM, Society for Industrial and Applied Mathematics. 2006.
B. H. Flowers. An Introduction to Numerical Methods in C++. Oxford University Press, USA; Rev Sub edition. 2000.
Jack Dongarra et al. Numerical Linear Algebra for High-Performance Computers. SIAM. 1998.
Paide Keyes et al. Domain Based Parallelism and Problem Decomposition Methods in Computacional Sciente and Enginnering. SIAM. 2009.
Marcos Pitanga. Computação em Clusters. Brasport. 2003.
Michel A. Henoux et. al. Parallel Processing for Scientific Computing. SIAM. 2006.
Daniel J. Duffy. Monte Carlo Frameworks: Building Customisable High-performance C++ Application. Wiley. 2009.
Processamento Imagens
GONZALEZ, RAFAEL C. Processamento De Imagens Digitais. EDGARD BLUCHER. 2000. 1ed.
Meiqing Wang. A concise introduction do image processing using C++. CRC Press. 2009.
PEDRINI, HELIO. Análise De Imagens Digitais Principios, Algoritmos e Aplicações. Thomson pioneira. 2007. 1ed.
C. Pozrikidis. Introduction to C++ Programming and Graphics (Hardcover) ; Springer; 1 edition ; 2007.
Wilhelm Burger. Principles of Digital Image Processing: Core Algorithms. Springer. 2009.
Lawrence O'Gorman. Practical Algorithms for Image Analysis with CD-ROM. Cambridge University Press. 2008.
Aplicações científicas e engenharia
James Paul Holloway. Introdução a Programação para Engenharia. LTC, 2006.
John J. Barton, Lee R. Nackman. Scientific and Engineering C++: An Introduction With Advanced Techniques and Examples. Addison-Wesley Pub Co; 1st edition. 1994.
Daoqi Yang . C++ and Object-oriented Numeric Computing for Scientists and Engineers Springer Verlag; 1st edition. 2000.
Yair Shapira. Solving PDEs in C++: Numerical Methods in a Unified ObjectOriented Approach. SIAM. 2006.
Gilbert Strang; Computational Science and Engineering; SIAM; 2007.
Jorge J. Moré and Stephen J. Wright Optimization Software Guide; SIAM; 1993.
Yorick Hardy. Computer Algebra With Symbolic C++ (Paperback (Editor) World Scientific Publishing Company; 2008.
Marcia Ruggiero. Calculo numerico. Pearson, 1996, 2.ed. 8534602042
Chen, Zhangxin; Huan, Guaren. Computational Methods for Multiphase Flow in Porous Media. Edt: SIAM.
Walter Savitch. Problem solving with C++. pearson. 2007.
Zhangxin Chen. Computational Methods for Multiphase Flows in Porous Media . 2006.
D.M.Capper. C++ for scientists, enginners and mathematicians. Springer. 2001.
Daniel J. Duffy, Joerg Kienitz. Monte Carlo Frameworks: Building Customisable High-performance C++ Applications. Wiley; Har/Cdr edition; 2009.
Allen B. Downey. How To Think Like A Computer Scientist: C++ Version. CreateSpace; 2009.
Mark Lee. C++ Programming for the Absolute Beginner. Course Technology PTR; 2 edition; 2009.
Robert Sedgewick. Algorithms in C++. Addison-Wesley Professional; 1 edition; 2009.
Gary J. Bronson. C++ for Engineers and Scientists. Course Technology; 3 edition; 2009.
Damon Danieli. C++ Algorithms for Digital Signal Processing, 2/e, Format: Kindle Edition ; Publisher: Prentice Hall Professional; 2 edition; 2008.
Edward Scheirnerman. C++ for mathematicians. CRC. 2006.
Armando de Oliveira Fortuna. Técnicas Computacionais para Dinâmica dos Fluidos: Conceitos Básicos e Aplicações. Editora da Universidade de São Paulo – EDUSP.São Paulo SP. Primeira, 85-314-0526-2. 2000.
Randall L. Eubank. Statistical Computing in C++ and R. Chapman & Hall/CRC; 2010.
Fedora 10 and Red Hat Enterprise Linux Bible (Bible (Wiley)) - Paperback : 1128 pages; Wiley; 2009
O livro texto a ser utilizado na disciplina:
Bueno. A.D. Programação Orientada a Objeto em C++ - Aprenda a programar em ambiente multiplataforma com software livre. Terceira Edição. Editora Novatec. São Paulo (2020). (previsão).
Metodologia Científica:
José Carlos Koche. Fundamentos de Metodologia Científica; teoria da ciência e iniciação à pesquisa. 24 Edição. Vozes. Petrópolis/RJ. 2007.
Aidil Jesus da Silveira Barros e Neide Aparecida de Souza Lehfeld. Fundamentos de Metodologia Científica. 3 Edição. Prentice Hall. São Paulo. 2007.
Milton Vargas. Técnica, Tecnologia e Ciência; revista de educação & tecnologia.
Milton Vargas. Metodologia da Pesquisa Tecnológica. Globo. Rio de Janeiro. 1985.
Karl Pooper. A Lógica da Pesquisa Científica. Cultrix. Sp. 1972.
Fábio Appolinário. Dicionário de Metodologia Científica. Atlas. SP. 2007.
M. Weatherall. Método Científico. Editora Poligono, USP. 1970.
Cláudio de Moura de Castro. A Prática da Pesquisa. 1ed. McGraw-Hill. SP. 1977.
Redação:
Editora Abril. Manual de Estilo. 11 ed. Nova Fronteira.
Instituto Paranaense de Desenvolvimento Econômico e Social. Redação e Editoração. Ed. da UFPR. Curitiba. 2000.
Robert Barras. Os Cientistas Precisam Escrever: Guia de Redação para Cientistas, Engenheiros e Estudantes. Ed.USP. SP. 1979.
Umberto Eco. Como se Faz Uma Tese. Perspectiva. 15 ed. 2000.
Apresentações:
Reinaldo Polito. Superdicas para Falar em Público. Saraiva, São Paulo, 2005.
Vanessa Freitas. Como Falar em Público. Editora Universo dos Livros. São Paulo. 2005.
Dale Carnegie. Como falar em público e Influenciar Pessoas no Mundo dos Negócios. Ed.46. Record. 2010.
Disciplina, aprendizado, engenharia:
Içami Tiba. Disciplina na Medida Certa. Integralle. SP. 2006.
John D. Bransford et all. Como as Pessoas Aprendem: Cérebro, Mente, Experiência e Escola. Ed. SENAC. SP 2007.
Holtzapple e Reece; Introdução a Engenharia; LTC; Rio de Janeiro; 2006.
Valter Antonio Bazzo. Introdução À Engenharia - Conceitos, Ferramentas e Comportamentos - Série Didática. Editora UFSC. Florianópolis. 2009.
TeX/LaTeX/LyX:
David F. Griffiths. Learning LaTeX. SIAM. 1997.
Michel Groossens and Frank Mittelbach and Samarin.The LaTeX Companion. Addison-Wesley.1994.
LyX Team. (2012). The LyX User's Guide. LyX Team - http://www.lyx.org.
Lamport, L. (1985). Latex - A Document Preparation System. Addison-Wesley.
Steding-Jessen, K. (2000). Latex Demo: Exemplo com Latex 2e.
Knuth, D. E. (1986). The Texbook. Addison-Wesley.
Helmut Kopka and Patrick W Daly. A Guide To LaTeX2e. Addison-Wesley. 1995.
O texto a ser utilizado na disciplina:
Bueno. A.D. Manual do Aluno de IC/MSc/DSC - UENF/CCT/LENEP. Macaé, 2019.