{"id":818,"date":"2022-01-28T00:00:00","date_gmt":"2022-01-27T23:00:00","guid":{"rendered":"https:\/\/programaraciegas.net\/?p=818"},"modified":"2022-01-02T10:16:02","modified_gmt":"2022-01-02T09:16:02","slug":"solid-principio-de-responsabilidad-unica-o-single-responsibility-principle","status":"publish","type":"post","link":"https:\/\/programaraciegas.net\/?p=818","title":{"rendered":"SOLID: Principio de responsabilidad \u00fanica o Single responsibility principle"},"content":{"rendered":"<p>Como vimos en el art\u00edculo de <a href=\"https:\/\/programaraciegas.net\/?p=816\">los principios SOLID<\/a> este es el primero de los principio SOLID.<\/p>\n<h2>Significado<\/h2>\n<p>Este principio  establece que una clase o componente debe ser responsable de una sola cosa.<\/p>\n<p>Este principio est\u00e1 alineado con el t\u00e9rmino de <strong>desacoplamiento<\/strong> o decoupled utilizado en muchas metodolog\u00edas de desarrollo.<\/p>\n<p>Cuando se codifica una clase que s\u00f3lo posee una responsabilidad o funci\u00f3n es f\u00e1cil dise\u00f1ar tests para comprobar que funciona correctamente y adem\u00e1s facilita que esa clase pueda ser reutilizada en futuros proyectos.<\/p>\n<h2>Ejemplo<\/h2>\n<p>Imaginemos el siguiente ejemplo en el que tenemos una clase Persona que contiene los datos de un usuario.<\/p>\n<p>El c\u00f3digo de nuestra clase podr\u00eda ser algo como:<\/p>\n<p>\u00a0<\/p>\n<pre><span style=\"font-family: Menlo; font-size: 12px;\">class Persona {<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 propiedad nombre<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0\u00a0propiedad apellidos<br \/><\/span><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 propiedad nacionalidad<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0\u00a0propiedad fechaDeNacimiento<\/span><br \/><br \/><span style=\"font-family: Menlo; font-size: 12px;\">    funcion calculaEdad()<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0\u00a0funcion guardaEnBaseDeDatos()<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0\u00a0funcion cargaDesdeBaseDeDatos()<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">}<br \/><br \/><\/span><\/pre>\n<p>Este ejemplo viola el principio de responsabilidad \u00fanica.<\/p>\n<p>Esto se debe a que la clase Persona adem\u00e1s de guardar la informaci\u00f3n de una persona tambi\u00e9n se encarga de almacenar y recuperar la informaci\u00f3n de una base de datos.<\/p>\n<p>Imaginemos que nuestra aplicaci\u00f3n est\u00e1 utilizando <a href=\"https:\/\/www.mysql.com\/\">MySQL<\/a> pero en una futura versi\u00f3n queremos incluir soporte para la base de datos <a href=\"https:\/\/realm.io\/\">RealM<\/a> manteniendo la opci\u00f3n de MySQL. Los cambios que tendr\u00edamos que hacer a nuestra clase persona complicar\u00edan enormemente el c\u00f3digo.<\/p>\n<p>En cambio si creamos una clase Persona que almacene los datos de un usuario y otra clase PersonaMySQL que se encargue de recuperar y almacenar los datos en nuestra base de datos MySQL permitir\u00eda f\u00e1cilmente la codificaci\u00f3n de una nueva clase PersonaRealM que haga lo mismo que la clase PersonaMySQL pero adaptando el c\u00f3digo a la base de datos RealM.<\/p>\n<p>\u00a0<\/p>\n<pre><span style=\"font-family: Menlo; font-size: 12px;\">class Persona {<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 propiedad nombre<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 propiedad apellidos<br \/><\/span><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 propiedad nacionalidad<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 propiedad fechaDeNacimiento<br \/><br \/><\/span><span style=\"font-family: Menlo; font-size: 12px;\">    funcion calculaEdad()<\/span><br \/><span style=\"font-family: Menlo;\">}<\/span><br \/><br \/><span style=\"font-family: Menlo;\">class PersonaMySQL {<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 funcion guardaEnBaseDeDatos()<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 funcion cargaDesdeBaseDeDatos()<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">}<\/span><br \/><br \/><span style=\"font-family: Menlo;\">class PersonaRealM {<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 funcion guardaEnBaseDeDatos()<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">\u00a0 \u00a0 funcion cargaDesdeBaseDeDatos()<\/span><br \/><span style=\"font-family: Menlo; font-size: 12px;\">}<br \/><br \/><\/span><\/pre>\n<p>Nuestro programa ser\u00e1 mucho m\u00e1s cohesivo y estar\u00e1 m\u00e1s encapsulado aplicando este principio. Siguiendo esta forma de agrupar funciones y propiedades en nuestras clases se simplifica las operaciones de mantenimiento como localizar d\u00f3nde hay un error o ampliar la funcionalidad de nuestra aplicaci\u00f3n agregando soporte a otras bases de datos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como vimos en el art\u00edculo de los principios SOLID este es el primero de los principio SOLID. Significado Este principio establece que una clase o componente debe ser responsable de una sola cosa. Este principio est\u00e1 alineado con el t\u00e9rmino de desacoplamiento o decoupled utilizado en muchas metodolog\u00edas de desarrollo. Cuando se codifica una clase &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/programaraciegas.net\/?p=818\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abSOLID: Principio de responsabilidad \u00fanica o Single responsibility principle\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,6],"tags":[87,386,388],"class_list":["post-818","post","type-post","status-publish","format-standard","hentry","category-metodologiafilosofia","category-programacion","tag-programacion-2","tag-solid","tag-teoria"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=818"}],"version-history":[{"count":0,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/818\/revisions"}],"wp:attachment":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}