{"id":338,"date":"2012-07-10T15:33:06","date_gmt":"2012-07-10T15:33:06","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=338"},"modified":"2012-07-10T15:33:06","modified_gmt":"2012-07-10T15:33:06","slug":"la-refactorizacion-del-software-ejemplo-aplicado-a-una-clase-en-c","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/la-refactorizacion-del-software-ejemplo-aplicado-a-una-clase-en-c\/","title":{"rendered":"La refactorizaci\u00f3n del software, ejemplo aplicado a una clase en C#"},"content":{"rendered":"<p style=\"text-align: justify;\">La refactorizaci\u00f3n consiste en la <strong>modificaci\u00f3n del c\u00f3digo fuente sin cambiar su comportamiento<\/strong>, lo que se conoce informalmente por limpiar el c\u00f3digo.<\/p>\n<p style=\"text-align: justify;\">No arregla errores ni a\u00f1ade funcionalidad. Veamos alg\u00fan ejemplo.<\/p>\n<p style=\"text-align: justify;\"><!--more--><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Objetivos pretendidos aplicados a la clase refactorizada.<\/p>\n<p style=\"text-align: justify;\"><strong>1<\/strong>. Mejorar la facilidad de comprensi\u00f3n del c\u00f3digo.<\/p>\n<p style=\"text-align: justify;\">a. Generalmente se consigue minimizando la ofuscaci\u00f3n de c\u00f3digo.<br \/>\nb. Mediante el empleo de notaci\u00f3n h\u00fangara.<\/p>\n<p style=\"text-align: justify;\">La notaci\u00f3n h\u00fangara es un sistema usado normalmente para crear los nombres de variables y expresiones. Tambi\u00e9n se utiliza para nombrar las instancias de objetos en lenguajes de programaci\u00f3n visuales, como por ejemplo Visual Basic<br \/>\nConsiste en prefijos en min\u00fasculas que se a\u00f1aden a los nombres de las variables, y que indican su tipo.<\/p>\n<p style=\"text-align: justify;\">c.Comentando los trozos de c\u00f3digo que requieren mayor comprensi\u00f3n.<\/p>\n<p style=\"text-align: justify;\"><strong>2.\u00a0<\/strong>Cambiar su estructura y dise\u00f1o si fuese necesario.<br \/>\n<strong>3.\u00a0<\/strong>Eliminar c\u00f3digo muerto \u00f3 innecesario.<br \/>\n<strong>4.\u00a0<\/strong>Facilitar su mantenimiento en el futuro.<\/p>\n<p style=\"text-align: justify;\">La clase Agenda es un clase en C# sencilla, muestra una serie de m\u00e9todos para mostrar nombres. Luego existe el programa donde se llama. Vamos a intentar mejorar mediante la refactorizaci\u00f3n la clase Agenda.<\/p>\n<p style=\"text-align: justify;\">Clase sencilla sin refactorizar.<\/p>\n<pre lang=\"C\">using System; using System.Collections.Generic; using System.Linq; \r\nusing System.Text; \r\n\r\nnamespace Clases \r\n{ \r\n    public class Agenda \r\n    { \r\n        float version = 1.0f;  public string N;\r\n    private int S; \r\n\r\n        public void DameTuNombre() \r\n        { \r\n            if (Version == 1.0f) \r\n            {   Console.WriteLine(\"\u00bf Cual es tu nombre ?\"); \r\n                N = Console.ReadLine(); \r\n            } \r\n        } \r\n\r\n        public void DameTuNombre(string nombre) \r\n      \t\t\t  { \r\n         \t\t\t\t   Nombre = nombre; \r\n      \t\t\t  } \r\n        public string DameTu(string algo) \r\n        { \r\n            Console.WriteLine(\"Escribe tu {0,0:s}\", algo); \r\n            \tN = Console.ReadLine(); \r\n            return Nombre; \r\n        } \r\n        private float Version() \r\n        { \r\n            return version; \r\n        } \r\n\r\n    } \r\n\r\n\/\/ Programa donde se crea el objeto que usa la clase\r\n\r\n    class Program \r\n    { \r\n        static void Main(string[] args) \r\n        { \r\n            int n = 3; \r\n            string cadena = \"mi cadena\"; \r\n\r\n            Agenda A = new Agenda (); \r\n\r\n         \t\t   A.Nombre = \"oscar\"; \r\n\r\n            A.DameTuNombre();  A.DameTuNombre(\"Pepito\"); \r\n            cadena=A.DameTu(\"el nombre de tu abuela\"); \r\n\r\n            Console.WriteLine(\"Hola Mundo...\" ,cadena); \r\n\r\n            Console.ReadLine();  \r\n        } \r\n    }  \r\n}<\/pre>\n<p><strong>Esto corresponde con la clase refactorizada.<\/strong><\/p>\n<pre lang=\"C\">\/\/ Espacios de nombre empleados, comentarios adecuados, eliminar ofuscaci\u00f3n\r\nusing System; \r\nusing System.Collections.Generic; \r\nusing System.Linq; \r\nusing System.Text; \r\n\r\nnamespace Clases \r\n{ \r\n    public class Agenda \r\n    { \r\n\r\n        \/\/ Empleo de notaci\u00f3n h\u00fangara F(tipo de dato)_V mayusculas. \r\n       \/\/Propiedades\r\n       float F_Version = 1.0f; \r\n       private  string S_Nombre; \r\n       private int I_Sexo; \r\n\r\n    \/\/ Correcta indentaci\u00f3n del codigo, estructuraci\u00f3n de \u00e1mbitos para favorecer la lectura    \r\n    public void DameTuNombre() \r\n        { \r\n            if (F_Version == 1.0f) \r\n            { \r\n                Console.WriteLine(\"\u00bf Cual es tu nombre ?\"); \r\n                N = Console.ReadLine(); \r\n            } \r\n        } \r\n\r\n        public void DameTuNombre(string nombre) \r\n        { \r\n            Nombre = nombre; \r\n        } \r\n\/\/ Variables m\u00e1s sencillas de entender.\r\n\r\n      public string DameTu(string S_TextoEntrada) \r\n        { \r\n            Console.WriteLine(\"Escribe tu {0,0:s}\", S_TextoEntrada); \r\n            Nombre = Console.ReadLine(); \r\n            return Nombre; \r\n        } \r\n\r\n       private float Version() \r\n        { \r\n            return version; \r\n        } \r\n\r\n    public void Set_Nombre(string S_ElNombre)\r\n{\t\r\nthis.nombre=S_ElNombre;\r\n}\r\n\r\n    }\r\n\/\/Separaci\u00f3n de m\u00e9todos adecuada.\r\n\r\n\/\/ Programa donde se llama a la clase se ha eliminado el acceso a A.nombre como publico y\r\n\/\/ se ha creado uno privado, principio de data hiding u ocultaci\u00f3n de la informaci\u00f3n.\r\n\r\n    class Program \r\n    { \r\n        static void Main(string[] args) \r\n        { \r\n            int n = 3; \r\n            string cadena = \"mi cadena\"; \r\n\r\n            \/\/Se entiende mejor el nombre del objeto.\r\n            Agenda Objeto_Agenda = new Agenda (); \r\n            Obj_Agenda.Nombre = \"oscar\";  \/\/no se debe emplear.\t\r\n\t    Obj_Agenda.Set_Nombre(\u201cOscar\u201d); \/\/Empleo correcto\r\n            Obj_Agenda.DameTuNombre(); \r\n            Obj_Agenda.DameTuNombre(\"Pepito\"); \r\n            cadena=Obj_Agenda.DameTu(\"el nombre de tu abuela\"); \r\n            Console.WriteLine(\"Hola Mundo...\" ,cadena); \r\n            Console.ReadLine();  \/\/Elimino el codigo inecesario.\r\n        } \r\n    }  \r\n}<\/pre>\n<p><strong>En resumen, realmente despu\u00e9s de la refactorizaci\u00f3n la clase debe comportarse de igual forma, pero mejorando su estructura, legibilidad y limpieza de ejecuci\u00f3n.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La refactorizaci\u00f3n consiste en la modificaci\u00f3n del c\u00f3digo fuente sin cambiar su comportamiento, lo que se conoce informalmente por limpiar el c\u00f3digo. No arregla errores ni a\u00f1ade funcionalidad. Veamos alg\u00fan ejemplo.<\/p>\n","protected":false},"author":1,"featured_media":357,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[41,5,7],"tags":[43,45,42,44],"class_list":["post-338","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ingenieria-del-software","category-programacion","category-software","tag-c","tag-clases","tag-ingenieria","tag-programacion-2"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/338","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=338"}],"version-history":[{"count":38,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/338\/revisions"}],"predecessor-version":[{"id":378,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/338\/revisions\/378"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/357"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=338"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=338"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=338"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}