SlideShare una empresa de Scribd logo
1 de 62
Descargar para leer sin conexión
PROGRAMANDO PARA
HUMANOS
ANDROID
DEVELOPER
@JUANGOMEZ_INF
Juan Gómez Trapero
ESCRIBIENDO CÓDIGO PARA HUMANOS
LEGIBLE
SOSTENIBLE
REUTILIZABLE
VERIFICABLE
ESCRIBIENDO CÓDIGO PARA HUMANOS
RÍGIDO
FRÁGIL
POCO/NADA REUTILIZABLE
OPACO
ESCRIBIENDO CÓDIGO PARA HUMANOS
¿POR QUÉ ESCRIBIMOS “MAL” CÓDIGO?
▸ Rapidez
▸ Falta de motivación/experiencia
▸ Posponerlo para algún refactor
ESCRIBIENDO CÓDIGO PARA HUMANOS
CLEAN CODE
▸ Robert C. Martin [2008]
▸ “Even bad code can
function. But if code isn’t
clean, it can bring a
development organization
to its knees
“INDEED, THE RATIO OF TIME SPENT READING VERSUS WRITING IS
WELL OVER 10 TO 1. WE ARE CONSTANTLY READING OLD CODE AS
PART OF THE EFFORT TO WRITE NEW CODE. ...[THEREFORE,]
MAKING IT EASY TO READ MAKES IT EASIER TO WRITE.”
Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship
CLEAN CODE
CLEAN CODE
GENERAL
▸ Convenciones estándar
▸ Código lo más simple posible
▸ “Regla del Boy Scout”
CLEAN CODE
NOMBRES
CLEAN CODE
NOMBRES
▸ Descriptivos y claros
CLEAN CODE
NOMBRES
▸ Descriptivos y claros
CLEAN CODE
NOMBRES
CLEAN CODE
NOMBRES
▸ Pronunciables y fáciles de buscar
CLEAN CODE
FUNCIONES
CLEAN CODE
FUNCIONES
▸ Pequeñas
▸ Una única tarea
▸ Pocos argumentos
▸ Evitar efectos secundarios
▸ Evitar flags como argumento
▸ DRY: Don’t Repeat Yourself
CLEAN CODE
FUNCIONES
CLEAN CODE
COMENTARIOS
CLEAN CODE
COMENTARIOS
▸ “Don’t comment bad code - rewrite it”
▸ Explicación mediante el código
▸ Evitar la redundancia
▸ TO DO y advertencias
CLEAN CODE
COMENTARIOS
CLEAN CODE
COMENTARIOS
CLEAN CODE
GESTIÓN DE ERRORES
CLEAN CODE
GESTIÓN DE ERRORES
▸ Evitar el uso de códigos de error
▸ Usar excepciones
▸ Cada vez que se devuelve Null muere un gatito
▸ … y cuando se pasa Null como parámetro también
CLEAN CODE
GESTIÓN DE ERRORES
CLEAN CODE
GESTIÓN DE ERRORES
CLEAN CODE
TESTS UNITARIOS
CLEAN CODE
TESTS UNITARIOS
▸ Un único assert por test
▸ F.I.R.S.T
▸ Fast
▸ Independent
▸ Repeatable
▸ Self-Validating
▸ Timely
¿Y AHORA QUÉ?
ESCRIBIENDO CÓDIGO PARA HUMANOS
SOLID
▸ Fácil de mantener
▸ Fácil de extender
▸ Robusto
SOLID
SOLID
▸ Single Responsibility Principle (SRP)
▸ Open Closed Principle (OCP)
▸ Liskov Substitution Principle (LSP)
▸ Interface Segregation Principle (ISP)
▸ Dependency Inversion Principle (DIP)
SOLID
SINGLE RESPONSIBILITY PRINCIPLE (SRP)
“A class should have only one reason to change”
SOLID
SINGLE RESPONSIBILITY PRINCIPLE (SRP)
SOLID
SINGLE RESPONSIBILITY PRINCIPLE (SRP)
SOLID
SINGLE RESPONSIBILITY PRINCIPLE (SRP)
▸ Reducción del acoplamiento
▸ Sencillez en el mantenimiento
SOLID
OPEN CLOSED PRINCIPLE (OCP)
“Software entities (classes, modules, functions,
etc.) should be open for extension, but closed for
modification”
SOLID
OPEN CLOSED PRINCIPLE (OCP)
SOLID
OPEN CLOSED PRINCIPLE (OCP)
SOLID
OPEN CLOSED PRINCIPLE (OCP)
▸ Robustez
▸ Reusabilidad y sencillez a la hora de añadir nuevas
features
SOLID
LISKOV SUBSTITUTION PRINCIPLE (LSP)
“Objects in a program should be replaceable with
instances of their subtypes without altering the
correctness of that program.”
SOLID
LISKOV SUBSTITUTION PRINCIPLE (LSP)
SOLID
LISKOV SUBSTITUTION PRINCIPLE (LSP)
SOLID
LISKOV SUBSTITUTION PRINCIPLE (LSP)
SOLID
LISKOV SUBSTITUTION PRINCIPLE (LSP)
▸ Reusabilidad
▸ Claridad en la jerarquía de clases
SOLID
INTERFACE SEGREGATION PRINCIPLE (ISP)
“Many client-specific interfaces are better than one
general-purpose interface”
SOLID
INTERFACE SEGREGATION PRINCIPLE (ISP)
SOLID
INTERFACE SEGREGATION PRINCIPLE (ISP)
SOLID
INTERFACE SEGREGATION PRINCIPLE (ISP)
SOLID
INTERFACE SEGREGATION PRINCIPLE (ISP)
▸ Desacoplamiento
▸ Sencillez en refactor
SOLID
DEPENDENCY INVERSION PRINCIPLE (DIP)
“High-level modules should not depend on low-level
modules. Both should depend on abstractions.”
“Abstractions should not depend on details. Details
should depend on abstractions”
SOLID
DEPENDENCY INVERSION PRINCIPLE (DIP)
SOLID
DEPENDENCY INVERSION PRINCIPLE (DIP)
SOLID
DEPENDENCY INVERSION PRINCIPLE (DIP)
▸ Reducción del acoplamiento
▸ Reusabilidad
▸ Permite realizar test más completos
SOLID
CUIDADO CON LA SOBRE-INGENIERÍA
INTENTA SER PRAGMÁTICO
APLICA EL SENTIDO COMÚN
ESCRIBIENDO CÓDIGO PARA HUMANOS
REFERENCIAS
▸ SOLID: The Definitive Guide - Arthur Antunes
▸ Clean Code - Robert C. Martin
▸ Principios de DOO - Robert C. Martin
▸ https://android.jlelse.eu/solid-principles-the-definitive-guide-75e30a284dea#.oofluhq1k
▸ http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
▸ https://www.amazon.es/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

