Wednesday, November 12, 2008

Patrones de diseño

Christopher Alexander, arquitecto de los años '60, creador del término de "Patrones de Diseño".
“Los patrones de diseño son el esqueleto de las soluciones a problemas comunes en el desarrollo de software.”

Los patrones de diseño son soluciones recurrentes al diseño de software. Son soluciones reutilizables para problemas comunes que se encuentran en el momento del desarrollo. Generalmente, un grupo de clases que resuelve de manera óptima un problema genérico a plicable a diferentes situaciones específicas.

Se clasifican en:

*Patrones de Creación: Inicialización y configuración de objetos.
*Patrones de estructura: Separan la interfaz de la implementación. Se ocupan de cómo las clases y objetos se agrupan, para formar estructuras más grandes.
*Patrones de comportamiento: Más que describir objetos o clases, describen la comunicación entre ellos.

PATRONES DE CREACIÓN

Fábrica Abstracta (Abstract Factory)
Proporcionar una interfaz que permite crear familias de objetos relacionados entre sí, sin especificar (ni conocer a priori) sus clases concretas.

Builder (Constructor virtual)

Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.

Método de Fabricación (Factory Method)
Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la casuística para elegir el subtipo que crear.

Prototipado (Prototype)
Se basa en la clonación de ejemplares copiándolos de un prototipo.
SingletonEl patrón Singleton garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a ésta instancia.

Singleton (Instancia única)
Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia.

PATRONES DE ESTRUCTURA

Adaptador (Adapter)
Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla.

Puente (Bridge)
Desacopla una abstracción de su implementación permitiendo modificarlas independientemente.

Objeto Compuesto (Composite)
Utilizado para construir objetos complejos a partir de otros más simples, utilizando para ello la composición recursiva y una estructura de árbol.

Envoltorio (Decorator)
Permite añadir dinámicamente funcionalidad a una clase existente, evitando heredar sucesivas clases para incorporar la nueva funcionalidad.

Fachada (Facade)
Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.

Peso Ligero (Flyweight)
Elimina la redundancia o la reduce cuando tenemos gran cantidad de objetos con información idéntica.

Apoderado (Proxy)
Mantiene un representante de un objeto.

PATRONES DE COMPORTAMIENTO

Cadena de responsabilidad (Chain of responsibility)
La base es permitir que más de un objeto tenga la posibilidad de atender una petición.

Orden (Command)
Encapsula una petición como un objeto dando la posibilidad de “deshacer” la petición.

Intérprete (Interpreter)
Intérprete de lenguaje para una gramática simple y sencilla.

Iterador (Iterator)
Define una interfaz que declara los métodos necesarios para acceder secuencialmente a una colección de objetos sin exponer su estructura interna.

Mediador (Mediator)
Coordina las relaciones entre sus asociados. Permite la interacción de varios objetos, sin generar acoples fuertes en esas relaciones.

Recuerdo (Memento)
Almacena el estado de un objeto y lo restaura posteriormente.

Observador (Observer)
Notificaciones de cambios de estado de un objeto.

Estado (Server)
Se utiliza cuando el comportamiento de un objeto cambia dependiendo del estado del mismo.

Estrategia (Strategy)
Utilizado para manejar la selección de un algoritmo.

Método plantilla (Template Method)
Algoritmo con varios pasos suministrados por una clase derivada.

Visitante (Visitor)
Operaciones aplicadas a elementos de una estructura de objetos heterogéne
a.

Thursday, October 23, 2008

Estilos De programación II

Continuando con las buenas prácticas de un programador :D les dejo lo siguiente:

1. Indentación
Sobre como indentar hay varios estilos tales como: Allman, K&R, BSD KN, Whitesmiths, etc.
El estilo Allman es el mejor, el cual dice que debemos usar los sangrados para indentar el código, nunca espacios. Poner las llaves de control en la línea subsiguiente.




2. Saltos de Línea
Añadir un salto de línea después del cierres de los paréntesis de los parámetros.
Añadir un salto de línea después un punto y coma, cuando termina la sentencia.




3. Espacios y líneas en blanco
Usar espacios en blanco para mejorar la legibilidad del código.
Usar espacios en blanco e ambos lados del operador de símbolos, después de comas y después de las declaraciones.
Usar líneas en blanco para separar trozos de código.
Usar líneas en blanco antes de cada método dentro de la clase.



