SlideShare uma empresa Scribd logo
zup.com.br
@zupinnovation
>_<
Paula Santana
Boas Práticas para
desenvolvimento
java que nunca
saíram de moda
@zupinnovation zup.com.br
<>
Paula Santana
Specialist Developer/ZupEdu
paula.santana@zup.com.br
@psanrosa13
in/paula-macedo-santana-dev/
COLOQUE
UMA FOTO
SUA AQUI
paulasantanadev
Boas Práticas
Um mundo
@zupinnovation zup.com.br
<>
Tópicos Principais
Equals, HashCode e toString
Imutabilidade
Métodos
Primitivos
Exceções
Enum
Genéricos
<>
@zupinnovation zup.com.br
Equals HashCode ToSTring
@zupinnovation zup.com.br
<>
Equals() e HashCode()
● Ao sobrescrever o
equals sobrescreva o
hashcode
● Utilize o campos
principais do objeto
● Obedeça o contrato geral
● Não sobrescreva em classes
que não são objeto de valor
>_<
@zupinnovation zup.com.br
Classe exemplo: Conta
>_<
@zupinnovation zup.com.br
Vamos fazer um programa exemplo usando a classe conta.
>_<
@zupinnovation zup.com.br
Resultado no Console
>_<
@zupinnovation zup.com.br
Sobrescrevemos os métodos equals() e HashCode()
>_<
@zupinnovation zup.com.br
Se executarmos o programa novamente:
@zupinnovation zup.com.br
<>
Sobrescrever o toString()
Todo objeto herda o toString da Classe
Object.
Por default é utilizado o nome da classe + @ +
o hexadecimal sem sinal do hashcode.
@zupinnovation zup.com.br
<>
Facilidade na depuração Retornar todas as
informações pertinentes
contidas no objeto
É importante que os
dados contidos no
toString tenham
métodos de acesso
como get
Sobre sobrescrever o toString()
>_<
@zupinnovation zup.com.br
Identifique os objetos:
>_<
@zupinnovation zup.com.br
Como é a implementação do método toString na classe Object
>_<
@zupinnovation zup.com.br
Vamos sobrescrever com o que identifique o objeto
>_<
@zupinnovation zup.com.br
Identifique os objetos:
Imutabilidade
<>
@zupinnovation zup.com.br
O que é
Uma classe imutável é uma classe cuja
as instâncias não podem ser
modificadas.
@zupinnovation zup.com.br
<>
Setters
Não forneça métodos que mudem o
estado do objeto.
Herança
Garanta que a classe não possa ser
estendida.
Final
Faça com que todos os campos
sejam finais.
Tenha em mente ao Implementar
Private
Faça com que todos os campos
sejam privados.
Mutabilidade
Garanta acesso exclusivo a quaisquer
componentes mutáveis.
>_<
@zupinnovation zup.com.br
Classe exemplo: String
>_<
@zupinnovation zup.com.br
Vamos fazer um teste com a Classe String para
entendermos alguns pontos sobre Imutabilidade
>_<
@zupinnovation zup.com.br
Executamos e os valores permanecem iguais, porquê?
>_<
@zupinnovation zup.com.br
Recebemos a nova String em uma variável
>_<
@zupinnovation zup.com.br
Ao realizar o print da nova variável ele traz o valor
da nova String
<>
@zupinnovation zup.com.br
Padrão Funcional
Onde os métodos retornam o
resultado de uma função aplicada a
seu operando, sem modificá-lo.
>_<
@zupinnovation zup.com.br
Transformando a classe conta em uma classe imutável
>_<
@zupinnovation zup.com.br
Criamos uma classe mutável chamada Serviço
>_<
@zupinnovation zup.com.br
Adicionamos o Serviço na classe imutável Conta
>_<
@zupinnovation zup.com.br
Vamos testar a imutabilidade
>_<
@zupinnovation zup.com.br
Ao executarmos :
>_<
@zupinnovation zup.com.br
Mudamos o get para devolver uma cópia do objeto
Os objetos imutáveis são
thread-safe, não exigem
sincronização, ou seja não serão
corrompidos em seu uso em
múltiplas threads
Evitam bugs de inconsistência
de dados devido a alterações de
objetos durante fluxos
complexos.
São ótimos para construção e
composição de outros objetos.
@zupinnovation zup.com.br
Vantagens
<>
@zupinnovation zup.com.br
Problemas
Um grande porém é a quantidade de instâncias
geradas quando trabalhamos com classes imutáveis,
isso pode se tornar um problema especialmente
quando os objetos são complexos e exigem um
volume alto do mesmo objeto por fluxo de execução.
Nesses casos é orientado preferirmos o uso de
classes primitivas nesse tipo de objeto, para melhoria
da performance.
<>
@zupinnovation zup.com.br
Uso de static factory
para criação de
objetos ao invés de
construtores públicos
Para classes de
domínios resista a
criação de setters a
menos que realmente
faça sentido.
Mesmo que sua classe
não seja totalmente
imutável de
preferência para
atributos do tipo final
a menos que haja
necessidade de não
ser
Alternativas da modelagem
Métodos
Métodos
Existem muitos cuidados que devemos ter quando falamos de
construção de métodos em Java, desde como elaboramos eles e
cuidados com alguns recursos como uso de varargs ou Optional.
Vamos analisar 4 itens que podem te ajudar no dia a dia.
Tome cuidado ao
projetar
assinaturas de
métodos Faça Cópias
Defensivas
Retorne
Coleções e
Arrays vazios ao
invés de nulos
Validação de
Parâmetros
<>
@zupinnovation zup.com.br
Nome de Métodos
Por convenção segue que os nomes devem ter um
verbo incluindo o objeto ao qual vão realizar a ação.
Em alguns tipos de retorno existem nomes mais
utilizados por convenção como o caso de métodos
que retornam tipos booleanos que tem o prefixo is ou
has, ou caso de conversão de valores onde é mais
usual utilizar o “to”, uma fonte desses padrões são as
próprias classes do Java.
>_<
@zupinnovation zup.com.br
Exemplo:
>_<
@zupinnovation zup.com.br
Exemplo:
<>
@zupinnovation zup.com.br
Evite listas longas de
parâmetro
Métodos com muitos parâmetros são um grande
problema, em especial porque os programadores
podem passar em ordem errada quando os tipos
seguidos são iguais.
Existem três técnicas para métodos que possuem
muitos parâmetros: quebrar o método em métodos
menores, criar um objeto específico como parâmetro
que agregue os parâmetros ou uso de Builder.
>_<
@zupinnovation zup.com.br
Exemplo Objeto para agregar parâmetros:
>_<
@zupinnovation zup.com.br
Exemplo de gerar métodos menores com menos
parâmetros:
>_<
@zupinnovation zup.com.br
Exemplo para Builder
>_<
@zupinnovation zup.com.br
Exemplo para Builder
>_<
@zupinnovation zup.com.br
Exemplo para Builder
<>
@zupinnovation zup.com.br
O que mais considerar ao projetar um método
Prefira receber tipos no
parâmetro como
Interface ao invés da
implementação
Prefira utilizar ENUM de
dois elementos invés de
receber parâmetros
booleanos
<>
@zupinnovation zup.com.br
Cópias Defensivas
Um dos pontos das práticas de programação defensiva é referente a cópias de
objetos em métodos. Essas cópias não se aplicam somente a classes imutáveis, mas
evitam alterações em objetos de maneira não clara. Devemos sempre ponderar o uso
quando o requisito de desempenho for primordial
<>
@zupinnovation zup.com.br
Nunca retorne Coleções ou Arrays nulos ao
invés de vazios
<>
@zupinnovation zup.com.br
Validação de Parâmetros
O ideal é que na entrada do método seja garantido que os valores e regras para execução do método sejam validados
para evitar erros que podem ser mais difíceis de serem detectados posteriormente.
Primitivos
@zupinnovation zup.com.br
<>
Primitivos tem apenas valores,
enquanto primitivos
empacotados produzem
instâncias na memória, mesmo
que possuam o mesmo valor.
Primitivos possuem apenas
valor funcional enquanto tipos
empacotados possuem valor
nulo.
Primitivos são mais eficientes
em tempo e armazenamento
do que os primitivos
empacotados.
<>
@zupinnovation zup.com.br
Prefira Tipos primitivos
do que Primitivos
empacotados
Autoboxing e Autounboxing
<>
@zupinnovation zup.com.br
Quando usar Tipos
Empacotados?
Coleções
Classes que esperam um Tipo
Dentro de métodos que usam Reflexão
Exceptions
<>
@zupinnovation zup.com.br
Hierarquia
<>
@zupinnovation zup.com.br
Checked
Utilize esse tipo de
exceção para as
condições das quais o
chamador possa
razoavelmente se
recuperar
Unchecked
Esse tipo de exceção é
lançada em tempo de
execução, esse tipo de
exception deve ser
utilizada para indicar
erro de programação
Exceções Checked e Unchecked
<>
@zupinnovation zup.com.br
Exemplo Exception
Checked
Erros que ocorrem em
tempo de compilação
<>
@zupinnovation zup.com.br
Exemplo Exception Checked
<>
@zupinnovation zup.com.br
Exemplo Exception
Unchecked
Erros que ocorrem em
tempo de Execução
<>
@zupinnovation zup.com.br
Exemplo Exception Checked -
Não lance de forma genérica
<>
@zupinnovation zup.com.br
Sempre na dúvida
utilize exceções não
verificadas
Pode ser muito confuso em que situações devemos
ou não implementar um tipo ou outro de exceção, a
recomendação é que se você não sabe se será
possível ter recuperação de um problema, que utilize
apenas o tipo Unchecked.
Exceções verificadas herdam de Exception, Exceções
não verificadas herdam de RuntimeException.
<>
@zupinnovation zup.com.br
Evite usar exceções do
tipo Unchecked para
controle de fluxo
Com o uso de Handlers em apis muito se criou de
confusão o que seria melhor tratar por código ou o
que seria melhor tratar por Exception.
Exceções deveriam ser utilizadas apenas em casos de
erros inesperados onde o programador realmente
não conseguiria prever o problema.
<>
@zupinnovation zup.com.br
Exemplo de Exception para
controle de fluxo
<>
@zupinnovation zup.com.br
Exemplo de Exception para controle de
fluxo - sem a exception
<>
@zupinnovation zup.com.br
Tratamento de
Exceptions
Outro ponto que confunde a maioria dos
desenvolvedores é como tratar a exceção.
<>
@zupinnovation zup.com.br
Tratamento de
Exceptions
Outro ponto que confunde a maioria dos
desenvolvedores é como tratar a exceção.
<>
@zupinnovation zup.com.br
Tratamento de
Exceptions
<>
@zupinnovation zup.com.br
Tratamento de
Exceptions
Enum
<>
@zupinnovation zup.com.br
Usem Enum ao invés
de constantes.
Utilizar Enum permite uma maior expressividade no
código, o tornando mais limpo, além de conseguirmos
implementar atributos e ações a cada elemento do
Enum e garantirmos imutabilidade já que eles
possuem valores fixos..
Cada constante do Enum gerará uma classe como
Singleton no sistema e a facilidade e manutenção
para valores fixos que podem aumentar é uma
vantagem.
<>
@zupinnovation zup.com.br
Uso de Enum
<>
@zupinnovation zup.com.br
Uso de Enum
Genérics
<>
@zupinnovation zup.com.br
Evite o uso de tipo
Bruto
Através do uso de Genérics no Java garantimos o
tipo utilizado e avisamos o compilador sobre isso,
tornando mais segura a implementação do código.
Todo tipo genérico define um tipo bruto, que é o
nome do tipo genérico sem as informações de
genéricos nele. Por exemplo, o tipo genérico List<E>
tem o tipo bruto List. Vamos entender o que isso
pode impactar em nosso código.
<>
@zupinnovation zup.com.br
Usando Tipo Bruto
<>
@zupinnovation zup.com.br
Usando Tipo Genérico
<>
@zupinnovation zup.com.br
Usando Tipo Genérico
em métodos
Obrigada!

