Raybert Paredes
http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx
http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
Da miedo
http://blog.rwbenwick.com/wp-content/uploads/2009/12/Reason-For-Leaving-iStock_000008369823Medium.jpg
http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
Pues.
http://browse.deviantart.com/?qh=§ion=&q=avengers#/d41k54l
Tampoco.
http://www.pharmatek.com/developers/developers.htm
Nosotros
http://www.catosplace.net/blogs/personal/wp-content/uploads/2011/04/developers.jpg
Pero como??
http://4.bp.blogspot.com/-wLWxI2BZTEo/TbP44yGHHXI/AAAAAAAACMA/ck1BVzrucHo/s1600/bg_doubt.jpg
Aprendiendo un poco de
Etc
En donde???
Y otros mas
Veremos un poco de
Craftsmanship
Perdn, a la obra. ;)
http://www.osnews.com/story/19266/WTFs_m
http://3.bp.blogspot.com/_gP9GcIrRlbg/TDw7pXAfmeI/AAAAAAAAB-8/EDZjyqptYFE/s400/frustrated-computer-scream-entrepenuer.jpg
Y a veces nos damos cuenta que fuimos nosotros mismos los que escribimos ese DESASTRE!!!!
http://photos.pcpro.co.uk/blogs/wp-content/uploads/2010/10/frustrated.jpg
Clean Code
Actitud!!
Escribir cdigo que entienda la computadora es una tcnica, escribir cdigo que entienda un ser humano es un Arte
Nombres Significativos
Evitar la desinformacin
int a = l; if ( O == l ) a = O1; else l = 01;
Funciones
Funciones pequeas
Deberan ser entre 20 y 30 lneas por funcin
Switch
Evitarlo, rompe la regla de solamente una cosa
Argumentos
Uno es bueno, Cero es mejor EscribirArchivoEnDisco(archivo)
Flag
Es preferible usar polimorfismo, o crear nuevas funciones Mostrar(true) mostrarEnDesarrollo() mostrarEnPruebas()
Comentarios
if (empleado.esCandidatoBeneficiosSociales())
Buenos Comentarios
Legal:
// Derechos reservados por Seriva Inc. 2012 // Lanzado bajo GNU General Public License version 2.
Informativos:
// format matched kk:mm:ss EEE, MMM dd, yyyy Pattern patronTiempo = Pattern.compile( "\\d*:\\d*:\\d* \\w*, \\w* \\d*, \\d*");
Buenos Comentarios
Clarificacin:
assertTrue(a.compareTo(a) == 0); // a == a assertTrue(a.compareTo(b) != 0); // a != b
Advertencias de consecuencias:
// No correr este test a menos que // tengas bastante tiempo (Demora).
TODO:
// TODO: Tarea a realizar
Malos comentarios
Redundancia:
// Declaro una variable x del tipo entero int x;
Comentario errneo: Puede introducir errores Comentarios mandatorios: Tienden a que el se utilice de manera inadecuada Comentarios tipo Diario: Existen repositorios de cdigo fuente para hacer esta tarea
Malos comentarios
Ruido:
/* Constructor por defecto */ protected AnnualDateRule()
Marcadores de posicin: /****************************** Al cerrar una llave: } // if, Si las funciones son cortas no es necesario Cdigo comentado: // if (prueba == true) { }
Formato
Formato vertical
package fitnesse.wikitext.widgets; import java.util.regex.*; public class BoldWidget extends ParentWidget { public static final String REGEXP = "'''.+?'''"; private static final Pattern pattern = Pattern.compile("'''(.+?)'''", Pattern.MULTILINE + Pattern.DOTALL); public BoldWidget(ParentWidget parent, String text) throws Exception { super(parent); Matcher match = pattern.matcher(text); match.find(); addChildWidgets(match.group(1));} public String render() throws Exception { StringBuffer html = new StringBuffer("<b>"); html.append(childHtml()).append("</b>"); return html.toString();
Densidad Vertical Comentarios innecesarios suman lneas verticales Distancia vertical Conceptos ligados deben ir verticalmente cerca Declaracin de variables Al inicio?, Al final? Variables de instancia Siempre en un mismo lugar
Formato vertical
Alineacin horizontal:
private Socket private OutputStream private Socket socket; socket; output;
Identacion
public CommentWidget(string text){ super(text); }
Reglas de Equipo
Estructuras de Datos
Abstraccin
public interface Vehiculo { double obtenerCapacidadEnGalones(); double ontenerGalonesDeGasolina(); }
Abstraccin
public class Punto { public double x; public double y; } public interface Punto { double obtenerX(); double obtenerY(); void establecerCoordenada(double x, double y); double obtenerR(); double obtenerTheta(); void establecerPolar(double r, double theta); }
La ley de Demeter
Cada unidad debe tener un limitado conocimiento sobre otras unidades y solo conocer aquellas unidades estrechamente relacionadas a la unidad actual. Cada unidad debe hablar solo a sus amigos y no hablar con extraos. Solo hablar con sus amigos inmediatos.
Manejo de excepciones
Limites
Mtodo 1 Mtodo 2
Interface
Funcin Mtodo
FDDFGRR Function133
Uso
API
Interface
???
Software
API?
Learning Test
Pruebas Unitarias
Primera Regla: Solo puede escribir el cdigo de produccin solamente si se ha escrito su respectivo cdigo de prueba. Segunda Regla: Solo puede escribir el cdigo de prueba mnimo necesario que haga que el cdigo de produccin falle. Tercera Regla: Solo puede escribir el cdigo de produccin necesario para hacer que ste pase su cdigo de prueba.
Fast (Rpido) Independent (Independiente) Repeteable (Repetible) Self validating (Autovalidacin) Timely (Oportuno)
Clases
Acoplamiento y Cohesin
Sistemas
Arquitectura sobredimensionada?
Emerger
De acuerdo con Kent Beck un diseo es "simple si sigue las siguientes reglas:
Ejecutar todas las pruebas No contener duplicacin Expresar la intensin del ptrogemador Minimizar el numero de clases y mtodos REFACTORIZAR!!!
Concurrencia