<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12367613</id><updated>2024-02-28T14:18:38.075-03:00</updated><title type='text'>Aspect Oriented Programming</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://aop-rodrigogdea.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12367613/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='http://aop-rodrigogdea.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/10858495248195358228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12367613.post-111470184709794603</id><published>2005-04-28T12:00:00.000-03:00</published><updated>2005-11-02T22:11:19.983-03:00</updated><title type='text'>Advice Weaving</title><content type='html'>&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Una de las fases mas importantes de AOP es el &lt;i&gt;weaving&lt;/i&gt;. Una ves definido los aspectos, o sea, haber indentificado los puntos de ejecución por donde se va a ejecutar un determinado código que hace a la separación en incumbencias, se debe &quot;tejer&quot; o unir los aspecto al sistema. Esto significa que hay que, de alguna manera, introducir los &lt;i&gt;advise&lt;/i&gt; al sistema.&lt;br /&gt;&lt;br /&gt;Dependiendo de la herramienta [1] que estemos usando para escribir los aspectos variará la manera en que se haga el weaving [2]. Básicamente hay dos maneras de implementar el weaving: de manera estática (&lt;i&gt;compile time&lt;/i&gt;) o de manera dinámica (&lt;i&gt;runtime&lt;/i&gt;). Entonces los diferentes tipos de implementaciones de weaving son:&lt;/span&gt;&lt;/p&gt;   &lt;ul type=&quot;disc&quot;&gt; &lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Compile-time      weaving&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Class      load-time weaving&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Hotswap      weaving&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Runtime OO      methods&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Bytecode modification      weaving&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Dynamic proxy      weaving&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;VM level AOP&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Estas implementaciones tiene ventajas y desventajas [2], las cuales permitiran tener mayor o menor control sobre los aspecto en diferentes fases del desarrollo (runtime, compile-time, debugging).&lt;br /&gt;&lt;br /&gt;Como experiencia personal, la elección de un framework de AOP, fue la actividad más importante. Es necesario tener en cuenta ciertas características que están relacionadas con el proyecto. Como por ejemplo: qué capacidad tiene el framework de interactuar con &lt;/span&gt;&lt;st1:personname productid=&quot;la IDE&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;la IDE&lt;/span&gt;&lt;/st1:PersonName&gt;&lt;span lang=&quot;ES&quot;&gt; (flexibilidad, performance, etc), cuántos proyectos se necesitan manejar a la vez, cual es el impacto en el desarrollo, y cual es el impacto en producción. Además de cuál es el alcance y las necesidades particulares para mi sistema. Teniendo en cuanta todo esto resultó que, para las características del proyecto, fue necesario utilizar Javaassist [3], aplicar interceptores en &lt;i&gt;class load-time&lt;/i&gt;, y ahí enganchar los &lt;i&gt;advice&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Lamentablemte AOP tiene un impacto en la performance que puede ser mayor o menor, pero que hay que tener presente; digo que, si bien la separación en incumbencias mejora la calidad de mi sistema, esto tiene un costo.&lt;/span&gt;&lt;/p&gt;    [1] &lt;a href=&quot;http://java-source.net/open-source/aspect-oriented-frameworks&quot;&gt;http://java-source.net/open-source/aspect-oriented-frameworks&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;http://www.aspectprogrammer.org/blogs/adrian/2005/03/sam_pullara_on.html&quot;&gt;The Aspect Blog&lt;/a&gt;&lt;br /&gt;[3] &lt;a href=&quot;http://www.csg.is.titech.ac.jp/%7Echiba/javassist/&quot;&gt;http://www.csg.is.titech.ac.jp/~chiba/javassist/&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12367613/posts/default/111470184709794603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12367613/posts/default/111470184709794603'/><link rel='alternate' type='text/html' href='http://aop-rodrigogdea.blogspot.com/2005/04/advice-weaving.html' title='Advice Weaving'/><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/10858495248195358228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12367613.post-111439070335498326</id><published>2005-04-24T21:00:00.000-03:00</published><updated>2005-11-02T22:09:29.046-03:00</updated><title type='text'>Introduction to Aspect Oriented Programming</title><content type='html'>&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Para resolver los problemas vistos en: &lt;a href=&quot;http://aop-rodrigogdea.blogspot.com/2005/04/whats-aop.html&quot;&gt;What&#39;s AOP?&lt;/a&gt; se desarrollaron conceptos y tecnologías bajo el nombre de &lt;i&gt;Aspect Oriented Programming&lt;/i&gt;. Para poder entender los conceptos que se manejan en AOP enumeraré las terminologías mas utilizadas:&lt;/span&gt;&lt;/p&gt;   &lt;ul type=&quot;disc&quot;&gt; &lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;b&gt;&lt;span lang=&quot;ES&quot;&gt;Point-cut&lt;/span&gt;&lt;/b&gt;&lt;span lang=&quot;ES&quot;&gt;: Un &lt;i&gt;pointcut&lt;/i&gt; describe un punto de ejecución del sistema.      Puede estar compuesto por otros pointcuts. Los pointcuts pueden indicar      una llamada a un método, la creación de un objeto, la escritura o lecturas      de variables, el flujo en estructuras de control (if, while, for, etc),      excepciones, el uso de una clase en particular entre otras cosas.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;b&gt;&lt;span lang=&quot;ES&quot;&gt;Advice&lt;/span&gt;&lt;/b&gt;&lt;span lang=&quot;ES&quot;&gt;: Comprende el código que se ejecuta cuando se alcanza el punto de      ejecución (&lt;i&gt;join-point&lt;/i&gt;). Una analogía posible, para el mejor      entendimiento de este concepto, se da con el paradigma de Objetos donde se      distinguen los menajes y los métodos, entonces en AOP el &lt;i&gt;Advice&lt;/i&gt; es      análogo al método y el &lt;i&gt;pointcut&lt;/i&gt; es análogo al mensaje.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;b&gt;&lt;span lang=&quot;ES&quot;&gt;Join-point&lt;/span&gt;&lt;/b&gt;&lt;span lang=&quot;ES&quot;&gt;: Es el punto de ejecución que esta definido en el pointcut. Es el      instante de ejecución por donde esta pasando el sistema. Es el lugar donde      el Aspecto (&lt;i&gt;Aspect&lt;/i&gt;) provee su servicio.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;b&gt;&lt;span lang=&quot;ES&quot;&gt;Aspect&lt;/span&gt;&lt;/b&gt;&lt;span lang=&quot;ES&quot;&gt;: Es el conjunto dado por el Poincut y el Advice. Es la definición      del servicio o tarea que se debe ejecutar.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;b&gt;&lt;span lang=&quot;ES&quot;&gt;Introduction      or mixin&lt;/span&gt;&lt;/b&gt;&lt;span lang=&quot;ES&quot;&gt;: Es la capacidad de hacer que una clase      existente extienda de otra clase independiente de su árbol de jerarquía. O      sea, se modifica una clase para que tenga método, interfaces, variables de      otra clase. Esta característica es muy poderosa y permite, básicamente,      crear múltiple herencia.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;b&gt;&lt;span lang=&quot;ES&quot;&gt;Cross-cutting-concerns&lt;/span&gt;&lt;/b&gt;&lt;span lang=&quot;ES&quot;&gt;: Cada parte de un sistema tiene un objetivo principal, pero para      conseguir su objetivo necesita de tareas secundarias que son comunes a      todo el sistema. Por ejemplo, que los objetos sean transaccionales es una característica      transversal a la misión de cada objeto, pero es necesaria para el cumplimiento      de sus objetivos.&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;ES&quot;&gt;Para concluir con esta breve introducción analicemos el caso del Productor-Cosumidor, donde se accede a un buffer, pero este acceso debe ser sincronizado. La misión principal del Productor es llenar el buffer y la del Cosumidor es vaciarlo. Pero si ambos no están sincronizados no podrán concluir con éxito su objetivo. A nivel código tendremos que lidiar con lo específico de la sincronización mezclado con el código de la misión principal. En este punto es donde se dislumbra que la sincronización es un &lt;i&gt;aspecto&lt;/i&gt; del problema del Productor-Consumidor y ponemos el código de sincronización como &lt;i&gt;Advise&lt;/i&gt;. Entonces tendremos separadas las tareas necesarias para ejecutar la tarea principal; hemos separado las incumbencias. Como consecuencia nos quedará un código más claro, o sea, mejoramos la calidad del código.&lt;/span&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12367613/posts/default/111439070335498326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12367613/posts/default/111439070335498326'/><link rel='alternate' type='text/html' href='http://aop-rodrigogdea.blogspot.com/2005/04/introduction-to-aspect-oriented.html' title='Introduction to Aspect Oriented Programming'/><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/10858495248195358228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12367613.post-111421234390194335</id><published>2005-04-22T20:23:00.000-03:00</published><updated>2005-11-02T22:07:49.566-03:00</updated><title type='text'>What&#39;s AOP?</title><content type='html'>&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-family: Georgia;&quot; lang=&quot;ES&quot;&gt;AOP, de la sigla &lt;i&gt;Aspect Oriented Programming&lt;/i&gt; (Programación Orientada a Aspectos), es una tecnología que intenta resolver un viejo problema que surge en el desarrollo de software [1]. Este problema está relacionado con algo que se denomina separación de incumbencias.&lt;br /&gt;Las incumbencias son asuntos o temas que se deben tener en cuenta para resolver un problema. Uno de estos asuntos está dado por el comportamiento principal de una tarea dada, pero para que esta tarea se lleve a cabo con éxito hay que tener en cuenta otros asuntos, como por ejemplo: la sincronización, la persistencia, la distribución, autenticación, etc. Estos asuntos se llaman &lt;i&gt;Aspectos&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-family: Georgia;&quot; lang=&quot;ES&quot;&gt;Al lograr la separación en incumbencias disminuye la complejidad de la tarea y mejoran la calidad, mantenibilidad, reusabilidad, etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-family: Georgia;&quot; lang=&quot;ES&quot;&gt;La separación en aspectos es independiente del paradigma de programación que se esté usando para desarrollar el software. En el caso del paradigma orientado a objetos se puede ver el problema de la separación de incumbencias en algunos patrones de diseño, como por ejemplo: el &lt;i&gt;Observer&lt;/i&gt;, el &lt;i&gt;Visitor&lt;/i&gt; o el &lt;i&gt;Mediator&lt;/i&gt;, donde para aplicarlos hay que adaptar a las clases involucradas este comportamiento.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: Georgia;&quot; lang=&quot;ES&quot;&gt;Un caso típico de incumbencias son las denominadas incumbencias transversales (&lt;i&gt;crosscutting concerns&lt;/i&gt;), donde aparecen las responsabilidades atravesando diferentes partes del sistema que son disconexas. Un ejemplo típico es el &lt;i&gt;logging&lt;/i&gt;, el cual es requerido en varios puntos de ejecución del sistema que no están relacionados.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  [1]&lt;a href=&quot;http://etd-submit.etsu.edu/etd/theses/available/etd-1123103-192334/unrestricted/HankersonM120903f.pdf&quot;&gt;Towards a Taxonomy of Aspect-Oriented Programming&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12367613/posts/default/111421234390194335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12367613/posts/default/111421234390194335'/><link rel='alternate' type='text/html' href='http://aop-rodrigogdea.blogspot.com/2005/04/whats-aop.html' title='What&#39;s AOP?'/><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/10858495248195358228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>