Palestra ministrada no Meetup "DDD - Domain-Driven Design - Balneário Camboriú". - Acessível em: https://www.meetup.com/qualyteam/events/243888032/
Nesta apresentação abordo os temas linguagem ubíqua e código expressivo. Utilizando conceitos de programação funcional mistos com programação orientada à objetos.
A apresentação introduz o Behavior-Driven Development (BDD) utilizando a ferramenta JBehave. O palestrante explica os conceitos por trás do BDD, como se relaciona com TDD e DDD, e demonstra um exemplo prático utilizando JBehave em português.
O documento discute os princípios de código limpo, incluindo: (1) código limpo deve ser eficiente e ter lógica direta para minimizar bugs, (2) deve ter poucas dependências, e (3) deve ser legível para facilitar manutenção. Ele também fornece dicas como usar nomes significativos e formatar código claramente.
1. O documento discute a importância de se escrever códigos limpos e de boa qualidade para facilitar a manutenção e compreensão do código.
2. São apresentadas técnicas como usar nomes significativos e pronunciáveis para variáveis e métodos e manter a consistência nos nomes através do código.
3. A apresentação recomenda livros e sites sobre o tema para que desenvolvedores possam aprender mais sobre como escrever códigos limpos.
O documento discute a importância da programação funcional e fornece exemplos de seus principais conceitos, como: 1) funções como membros de primeira ordem; 2) expressões e composições para criar códigos; 3) tipos para expressar códigos de forma clara.
O documento apresenta Gabriel Schade Cardoso, um desenvolvedor e professor especializado em programação funcional. Ele discute os conceitos básicos de programação funcional, incluindo vincular valores em vez de atribuição, funções, currying, aplicação parcial e funções de alta ordem. Exemplos são fornecidos para ilustrar esses conceitos.
Este documento fornece instruções sobre como escrever código Java de forma limpa e de fácil manutenção. Ele discute a importância de usar nomes significativos para variáveis e funções, escrever funções pequenas com uma única responsabilidade, e o uso apropriado de comentários.
O documento apresenta um projeto de filtro de spam desenvolvido por um estudante de ciência da computação. O filtro usa aprendizado de máquina para classificar mensagens como spam ou não spam e pode ser instalado em diferentes sites para compartilhar e melhorar o modelo de classificação.
O documento discute as razões para a existência de múltiplas linguagens de programação, como novas linguagens surgem para resolver novos problemas, e que uma boa linguagem é aquela que resolve bem um problema específico de um determinado domínio, como o PHP é bom para desenvolvimento web.
A apresentação introduz o Behavior-Driven Development (BDD) utilizando a ferramenta JBehave. O palestrante explica os conceitos por trás do BDD, como se relaciona com TDD e DDD, e demonstra um exemplo prático utilizando JBehave em português.
O documento discute os princípios de código limpo, incluindo: (1) código limpo deve ser eficiente e ter lógica direta para minimizar bugs, (2) deve ter poucas dependências, e (3) deve ser legível para facilitar manutenção. Ele também fornece dicas como usar nomes significativos e formatar código claramente.
1. O documento discute a importância de se escrever códigos limpos e de boa qualidade para facilitar a manutenção e compreensão do código.
2. São apresentadas técnicas como usar nomes significativos e pronunciáveis para variáveis e métodos e manter a consistência nos nomes através do código.
3. A apresentação recomenda livros e sites sobre o tema para que desenvolvedores possam aprender mais sobre como escrever códigos limpos.
O documento discute a importância da programação funcional e fornece exemplos de seus principais conceitos, como: 1) funções como membros de primeira ordem; 2) expressões e composições para criar códigos; 3) tipos para expressar códigos de forma clara.
O documento apresenta Gabriel Schade Cardoso, um desenvolvedor e professor especializado em programação funcional. Ele discute os conceitos básicos de programação funcional, incluindo vincular valores em vez de atribuição, funções, currying, aplicação parcial e funções de alta ordem. Exemplos são fornecidos para ilustrar esses conceitos.
Este documento fornece instruções sobre como escrever código Java de forma limpa e de fácil manutenção. Ele discute a importância de usar nomes significativos para variáveis e funções, escrever funções pequenas com uma única responsabilidade, e o uso apropriado de comentários.
O documento apresenta um projeto de filtro de spam desenvolvido por um estudante de ciência da computação. O filtro usa aprendizado de máquina para classificar mensagens como spam ou não spam e pode ser instalado em diferentes sites para compartilhar e melhorar o modelo de classificação.
O documento discute as razões para a existência de múltiplas linguagens de programação, como novas linguagens surgem para resolver novos problemas, e que uma boa linguagem é aquela que resolve bem um problema específico de um determinado domínio, como o PHP é bom para desenvolvimento web.
1) O documento discute conceitos básicos de programação e algoritmos, incluindo o que é um programa, linguagem de programação, variáveis, tipos de variáveis e algoritmos.
2) É explicado o que é pseudocódigo e como ele pode ser usado para representar algoritmos de forma estruturada antes de se programar em linguagens específicas.
3) São apresentados exemplos simples de algoritmos em pseudocódigo para calcular a média de um aluno e ler um número digitado pelo usuário.
A aula abordou:
1) A importância de padrões de codificação para aumentar a legibilidade e manutenção de códigos.
2) Os tipos primitivos em Java como int, double e char e suas características.
3) Variáveis e tipos de referência como String e como são usados para criar objetos.
O documento apresenta práticas para melhoria contínua de programadores, incluindo refatoração, testes automatizados, estimativas realistas, comunicação efetiva e aprendizado constante. O foco é ajudar programadores a se tornarem mais pragmáticos na abordagem de seus projetos.
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
O documento discute a introdução da linguagem de programação Python para ensinar algoritmos e programação. Ele cobre revisões de conceitos, apresenta Python e seus ambientes de desenvolvimento online e locais como o Repl.it e o IDLE.
Juliana Fideles apresenta sobre código limpo em uma palestra na 25a Semana da Tecnologia da Fatec Sorocaba. Ela discute princípios como usar nomes significativos, estruturar o código em funções menores, e tratar erros com exceções. O objetivo é escrever código que seja fácil de ler, modificar e expandir no futuro.
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalGustavo Coutinho
1. A aula aborda os três principais paradigmas de programação: imperativo, orientado a objetos e funcional.
2. O paradigma imperativo é baseado na arquitetura de von Neumann e tem no coração a idéia de atribuição. Suporta declaração de variáveis, estruturas de controle e abstração procedural.
3. O paradigma orientado a objetos trata programas como coleções de objetos que se comunicam, concentrando responsabilidades em classes. Conceitos como herança, polimorfismo e interfaces são abordados.
4
O documento discute paradigmas de programação e como eles influenciam a maneira como os programadores veem e resolvem problemas. Ele descreve os principais paradigmas como imperativo, declarativo, funcional e orientado a objetos e dá exemplos de linguagens que apoiam cada um. O documento também discute que o paradigma usado depende do problema, das ferramentas disponíveis e da experiência do programador.
O documento discute as principais funcionalidades e conceitos por trás do Dialogflow (antigo API.AI), incluindo agentes, intenções, entidades, treinamento e integrações. O autor também fornece referências sobre processamento de linguagem natural e ferramentas de conversação.
O documento discute os paradigmas de programação, definindo-os como estilos de programação. Apresenta os paradigmas funcional, lógico, procedural e orientado a objetos, destacando as semelhanças e diferenças entre o paradigma procedural e orientado a objetos.
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasNatanael Simões
Esta aula tem como objetivo mostrar como se diferem estruturalmente as linguagens imperativas das linguagens declarativas e como identificar suas características básicas
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...Jackson F. de A. Mafra
Se formos resumir, podemos dizer que é “conversation-driven development”. Usando um bot com plugins e scripts, os times podem automatizar tarefas e colaborar, jogando fora os procedimentos repetitivos e economizando tempo.
Nesta palestra mostrei os problemas das exceções e do gerenciamento de erros e validações em aplicação de modo geral. Introduzindo um conceito de railway simples em C#, criando uma espécie de promise para o .NET.
O documento discute padrões de projeto, ferramentas e métodos ágeis. Apresenta padrões de projeto inspirados por Christopher Alexander e o livro "Padrões de Projeto" de Gamma et al. Discutem categorias de padrões como criação, estrutural e comportamental e princípios como programar para interfaces. Exemplos incluem um jogo RPG e o padrão Singleton.
Palestra sobre algumas novidades do C# 8 e do ML.NET para o evento de lançamento do Visual Studio 2019.
Todas as implementações do ML.NET foram feitas em F#
#vs19
Algumas dicas que servem para ajudar quando vamos desenvolver códigos com mais precisão, empatia e legibilidade. Essa apresentação tem base do Clean Code do Uncle Bob.
Este documento discute os princípios de código limpo e boas práticas de programação. Ele explica que código limpo é código bem escrito, legível e fácil de manter. Também discute como identificar código sujo, a importância de nomes significativos, comentários úteis, classes e métodos pequenos, e testes de unidade. O objetivo é produzir software de qualidade e manutenível a longo prazo.
1) O documento apresenta uma palestra sobre métodos ágeis, incluindo os benefícios de serem ágeis e técnicas como Extreme Programming e Scrum.
2) O palestrante fala sobre a importância de inspirar-se em líderes como Steve Jobs e sobre amar o que faz.
3) É enfatizado que ser ágil significa entregar valor de forma consistente e iterativa, e não apenas rápido.
O documento apresenta uma palestra sobre programação funcional e refatoração de código usando abordagens funcionais. A palestra discute como o paradigma funcional pode ajudar a resolver problemas comuns como null exceptions, apresenta conceitos como value containers e high order functions, e mostra como refatorar uma função de atualização de usuário usando esses conceitos para melhor tratar erros e encadear operações.
Este documento fornece uma introdução à análise orientada a objetos, discutindo conceitos como modelagem de domínio, modelagem eficiente, conhecimento compartilhado e implementação iterativa. Inclui exemplos de modelagem de sistemas como um simulador de rotas de rede.
O documento apresenta conceitos da programação funcional como funções puras, imutabilidade e abstração. Discute as vantagens da programação funcional como previsibilidade, testabilidade e reuso de código. Apresenta a linguagem F# como uma opção funcional para .NET, destacando sua concisão, simplicidade e facilidade.
ebook-completo c# o melhor para começar no c#biandamakengo08
O documento apresenta um resumo sobre o curso de linguagem de programação C# avançado. Ele aborda conceitos como classes, métodos, programação orientada a objetos, expressões e LAMBDA. O curso é dividido em três módulos, sendo o primeiro sobre conceitos básicos como classes, métodos e construtores; o segundo sobre programação orientada a objetos; e o terceiro sobre expressões, LAMBDA e delegates.
Minicurso de Lógica e Linguagem Java 6.0Thiago Dieb
O documento apresenta um minicurso sobre lógica e programação em Java ministrado por Thiago Dieb. O conteúdo inclui introdução à lógica, conceitos de orientação a objetos e princípios da linguagem Java 6.0, com exercícios práticos para aplicação dos conceitos apresentados.
1) O documento discute conceitos básicos de programação e algoritmos, incluindo o que é um programa, linguagem de programação, variáveis, tipos de variáveis e algoritmos.
2) É explicado o que é pseudocódigo e como ele pode ser usado para representar algoritmos de forma estruturada antes de se programar em linguagens específicas.
3) São apresentados exemplos simples de algoritmos em pseudocódigo para calcular a média de um aluno e ler um número digitado pelo usuário.
A aula abordou:
1) A importância de padrões de codificação para aumentar a legibilidade e manutenção de códigos.
2) Os tipos primitivos em Java como int, double e char e suas características.
3) Variáveis e tipos de referência como String e como são usados para criar objetos.
O documento apresenta práticas para melhoria contínua de programadores, incluindo refatoração, testes automatizados, estimativas realistas, comunicação efetiva e aprendizado constante. O foco é ajudar programadores a se tornarem mais pragmáticos na abordagem de seus projetos.
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
O documento discute a introdução da linguagem de programação Python para ensinar algoritmos e programação. Ele cobre revisões de conceitos, apresenta Python e seus ambientes de desenvolvimento online e locais como o Repl.it e o IDLE.
Juliana Fideles apresenta sobre código limpo em uma palestra na 25a Semana da Tecnologia da Fatec Sorocaba. Ela discute princípios como usar nomes significativos, estruturar o código em funções menores, e tratar erros com exceções. O objetivo é escrever código que seja fácil de ler, modificar e expandir no futuro.
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalGustavo Coutinho
1. A aula aborda os três principais paradigmas de programação: imperativo, orientado a objetos e funcional.
2. O paradigma imperativo é baseado na arquitetura de von Neumann e tem no coração a idéia de atribuição. Suporta declaração de variáveis, estruturas de controle e abstração procedural.
3. O paradigma orientado a objetos trata programas como coleções de objetos que se comunicam, concentrando responsabilidades em classes. Conceitos como herança, polimorfismo e interfaces são abordados.
4
O documento discute paradigmas de programação e como eles influenciam a maneira como os programadores veem e resolvem problemas. Ele descreve os principais paradigmas como imperativo, declarativo, funcional e orientado a objetos e dá exemplos de linguagens que apoiam cada um. O documento também discute que o paradigma usado depende do problema, das ferramentas disponíveis e da experiência do programador.
O documento discute as principais funcionalidades e conceitos por trás do Dialogflow (antigo API.AI), incluindo agentes, intenções, entidades, treinamento e integrações. O autor também fornece referências sobre processamento de linguagem natural e ferramentas de conversação.
O documento discute os paradigmas de programação, definindo-os como estilos de programação. Apresenta os paradigmas funcional, lógico, procedural e orientado a objetos, destacando as semelhanças e diferenças entre o paradigma procedural e orientado a objetos.
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasNatanael Simões
Esta aula tem como objetivo mostrar como se diferem estruturalmente as linguagens imperativas das linguagens declarativas e como identificar suas características básicas
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...Jackson F. de A. Mafra
Se formos resumir, podemos dizer que é “conversation-driven development”. Usando um bot com plugins e scripts, os times podem automatizar tarefas e colaborar, jogando fora os procedimentos repetitivos e economizando tempo.
Nesta palestra mostrei os problemas das exceções e do gerenciamento de erros e validações em aplicação de modo geral. Introduzindo um conceito de railway simples em C#, criando uma espécie de promise para o .NET.
O documento discute padrões de projeto, ferramentas e métodos ágeis. Apresenta padrões de projeto inspirados por Christopher Alexander e o livro "Padrões de Projeto" de Gamma et al. Discutem categorias de padrões como criação, estrutural e comportamental e princípios como programar para interfaces. Exemplos incluem um jogo RPG e o padrão Singleton.
Palestra sobre algumas novidades do C# 8 e do ML.NET para o evento de lançamento do Visual Studio 2019.
Todas as implementações do ML.NET foram feitas em F#
#vs19
Algumas dicas que servem para ajudar quando vamos desenvolver códigos com mais precisão, empatia e legibilidade. Essa apresentação tem base do Clean Code do Uncle Bob.
Este documento discute os princípios de código limpo e boas práticas de programação. Ele explica que código limpo é código bem escrito, legível e fácil de manter. Também discute como identificar código sujo, a importância de nomes significativos, comentários úteis, classes e métodos pequenos, e testes de unidade. O objetivo é produzir software de qualidade e manutenível a longo prazo.
1) O documento apresenta uma palestra sobre métodos ágeis, incluindo os benefícios de serem ágeis e técnicas como Extreme Programming e Scrum.
2) O palestrante fala sobre a importância de inspirar-se em líderes como Steve Jobs e sobre amar o que faz.
3) É enfatizado que ser ágil significa entregar valor de forma consistente e iterativa, e não apenas rápido.
O documento apresenta uma palestra sobre programação funcional e refatoração de código usando abordagens funcionais. A palestra discute como o paradigma funcional pode ajudar a resolver problemas comuns como null exceptions, apresenta conceitos como value containers e high order functions, e mostra como refatorar uma função de atualização de usuário usando esses conceitos para melhor tratar erros e encadear operações.
Este documento fornece uma introdução à análise orientada a objetos, discutindo conceitos como modelagem de domínio, modelagem eficiente, conhecimento compartilhado e implementação iterativa. Inclui exemplos de modelagem de sistemas como um simulador de rotas de rede.
O documento apresenta conceitos da programação funcional como funções puras, imutabilidade e abstração. Discute as vantagens da programação funcional como previsibilidade, testabilidade e reuso de código. Apresenta a linguagem F# como uma opção funcional para .NET, destacando sua concisão, simplicidade e facilidade.
ebook-completo c# o melhor para começar no c#biandamakengo08
O documento apresenta um resumo sobre o curso de linguagem de programação C# avançado. Ele aborda conceitos como classes, métodos, programação orientada a objetos, expressões e LAMBDA. O curso é dividido em três módulos, sendo o primeiro sobre conceitos básicos como classes, métodos e construtores; o segundo sobre programação orientada a objetos; e o terceiro sobre expressões, LAMBDA e delegates.
Minicurso de Lógica e Linguagem Java 6.0Thiago Dieb
O documento apresenta um minicurso sobre lógica e programação em Java ministrado por Thiago Dieb. O conteúdo inclui introdução à lógica, conceitos de orientação a objetos e princípios da linguagem Java 6.0, com exercícios práticos para aplicação dos conceitos apresentados.
O documento discute práticas para melhoria contínua de programadores, incluindo refatoração, testes automatizados, e comunicação com usuários. Ele enfatiza uma abordagem pragmática e iterativa ao desenvolvimento de software.
1) O livro discute a importância de se escrever códigos limpos e como códigos ruins podem atrasar projetos e até levar empresas à falência.
2) Códigos ruins reduzem a produtividade dos programadores e podem exigir grandes reestruturações caras para serem consertados.
3) Manter códigos limpos é essencial para se trabalhar de forma rápida e eficiente, evitando atrasos e grandes reestruturações no futuro.
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
O documento discute projeto de APIs, abordando conceitos como aprendizado, programação, integração e boas práticas de projeto. É destacado que APIs devem ser intuitivas, focadas no usuário e ter testes para garantir a qualidade. O desenvolvimento deve seguir TDD, começando com casos de uso e testes para guiar o design.
O documento discute projeto de APIs, abordando conceitos como aprendizado, programação, integração e boas práticas de projeto. A seção de programação destaca a importância de iniciar cedo com casos de uso e TDD, além de testar código que utiliza a API.
TDC2018SP | Trilha .Net - Programacao Funcional com C#tdc-globalcode
O documento discute programação funcional usando C# e apresenta três tópicos principais: (1) Apresenta o conceito de programação funcional e como ele é diferente da programação orientada a objetos; (2) Discutem value containers como Option e Either e como eles podem ser usados para lidar com valores nulos de forma segura; (3) Apresenta um exemplo de refatoração de código usando value containers para lidar com erros de forma funcional.
O documento resume uma apresentação sobre programação funcional usando C#. Apresenta conceitos como value containers e como lidar com resultados e erros de forma funcional usando tipos como Option e Either. Demonstra como refatorar código imperativo para um estilo mais funcional com esses tipos.
Feature Injection - Descobrindo e entregando valor testávelHélio Medeiros
O documento discute técnicas para descobrir e entregar valor de forma testável através de feature injection em três etapas: 1) injetar a funcionalidade, 2) detalhar em exemplos, 3) aperfeiçoar com críticas. A técnica começa pelo objetivo e valor de negócios, escreve casos de uso e histórias de usuário para esclarecer com exemplos, e realiza testes para entregar valor de forma iterativa.
Este documento fornece instruções introdutórias para alunos sobre como navegar em um curso online sobre vendas. Ele explica que o curso está organizado em temas, assuntos e unidades, e incentiva os alunos a participarem ativamente de discussões e atividades no ambiente online do curso.
O documento apresenta uma introdução sobre inteligência artificial e machine learning, discutindo o que são essas tecnologias e como elas podem ser usadas. Ele também descreve as três principais etapas do processo de machine learning - pré-processamento, treinamento e avaliação - e apresenta o Custom Vision como uma plataforma que facilita a criação de modelos de classificação de imagens.
O documento apresenta os principais conceitos da programação funcional usando a linguagem F#, como imutabilidade, funções como valores, tipos fortemente tipados, pipelines e composição. O palestrante destaca recursos da linguagem como Option, unidades de medida e type providers para carregar dados dinamicamente.
O documento discute arquitetura de software limpa, explicando que ela separa a lógica principal de negócios de detalhes externos como interface do usuário e banco de dados. Apresenta o conceito de adaptadores que conectam o domínio principal à camada externa e demonstra uma aplicação que armazena dados de usuários usando essa abordagem.
Machine Learning: Classificação de Comentários com Azure ML & PythonGabriel Schade Cardoso
Slides utilizados no evento InterOP para demonstrar a criação de um modelo utilizando tanto Python quanto o Azure Machine Learning Studio.
Além disso, os slides dão uma boa noção do conceito geral.
Slides sobre Machine Learning e Inteligência Artificial utilizando como ferramenta o Azure Machine Learning Studio, ferramenta gratuita utilizada em Nuvem.
Através desta ferramenta podemos fazer o exemplo completo, desde a utilização de uma base de dados de exemplo, até a publicação do modelo como um serviço web.
Gabriel Schade cardoso apresenta sobre programação funcional usando C# e F#. Ele discute conceitos como value containers, option types, modelagem de domínio e extração de dados externos como planilhas do Excel e dados do World Bank.
Palestra sobre programação funcional para a trilha no TDC SP 2018.
Nesta palestra é possível encontrar slides sobre a utilização de programação funcional em C# e F#, mesclando as duas linguagens na mesma aplicação para uma solução híbrida.
O documento discute a arquitetura limpa para desenvolvimento de software. Apresenta os conceitos de arquitetura hexagonal, ports and adapters e como a arquitetura limpa separa a lógica do núcleo da aplicação de detalhes como a interface do usuário, banco de dados e linguagem. Demonstra uma aplicação que armazena dados de usuários usando essa abordagem arquitetural.
Gabriel Schade Cardoso é um mestre em computação aplicada, desenvolvedor, professor e autor de livros. Sua apresentação discute como utilizar inteligência artificial (IA) e aprendizado de máquina (machine learning) por meio de serviços cognitivos da Microsoft, demonstrando como gerar legendas para fotos e reconhecer informações sobre pessoas.
Machine learning é um tema muito popular, mas ainda é muito comum ter uma série de dúvidas.
O objetivo desta apresentação é desmistificar este tema, mostrando uma série de informações sobre os dados e com um exemplo prático.
Gabriel Schade Cardoso apresenta seu trabalho com desenvolvimento utilizando o Microsoft Kinect. Ele tem experiência com C# e .NET, além de ser autor de livros sobre Kinect e Windows Phone. O documento explica como o Kinect funciona para reconhecimento de voz, mãos e postura através de sensores e fluxos de esqueleto, bem como técnicas para detecção de gestos.
Gabriel Schade Cardoso é um desenvolvedor .NET com experiência em interfaces naturais como o Kinect. O documento descreve as principais funcionalidades do Kinect SDK, incluindo captura de profundidade, reconhecimento de esqueletos, streams de áudio, cores e profundidade. Algoritmos como a lei dos cossenos e produto escalar são usados para detecção de poses e gestos.
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
3. Bacharel em ciência da computação
Mestre em computação aplicada
Microsoft Innovative Educator (MIE)
Microsoft Specialist (MS)
C#
Javascript
ASP .NET MVC
3
GUI
Sobre mim
4. Microsoft Certified Solutions Assiciate (MCSA)
Web Applications
Autor dos livros da editora casa do código sobre
os assuntos:
Kinect
Windows Phone
Programação Funcional
4
GUI
Sobre mim
7. Linguagem Ubíqua
A linguagem ubíqua ou linguagem onipresente é uma
técnica que faz parte do bloco estratégico do DDD.
Ela nos ajuda na comunicação, contextualização,
identificação e delimitação de conceitos.
8. Linguagem Ubíqua
De forma muito resumida, linguagem ubíqua é: Todos
falando a mesma língua e usando as mesmas
palavras para definir as mesmas coisas.
Simples, certo?
Nem tanto...
9. Linguagem Ubíqua
Como modelarmos este objeto?
Bolacha?
Biscoito?
Não importa!
Desde que...
11. Uma triste história real
Início do projeto atual que trabalho;
O time do qual faço parte é responsável por
desenvolver um sistema de locação de automóveis de
uma empresa de Minas Gerais.
12. Uma triste história real
Quatro membros do time são de São Paulo e dois de
Itajaí;
Fizemos uma reunião de kick-off e recebemos a
documentação com os requisitos do cliente.
13. Uma triste história real
Não tínhamos um grande conhecimento sobre o
projeto;
Mapeamos as histórias de usuário, enviamos para o
cliente e começamos a desenvolver.
14. Uma triste história real
Em vários momentos da documentação citavam:
carros, veículos e modelos... Mas afinal o que era o
que?
18. Uma triste história real
Após conversas, concluímos
que:
Um veículo Uno da marca
Fiat possui os modelos:
vivace, celebration, way, etc
19. Uma triste história real
Depois de um pouco de sofrimento e deste
entendimento (que nem o cliente tinha) falamos
abertamente na reunião sobre linguagem ubíqua.
20. Uma triste história real
Tudo correu bem, até que...
Descobrimos que os três agrupamentos de
modelos eram a mesma coisa, mas o cliente
usava nomes diferentes
22. Uma triste história real
A documentação inclusive exemplificava com
valores diferentes!
23. Uma triste história real
Paramos a Sprint e
fizemos a maior call do
projeto com essa cara
24. Uma triste história com um final feliz
Depois desta call remodelamos diversas coisas
no sistema, mandamos uma nova proposta para
o cliente e tudo começou a correr bem.
25. Uma triste história com um final feliz
Para a linguagem ubíqua ser mais eficaz nosso
código também precisa refletir as coisas que
conversamos, precisamos de um código
expressivo.
27. Código expressivo
Existem diversas definições para código
expressivo.
“O código precisa expressar a linguagem mais
humana possível”
28. Código expressivo
Se um veículo tem uma descrição, o tipo/classe
que o representa, precisa ter uma propriedade
chamada descrição e não título ou nome.
29. Código expressivo
Este é o nível mais básico de expressividade,
podemos ir muito além e alcançar o nível bem
mais avançado.
52. Métodos
Outro ponto importante do código expressivo é
a criação correta de métodos e a extensibilidade
de comportamentos.
53. Métodos
O C#, Java e diversas outras linguagens já
incorporaram alguns conceitos funcionais, entre
eles, tornar os métodos membros de primeira
ordem.
54. Métodos
Ou seja, eles podem ser passados por
parâmetro, retornados e até se comportarem
parecidos com objetos.
São os chamados delegates.
55. Métodos
A principal vantagem é termos mais segurança
no código evitando funções mentirosas.
56. Métodos
Para exemplificar vamos utilizar um código
bastante simples e inseguro:
Tenha como premissa que há na mão de um jogador
as cartas:
Ás de copas
Ás de ouros
Dama de espadas
58. Métodos
Estamos tentando obter a primeira carta cujo
naipe seja paus;
Conforme dito anteriormente, não há nenhuma
carta deste naipe...
59. Métodos
O método FirstOrDefault do LINQ retornará o
valor padrão (default) do tipo Carta.
Isso fará com que qualquer tentativa de acesso
à uma propriedade ou método cause problemas
60. Métodos
Porque cartaPaus é um valor nulo e este tipo apenas se
disfarça de outros valores, ele não é um valor real de carta.
62. Métodos
Nossa busca precisa retornar um objeto que pode ou não
conter uma carta, mas que faça isso de maneira segura, ao
invés do nulo.
Quando um objeto pode ou não ser retornado é comum ele ser
chamado de valor opcional dentro do paradigma funcional.
63. Métodos
Uma outra nomenclatura bastante utilizada é o Maybe, ou em
português, Talvez.
Então precisamos criar uma busca que talvez retorne uma
carta.
64. Métodos
Este tipo de implementação geralmente é um pouco mais
avançada, mas não se assuste, faremos um passo-a-passo!
A primeira coisa é criarmos a classe para representar este
dado incerto.
76. Métodos
1. Esta classe deveria ser estática, ela não guarda estado e é
somente uma extensão;
2. O método TentarObter também deveria ser estático
3. Deveria ser possível retornar qualquer tipo de valor
4. Deixaremos este erro para depois;
5. Deveria ser possível a consulta em qualquer tipo de coleção
6. A coleção deveria ter um nome mais genérico que “cartas”
80. Métodos
Os últimos 3 problemas restantes se referem à consulta estar
contendo a lógica para a criação de um objeto do tipo Talvez.
Vamos resolver isso alterando a classe Talvez!
84. Métodos
Vamos para o toque final, já notamos que deixar a propriedade
Valor acessível é uma ideia ruim, pois pode gerar problemas
com null, então vamos restringir o acesso a ela.
87. Métodos
Já chegamos em um resultado muito bom, criando uma
estrutura nova com o Obter da classe Talvez, mas ainda há
alguns pequenos refinamentos no código.
1. Transformar a função TentarObter em uma extensão do LINQ
2. Facilitar a criação de objetos do tipo Talvez
88. Métodos
Para fazermos o TentarObter se tornar uma extensão como o
LINQ, basta tornar este método um extension method.
90. Métodos
Para facilitar a criação de objetos do tipo Talvez precisamos
criar um cast implícito.
Sobrecarregando o operador de cast permite a conversão
implícita, como já ocorre do int para o double, por exemplo.
91. Métodos
Com esta facilidade não precisamos mais criar o objeto Talvez
na consulta, podemos simplesmente declarar que retornamos
ele e o C# faz a magia acontecer.
95. Métodos
O legal disso, é que agora temos extensão para utilizar em
todas as coleções do projeto, veja outro exemplo:
96. Métodos
Ainda existe um problema inerente à nossa classe Talvez;
Ela ainda é uma classse...
Então ela pode ser nula!
Como resolver?
Utilize struct ao invés de classe