Más contenido relacionado

La actualidad más candente

Taller Historias de usuario 20130117
Taller Historias de usuario 20130117Taller Historias de usuario 20130117
Taller Historias de usuario 20130117Jose Manuel Beas
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxNeoClova
 
Adoptando y escalando la agilidad en corporaciones
Adoptando y escalando la agilidad en corporacionesAdoptando y escalando la agilidad en corporaciones
Adoptando y escalando la agilidad en corporacionesGeneXus
 
JFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
JFokus: Cubes, Hexagons, Triangles, and More: Understanding MicroservicesJFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
JFokus: Cubes, Hexagons, Triangles, and More: Understanding MicroservicesChris Richardson
 
Agile coaching - Logrando equipos de alto rendimiento
Agile coaching - Logrando equipos de alto rendimientoAgile coaching - Logrando equipos de alto rendimiento
Agile coaching - Logrando equipos de alto rendimientoAlex Canizales Castro
 
Lean StartUp y Agile Software Development
Lean StartUp y Agile Software DevelopmentLean StartUp y Agile Software Development
Lean StartUp y Agile Software DevelopmentJohnny Ordóñez
 
Retos de la Gestión de Portafolio Ágil
Retos de la Gestión de Portafolio ÁgilRetos de la Gestión de Portafolio Ágil
Retos de la Gestión de Portafolio ÁgilGiovanny Cifuentes
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축Juhong Park
 
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"InfraEngineer
 
Lean Inception: how to align people and build the right product
Lean Inception: how to align people and build the right productLean Inception: how to align people and build the right product
Lean Inception: how to align people and build the right productPaulo Caroli
 
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...Edureka!
 
Diseño de Centro de Excelencia en Ágil (CoEs)
Diseño de Centro de Excelencia en Ágil (CoEs)Diseño de Centro de Excelencia en Ágil (CoEs)
Diseño de Centro de Excelencia en Ágil (CoEs)Johnny Ordóñez
 
Escalando Agile con SAFe - Regional Scrum Gathering Quito 2015
Escalando Agile con SAFe - Regional Scrum Gathering Quito 2015Escalando Agile con SAFe - Regional Scrum Gathering Quito 2015
Escalando Agile con SAFe - Regional Scrum Gathering Quito 2015Johnny Ordóñez
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인VMware Tanzu Korea
 
Group Replication in MySQL 8.0 ( A Walk Through )
Group Replication in MySQL 8.0 ( A Walk Through ) Group Replication in MySQL 8.0 ( A Walk Through )
Group Replication in MySQL 8.0 ( A Walk Through ) Mydbops
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)IMQA
 

La actualidad más candente (20)

Taller Historias de usuario 20130117
Taller Historias de usuario 20130117Taller Historias de usuario 20130117
Taller Historias de usuario 20130117
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptx
 
