Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Clean code: Dicas para escrever um código mais coeso Thiago Bomfim

Slide 3

Slide 3 text

Sumário ●Design principles ●Dos and Don'ts ●Coesão e acoplamento

Slide 4

Slide 4 text

Design Principles Design principles 01

Slide 5

Slide 5 text

Design Principles 1. SRP 2. OCP 3. LSP 4. ISP 5. DIP 6. DRY 7. KISS 8. YAGNI

Slide 6

Slide 6 text

● Tolerante a mudança ● Compreensível ● Simples de ser testado ● Fácil de ser mantido ● Orgulho Design Principles Design Principles

Slide 7

Slide 7 text

Um prédio com boa arquitetura, mas com tijolos mal feitos não resultará numa boa construção. Por outro lado, mesmo com bons tijolos e arquitetura, caso a interligação entre os tijolos não seja de qualidade, a construção também não será satisfatória. Por isso que os princípios são de grande valia. Design Principles Design Principles

Slide 8

Slide 8 text

Design Principles Design Principles

Slide 9

Slide 9 text

Design Principles Design Principles

Slide 10

Slide 10 text

Design Principles Design Principles

Slide 11

Slide 11 text

Design Principles

Slide 12

Slide 12 text

SRP The Single Responsibility Principle 02

Slide 13

Slide 13 text

Reúna as coisas que mudam pelas mesmas razões. Separe as coisas que mudam por diferentes razões. SRP - Single Responsibility SRP

Slide 14

Slide 14 text

Cada módulo de software tem um, e apenas um, motivo para mudar. SRP - Single Responsibility SRP

Slide 15

Slide 15 text

SRP

Slide 16

Slide 16 text

OCP The Open-Closed Principle 03

Slide 17

Slide 17 text

Para sistemas de software serem fáceis de mudar, eles devem ser projetados para permitir o comportamento desses sistemas sejam alterados a adicionar novo código, em vez de alterar código. OCP - Open-Closed OCP

Slide 18

Slide 18 text

Um Módulo deve estar aberto para extensão, mas fechado para modificação. OCP - Open-Closed OCP

Slide 19

Slide 19 text

OCP

Slide 20

Slide 20 text

LSP The Liskov Substitution Principle 04

Slide 21

Slide 21 text

A famosa definição de subtipos de Barbara Liskov, de 1988. Em suma, este princípio diz que para construir sistemas de software a partir de partes intercambiáveis, essas partes devem aderir a um contrato que permite que essas partes sejam substituídas uma por outra. LSP - Liskov Substitution LSP

Slide 22

Slide 22 text

Um programa que usa uma interface não deve ser confundido por uma implementação dessa interface. LSP - Liskov Substitution LSP

Slide 23

Slide 23 text

LSP

Slide 24

Slide 24 text

LSP

Slide 25

Slide 25 text

ISP The Interface Segregation Principle 05

Slide 26

Slide 26 text

Este princípio aconselha os designers de software a evitar depender de coisas que eles não usam. ISP - Segregation Principle ISP

Slide 27

Slide 27 text

Mantenha os contratos pequenos para que os usuários não acabem dependendo de coisas que não precisam. ISP - Segregation Principle ISP

Slide 28

Slide 28 text

ISP

Slide 29

Slide 29 text

DIP The Dependency Inversion Principle 06

Slide 30

Slide 30 text

O código que implementa a política de alto nível não deve depender do código que implementa detalhes de baixo nível. Em vez disso, os detalhes devem depender das políticas. DIP - Dependency Principle DIP

Slide 31

Slide 31 text

Módulos de alto nível não devem depender de detalhes de baixo nível. DIP - Dependency Principle DIP

Slide 32

Slide 32 text

DIP

Slide 33

Slide 33 text

DIP

Slide 34

Slide 34 text

SOLID 07 SOLID

Slide 35

Slide 35 text

O Acrónimo SOLID foi cunhado nos anos 2004, identificado por Michael Feathers a possibilidade da criação desse Acrónimo com base nos princípios de diversos profissionais compilados pelo Robert C. Martin e apresentado por volta dos anos 2000s. SOLID SOLID

Slide 36

Slide 36 text

SOLID

Slide 37

Slide 37 text

SOLID

Slide 38

Slide 38 text

SOLID

Slide 39

Slide 39 text

DRY 08 DRY

Slide 40

Slide 40 text

Todo conhecimento deve ter uma representação única não ambígua e autorizada dentro de um sistema. DRY - Don’t Repeat Yourself DRY

Slide 41

Slide 41 text

O objetivo do DRY é reutilizar o código já escrito anteriormente. DRY - Don’t Repeat Yourself DRY

Slide 42

Slide 42 text

DRY

Slide 43

Slide 43 text

KISS 09 KISS

Slide 44

Slide 44 text

A simplicidade deve ser um objetivo chave no design, e a complexidade desnecessária deve ser evitada KISS - Keep It Simple, Stupid KISS

Slide 45

Slide 45 text

