Twitter Flickr Pinterest LinkedIn YouTube Google Maps E-mail RSS
formats

La refactorización del software, ejemplo aplicado a una clase en C#

La refactorización consiste en la modificación del código fuente sin cambiar su comportamiento, lo que se conoce informalmente por limpiar el código.

No arregla errores ni añade funcionalidad. Veamos algún ejemplo.

 

 

Objetivos pretendidos aplicados a la clase refactorizada.

1. Mejorar la facilidad de comprensión del código.

a. Generalmente se consigue minimizando la ofuscación de código.
b. Mediante el empleo de notación húngara.

La notación húngara es un sistema usado normalmente para crear los nombres de variables y expresiones. También se utiliza para nombrar las instancias de objetos en lenguajes de programación visuales, como por ejemplo Visual Basic
Consiste en prefijos en minúsculas que se añaden a los nombres de las variables, y que indican su tipo.

c.Comentando los trozos de código que requieren mayor comprensión.

2. Cambiar su estructura y diseño si fuese necesario.
3. Eliminar código muerto ó innecesario.
4. Facilitar su mantenimiento en el futuro.

La clase Agenda es un clase en C# sencilla, muestra una serie de métodos para mostrar nombres. Luego existe el programa donde se llama. Vamos a intentar mejorar mediante la refactorización la clase Agenda.

Clase sencilla sin refactorizar.

using System; using System.Collections.Generic; using System.Linq; 
using System.Text; 
 
namespace Clases 
{ 
    public class Agenda 
    { 
        float version = 1.0f;  public string N;
    private int S; 
 
        public void DameTuNombre() 
        { 
            if (Version == 1.0f) 
            {   Console.WriteLine("¿ Cual es tu nombre ?"); 
                N = Console.ReadLine(); 
            } 
        } 
 
        public void DameTuNombre(string nombre) 
      			  { 
         				   Nombre = nombre; 
      			  } 
        public string DameTu(string algo) 
        { 
            Console.WriteLine("Escribe tu {0,0:s}", algo); 
            	N = Console.ReadLine(); 
            return Nombre; 
        } 
        private float Version() 
        { 
            return version; 
        } 
 
    } 
 
// Programa donde se crea el objeto que usa la clase
 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            int n = 3; 
            string cadena = "mi cadena"; 
 
            Agenda A = new Agenda (); 
 
         		   A.Nombre = "oscar"; 
 
            A.DameTuNombre();  A.DameTuNombre("Pepito"); 
            cadena=A.DameTu("el nombre de tu abuela"); 
 
            Console.WriteLine("Hola Mundo..." ,cadena); 
 
            Console.ReadLine();  
        } 
    }  
}

Esto corresponde con la clase refactorizada.

// Espacios de nombre empleados, comentarios adecuados, eliminar ofuscación
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
namespace Clases 
{ 
    public class Agenda 
    { 
 
        // Empleo de notación húngara F(tipo de dato)_V mayusculas. 
       //Propiedades
       float F_Version = 1.0f; 
       private  string S_Nombre; 
       private int I_Sexo; 
 
    // Correcta indentación del codigo, estructuración de ámbitos para favorecer la lectura    
    public void DameTuNombre() 
        { 
            if (F_Version == 1.0f) 
            { 
                Console.WriteLine("¿ Cual es tu nombre ?"); 
                N = Console.ReadLine(); 
            } 
        } 
 
        public void DameTuNombre(string nombre) 
        { 
            Nombre = nombre; 
        } 
// Variables más sencillas de entender.
 
      public string DameTu(string S_TextoEntrada) 
        { 
            Console.WriteLine("Escribe tu {0,0:s}", S_TextoEntrada); 
            Nombre = Console.ReadLine(); 
            return Nombre; 
        } 
 
       private float Version() 
        { 
            return version; 
        } 
 
    public void Set_Nombre(string S_ElNombre)
{	
this.nombre=S_ElNombre;
}
 
    }
//Separación de métodos adecuada.
 
// Programa donde se llama a la clase se ha eliminado el acceso a A.nombre como publico y
// se ha creado uno privado, principio de data hiding u ocultación de la información.
 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            int n = 3; 
            string cadena = "mi cadena"; 
 
            //Se entiende mejor el nombre del objeto.
            Agenda Objeto_Agenda = new Agenda (); 
            Obj_Agenda.Nombre = "oscar";  //no se debe emplear.	
	    Obj_Agenda.Set_Nombre(“Oscar”); //Empleo correcto
            Obj_Agenda.DameTuNombre(); 
            Obj_Agenda.DameTuNombre("Pepito"); 
            cadena=Obj_Agenda.DameTu("el nombre de tu abuela"); 
            Console.WriteLine("Hola Mundo..." ,cadena); 
            Console.ReadLine();  //Elimino el codigo inecesario.
        } 
    }  
}

En resumen, realmente después de la refactorización la clase debe comportarse de igual forma, pero mejorando su estructura, legibilidad y limpieza de ejecución.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Home Ingeniería del Software La refactorización del software, ejemplo aplicado a una clase en C#
© www.palentino.es, desde el 2012 - Un Blog para compartir conocimientos ...

Uso de cookies en mi sitio palentino.es

Este sitio web utiliza cookies para que tengamos la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de la política de cookies

ACEPTAR
Aviso de cookies