{"id":23,"date":"2025-09-26T17:51:20","date_gmt":"2025-09-26T17:51:20","guid":{"rendered":"https:\/\/erickibanezdev.com\/blog\/?p=23"},"modified":"2025-09-26T17:52:39","modified_gmt":"2025-09-26T17:52:39","slug":"principio-de-sustitucion-de-liskov","status":"publish","type":"post","link":"https:\/\/erickibanezdev.com\/blog\/principio-de-sustitucion-de-liskov\/","title":{"rendered":"L &#8211; Principio de Sustituci\u00f3n de Liskov"},"content":{"rendered":"\n<p>El principio de sustituci\u00f3n de Liskov hace referencia a la letra L en los principios SOLID. \u00bfA qu\u00e9 se refiere este en el desarrollo de software?<\/p>\n\n\n\n<p>Este principio nos dice b\u00e1sicamente que los sub tipos deber\u00edan poder sustituirse por sus tipos base. Esto podemos verlo representado con la herencia como X cosa es Y cosa.<\/p>\n\n\n\n<p>Com\u00fanmente podemos ver estos ejemplos como animales, figuras, etc. Algo as\u00ed como \u201cun pato es un ave\u201d, as\u00ed que \u201cun pato es sustituible por ave\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"443\" height=\"296\" src=\"https:\/\/erickibanezdev.com\/blog\/wp-content\/uploads\/2025\/09\/3-lsp.jpg\" alt=\"Imagen de dos aveces de la misma especie.\" class=\"wp-image-24\" srcset=\"https:\/\/erickibanezdev.com\/blog\/wp-content\/uploads\/2025\/09\/3-lsp.jpg 443w, https:\/\/erickibanezdev.com\/blog\/wp-content\/uploads\/2025\/09\/3-lsp-300x200.jpg 300w\" sizes=\"auto, (max-width: 443px) 100vw, 443px\" \/><\/figure>\n\n\n\n<p>Un cuadrado y un rect\u00e1ngulo son cuadril\u00e1teros, pero el cuadrado es y debe ser igual en todas sus partes.<\/p>\n\n\n\n<p>\u00bfC\u00f3mo podemos identificar violaciones a este principio?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si utilizamos \u201cis\u201d o \u201cas\u201d para ejecutar alguna implementaci\u00f3n en concreto, si nuestro c\u00f3digo es polimorfico deber\u00eda funcionar con un tipo u otro. En estos casos ser\u00eda mejor encapsular estas funcionalidades en sus tipos e invocar desde all\u00ed.<\/li>\n\n\n\n<li>Probablemente si utilizamos null checks para realizar nuestras validaciones. Ser\u00eda mejor minimizar estos y en su lugar usar tipos nulleables, condicionales, coalescing o guard clauses.<\/li>\n\n\n\n<li>NotImplementedException. B\u00e1sicamente nos est\u00e1 diciendo que nuestro objeto no cumple al 100% con las implementaciones que deber\u00eda por lo que no siempre ser\u00e1 sustituible. Si esto debe ser as\u00ed tal vez deber\u00edas re plantear estas implementaciones.<\/li>\n<\/ul>\n\n\n\n<p>Eso ser\u00eda todo por este principio, espero te sea de ayuda a re analizar parte de tus desarrollos o explorar m\u00e1s acerca del mismo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El principio de sustituci\u00f3n de Liskov hace referencia a la letra L en los principios SOLID. \u00bfA qu\u00e9 se refiere este en el desarrollo de software? Este principio nos dice b\u00e1sicamente que los sub tipos deber\u00edan poder sustituirse por sus tipos base. Esto podemos verlo representado con la herencia como X cosa es Y cosa. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[1,3],"tags":[8,9,7,10],"class_list":["post-23","post","type-post","status-publish","format-standard","hentry","category-blog","category-desarrollo","tag-desarrollo","tag-practicas","tag-software","tag-solid"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/comments?post=23"}],"version-history":[{"count":2,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts\/23\/revisions"}],"predecessor-version":[{"id":26,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts\/23\/revisions\/26"}],"wp:attachment":[{"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/media?parent=23"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/categories?post=23"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/tags?post=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}