Laboratorio: Con objetos

Los siguientes 4 ejercicios nos ayudarán a practicar cómo extraer funciones a partir de un procedimiento bien organizado.

Instrucciones

Luego de descargar el código, abra la solución “Laboratorio.ConObjetos.sln”. Cada ejercicio es una carpeta en el proyecto “Laboratorio.Negocio” y tiene sus pruebas unitarias en “Laboratorio.Negocio.UnitTests”.

En cada ejercicio aplique el refactoring de extraer objetos en la carpeta “3 Con objetos”. Así, en caso de duda, puede consultar el código anterior en “Con funciones”.

Ya que vamos a aplicar refactorings, ejecute todas las pruebas unitarias antes de iniciar. Verifique que todas son exitosas. Luego de cada refactoring, ejecútelas para mantener la seguridad de no haber afectado la funcionalidad.

Cada ejercicio es una carpeta y namespace. Siga las instrucciones en cada ejercicio.

Ejercicio 1: Valoraciones

Antes de aplicar los refactorings, vamos a visualizar las funciones del algoritmo como un árbol de llamados. Luego, marcamos aquellos nodos que son funciones coordinadoras, es decir, las que tienen variables locales). Cada una de estas funciones se refactorizará a aun objeto. El siguiente es el diagrama de este algoritmo. Estúdielo con el código para realizar visualizar los cuatro algoritmos de este taller.funciones-de-valoraciones

Powerpoint para visualizar los algoritmos

El diagrama anterior se encuentra en un PPT en la solución de Visual Studio (.sln). Realice los diagramas de cada ejercicio en cada slide.

Note que cada función se representa en el gráfico, e indicamos el orden de ejecución con las flechas.

Antes de programar cada algoritmo, realizaremos estos pasos:

  1. Visualice el árbol de llamados de las funciones de responsabilidad única.
  2. Identifique las funciones coordinadoras que tienen variables locales.
  3. Identifique los objetos y defina sus nombres a partir del árbol de funciones.

El siguiente es el diagrama de los objetos:

ejercicio1-objetos

Para extraer los objetos, siga los pasos indicados aquí: Pasos para extraer un objeto.

Ejercicio 2: Códigos de referencia

En este algoritmo, practicamos extrayendo objetos que tienen más de una variable de instancia. Este nos ayuda a practicar la extracción cuando tenemos varios IF.

Ejercicio 3: Rendimiento por descuento

Este nos ayuda a practicar la extracción cuando tenemos un IF.

Ejercicio 4: Valoraciones por ISIN

Ya que este algoritmo retorna una estructura de datos, luego refactorizar los objetos seguiremos estos pasos para el primer método “GenereLaValoracionPorISIN”.

1. Mueva el primer método al constructor de la estructura de datos “ValoracionPorISIN”.

Este es el primer método:

lab-objetos-1

  • Cree el constructor en ValoracionPorISIN y los parámetros de la siguiente manera:

lab-objetos-2

Note que los parámetros del constructor son los mismos que los del método original, además, eliminamos “laValoracion.” en cuatro sitios ya que estamos asignando propiedades de la misma clase.

  • Mueva el resto de las funciones a esta misma clase.
  • Elimine la clase “CalculosDeLaValoracionPorISIN.cs”
  • Ajuste las pruebas unitarias que no compilan para que en vez de llamar al método “CalculosDeLaValoracionPorISIN.GenereLaValoracionPorISIN()” ahora utilicen el objeto con “new ValoracionPorISIN()”.
  • Ejecute todas las pruebas unitarias de nuevo. Deben ser exitosas.

3. Simplifique usando las propiedades de solo-lectura (“get”).

En esta imagen, vemos que el código se simplificó  de la siguiente manera:

  • El set de las propiedades ahora es privado para evitar que sea modificado por otras clases.
  • Las funciones que no sean coordinadoras las podemos colocar dentro del get de la propiedad misma (en este caso, es “CalculeElAporteDeGarantia”) y eliminamos la variable de instancia innecesaria.

lab-objetos-4.PNG

Esta versión final utiliza una notación de propiedades simplificada. ¿Cuál es más sencilla de leer?

lab-objetos-5

Con esto, ya terminamos el refactoring de los objetos. Notemos que ahora tenemos un objeto inteligente, pues sus propiedades no son asignadas por otros objetos, sino que el mismo objeto sabe calcularlas.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s