{"id":229808,"date":"2022-11-20T17:56:00","date_gmt":"2022-11-20T14:56:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229808"},"modified":"2022-11-20T17:56:39","modified_gmt":"2022-11-20T14:56:39","slug":"los-dos-primeros-pilares-de-la-programacion-orientada-a-objetos","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/los-dos-primeros-pilares-de-la-programacion-orientada-a-objetos\/","title":{"rendered":"Los dos primeros pilares de la programaci\u00f3n orientada a objetos"},"content":{"rendered":"\n<p>Cuando se trata de hablar de programaci\u00f3n orientada a objetos (o POO), es probable que escuche hablar de Los tres pilares de la programaci\u00f3n orientada a objetos o Los cuatro pilares de la programaci\u00f3n orientada a objetos.<\/p>\n<p>Dependiendo de sus antecedentes, es posible que ya haya o\u00eddo hablar de ellos, sepa lo que son y realmente no necesita sumergirse demasiado en ellos. Pero si no lo ha hecho, creo que comprenderlos es fundamental para la programaci\u00f3n orientada a objetos.<\/p>\n<p>Hemos cubierto toda la fase de <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-analysis\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">An\u00e1lisis<\/a><\/strong> de la Programaci\u00f3n Orientada a Objetos:<\/p>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/programacion-orientada-a-objetos-en-wordpress-analisis-parte-1\/\" title=\"An\u00e1lisis, Parte 1\">An\u00e1lisis, Parte 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/programacion-orientada-a-objetos-en-wordpress-analisis-parte-2\/\" title=\"An\u00e1lisis, Parte 2\">An\u00e1lisis, Parte 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/programacion-orientada-a-objetos-en-wordpress-comprension-de-las-expectativas-del-cliente\/\" title=\"Comprender las expectativas del cliente\">Comprender las expectativas del cliente<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/programacion-orientada-a-objetos-en-wordpress-declaracion-de-trabajo\/\" title=\"Declaraci\u00f3n de trabajo\">Declaraci\u00f3n de trabajo<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/programacion-orientada-a-objetos-en-wordpress-terminos-y-condiciones\/\" title=\"T\u00e9rminos y condiciones\">T\u00e9rminos y condiciones<\/a><\/li>\n<\/ol>\n<p>Dicho esto, entremos en las discusiones de dise\u00f1o e implementaci\u00f3n. Despu\u00e9s de todo, esto es a lo que muchas personas quieren saltar de todos modos, \u00bfno es as\u00ed?<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165086-61e77571592ef.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165086-61e77571592ef.jpg\" alt=\"Los dos primeros pilares de la programaci\u00f3n orientada a objetos\"><\/a><\/p>\n<p>Antes de escribir cualquier c\u00f3digo, me gustar\u00eda hacer dos posts sobre los cuatro puntos de la programaci\u00f3n orientada a objetos (porque soy de los que suscribe la idea de que son cuatro).<\/p>\n<h2>Dos pilares de la programaci\u00f3n orientada a objetos<\/h2>\n<p>Nuevamente, comprender esto es clave para comprender la base de la programaci\u00f3n orientada a objetos. Sin ellos, ser\u00e1 dif\u00edcil navegar por el resto de lo que se discutir\u00e1 en publicaciones futuras.<\/p>\n<p>Con eso, hablemos de cada uno de ellos. Cubriremos los dos primeros en esta publicaci\u00f3n y los dos \u00faltimos en la pr\u00f3xima publicaci\u00f3n.<\/p>\n<h3>1 Abstracci\u00f3n<\/h3>\n<p>En t\u00e9rminos generales, esta es la clave para escribir c\u00f3digo orientado a objetos. Por eso, me refiero a todo lo que est\u00e1 contenido dentro de una clase. Abstraemos la idea de algo en una clase. En muchos libros, veremos cosas como <strong>Animales<\/strong> o <strong>Autos<\/strong> representados como clases.<\/p>\n<p>Esto funciona, en teor\u00eda, pero en la pr\u00e1ctica, no estamos programando animales ni estamos programando autos (aunque supongo que en este punto de la historia, podr\u00edas argumentar que lo estamos, pero estoy divagando porque sabes a lo que me refiero).<\/p>\n<p>En cambio, vamos a abstraer ideas en sus clases. Y hay una idea clave aqu\u00ed:<\/p>\n<blockquote>\n<p>Una clase debe representar un sustantivo.<\/p>\n<\/blockquote>\n<p>Es decir, no deber\u00eda tener una clase que represente algo como &quot;Correr&quot;. En su lugar, puede tener algo que se ejecuta y, por lo tanto,\u00a0 las <strong>ejecuciones<\/strong> ser\u00edan un m\u00e9todo. Y ese es el desglose general de c\u00f3mo funciona la abstracci\u00f3n:<\/p>\n<ol>\n<li>Lo que se va a representar es la clase,<\/li>\n<li>Lo que hace la cosa son sus m\u00e9todos,<\/li>\n<li>Y la forma en que describe la cosa generalmente se puede hacer a trav\u00e9s de sus atributos o propiedades.<\/li>\n<\/ol>\n<p>Esto no quiere decir que no tengamos funciones o m\u00e9todos que modifiquen sus propiedades, pero los tres puntos anteriores son buenas reglas generales. Entonces, cuando est\u00e1s dise\u00f1ando una clase, puedes preguntar cosas como:<\/p>\n<ul>\n<li>\u00bfEstoy escribiendo algo?<\/li>\n<li>\u00bfEstoy escribiendo algo que hacer?<\/li>\n<li>\u00bfO estoy escribiendo algo que describe algo?<\/li>\n<\/ul>\n<p>Porque si est\u00e1s escribiendo una acci\u00f3n, es probable que algo la haga (porque las cosas toman acci\u00f3n, hacen cosas). Y si est\u00e1s describiendo algo, es probable que se refiera a algo (\u00bfcu\u00e1ndo fue la \u00faltima vez que no describiste nada?)<\/p>\n<p>\u00bfTener sentido?<\/p>\n<h3>2 Encapsulaci\u00f3n<\/h3>\n<p>Entonces, si estamos escribiendo clases, buenas clases, entonces debemos escribirlas de tal manera que estemos encapsulando correctamente sus datos. Y la encapsulaci\u00f3n es realmente solo una palabra &quot;grande&quot; que se refiere a la idea de administrar sus responsabilidades (o realizar un seguimiento de sus datos).<\/p>\n<p>Entonces, por ejemplo, si estuvi\u00e9ramos escribiendo una clase para representar una publicaci\u00f3n de WordPress, tendr\u00edamos una clase llamada <strong>Publicar<\/strong> con propiedades como <strong>publicar, actualizar, eliminar, publicar datos, publicar<\/strong> \u00a0<strong>fecha, \u00faltimos datos actualizados, fecha<\/strong> <strong>eliminada<\/strong>, etc.<\/p>\n<p>Entonces tendr\u00edamos funciones dise\u00f1adas espec\u00edficamente para actuar en una instancia de la\u00a0 clase <strong>Post<\/strong>.<\/p>\n<p>Por ejemplo, podemos\u2026<\/p>\n<ul>\n<li>publicar,<\/li>\n<li>actualizar,<\/li>\n<li>o eliminar una publicaci\u00f3n<\/li>\n<\/ul>\n<p>Es probable que estos m\u00e9todos se expongan de tal manera que otras clases puedan aprovecharlos. Adem\u00e1s, es probable que estos m\u00e9todos tambi\u00e9n aprovechen otras propiedades, como la\u00a0 fecha de <strong>publicaci\u00f3n<\/strong> o la <strong>fecha eliminada<\/strong>.<\/p>\n<p>Y aqu\u00ed es donde entra en juego el concepto de visibilidad. En la programaci\u00f3n orientada a objetos, la encapsulaci\u00f3n no solo se refiere a la idea de la informaci\u00f3n que contiene una clase, sino tambi\u00e9n a c\u00f3mo expone los datos.<\/p>\n<p>Estos se realizan a trav\u00e9s de tres formas, todas las cuales se definen a continuaci\u00f3n:<\/p>\n<ol>\n<li><strong>las<\/strong> propiedades y funciones p\u00fablicas est\u00e1n disponibles para que cualquiera las use; sin embargo,\u00a0 las propiedades <strong>p\u00fablicas\u00a0<\/strong> generalmente no est\u00e1n expuestas. En su lugar, nos aseguramos de que puedan modificarse mediante un m\u00e9todo <strong>p\u00fablico .<\/strong><\/li>\n<li><strong>las propiedades y funciones protegidas<\/strong> est\u00e1n disponibles para ser utilizadas por la clase y cualquier otra clase que herede informaci\u00f3n de ella. Esto se discutir\u00e1 con m\u00e1s detalle en la pr\u00f3xima publicaci\u00f3n.<\/li>\n<li><strong>Las propiedades y funciones privadas<\/strong> son aquellas destinadas exclusivamente a ser utilizadas dentro del contexto de una clase determinada. Estas pueden ser propiedades usadas para rastrear estados internos o m\u00e9todos usados \u200b\u200bpara trabajar como funciones auxiliares para que las funciones p\u00fablicas completen su trabajo.<\/li>\n<\/ol>\n<p>A medida que avancemos en esta serie, veremos el papel que desempe\u00f1a cada uno de estos al escribir clases claras, f\u00e1ciles de seguir y bien dise\u00f1adas.<\/p>\n<p>Por ahora, sin embargo, es importante comprender que estas palabras, <strong>public, protected<\/strong> y <strong>private<\/strong>, se denominan modificadores de visibilidad porque, como puede comprobar, administran la visibilidad de un m\u00e9todo o una propiedad con respecto a su clase y el clases que heredan de \u00e9l y que interact\u00faan con \u00e9l.<\/p>\n<p>Hablando de herencia, hablar\u00e9 de eso en la pr\u00f3xima parte de esta serie.<\/p>\n<h2>Abstracci\u00f3n, Encapsulaci\u00f3n y WordPress<\/h2>\n<h4>Las malas noticias: clases en WordPress<\/h4>\n<p>Aqu\u00ed est\u00e1 la cosa: en WordPress, a menudo vemos clases muy, muy grandes. Esto no es bueno. De hecho, estos son <a href=\"https:\/\/en.wikipedia.org\/wiki\/Anti-pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">antipatrones<\/a> llamados clases de dios (la idea es que tienes una sola clase que lo sabe todo).<\/p>\n<p>Y cuando tiene una clase de dios, parece conveniente porque puede colocar toda la funcionalidad en un solo lugar. Pero<\/p>\n<ul>\n<li>es dif\u00edcil de probar,<\/li>\n<li>no escala,<\/li>\n<li>no funciona bien con otra clase (y mucho menos con clases o bibliotecas de terceros),<\/li>\n<li>no se adapta bien al cambio.<\/li>\n<\/ul>\n<p>En \u00faltima instancia, cuando haces eso, no est\u00e1s haciendo programaci\u00f3n orientada a objetos. Est\u00e1s tomando funciones y tir\u00e1ndolas a una clase. Y queremos alejarnos de eso.<\/p>\n<h4>La buena noticia: clases de escritura en WordPress<\/h4>\n<p>Sin embargo, esto plantea una pregunta: \u00bfPor qu\u00e9 intentar aprender programaci\u00f3n orientada a objetos con WordPress si no es un ejemplo s\u00f3lido de programaci\u00f3n orientada a objetos?<\/p>\n<p>Eso es porque todav\u00eda puedes escribir un buen c\u00f3digo orientado a objetos en WordPress. Todav\u00eda puede interactuar bien con WordPress, y a\u00fan puede funcionar bien con muchos otros aspectos de WordPress.<\/p>\n<p>S\u00e9 que suena contradictorio, pero a medida que profundizamos en la escritura de c\u00f3digo orientado a objetos en WordPress, esto deber\u00eda quedar claro.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Antes de escribir c\u00f3digo, me gustar\u00eda hacer dos publicaciones sobre los cuatro pilares de la programaci\u00f3n orientada a objetos. Los dos primeros son Abstracci\u00f3n y Encapsulaci\u00f3n.<\/p>\n","protected":false},"author":1,"featured_media":165087,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716,831,840],"tags":[1172],"class_list":["post-229808","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-guia-para-principiantes","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=229808"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229808\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/165087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}