Mais conteúdo relacionado

Semelhante a Boas Práticas para desenvolvimento java que nunca saíram de moda

[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
Samanta Cicilia
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
Isaac de Souza
 
Android testing PT-BR
Android testing PT-BRAndroid testing PT-BR
Android testing PT-BR
rafaeladson
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
elliando dias
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
Elias Nogueira
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
Diego Pacheco
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
Fabrício Vargas Matos
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
Camilo Ribeiro
 
Clean code
Clean codeClean code
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
Leonardo Molinari
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
Leonardo Molinari
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
Leonardo Molinari
 
Template para lessons learned 2.0 v1
Template para lessons learned 2.0 v1Template para lessons learned 2.0 v1
Template para lessons learned 2.0 v1
João Cabral
 
Workshop - Plano de Testes End to End com o Microsoft Test Manager
Workshop   - Plano de Testes End to End com o Microsoft Test ManagerWorkshop   - Plano de Testes End to End com o Microsoft Test Manager
Workshop - Plano de Testes End to End com o Microsoft Test Manager
Alan Carlos
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Renato Groff
 
GOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdfGOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdf
RodolphoCesar2
 
Kanban, o Método - Melhorando seu fluxo de trabalho de forma realmente eficiente
Kanban, o Método - Melhorando seu fluxo de trabalho de forma realmente eficienteKanban, o Método - Melhorando seu fluxo de trabalho de forma realmente eficiente
Kanban, o Método - Melhorando seu fluxo de trabalho de forma realmente eficiente
thiagodacosta
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
Denis Ferrari
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
Samanta Cicilia
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
minastestingconference
 

Semelhante a Boas Práticas para desenvolvimento java que nunca saíram de moda (20)

[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
Android testing PT-BR
Android testing PT-BRAndroid testing PT-BR
Android testing PT-BR
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Clean code
Clean codeClean code
Clean code
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
 
Template para lessons learned 2.0 v1
Template para lessons learned 2.0 v1Template para lessons learned 2.0 v1
Template para lessons learned 2.0 v1
 
Workshop - Plano de Testes End to End com o Microsoft Test Manager
Workshop   - Plano de Testes End to End com o Microsoft Test ManagerWorkshop   - Plano de Testes End to End com o Microsoft Test Manager
Workshop - Plano de Testes End to End com o Microsoft Test Manager
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
GOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdfGOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdf
 
Kanban, o Método - Melhorando seu fluxo de trabalho de forma realmente eficiente
Kanban, o Método - Melhorando seu fluxo de trabalho de forma realmente eficienteKanban, o Método - Melhorando seu fluxo de trabalho de forma realmente eficiente
Kanban, o Método - Melhorando seu fluxo de trabalho de forma realmente eficiente
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 

Mais de Paula Santana

Como começar quando se esta começando?
Como começar quando se esta começando?Como começar quando se esta começando?
Como começar quando se esta começando?
Paula Santana
 
Desvendando a arquitetura orientada a eventos
Desvendando a arquitetura orientada a eventosDesvendando a arquitetura orientada a eventos
Desvendando a arquitetura orientada a eventos
Paula Santana
 
Clean code com features do java 8 a java 14
Clean code com features do java 8 a java 14Clean code com features do java 8 a java 14
Clean code com features do java 8 a java 14
Paula Santana
 
Como começas quando se está começando
Como começas quando se está começandoComo começas quando se está começando
Como começas quando se está começando
Paula Santana
 
Refatoracao de codigo
Refatoracao de codigoRefatoracao de codigo
Refatoracao de codigo
Paula Santana
 
Desenvolvimento com arquitetura baseada em eventos
Desenvolvimento com arquitetura baseada em eventosDesenvolvimento com arquitetura baseada em eventos
Desenvolvimento com arquitetura baseada em eventos
Paula Santana
 
Como fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em javaComo fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em java
Paula Santana
 
Workshop git para iniciantes
Workshop git para iniciantesWorkshop git para iniciantes
Workshop git para iniciantes
Paula Santana
 
Facilitando a implementação de mensageria em aplicações Java
Facilitando a implementação de mensageria em aplicações JavaFacilitando a implementação de mensageria em aplicações Java
Facilitando a implementação de mensageria em aplicações Java
Paula Santana
 
Como uma linguagem de programação pode empoderar uma mulher
Como uma linguagem de programação pode empoderar uma mulherComo uma linguagem de programação pode empoderar uma mulher
Como uma linguagem de programação pode empoderar uma mulher
Paula Santana
 
Graphql - o que é, onde e porque usar?
Graphql - o que é, onde e porque usar?Graphql - o que é, onde e porque usar?
Graphql - o que é, onde e porque usar?
Paula Santana
 
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Paula Santana
 
Desenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageriaDesenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageria
Paula Santana
 
4 revolucao industrial
4 revolucao industrial4 revolucao industrial
4 revolucao industrial
Paula Santana
 
Conhecendo o Jnosql
Conhecendo o JnosqlConhecendo o Jnosql
Conhecendo o Jnosql
Paula Santana
 
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseadaDesenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
Paula Santana
 
Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdc
Paula Santana
 
Testes de contrato
Testes de contratoTestes de contrato
Testes de contrato
Paula Santana
 
Spring Rest
Spring RestSpring Rest
Spring Rest
Paula Santana
 
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
Paula Santana
 

Mais de Paula Santana (20)

Como começar quando se esta começando?
Como começar quando se esta começando?Como começar quando se esta começando?
Como começar quando se esta começando?
 
Desvendando a arquitetura orientada a eventos
Desvendando a arquitetura orientada a eventosDesvendando a arquitetura orientada a eventos
Desvendando a arquitetura orientada a eventos
 
Clean code com features do java 8 a java 14
Clean code com features do java 8 a java 14Clean code com features do java 8 a java 14
Clean code com features do java 8 a java 14
 
Como começas quando se está começando
Como começas quando se está começandoComo começas quando se está começando
Como começas quando se está começando
 
Refatoracao de codigo
Refatoracao de codigoRefatoracao de codigo
Refatoracao de codigo
 
Desenvolvimento com arquitetura baseada em eventos
Desenvolvimento com arquitetura baseada em eventosDesenvolvimento com arquitetura baseada em eventos
Desenvolvimento com arquitetura baseada em eventos
 
Como fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em javaComo fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em java
 
Workshop git para iniciantes
Workshop git para iniciantesWorkshop git para iniciantes
Workshop git para iniciantes
 
Facilitando a implementação de mensageria em aplicações Java
Facilitando a implementação de mensageria em aplicações JavaFacilitando a implementação de mensageria em aplicações Java
Facilitando a implementação de mensageria em aplicações Java
 
Como uma linguagem de programação pode empoderar uma mulher
Como uma linguagem de programação pode empoderar uma mulherComo uma linguagem de programação pode empoderar uma mulher
Como uma linguagem de programação pode empoderar uma mulher
 
Graphql - o que é, onde e porque usar?
Graphql - o que é, onde e porque usar?Graphql - o que é, onde e porque usar?
Graphql - o que é, onde e porque usar?
 
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
 
Desenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageriaDesenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageria
 
4 revolucao industrial
4 revolucao industrial4 revolucao industrial
4 revolucao industrial
 
Conhecendo o Jnosql
Conhecendo o JnosqlConhecendo o Jnosql
Conhecendo o Jnosql
 
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseadaDesenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
 
Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdc
 
Testes de contrato
Testes de contratoTestes de contrato
Testes de contrato
 
Spring Rest
Spring RestSpring Rest
Spring Rest
 
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
 

Último

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
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
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
 
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
 
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
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 

Último (6)

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
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
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
 
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
 
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
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 

Boas Práticas para desenvolvimento java que nunca saíram de moda