https://manuais.iessanclemente.net/index.php?title=Curso_POO_Patr%C3%B3ns_de_arquitectura_e_de_dese%C3%B1o&feed=atom&action=historyCurso POO Patróns de arquitectura e de deseño - Historial de revisiones2024-03-28T14:30:45ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Curso_POO_Patr%C3%B3ns_de_arquitectura_e_de_dese%C3%B1o&diff=36786&oldid=prevVlourido: /* Patróns de deseño */2013-08-16T02:30:53Z<p><span dir="auto"><span class="autocomment">Patróns de deseño</span></span></p>
<p><b>Página nueva</b></p><div>== Patróns de arquitectura e de deseño ==<br />
<br />
No ámbito da programación, os patróns son esquemas ou estruturas que ofrecen solucións a problemas comúns que xorden no desenvolvemento de aplicacións.<br />
<br />
Podemos diferenciar polo menos dous tipos de patróns:<br />
* '''Patróns de arquitectura''': ofrecen xeitos estándar de organizar os distintos compoñentes dunha aplicación.<br />
* '''Patróns de deseño''': ofrecen solucións a problemas concretos en certas estructuras.<br />
<br />
=== Patróns de arquitectura ===<br />
<br />
No ámbito da Programación Orientada a Obxectos, un dos patróns de arquitectura máis nomeados hoxe en día é o '''Modelo-Vista-Controlador''' ('''MVC'''). Como o seu nome indica, componse de:<br />
* '''Modelo'''. Representa a información do sistema e implementa a lóxica de negocio. Recibe peticións de acción do Controlador e envía á Vista, directamente ou a través do Controlador, a información que é preciso amosar.<br />
* '''Vista'''. Presenta a información necesaria ao usuario, co que interactúa e do cal recibe instruccións.<br />
* '''Controlador'''. Recibe da Vista as accións do usuario, e envía peticións ao Modelo para modificar a información do sistema e actualizar a Vista.<br />
<br />
Pódense distinguir dúas variantes MVC: activo e pasivo. Nun '''MVC activo''' a Vista, que representa ao interface do usuario, recibe eventos que emprega para actualizar a súa información. Nun '''MVC pasivo''', a Vista non é notificada dos cambios nos datos. Cando falamos de MVC en aplicacións web, sempre se trata de MVC pasivo, debido ás limitacións das páxinas web para recibir eventos do servidor.<br />
<br />
Outro patrón, variante de MVC, empregado no desenrolo de aplicacións web é o '''Modelo-Vista-Presentador''' ('''MVP'''). Neste patrón, a separación de capas é máis clara:<br />
* '''Modelo'''. Representa a información do sistema. Realiza sobre a información as operacións indicadas polo Presentador, e devólvelle os datos que solicita.<br />
* '''Vista'''. Representa á interface do usuario. Envía ao Presentador os eventos resultantes da interacción do usuario, e recibe deste a información necesaria para actualizar o interface.<br />
* '''Presentador'''. Implementa a lóxica de negocio. Comunícase coa Vista para recibir os eventos do usuario, indica ao Modelo a información a modificar ou recuperar, e envía os cambios resultantes á Vista para que se actualice.<br />
<br />
=== Patróns de deseño ===<br />
<br />
Existen moitos patróns de deseño. Normalmente agrúpanse en tres categorías, dependendo do seu obxectivo:<br />
* '''Patróns estructurais'''. Definen composicións de clases e obxectos para compoñer estructuras maiores.<br />
* '''Patróns creacionais'''. Ofrecen mecanismos para crear, compoñer e representar obxectos.<br />
* '''Patróns de comportamento'''. Definen formas de implementar algoritmos e de establecer comunicacións entre obxectos.<br />
<br />
Por exemplo, dentro dos patróns creacionais atópase o patrón '''Singleton''', que ofrece un xeito de limitar a instanciación dunha clase a un único obxecto. A idea é facer o constructor privado e controlar a instanciacións de obxectos mediante un método da propia clase.<br />
<br />
<source lang="PHP"><br />
<?php <br />
class Singleton<br />
{<br />
protected static $instancia = null;<br />
protected function __construct() {}<br />
protected function __clone() {}<br />
<br />
public static function instancia()<br />
{<br />
if (!isset(self::$instancia)) self::$instancia = new Singleton();<br />
return self::$instancia;<br />
}<br />
}?><br />
</source><br />
<br />
<br />
<br />
--[[Usuario:Vlourido|Víctor Lourido]] 03:33 16 ago 2013 (CEST)</div>Vlourido