lunes, 26 de septiembre de 2011

Liskov Substitution Principle(Funciones que utilizan referencias a clases base deben ser capaz de utilizar objetos de clases derivadas sin saberlo)


En mi último post hablé del principo Open/Closed, este principio es la base para contruir código que es mantenible y reusable. Este principio sotiene que un código bien diseñado puede ser extendido sin modificación; que la nuevas características en un programa bien diseñado son implementadas adicionando nuevo código en lugar de cambiar el código existente, código que ya funciona.

Los conceptos de POO detrás de este principio son Abstracción y Polimorfismo, en la mayoría de lenguajes orientados a objetos estos dos conceptos se apoyan en la Herencia, una de las características claves de POO. 

Es mediante la herencia que podemos crear clases derivadas que se ajusten a las interfaces abstractas polimórficas definidas por las funciones virtuales puras en las clases de base abstracta.

¿Cuáles son las reglas de diseño que rigen este uso particular de la herencia?
¿Cuáles son las características de las jerarquías mejor herencia?
¿Cuáles son las trampas que nos llevan a crear jerarquías que no se ajusten al principio abierto-cerrado?

Estas son las preguntas que el principio Liskov resuelve y que este post abordará.

martes, 13 de septiembre de 2011

10 Pasos para volverse un mejor desarrollador .Net

Basado en el conocido post 10 Steps To Become Better .NET Developer  del blog de Rinat Abdullin(el cual recomiendo seguir), yo hice mi propia lista de 10 pasos para volverse un mejor desarrollador .Net.  tomando algunos puntos que comparto con los del post de Rinat e incluyendo mis propios pasos:

  1. Entiende y aplica los fundamentos y Principios de programación orientada a objetos.
  2. Practica Clean Code y vuelvete un Software Craftsmanship.
  3. Lee sobre Patrones de Diseño y Patrones de Integración.
  4. Entiende que es Inyección de dependencias y conoce como funcionan varios Contenedores IoC como Unity, Autofac, Structure Map.
  5. Practica Unit Testing(Nunit, Moq, Visual Studio) y poco a poco utiliza Test Driven Development.
  6. Aprende acerca de Integración Continua, MSBuild, NAnt, CruiseControl.Net.
  7. Conocone y utiliza varios Frameworks como Enterprise Library, Spring.Net, NHibernate, LogFourNet, Software Factories.
  8. Familiarizate con sistemas de mensajería como MSMQ, RabbitMq, nServiceBus.
  9. Aprende las tecnologías de .Net que mas te gusten como WCF, WF, WPF, MVC, SilverLight, Linq, Entity Framework, etc.
  10. Incursiona en algunas tecnologías "nuevas" como bases de datos NoSql, Servicios Web REST, Programación funcional, Cloud computing, etc. 

Dime cual es tú lista o que puntos cambiarías de esta, la idea es definir una lista entre los interesados y comenzar a postear con base en la lista que se defina.

Happy Coding

viernes, 9 de septiembre de 2011

Open/Closed Principle (Abierto para extensión, Cerrado para modificación)



Principio es Principio

Este principio es uno de los más difíciles de digerir, porque entenderlo es complicado y después de que lo entiendes, es duro de aceptar, cómo así que el software debe estar cerrado a modificaciones? acaso para eso no se creo el software? para poder fácilmente modificar un sistema, abierto para extensión? acaso cuando lo modifico no lo estoy extendiendo?.