4. Longitud de la línea
Evite las líneas de mas de 80 caracteres cuando supera se debe córtalo bajo los siguiente principios
Salto de línea después de la coma.
Salto de línea después de un operador.
Alinear la nueva línea con el principio de la expresión en el mismo nivel en la línea anterior.


Wednesday, October 22, 2008

Estilos De programación I

Entre las buenas prácticas de un programador, está el hacer uso de alguna convención de nombramiento ya sea de proyectos, archivos de código fuente e identificadores (campos, variables, métodos, propiedades, clases, interfases, etc. (depediendo del Leguaje de Programación))


¿Cuál es el objetivo de esta buena práctica? Implementar código fuente que sea legible, claro, consistente, fácil de comprender y mantener. 

A veces no será posible seguir en aquella empresa donde desarrollamos alguna aplicación y así que será otra la persona que se ocupe de su mantenimiento. Nuestro código debe tener la característica de que "otros" también puedan entenderlo sin máximo esfuerzo, costo y tiempo.

Las cosas podrían llegar a ser muy serias hasta el caso de que resultaría mejor volver a desarrollar ese sistema desde cero!

Bueno, pero como mencioné hace unas líneas arribas, una de las buenas prácticas es Convención de Nombres.

Entre los estilos, están los que siguen a continuación:

Camel Case: forma de escribir una palabra donde su primera letra está en minúsculas y la primera letra de las subsiguientes palabras en mayúsculas. Ejemplo: nombreCliente

Pascal Case: forma de escribir una palabra donde la primera letra está en mayúscula y la primera de las subsiguientes palabras igualmente en mayúscula. Ejemplo: NombreCliente

Estilo Mayúsculas: Todas las letras del identificador se encuentran en mayúsculas.

Estilo Minísculas: Todas las letras del identificador se encuentran en minúsculas.

Por defecto, algunos lenguajes de programación usan unos de estos estilos. Por ejemplo, 

Los que conocen JAVA, para nombrar las constantes, todo mayúscula. Para nombrar clases, usa PascalCase, para los métodos, usa camelCase.

CONVENCIÓN DE NOMBRES
La convención de nombres es un conjunto de normas y reglas para la escritura de nombres, código fuente, identificadores y comentarios dentro de la programación, que facilitan y hacen más comprensible su lectura.

1. Clases
Las clases representan “cosas” y no “acciones”, por tal motivo evitar verbos como nombre de clase.
El nombre de la clase debe estar en singular, salvo que la clase represente multiplicidad de cosas.
Las Nombres de las clases deberían ser Sustantivos: ejemplo carro, hombre, tienda, pais, empleado, proveedor
Cada clase debe tener un bloque de documentación según la norma del lenguaje.

2. Métodos
Los nombres de los métodos deberían ser un verbo, dado que describe una acción ; ejemplo remover(), enviar(), cargar()
Los Métodos dentro de las clases siempre debe declarar su visibilidad tales como privadas, protegidas, públicas, etc

3. Variables
Evitar variables que sean de un solo carácter, Los nombres comunes para las variables temporales son i, j, k, m, y n para los números enteros; c, d, y e para los caracteres.
Nombres de variables sólo pueden contener caracteres alfanuméricos
Nombres de variables deben ser camelCase


PARA LOS QUE TRABAJAN EN LA PLATAFORMA .NET


Tuesday, October 21, 2008

Base De datos - practicando SQL

Les dejo algunos recursos Web que encontré para que practiquen consultas en SQL. Que disfruten que las base de datos son bonitas =)
Practicando consultas en SQL - Parte I



Practicando consultas en SQL - Parte IV

En cada enlace encontrarán una pequeña base de datos (diagrama + script para hacer correr y crear la base de datos), enunciados o preguntas y sus respuestas (obviamente mi consejo es NO ver las respuestas HASTA haber primero INTENTADO resolverlas.)

Monday, October 20, 2008

Cómo generar contraseña aleatoria

Estaba buscando en la Web código en VB.NET que me genere contraseñas o password randómicos o aleatorios y encontré este súper código que por cierto ya lo probé y está buenísimo (con caracteres parametrizados, letras, números, caracteres especiales y un rango parametrizado también (mínimo, máximo))

Se los comparto por aquí, tienen para escoger: en Visual Basic.NET y en C#
EN C#, CÓMO GENERAR PASSWORD RANDÓMICO
EN VB.NET, CÓMO GENERAR PASSWORD RANDÓMICO

RandomPassword.vb