O princípio do KISS afirma que as coisas funcionam melhor se forem mantidos simples em vez de complicados. KISS - Keep It Simple, Stupid KISS

Slide 46

Slide 46 text

KISS

Slide 47

Slide 47 text

KISS

Slide 48

Slide 48 text

YAGNI 10 YAGNI

Slide 49

Slide 49 text

Sempre implemente as coisas quando você realmente precisa delas, nunca quando você apenas prevê que precisa delas YAGNI - You Ain’t Gonna Need It YAGNI

Slide 50

Slide 50 text

Tem como objetivo apagar todo o código desnecessário e se concentra nas funcionalidades atuais. YAGNI - You Ain’t Gonna Need It YAGNI

Slide 51

Slide 51 text

YAGNI

Slide 52

Slide 52 text

YAGNI

Slide 53

Slide 53 text

Dos and Don'ts Dos and Don'ts 11

Slide 54

Slide 54 text

❌ "date.sum(1);" Escreva nomes significativos Dos and Don'ts ✅ "date.sumDay(1);"

Slide 55

Slide 55 text

❌ Escreva métodos pequenos Dos and Don'ts

Slide 56

Slide 56 text

✅ Escreva métodos pequenos Dos and Don'ts

Slide 57

Slide 57 text

Mantenha seu código com apenas uma responsabilidade Dos and Don'ts ❌

Slide 58

Slide 58 text

Mantenha seu código com apenas uma responsabilidade Dos and Don'ts ✅

Slide 59

Slide 59 text

Não inclui linhas de comentário em seu código para explicar o código Dos and Don'ts ❌

Slide 60

Slide 60 text

Não inclui linhas de comentário em seu código para explicar o código Dos and Don'ts ✅

Slide 61

Slide 61 text

Não inclui linhas de comentário em seu código para explicar o código Dos and Don'ts ✅

Slide 62

Slide 62 text

Não crie valores mágicos Dos and Don'ts ❌

Slide 63

Slide 63 text

Não crie valores mágicos Dos and Don'ts ✅

Slide 64

Slide 64 text

Evite múltiplos argumentos Dos and Don'ts ❌

Slide 65

Slide 65 text

Evite múltiplos argumentos Dos and Don'ts ✅

Slide 66

Slide 66 text

Evite complexidade Dos and Don'ts ✅ ❌

Slide 67

Slide 67 text

Coesão e acoplamento Coesão e acoplamento 12

Slide 68

Slide 68 text

Baixa coesão significa que o sistema não possui uma estrutura clara, na qual classes e módulos possuem múltiplas responsabilidades e estão fortemente acoplados, dificultando a compreensão e manutenção do código. Coesão Coesão e acoplamento botão

Slide 69

Slide 69 text

Coesão Coesão e acoplamento botão

Slide 70

Slide 70 text

Alto acoplamento significa que as partes de um programa estão muito misturadas e dependem muito umas das outras, o que pode causar confusão e dificuldade para fazer alterações. Acoplamento Coesão e acoplamento botão

Slide 71

Slide 71 text

Acoplamento Coesão e acoplamento botão

Slide 72

Slide 72 text

Alta coesão e um baixo Acoplamento Coesão e acoplamento botão Alta coesão: Classes com responsabilidades únicas Baixo acoplamento: Minimizar o número de dependências entre as classes.

Slide 73

Slide 73 text

Alta coesão e um baixo Acoplamento Coesão e acoplamento botão ● Requer um design cuidadoso ● Separação de responsabilidades ● Abstração adequada para evitar dependências excessivas

Slide 74

Slide 74 text

Alta coesão e um baixo Acoplamento Coesão e acoplamento botão

Slide 75

Slide 75 text

Recapitulando Recapitulando 13

Slide 76

Slide 76 text

Recapitulando ●Design principles ●Design patterns ●Dos and Don'ts ●Coesão e acoplamento

Slide 77

Slide 77 text

Recapitulando ● SRP - The Single Responsibility Principle ● DRY - Don’t Repeat Yourself ● DIP - The Dependency Inversion Principle ● KISS - Keep It Simple, Stupid ● Legibilidade

Slide 78

Slide 78 text

Referências Referências 14

Slide 79

Slide 79 text

Clean Code A Handbook of Agile Software Craftsmanship - Robert Cecil Martin. Recapitulando

Slide 80

Slide 80 text

The Clean Coder A code of Conduct for Professional Programmers - Robert Cecil Martin Recapitulando

Slide 81

Slide 81 text

The Pragmatic Programmer - Andy Hunt, Dave Thomas Recapitulando

Slide 82

Slide 82 text

Test-Driven Java Development - Viktor Farcic, Alex Garcia Recapitulando

Slide 83

Slide 83 text

Extreme Programming Explained - Kent Beck, Cynthia Andres Recapitulando

Slide 84

Slide 84 text

https://www.linkedin.com/in/thiagobfim/ https://github.com/ThiagoBfim Referências

Slide 85

Slide 85 text

No content