Eu estava falando com um amigo sobre autômato celular dando como exemplo o Conway’s Game of Life. Isso aguçou a minha curiosidade e depois de tantos anos que vi isso pela última vez, li o artigo da Wikipedia e achei fascinante. Qual a melhor forma de aprender mais sobre o algoritmo? Implementando! Porém, eu não…
Autor: thiago
Desacoplamento e composição
Ho ho ho! Feliz Natal !!! Estava pensando em fazer algo com o tema natalino, mas que também fosse interessante para o dia-a-dia e me veio uma coisa na cabeça: Desenhar com caracteres ASCII uma imagem. Na hora pensei num algoritmo, formato e tudo o mais, e em seguida comecei a fazer algo que é…
STL não tem split – e por que isso não é importante!
Orientação a objetos é um paradigma de programação muito usado nas linguagens consideradas modernas, tais como: C++, Java, C#, entre outras… Em teoria, um código orientado a objetos pode ser facilmente reusado e entendido. Porém, eu gostaria de analisar um caso neste post. Então, vamos fazer um pequeno exercício por aqui. Aviso: Orientação a objetos (OO) é um…
Policy-based design: log writer
Policy-based design Vamos neste artigo dar mais uma pincelada no Policy-based design. Vamos fazer como exemplo uma classe de log. Como este é só um exemplo, não vamos considerar múltiplos parâmetros no log, mas somente uma string, assim não fugiremos do assunto. Uma das coisas mais importantes neste tipo de design é o desacoplamento. Ele…
Leitura de configuração em C++
Uma coisa que é comum no ambiente Java e que eu gosto muito são os arquivos de properties. Não é de hoje que eu os uso para configurar aplicações que eu faço. Eu tinha uma classe de configuração feita na época do C++98 e que hoje, usando, fiquei com vontade de reescrevê-la para ficar com…
Legibilidade com C++14 – get_numeric
Eu escrevi um código em C++ há um tempo atrás e quando olhei hoje vi como a legibilidade mudou desde o C++11. Neste código eu vi algumas coisas interessantes. Ele serve bem de exemplo para alguns tipos de codificação Codificação concreta Codificação genérica Codificação concreta com C++ moderno Codificação genérica com C++ moderno Vamos ver…
Layout de memória de structs e classes
Como a memória é alocada em structs e classes Seguindo o post de dependências entre headers (Dependência cíclica de headers). Me perguntaram a razão do C++ não fazer o demangling dos nomes simplesmente quando uma variável de classe é declarada e também porque isso é diferente do Java, onde eu simplesmente coloco o nome da…
Dependência cíclica de headers
Uma coisa que acaba atrapalhando quem está começando no C++ é a dependência cíclica dos headers. Quando estamos escrevendo programas minúsculos isso não acontece, mas é um cenário muito comum. Antes de falar mais sobre as dependências, vamos entender um pouco da inclusão destes headers. Como funciona o famoso #include ? Supondo que temos 3 arquivos: main.cpp, main.h…
Range loops – Escrevendo código seguro
Eu estava olhando um código de um sistema e me deparei com um trecho que me fez torcer o nariz. O código funcionava, mas imediatamente vi dois problemas potenciais: Bug de int/unsigned int Um vector::size() – 1 Se size for 0, o resultado será 4294967295 ou 0xFFFFFFFF! Código confuso e facilmente quebrável msgs[count] – Não…
Por quê usar templates ?
Se você não está usando templates com C++, você está perdendo toda a diversão. A linguagem C++, apesar de suportar orientação a objetos, diferentemente de Java, não te “obriga” a usá-la. Você poderá ter o melhor dos mundos, em termos dos paradigmas e idiomas. Um pouco de orientação a objetos aqui e programação genérica ali,…