Adoptando y escalando la agilidad en corporaciones
Adoptando y escalando la agilidad en corporacionesAdoptando y escalando la agilidad en corporaciones
Adoptando y escalando la agilidad en corporaciones
 
JFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
JFokus: Cubes, Hexagons, Triangles, and More: Understanding MicroservicesJFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
JFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
 
Agile coaching - Logrando equipos de alto rendimiento
Agile coaching - Logrando equipos de alto rendimientoAgile coaching - Logrando equipos de alto rendimiento
Agile coaching - Logrando equipos de alto rendimiento
 
Lean StartUp y Agile Software Development
Lean StartUp y Agile Software DevelopmentLean StartUp y Agile Software Development
Lean StartUp y Agile Software Development
 
Retos de la Gestión de Portafolio Ágil
Retos de la Gestión de Portafolio ÁgilRetos de la Gestión de Portafolio Ágil
Retos de la Gestión de Portafolio Ágil
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
 
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
 
Doing REST Right
Doing REST RightDoing REST Right
Doing REST Right
 
Liderazgo y agilidad empresarial
Liderazgo y agilidad empresarialLiderazgo y agilidad empresarial
Liderazgo y agilidad empresarial
 
Lean Inception: how to align people and build the right product
Lean Inception: how to align people and build the right productLean Inception: how to align people and build the right product
Lean Inception: how to align people and build the right product
 
Principios ágiles
Principios ágilesPrincipios ágiles
Principios ágiles
 
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...
 
Diseño de Centro de Excelencia en Ágil (CoEs)
Diseño de Centro de Excelencia en Ágil (CoEs)Diseño de Centro de Excelencia en Ágil (CoEs)
Diseño de Centro de Excelencia en Ágil (CoEs)
 
Escalando Agile con SAFe - Regional Scrum Gathering Quito 2015
Escalando Agile con SAFe - Regional Scrum Gathering Quito 2015Escalando Agile con SAFe - Regional Scrum Gathering Quito 2015
Escalando Agile con SAFe - Regional Scrum Gathering Quito 2015
 
Arquitectura de microservicios
Arquitectura de microserviciosArquitectura de microservicios
Arquitectura de microservicios
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
 
Group Replication in MySQL 8.0 ( A Walk Through )
Group Replication in MySQL 8.0 ( A Walk Through ) Group Replication in MySQL 8.0 ( A Walk Through )
Group Replication in MySQL 8.0 ( A Walk Through )
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
 

Similar a Clean code y SOLID

Refactoring to clean code
Refactoring to clean codeRefactoring to clean code
Refactoring to clean codeadrianeidelman
 
Principios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosPrincipios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosJose E. Rodriguez Huerta
 
Lo que odiamos de la agilidad
Lo que odiamos de la agilidadLo que odiamos de la agilidad
Lo que odiamos de la agilidadLeonardo Soto
 
Prácticas ágiles y software abierto para poner en órbita tu startup
Prácticas ágiles y software abierto para poner en órbita tu startupPrácticas ágiles y software abierto para poner en órbita tu startup
Prácticas ágiles y software abierto para poner en órbita tu startupRuben Orta
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Meetup IasCode Buenos Aires - IasCode como habilitador de Open Banking
Meetup IasCode Buenos Aires - IasCode como habilitador de Open Banking Meetup IasCode Buenos Aires - IasCode como habilitador de Open Banking
Meetup IasCode Buenos Aires - IasCode como habilitador de Open Banking Santiago Blanco
 

Similar a Clean code y SOLID (10)

Principios SOLID
Principios SOLIDPrincipios SOLID
Principios SOLID
 
Refactoring to clean code
Refactoring to clean codeRefactoring to clean code
Refactoring to clean code
 
Principios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosPrincipios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a Objetos
 
Deconstrucción de SOLID
Deconstrucción de SOLIDDeconstrucción de SOLID
Deconstrucción de SOLID
 
Lo que odiamos de la agilidad
Lo que odiamos de la agilidadLo que odiamos de la agilidad
Lo que odiamos de la agilidad
 
Gestión de índices en MongoDB
Gestión de índices en MongoDBGestión de índices en MongoDB
Gestión de índices en MongoDB
 
Prácticas ágiles y software abierto para poner en órbita tu startup
Prácticas ágiles y software abierto para poner en órbita tu startupPrácticas ágiles y software abierto para poner en órbita tu startup
Prácticas ágiles y software abierto para poner en órbita tu startup
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
SOLID para CatDotNet
SOLID   para CatDotNetSOLID   para CatDotNet
SOLID para CatDotNet
 
Meetup IasCode Buenos Aires - IasCode como habilitador de Open Banking
Meetup IasCode Buenos Aires - IasCode como habilitador de Open Banking Meetup IasCode Buenos Aires - IasCode como habilitador de Open Banking
Meetup IasCode Buenos Aires - IasCode como habilitador de Open Banking
 

Clean code y SOLID