SlideShare uma empresa Scribd logo
Linguagem Ubíqua +
Código Expressivo =
Felicidade :)
GABRIEL SCHADE CARDOSO
Quem é esse tal de Gabriel?
 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
 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
 Desenvolvedor Senior
 Professor
 Revisor
5
GUI
Sobre mim
Linguagem Ubíqua
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.
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...
Linguagem Ubíqua
 Como modelarmos este objeto?
 Bolacha?
 Biscoito?
 Não importa!
Desde que...
Uma triste história real :(
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.
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.
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.
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?
Uma triste história real
 Fiat Uno é um...
 Modelo?
 Veículo?
 Carro?
Uma triste história real
 Fiat Uno é um...
 Modelo?
 Veículo?
 Carro?
Uma triste história real
 Fiat Uno é um...
 Modelo?
 Veículo?
 Carro?
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
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.
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
Uma triste história real
 Classes;
 Grupos;
 Categorias.
Uma triste história real
 A documentação inclusive exemplificava com
valores diferentes!
Uma triste história real
 Paramos a Sprint e
fizemos a maior call do
projeto com essa cara 
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.
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.
Código Expressivo!
Código expressivo
 Existem diversas definições para código
expressivo.
“O código precisa expressar a linguagem mais
humana possível”
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.
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.
Modelando o domínio!
Código expressivo
 Vamos para um exemplo em outro domínio mais
simples: um jogo de baralho, como pife, por
exemplo.
Código expressivo
 Sabemos que uma partida de baralho possui os
seguintes elementos:
 Cartas
 Baralho
 Jogadores
Código expressivo
 Cartas são compostas por uma combinação de
valor + naipe...
 Quais são os valores possíveis?
 Quais são os naipes possíveis?
Código expressivo
Código expressivo
 E o resto?
Código expressivo
 Tudo certo!
 Será mesmo?
Código expressivo
Código expressivo
 Após a implementação deste domínio
precisamos implementar o comportamento de
comprar uma carta.
Código expressivo
 Esta modelagem, não impede isso...
Código expressivo
 Sugestões de solução?
 Passar a partida por parâmetro?
 Criar um classe para baralho e outra para a mão?
Tipagem com alias e F#!
Tipagem
 O paradigma funcional reforça bastante o uso
de tipos ao invés de classes.
 Vamos para a mesma modelagem!
Tipagem
Tipagem
Não são enums!
Tipagem
Produto escalar
de tipos!
Tipagem
Guardam valores do
Mesmo tipo, mas
Possuem nomes
diferentes
Tipagem
Tipagem
 Escreve-se menos código e conseguimos
modelar de forma melhor...
 Veja o mesmo exemplo do método de comprar
cartas:
Tipagem
 Esta modelagem, impede:
Código expressivo
Métodos também são
gente!
Métodos
 Outro ponto importante do código expressivo é
a criação correta de métodos e a extensibilidade
de comportamentos.
Métodos
 O C#, Java e diversas outras linguagens já
incorporaram alguns conceitos funcionais, entre
eles, tornar os métodos membros de primeira
ordem.
Métodos
 Ou seja, eles podem ser passados por
parâmetro, retornados e até se comportarem
parecidos com objetos.
 São os chamados delegates.
Métodos
 A principal vantagem é termos mais segurança
no código evitando funções mentirosas.
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
Métodos
 O que irá acontecer se realizarmos esta
operação?
Métodos
 Estamos tentando obter a primeira carta cujo
naipe seja paus;
 Conforme dito anteriormente, não há nenhuma
carta deste naipe...
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
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.
Métodos
 Como resolver?
 Vamos criar nossa própria busca!
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.
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.
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.
Métodos
Métodos
 Esta implementação atende este caso, mas é melhor deixá-la
mais genérica.
Métodos
 Precisamos agora, criar nossa lógica para encapsular o valor
de forma fluída e simples de usar.
Métodos
Métodos
 Vamos fazer nossa consulta para que ela talvez retorne uma
carta.
Métodos
Métodos
 Agora podemos usar desta forma:
Métodos
 Mas e se o programador simplesmente acessar a propriedade
Valor e ela estiver nula?
Métodos
 Este código está bom?
 Não...
 Ainda não resolvemos nenhum problema, mas calma, vamos
chegar lá.
Métodos
 Primeiro vamos ajustar todas besteiras feitas na classe
consultas, um total de DEZ erros.
Métodos
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”
Métodos
Métodos
7. A consulta está sendo feita de forma FIXA;
 Como resolver isso?
 Precisamos passar o método da consulta por parâmetro!
Métodos
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!
Métodos
Métodos
 Estamos quase lá...
 Veja como o código está ficando melhor:
Métodos
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.
Métodos
 Agora precisamos fazer com que o programador só consiga
utilizar ela quando existir um valor:
Métodos
 E como utilizamos?
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
Métodos
 Para fazermos o TentarObter se tornar uma extensão como o
LINQ, basta tornar este método um extension method.
Métodos
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.
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.
Métodos
Métodos
Métodos
Métodos
 O legal disso, é que agora temos extensão para utilizar em
todas as coleções do projeto, veja outro exemplo:
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
Métodos
 Existem muitas outras funcionalidades que poderíamos
conversar, mas por hoje é só.
Me encontre em
/gabrielschade
/gabrielschade
/gabrielschade
/gabrielschade
https://gabrielschade.github.io
Perguntas?

Mais conteúdo relacionado

Mais procurados

Algoritmia Tutorial
Algoritmia TutorialAlgoritmia Tutorial
Algoritmia Tutorial
Jose De Almeida Batista
 
Aula2
Aula2Aula2
Aula2
fkimura
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Gabriel Rubens
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
Sérgio Souza Costa
 
A Arte do Código Limpo
A Arte do Código LimpoA Arte do Código Limpo
A Arte do Código Limpo
Juliana Fideles
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Gustavo Coutinho
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
Carlos Wagner Costa
 
Desmistificando o DialogFlow
Desmistificando o DialogFlowDesmistificando o DialogFlow
Desmistificando o DialogFlow
Jackson F. de A. Mafra
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de Programação
Natanael Simões
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Natanael Simões
 
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
Jackson F. de A. Mafra
 

Mais procurados (11)

Algoritmia Tutorial
Algoritmia TutorialAlgoritmia Tutorial
Algoritmia Tutorial
 
Aula2
Aula2Aula2
Aula2
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
A Arte do Código Limpo
A Arte do Código LimpoA Arte do Código Limpo
A Arte do Código Limpo
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Desmistificando o DialogFlow
Desmistificando o DialogFlowDesmistificando o DialogFlow
Desmistificando o DialogFlow
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de Programação
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
 

Semelhante a DDD linguagem ubiqua + codigo expressivo

Uma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosUma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de erros
Gabriel Schade Cardoso
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
AndreCosta502039
 
C# 8 e ML.NET
C# 8 e ML.NETC# 8 e ML.NET
C# 8 e ML.NET
Gabriel Schade Cardoso
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
Evelise Vazquez
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
Rafael Paz
 
Excelência - PUC
Excelência - PUCExcelência - PUC
Excelência - PUC
almeidaricardo
 
Abordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETAbordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NET
Gabriel Schade Cardoso
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
Maurício Linhares
 
MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#
Gustavo Bellini Bigardi
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
biandamakengo08
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
Thiago Dieb
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Gabriel Rubens
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
Sergio Cabral
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Gilmar PSL
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
Thoughtworks
 
TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#
tdc-globalcode
 
Programação Funcional usando C#
Programação Funcional usando C#Programação Funcional usando C#
Programação Funcional usando C#
Gabriel Schade Cardoso
 
Feature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelFeature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testável
Hélio Medeiros
 
Msg capsula_1_-_esquentando_os_motores
 Msg capsula_1_-_esquentando_os_motores Msg capsula_1_-_esquentando_os_motores
Msg capsula_1_-_esquentando_os_motores
saudavel sabor
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
Daniel Brandão
 

Semelhante a DDD linguagem ubiqua + codigo expressivo (20)

Uma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosUma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de erros
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
C# 8 e ML.NET
C# 8 e ML.NETC# 8 e ML.NET
C# 8 e ML.NET
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Excelência - PUC
Excelência - PUCExcelência - PUC
Excelência - PUC
 
Abordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETAbordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NET
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#
 
Programação Funcional usando C#
Programação Funcional usando C#Programação Funcional usando C#
Programação Funcional usando C#
 
Feature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelFeature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testável
 
Msg capsula_1_-_esquentando_os_motores
 Msg capsula_1_-_esquentando_os_motores Msg capsula_1_-_esquentando_os_motores
Msg capsula_1_-_esquentando_os_motores
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 

Mais de Gabriel Schade Cardoso

Usando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em LibrasUsando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em Libras
Gabriel Schade Cardoso
 
Programação Funcional usando F#
Programação Funcional usando F#Programação Funcional usando F#
Programação Funcional usando F#
Gabriel Schade Cardoso
 
Clean Architecture com .NET Core
Clean Architecture com .NET CoreClean Architecture com .NET Core
Clean Architecture com .NET Core
Gabriel Schade Cardoso
 
Machine Learning: Classificação de Comentários com Azure ML & Python
Machine Learning: Classificação de Comentários com Azure ML & PythonMachine Learning: Classificação de Comentários com Azure ML & Python
Machine Learning: Classificação de Comentários com Azure ML & Python
Gabriel Schade Cardoso
 
Desmistificando Machine Learning
Desmistificando Machine LearningDesmistificando Machine Learning
Desmistificando Machine Learning
Gabriel Schade Cardoso
 
Programação Funcional usando C# e F#
Programação Funcional usando C# e F#Programação Funcional usando C# e F#
Programação Funcional usando C# e F#
Gabriel Schade Cardoso
 
Programação Funcional para Humanos
Programação Funcional para HumanosProgramação Funcional para Humanos
Programação Funcional para Humanos
Gabriel Schade Cardoso
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
Gabriel Schade Cardoso
 
Aplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive ServicesAplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive Services
Gabriel Schade Cardoso
 
Desmistificando machine learning
Desmistificando machine learningDesmistificando machine learning
Desmistificando machine learning
Gabriel Schade Cardoso
 
TDC - Desenvolvendo com Kinect
TDC - Desenvolvendo com KinectTDC - Desenvolvendo com Kinect
TDC - Desenvolvendo com Kinect
Gabriel Schade Cardoso
 
Desenvolvendo com Kinect
Desenvolvendo com KinectDesenvolvendo com Kinect
Desenvolvendo com Kinect
Gabriel Schade Cardoso
 

Mais de Gabriel Schade Cardoso (12)

Usando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em LibrasUsando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em Libras
 
Programação Funcional usando F#
Programação Funcional usando F#Programação Funcional usando F#
Programação Funcional usando F#
 
Clean Architecture com .NET Core
Clean Architecture com .NET CoreClean Architecture com .NET Core
Clean Architecture com .NET Core
 
Machine Learning: Classificação de Comentários com Azure ML & Python
Machine Learning: Classificação de Comentários com Azure ML & PythonMachine Learning: Classificação de Comentários com Azure ML & Python
Machine Learning: Classificação de Comentários com Azure ML & Python
 
Desmistificando Machine Learning
Desmistificando Machine LearningDesmistificando Machine Learning
Desmistificando Machine Learning
 
Programação Funcional usando C# e F#
Programação Funcional usando C# e F#Programação Funcional usando C# e F#
Programação Funcional usando C# e F#
 
Programação Funcional para Humanos
Programação Funcional para HumanosProgramação Funcional para Humanos
Programação Funcional para Humanos
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
 
Aplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive ServicesAplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive Services
 
Desmistificando machine learning
Desmistificando machine learningDesmistificando machine learning
Desmistificando machine learning
 
TDC - Desenvolvendo com Kinect
TDC - Desenvolvendo com KinectTDC - Desenvolvendo com Kinect
TDC - Desenvolvendo com Kinect
 
Desenvolvendo com Kinect
Desenvolvendo com KinectDesenvolvendo com Kinect
Desenvolvendo com Kinect
 

Último

TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 

Último (8)

TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 

DDD linguagem ubiqua + codigo expressivo

Notas do Editor

  1. Falar da história da primeira semana de projeto que me senti perdido.
  2. Carro é a composição de tudo
  3. Falar da história da primeira semana de projeto que me senti perdido.