<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Programación orientada a objetos &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<atom:link href="https://www.oscarblancarteblog.com/tag/programacion-orientada-a-objetos/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.oscarblancarteblog.com</link>
	<description>Software Architect &#38; FullStack developer</description>
	<lastBuildDate>Sun, 02 Aug 2020 22:46:55 +0000</lastBuildDate>
	<language>es-MX</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.11</generator>

<image>
	<url>https://www.oscarblancarteblog.com/wp-content/uploads/2019/03/cropped-ob-32x32.png</url>
	<title>Programación orientada a objetos &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<link>https://www.oscarblancarteblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">89905023</site>	<item>
		<title>Patrón de diseño Observer</title>
		<link>https://www.oscarblancarteblog.com/2014/07/23/patron-de-diseno-observer/</link>
					<comments>https://www.oscarblancarteblog.com/2014/07/23/patron-de-diseno-observer/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Wed, 23 Jul 2014 15:23:51 +0000</pubDate>
				<category><![CDATA[Patrones de Diseño]]></category>
		<category><![CDATA[arquitectura]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Observer]]></category>
		<category><![CDATA[Patron]]></category>
		<category><![CDATA[Patron de diseño]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programación orientada a objetos]]></category>
		<guid isPermaLink="false">http://javamex.wordpress.com/?p=209</guid>

					<description><![CDATA[<p>Este es sin duda uno de los patrones mas utilizados cuando trabajamos con aplicaciones de escritorio o al utilizar la Event-Driver Architecture(EDA).Un Observer es un componente el cual lo único que hace es estar atento a los eventos que el Target realiza, Cuando Target realiza un cambio o evento este notifica a todos los Observers [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/23/patron-de-diseno-observer/">Patrón de diseño Observer</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				<a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/11/UML1-e1438565150654.gif"><img loading="lazy" class=" size-full wp-image-726 alignleft" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/11/UML1-e1438565150654.gif" alt="UML" width="86" height="100" /></a>Este es sin duda uno de los patrones mas utilizados cuando trabajamos con aplicaciones de escritorio o al utilizar la Event-Driver Architecture(EDA).Un Observer es un componente el cual lo único que hace es estar atento a los eventos que el Target realiza, Cuando Target realiza un cambio o evento este notifica a todos los Observers que están registrados. De esta manera las clases observer serán notificadas del evento que realizo el Target.</p>
<p>&nbsp;</p>
<p>Para explicar correctamente este Patrón de diseño le comparto esta imagen:</p>
<p><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/observer.png"><img loading="lazy" class="aligncenter wp-image-208" title="Observer" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/observer.png" alt="Observer" width="508" height="282" /></a></p>
<p>Imaginemos un escenario de la vida real para comprender mejor esta patrón para lo cual nos ubicamos en el Aeropuerto y estamos esperando a que nos indiquen que podemos abordar el avión por medio de las bocinas que hay en el aeropuerto.</p>
<p>Bien, de seguro no eres el único que esta esperando el vuelo, de seguro existen muchas personas que esperan el abordaje, En este escenario nosotros junto con todas las demas personas que esperan el vuelo son <strong>Observers </strong>y la bocina es el <strong>Tajet </strong>Ya que todos estamos atento a que nos indique que ya podemos abordar lo cual es un evento que realiza la bocina y que nosotros estamos esperando(Observando) para realizar una acción(Abordar).<span id="more-209"></span></p>
<p>Entonces el mecanismo por el cual el observer trabaja es el siguiente:</p>
<ol>
<li>Existe un componente u Objecto al cual queremos observar(<strong>Tarjet</strong>)</li>
<li>Tenemos algún modulo u otro Objeto(<strong>Observer</strong>) el cual queremos que sea notificado cuando Tarjet realice una acción.</li>
<li>Los <strong>Observers </strong>deben <strong>implementar</strong> una <strong>Interfaz</strong> <strong>común </strong>que tanto el Target como el Observer conozcan.</li>
<li>Los Observers deberán ser registrados en el Tarjet el cual los almacenara en una lista.</li>
<li>Cuando el Tarjet realice una acción notificara a todos los Observers los cuales se registraron en el paso anterior.</li>
<li>Los Observers recibirán la notificación como un Evento el cual el Observer procesara para hacer una acción.</li>
</ol>
<p>&nbsp;</p>
<p>Si nos damos cuenta es mucho mas simple de lo que parece y muchos de las aplicaciones utilizan este patrón y ni siquiera nos damos cuenta.</p>
<p>&nbsp;</p>
<p>En tu experiencia, ¿donde crees que se mas conveniente utilizar esta patrón o como lo implementarías?</p>
<p>&nbsp;</p>
<figure id="attachment_2333" aria-describedby="caption-attachment-2333" style="width: 648px" class="wp-caption aligncenter"><a href="https://reactiveprogramming.io/books/design-patterns/es" target="_blank" rel="noopener"><img loading="lazy" class="wp-image-2333 size-large" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/09/patrones-diseño-banner-1024x392.jpg" alt="Introducción a los patrones de diseño" width="648" height="248" /></a><figcaption id="caption-attachment-2333" class="wp-caption-text">¿Quieres aprender más patrones como este? te invito a que veas mi libro.</figcaption></figure>
<p>&nbsp;</p>
<p>Ya está a la venta mi nuevo libro &#8220;<a href="http://www.oscarblancarteblog.com/libros/introduccion-los-patrones-diseno/">Introducción a los patrones de diseño</a>&#8220;, en donde expongo los 25 patrones de diseño más utilizados y explicados desde un enfoque del mundo real, con ejemplos que pueden ser aplicados en tus proyectos. Sin duda es unos de los libros más completos de patrones de diseño en español.		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/23/patron-de-diseno-observer/">Patrón de diseño Observer</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/07/23/patron-de-diseno-observer/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">209</post-id>	</item>
		<item>
		<title>Patrón de diseño Modelo Vista Controlador (MVC)</title>
		<link>https://www.oscarblancarteblog.com/2014/07/21/patron-de-diseno-modelo-vista-controlador-mvc/</link>
					<comments>https://www.oscarblancarteblog.com/2014/07/21/patron-de-diseno-modelo-vista-controlador-mvc/#respond</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Mon, 21 Jul 2014 16:07:19 +0000</pubDate>
				<category><![CDATA[Patrones de Diseño]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[patrones]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programación orientada a objetos]]></category>
		<guid isPermaLink="false">http://javamex.wordpress.com/?p=136</guid>

					<description><![CDATA[<p>Sin duda este es uno de los patrones de diseño mas utilizados cuando desarrollamos una pagina web sin embargo puede que no estemos consciente de que es si. El patrón MVC se ha convertido en un estándar para el desarrollo de aplicaciones que permite separar la aplicación entres capas que aunque estén relacionadas no siempre [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/21/patron-de-diseno-modelo-vista-controlador-mvc/">Patrón de diseño Modelo Vista Controlador (MVC)</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				<a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/11/UML1-e1438565150654.gif"><img loading="lazy" class="alignleft wp-image-726" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/11/UML1-e1438565150654.gif" alt="UML" width="86" height="100" /></a>Sin duda este es uno de los patrones de diseño mas utilizados cuando desarrollamos una pagina web sin embargo puede que no estemos consciente de que es si.</p>
<p>El patrón MVC se ha convertido en un estándar para el desarrollo de aplicaciones que permite separar la aplicación entres capas que aunque estén relacionadas no siempre tiene por que estar juntas. Estas capas son la Vista, el Controlador y el Modelo y a continuación explico que es cada uno.</p>
<p><strong>Modelo: </strong>El modelo representa la información como tal, representan los datos con los que la aplicación esta trabajando, ya sea los datos de una tabla, un formulario, etc. Podríamos decir que el modelo es la información la cual el usuario puede visualizar en pantalla.</p>
<p>Por ejemplo este texto que estas leyendo en este momento es el modelo.</p>
<p><strong>Vista: </strong>Esta es la representación gráfica o pantalla que estas viendo en este momento, La vista requiere del Modelo para mostrar la información en la pantalla.</p>
<p><strong>Controlador: </strong>El controlador es el puente entre la vista y el modelo, ya que desde el controlador podemos hacer operaciones que cambien el modelo lo cual representa un cambio en los datos de la vista.</p>
<p>&nbsp;</p>
<p>El patrón MVC lo podrías ver de la siguiente manera:</p>
<p><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/mvc.png"><img loading="lazy" class="aligncenter size-full wp-image-137" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/mvc.png" alt="MVC" width="509" height="271" /></a><span id="more-136"></span></p>
<p>Fig.1: Patrón MVC &#8211; Las lineas continuas son asociaciones directas y las punteadas don indirectas.</p>
<p>Como podemos ver en la fig1 el controlador tiene una asociación con la vista y el modelo, ademas la vista tiene una asociación con el modelo.</p>
<p>Por lo cual cuando el usuario realiza una operación lo hace a través del controlador el cual realiza operaciones sobre el modelo y luego notifica a la vista para que actualice la información que vemos en pantalla, Cuando el modelo es actualizado este puede arrojar eventos que notifican a la vista para que se actualice es por eso que existe la linea punteada entre ambos.</p>
<p>La vista tiene una relación indirecta con el controlador debido a que existen implementaciones de MVC en las cuales la vista no tiene acceso al Modelo por lo cual toda la información la obtiene a través del controlador.</p>
<p>La siguiente figura muestra como los componentes interactúan</p>
<p><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/mvcflow.png"><img loading="lazy" class="aligncenter size-full wp-image-139" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/mvcflow.png" alt="MVCFlow" width="528" height="391" /></a></p>
<p>Pasos</p>
<ol>
<li>El usuario realiza un operación en la pantalla como presionar un botón.</li>
<li>El controlador recibe la petición de realizar una acción</li>
<li>El modelo es actualiza por medio del controlador el cual puede agregar,actualizar o borrar información.</li>
<li>La vista es actualizada con los cambios realizados al modelo.</li>
<li>El usuario recibe las actualizaciones en pantalla.</li>
<li>FIN.</li>
</ol>
<p>Espero que esta breve explicación de lo que es MVC les sea de utilidad.</p>
<p>&nbsp;</p>
<figure id="attachment_2333" aria-describedby="caption-attachment-2333" style="width: 648px" class="wp-caption aligncenter"><a href="https://reactiveprogramming.io/books/design-patterns/es" target="_blank" rel="noopener"><img loading="lazy" class="wp-image-2333 size-large" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/09/patrones-diseño-banner-1024x392.jpg" alt="Introducción a los patrones de diseño" width="648" height="248" /></a><figcaption id="caption-attachment-2333" class="wp-caption-text">¿Quieres aprender más patrones como este? te invito a que veas mi libro.</figcaption></figure>
<p>&nbsp;</p>
<p>Ya está a la venta mi nuevo libro &#8220;<a href="http://www.oscarblancarteblog.com/libros/introduccion-los-patrones-diseno/">Introducción a los patrones de diseño</a>&#8220;, en donde expongo los 25 patrones de diseño más utilizados y explicados desde un enfoque del mundo real, con ejemplos que pueden ser aplicados en tus proyectos. Sin duda es unos de los libros más completos de patrones de diseño en español.		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/21/patron-de-diseno-modelo-vista-controlador-mvc/">Patrón de diseño Modelo Vista Controlador (MVC)</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/07/21/patron-de-diseno-modelo-vista-controlador-mvc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">136</post-id>	</item>
		<item>
		<title>Java &#8211; Como eliminar rápidamente elementos repetidos de una colección</title>
		<link>https://www.oscarblancarteblog.com/2014/07/17/java-como-eliminar-rapidamente-elementos-repetidos-de-una-coleccon/</link>
					<comments>https://www.oscarblancarteblog.com/2014/07/17/java-como-eliminar-rapidamente-elementos-repetidos-de-una-coleccon/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Thu, 17 Jul 2014 21:30:00 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[hashmap]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programación orientada a objetos]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">http://javamex.wordpress.com/2014/07/17/java-como-eliminar-rapidamente-elementos-repetidos-de-una-coleccon/</guid>

					<description><![CDATA[<p>Hace tiempo un amigo me preguntaba  como podía eliminar los elementos repetidos de una colección sin hacer mucho esfuerzo. Bien la solución que considero mucho mas rápida es con ayuda de una HashMap ya que al no permitir elementos repetidos como llave nos ayuda a descartar de forma muy rápida los elementos que ya tenemos [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/17/java-como-eliminar-rapidamente-elementos-repetidos-de-una-coleccon/">Java &#8211; Como eliminar rápidamente elementos repetidos de una colección</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Hace tiempo un amigo me preguntaba  como podía eliminar los elementos repetidos de una colección sin hacer mucho esfuerzo.</p>
<p style="text-align: justify;">Bien la solución que considero mucho mas rápida es con ayuda de una HashMap ya que al no permitir elementos repetidos como llave nos ayuda a descartar de forma muy rápida los elementos que ya tenemos en nuestra colección.<span id="more-89"></span></p>
<figure id="attachment_3213" aria-describedby="caption-attachment-3213" style="width: 800px" class="wp-caption aligncenter"><a href="https://codmind.com/courses/java"><img loading="lazy" class="wp-image-3213 size-full" src="https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md.jpg" alt="Curso de Java Core" width="800" height="450" srcset="https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md.jpg 800w, https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md-300x169.jpg 300w, https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md-768x432.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></a><figcaption id="caption-attachment-3213" class="wp-caption-text">Te invito a que veas mi curso de Java Core, en el cual enseñamos Java desde cero con las mejores prácticas y un proyecto final.</figcaption></figure>
<p style="text-align: justify;">Imagines un escenario donde tenemos una lista de clase Cliente la cual tiene un campo de ID que nos ayude a identificarlo como único, Con esto lo único que tendríamos que hacer es meter como llave el ID y como Valor el Objecto Cliente completo. Al terminar de introducir todos los elementos los elementos repetidos serán automáticamente descartados y solo faltaría iterar las Entradas del HashMap para recuperar los valores únicos.</p>
<p style="text-align: justify;">Veamos el siguiente Código:</p>
<p style="text-align: justify;"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/codigo.png"><img loading="lazy" class="aligncenter size-full wp-image-88" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/codigo.png" alt="codigo" width="513" height="319" /></a></p>
<p style="text-align: justify;">Para los que no les quedo muy claro como el Map elimina los repetidos les explico:</p>
<p style="text-align: justify;">Los Map tiene la característica de tener por cada entrada dos elementos el Key y el Value, El Key representa un elemento único y no puedo contener repetidos por lo que si se intenta meter un elemento repetido lo que hará es sustituir este ultimo por que estaba antes y el Value representa un valor cualquiera asociado a la llave o Key.</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/17/java-como-eliminar-rapidamente-elementos-repetidos-de-una-coleccon/">Java &#8211; Como eliminar rápidamente elementos repetidos de una colección</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/07/17/java-como-eliminar-rapidamente-elementos-repetidos-de-una-coleccon/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">89</post-id>	</item>
		<item>
		<title>Java &#8211; Que es Herencia</title>
		<link>https://www.oscarblancarteblog.com/2014/07/17/java-que-es-herencia/</link>
					<comments>https://www.oscarblancarteblog.com/2014/07/17/java-que-es-herencia/#respond</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Thu, 17 Jul 2014 17:25:53 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[herencia]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Programación orientada a objetos]]></category>
		<guid isPermaLink="false">http://javamex.wordpress.com/?p=77</guid>

					<description><![CDATA[<p>Para los nuevo en el mundo de la programación orientada a objetos este termino les ha de parecer familiar sin embargo no siempre lo tenemos muy claro y aun que comprendemos la herencia no sabemos realmente como utilizarla y cuales son las ventajas que implica. La herencia es la propiedad que tienen todas las clases [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/17/java-que-es-herencia/">Java &#8211; Que es Herencia</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Para los nuevo en el mundo de la programación orientada a objetos este termino les ha de parecer familiar sin embargo no siempre lo tenemos muy claro y aun que comprendemos la herencia no sabemos realmente como utilizarla y cuales son las ventajas que implica.</p>
<p style="text-align: justify;">La herencia es la propiedad que tienen todas las clases u objetos para compartir las<span id="more-77"></span> propiedades o comportamiento de la clase a la cual extienden. Cuando hablo de comportamiento me refiero a que tiene los mismos métodos, propiedades y que tiene un mismo ancestro en común.</p>
<p style="text-align: justify;">Para explicar mejor un ejemplo analizaremos la siguiente imagen:</p>
<p style="text-align: justify;"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/herencia.png"><img loading="lazy" class="aligncenter  wp-image-79" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/herencia.png" alt="Herencia" width="534" height="289" /></a> Podemos apreciar una estructura que representa a los animales desde lo mas genérico como es Animal hasta lo mas especifico como la Raza exacta de una especie determinada.</p>
<p style="text-align: justify;">De esta imagen podemos podemos distinguir los niveles de Herencia en rojo, si nos damos cuenta cualquier raza o especie tiene como padre común a Animal lo que nos dice que todos son animales.</p>
<p style="text-align: justify;">A si mismo cualquier raza de pero como Pastor Alemán, Dálmata o cualquier raza podríamos decir que es un Perro ya que tiene como padre a Perro, pero también podríamos decir que es un Animal por que tiene como máximo ancestro a Animal y a sí sucesivamente para cada raza.</p>
<p style="text-align: justify;">Si esto lo quisiéramos convertir a Clases lo mas seguro es que te imagines que cada Nodo(En verde) seria una clase la cual extendería a la clase que tiene justo Arriba por ejemplo Pastor Alemán extiende de Perro y Perro extiende de Animal. Bien esta solución seria valida pero no seria optima por la gran cantidad de clases que se requerirían para hacer la estructura de todos los animales que existen. Para solucionar esto tendríamos que analizar la estructura y ver de que forma podemos hacer menos compleja la estructura de tal forma que cumpla con todas las características que tiene una raza, especie y animal.</p>
<p style="text-align: justify;">Empezaremos analizando la estructura desde lo mas básico que es el Máximo ancestro el cual es Animal:</p>
<p style="text-align: justify;">Bien un animal tiene como propiedades(Variables) un nombre, pertenece a una especie, tiene una edad y como operaciones(Métodos) tendría comunicarse(Ladrar,Trinan, Maúllar) de una forma abstracta.</p>
<p style="text-align: justify;">Con esto podríamos crear una clase Abstracta que represente el comportamiento de un Animal de la forma mas primitiva(Con las operaciones y propiedades mínimas que tiene un animal y que son común para <strong>TODAS</strong>) y quedaría de la siguiente manera:</p>
<p style="text-align: justify;"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/claseanimal.png"><img loading="lazy" class="aligncenter size-full wp-image-83" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/claseanimal.png" alt="ClaseAnimal" width="418" height="231" /></a></p>
<p style="text-align: justify;">Continuemos con las especie o el segundo nivel de nuestro primero dibujo, Para definir las especies tendríamos que crear una clase para cada especia de tal forma que solo cuente con las propiedades especificas que comparten todos los animales de la misma especie.</p>
<p style="text-align: justify;">Como ejemplo pongo la clase Perro y Ave las cuales tiene propiedades y operaciones únicas de la especie y que no comparten con otras.</p>
<p style="text-align: justify;"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/claseave.png"><img loading="lazy" class="aligncenter size-full wp-image-84" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/claseave.png" alt="ClaseAve" width="396" height="276" /></a>Si nos damos cuenta Ave tiene la operación hacerNido ya que las aves hacen un nido cuando quieren poner sus huevos, sin embargo un perro no tiene esta operación por que no hace nidos. También si nos damos cuenta implementa el método comunicarse para hacer como un Ave y tiene alas como propiedades.</p>
<p style="text-align: justify;"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/claseperro.png"><img loading="lazy" class="aligncenter size-full wp-image-85" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/claseperro.png" alt="ClasePerro" width="372" height="304" /></a></p>
<p style="text-align: justify;">Por otro lado tenemos al perro que implementa la operación comunicarse pero en vez de hacer como Ave este ladra, también vemos que tiene patas, cola y número de registro. Por otro lado tiene la operación olfatear que solo los perros tiene y las aves no.</p>
<figure id="attachment_3213" aria-describedby="caption-attachment-3213" style="width: 800px" class="wp-caption aligncenter"><a href="https://codmind.com/courses/java"><img loading="lazy" class="wp-image-3213 size-full" src="https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md.jpg" alt="" width="800" height="450" srcset="https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md.jpg 800w, https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md-300x169.jpg 300w, https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md-768x432.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></a><figcaption id="caption-attachment-3213" class="wp-caption-text">Quieres aprender de lleno a programar con Java y dominar 4 pilares de la programación orientada a objetos, como es el caso de la herencia, te invito a mi curso Java Core, donde aprenderás de cero a programar con Java.</figcaption></figure>
<p style="text-align: justify;">Por ultimo faltaría el tercer nivel de herencia pero si nos damos cuenta la clase Animal ya tiene la propiedad raza por lo que cuando creemos una clase Perro o Ave ya  tendremos la propiedad para establecer la raza.</p>
<p style="text-align: justify;">Diseñando nuestras clases tendríamos como resultado esta estructura de clases.</p>
<p style="text-align: justify;"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/herenciaclases.png"><img loading="lazy" class="aligncenter  wp-image-86" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/herenciaclases.png" alt="HerenciaClases" width="529" height="252" /></a></p>
<p style="text-align: justify;">Como código de ejemplo podríamos tener un perro Dálmata el siguiente:</p>
<p style="text-align: justify;"><strong>Perro dalmata = new Perro();</strong></p>
<p style="text-align: justify;"><strong>daltma.setNombre(&#8220;Juan Perez&#8221;);</strong></p>
<p style="text-align: justify;"><strong>daltma.setRaza(&#8220;Dálmata&#8221;);</strong></p>
<p style="text-align: justify;"><strong>daltma.setEdad(2);</strong></p>
<p style="text-align: justify;"><strong>dalmata.setNumeroRegitro(12123123);</strong></p>
<p style="text-align: justify;"><strong>daltama.olfatear();</strong></p>
<p style="text-align: justify;"><strong>daltama.comunicarse();</strong></p>
<p style="text-align: justify;">Con este código estamos estableciendo las propiedades de un perro y podríamos utilizar las operaciones propias de un Perro pero sigue siendo un Animal.</p>
<p style="text-align: justify;">Esto también seria valido:</p>
<p style="text-align: justify;"><strong>Animal dalmata = new Perro();</strong></p>
<p style="text-align: justify;"><strong>dalmata.comunicarse();</strong></p>
<p style="text-align: justify;">Bien, Espero que con este pequeño ejemplo se pueda entender mejor lo que es la Herencia en el paradigma orientado a objetos(POO).</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/17/java-que-es-herencia/">Java &#8211; Que es Herencia</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/07/17/java-que-es-herencia/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">77</post-id>	</item>
		<item>
		<title>Java &#8211; Weakreference</title>
		<link>https://www.oscarblancarteblog.com/2014/07/16/java-weakreference/</link>
					<comments>https://www.oscarblancarteblog.com/2014/07/16/java-weakreference/#respond</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Wed, 16 Jul 2014 23:04:13 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programación orientada a objetos]]></category>
		<category><![CDATA[weakreference]]></category>
		<guid isPermaLink="false">http://javamex.wordpress.com/2014/07/16/java-weakreference/</guid>

					<description><![CDATA[<p>Este tema hasta para los expertos en java les puede resultar desconocido y es que siempre creemos que un objeto que no esta referenciado por ninguna variable es candidato para que  el Garbage Colector lo elimine para liberar la memoria, sin embargo esto no es todo cierto ya que existen las referencias blandas las cuales [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/16/java-weakreference/">Java &#8211; Weakreference</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				Este tema hasta para los expertos en java les puede resultar desconocido y es que siempre creemos que un objeto que no esta referenciado por ninguna variable es candidato para que  el Garbage Colector lo elimine para liberar la memoria, sin embargo esto no es todo cierto ya que existen las referencias blandas las cuales <span id="more-68"></span>a pesar de hacer referencia a un objeto en memoria estos objetos pueden se eliminados por el Garbage Colector.</p>
<p>&nbsp;</p>
<p>Java ofrece la clase WeakReference la cual se define de la siguiente manera</p>
<p><strong>WeakReference&lt;T&gt; reference = new WeakReferente&lt;T&gt;(new T());</strong></p>
<p>En este ejemplo T es de tipo Genérico y deberemos sustituirlo por la clase que queramos administrar, por ejemplo si tenemos una clase Persona tendríamos que crear el WeakReference de la siguiente manera</p>
<p><strong>WeakReference&lt;Persona&gt; reference = new WeakReference&lt;Persona&gt;(new Persona());</strong></p>
<p>En este momento tendremos una referencia blanda hacia el objeto que creado y para obtener al objeto Persona tendremos que hacerlo mediante el metodo get de WeakReference de la siguiente manera:</p>
<p><strong>Persona persona = reference.get();</strong></p>
<p>Pero hay que tener cuidad siempre que obtengamos la referencia pues esta podría ser Null en cualquier momento ya que si ninguna otra variable tiene una referencia fuerte o Strong Reference a este objeto el Garbage Colector la eliminara.</p>
<p>&nbsp;</p>
<p>Al igual que existen las referencias blandas o WeakReference también existe un HashMap de WeakReference la cual es  WeakHashMap&lt;T,D&gt; la cual tiene la misma mecánica pero implementado como un Map.</p>
<p>&nbsp;</p>
<p>Estas son algunas de las cosas extrañas que existen en Java pero que nos interesante saberlas.</p>
<p>&nbsp;		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/16/java-weakreference/">Java &#8211; Weakreference</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/07/16/java-weakreference/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">68</post-id>	</item>
		<item>
		<title>JPA, Hibernate VS JDBC</title>
		<link>https://www.oscarblancarteblog.com/2014/07/15/jpa-hibernate-vs-jdbc/</link>
					<comments>https://www.oscarblancarteblog.com/2014/07/15/jpa-hibernate-vs-jdbc/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Tue, 15 Jul 2014 22:00:39 +0000</pubDate>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[ejb]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[objeto relacional]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programación orientada a objetos]]></category>
		<guid isPermaLink="false">http://javamex.wordpress.com/2014/07/15/jpa-hibernate-vs-jdbc/</guid>

					<description><![CDATA[<p>Los que ya han tenido la oportunidad de trabajar con algún ORM como JPA o Hibernate sabrán las bondades que tiene ya que nos permite desarrollar de una forma mucho mas rápida y con muchos menos errores en tiempo de ejecución ya que nos permite modelar nuestras entidad como Clases Java las cuales serán convertidas [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/15/jpa-hibernate-vs-jdbc/">JPA, Hibernate VS JDBC</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				<a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/JPAHibernate1-e1477360564109.jpg"><img loading="lazy" class="size-full wp-image-603 alignleft" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/JPAHibernate1-e1477360564109.jpg" alt="JPA HIBERNATE JDBC" width="150" height="83" /></a>Los que ya han tenido la oportunidad de trabajar con algún ORM como JPA o Hibernate sabrán las bondades que tiene ya que nos permite desarrollar de una forma mucho mas rápida y con muchos menos errores en tiempo de ejecución ya que nos permite modelar nuestras entidad como Clases Java las cuales serán convertidas a las instrucciones Insert, Update o Select según sea la operación a realizar. Claro que todas estos beneficios tiene un costo y es que el performance se degrada debido a todas las conversiones que se tiene que hacer para convertir las Entity en Querys y los ResultSet pasarlos a clases ademas que cada registro representa un Objeto en memoria que tendrá <span id="more-24"></span>que ser administrador por nuestra servidor.</p>
<p>Por otro lado tenemos a JDBC que nos brinda total libertad de hacer lo que queramos sin ningún tipo de limitación explotando al máximo las características de la base datos. JDBC nos permite realizar consultas nativas para cada base de datos lo que ayuda mucho a la velocidad de respuesta y los resultados son devueltos en un ResultSet los cuales podemos extraer solamente los datos que requerimos y no toda la Entity como en el caso de JPA o Hibernate.</p>
<p>&nbsp;</p>
<h2><strong>JPA,Hibernate</strong></h2>
<p>Ventajas</p>
<ol>
<li>Nos permite desarrollar mucho mas rápido.</li>
<li>Permite trabajar con la base de datos por medio de entidades en vez de Querys.</li>
<li>Nos ofrece un paradigma 100% orientado a objetos.</li>
<li>Elimina errores en tiempo de ejecución.</li>
<li>Mejora el mantenimiento del software.</li>
</ol>
<p>Desventajas</p>
<ol>
<li>No ofrece toda la funcionalidad que ofrecería tirar consultas nativas.</li>
<li>El performance es mucho mas bajo que realizar las consultas por JBDC.</li>
<li>Puede representar una curva de aprendizaje mas grande.</li>
</ol>
<p>&nbsp;</p>
<h2><strong>JDBC</strong></h2>
<p>Ventajas</p>
<ul>
<li>Ofrece un performance superior ya que es la forma mas directa de mandar instrucciones la base de datos.</li>
<li>Permite explotar al máximo las funcionalidades de la base de datos.</li>
</ul>
<p>Desventajas</p>
<ul>
<li>El mantenimiento es mucho mas costoso.</li>
<li>Introduce muchos errores en tiempo de ejecución.</li>
<li>El desarrollo es mucho mas lento.</li>
</ul>
<p>&nbsp;</p>
<p>Probablemente pensaras que JPA o Hibernate son mejores ya que ofrece mayor ventajas que desventajas sin embargo las desventajas que tiene son muy serias y pueden ser cruciales a la hora de decidir que tecnología utilizar ya que si tenemos una aplicación muy buena y fácil de mantener pero que tarda demasiado para consultar datos puede llegar a ser algo muy malo.</p>
<p>Como conclusión yo diría que si requieres una aplicación donde el rendimiento sea el factor mas importante utilices JDBC, pero por otra parte si el rendimiento es algo que no están importante puedes utilizar JPA o Hibernate.</p>
<h2></h2>
<h2>Tutorial de JPA Gratis!!</h2>
<p>Si estás leyendo esto en este momento es por seguramente estas interesado en aprender Hibernate o JPA, pues te tengo buenas noticias, ya que he iniciado un tutorial muy completo de JPA para que aprendas desde cero y sin conocimientos previos como utilizar JPA. No te sientas mal si lo que tu buscas es aprender Hibernate, ya que actualmente existe una implementación de JPA desarrollada por Hibernate. Además, JPA es el ORM Estándar de Java y que se integra a la perfección con el resto de especificaciones de Java, como lo es EJB 3.X, CDI, Bean Validator, entre otras más. Pues bien, si estas interesado en tomar este tutorial puedes <a href="http://www.oscarblancarteblog.com/tutoriales/java-persistence-api-jpa/">entrar aquí</a>.</p>
<p>&nbsp;		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/15/jpa-hibernate-vs-jdbc/">JPA, Hibernate VS JDBC</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/07/15/jpa-hibernate-vs-jdbc/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">24</post-id>	</item>
		<item>
		<title>Que es el Polimorfismo?</title>
		<link>https://www.oscarblancarteblog.com/2014/07/15/que-es-el-polimorfismo/</link>
					<comments>https://www.oscarblancarteblog.com/2014/07/15/que-es-el-polimorfismo/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Tue, 15 Jul 2014 17:27:12 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programación orientada a objetos]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">http://javamex.wordpress.com/2014/07/15/que-es-el-polimorfismo/</guid>

					<description><![CDATA[<p>Si son nuevos en la programación seguramente esta palabra les causar dolor de cabeza ya que desde mi punto de vista esta es la caracterizara del paradigma orientado a objetos mas difícil de comprender pero no se preocupen tratare de explicarles lo mas simplemente posible. El polimorfismo permite que nuestro programa realice tareas que se [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/15/que-es-el-polimorfismo/">Que es el Polimorfismo?</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				Si son nuevos en la programación seguramente esta palabra les causar dolor de cabeza ya que desde mi punto de vista esta es la caracterizara del paradigma orientado a objetos mas difícil de comprender pero no se preocupen tratare de explicarles lo mas simplemente posible.</p>
<p>El polimorfismo permite que nuestro programa realice tareas que se definirán hasta el tiempo de ejecución.<span id="more-15"></span></p>
<p>Si escribimos un código que sume dos números nuestra programación sera muy simple ya que podemos determinar el comportamiento del programa con solo ver el código, por ejemplo</p>
<p>public class Main{</p>
<p>public static void main(String[] args){</p>
<p>Operacion op= new Operacion();</p>
<p>double suma = op.operacion(5,10);</p>
<p>System.out.println(&#8220;Suma ==&gt; &#8221; + suma);</p>
<p>}</p>
<p>}</p>
<p>public class Operacion{</p>
<p>public double operacion(double a, double b){</p>
<p>return a +b;</p>
<p>}</p>
<p>}</p>
<p>Con solo ver el siguiente código podemos determinar que el programa sumara dos numero y finalizara ya que código a ejecutar esta definido de esta forma y nada puede hacer que cambie en tiempo de ejecución. Sin embargo con el polimorfismos esto cambia ya la funcionalidad que se ejecuta dependerá de la implantación que se le de aun método determinado.</p>
<p>Una vez comprendido el código anterior veremos como trabajaría con polimorfismo.</p>
<p>Imaginemos que ya tenemos definidas las clases anteriores pero hora definimos una nueva clase llamada Resta la cual extiende de &#8220;Operacion&#8221; pero en vez de sumar los números los resta:</p>
<p>public class Resta extends Operacion{</p>
<p>public double operacion(double a, double b){</p>
<p>return a &#8211; b;</p>
<p>}</p>
<p>}</p>
<p>Podemos apreciar que el método &#8220;operacion&#8221; esta definido igual que en la clase &#8220;Operacion&#8221; lo que provoca algo llamada Override o sobre escribir el método.</p>
<p>Con esto en mente modificaremos el método main de la clase anterior y veremos lo que sucede:</p>
<p>public class Main{</p>
<p>public static void main(String[] args){</p>
<p>Operacion opSum= new Operacion();</p>
<p>double suma = opSum.operacion(5,10);</p>
<p>System.out.println(&#8220;Suma ==&gt; &#8221; + suma);</p>
<p>Operacion opRest = <strong>new Resta(5,10);</strong></p>
<p>double resta = opRest.operacion();</p>
<p>System.out.println(&#8220;Resta ==&gt; &#8221; + resta);</p>
<p>}</p>
<p>}</p>
<p>Como resultado tendremos la suma de 5 + 10 = 15 seguido de la resta de 5-10 = -5.</p>
<p>La clave aquí es que opRest a pesar de tipo &#8220;Operacion&#8221; tiene asignada una referencia a una instancia de la clase Resta la cual al extender de &#8220;Operacion&#8221; nos permite asignarla a una variable de tipo &#8220;Operacion&#8221; esto hace que en tiempo de ejecución el metodo &#8220;operacion&#8221; de la variable opRest ejecute el código de la clase Resta en vez de la clase &#8220;Operacion&#8221;</p>
<p>Bien a esto se le llama Polimorfismo&#8230;</p>
<p>&nbsp;		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/15/que-es-el-polimorfismo/">Que es el Polimorfismo?</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/07/15/que-es-el-polimorfismo/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">15</post-id>	</item>
	</channel>
</rss>
