<?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/"
	>

<channel>
	<title>TrickyWeb.cl - Informática &#38; Tecnología &#187; Tutoriales</title>
	<atom:link href="http://www.trickyweb.cl/category/tutoriales-de-todo-tipo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.trickyweb.cl</link>
	<description>Informática &#38; Tecnología</description>
	<lastBuildDate>Sat, 14 Nov 2009 06:34:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>HOW TO:Instalar PHP 5.3 en Fedora</title>
		<link>http://www.trickyweb.cl/2009/11/14/how-toinstalar-php-5-3-en-fedora/</link>
		<comments>http://www.trickyweb.cl/2009/11/14/how-toinstalar-php-5-3-en-fedora/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 06:29:46 +0000</pubDate>
		<dc:creator>Camilo Zambrano Lagos</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[caracteristicas php 5.3]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[php 5.3]]></category>
		<category><![CDATA[rpm]]></category>

		<guid isPermaLink="false">http://www.trickyweb.cl/?p=658</guid>
		<description><![CDATA[Hola a todos!, hace mucho tiempo que no posteaba algo.
Éste post creo que le interesará a varios desarrolladores web que quieran disfrutar de las bondades del casi nuevo PHP 5.3, algunas de las características nuevas incorporadas (que no dejan de ser, sobre todo para los que disfrutan de un trabajo &#8220;ordenado&#8221;) son las siguientes:

Namespaces - [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos!, hace mucho tiempo que no posteaba algo.<br />
Éste post creo que le interesará a varios desarrolladores web que quieran disfrutar de las bondades del <del datetime="2009-11-14T05:44:25+00:00">casi</del> nuevo PHP 5.3, algunas de las características nuevas incorporadas (que no dejan de ser, sobre todo para los que disfrutan de un trabajo &#8220;ordenado&#8221;) son las siguientes:<span id="more-658"></span></p>
<ul>
<li><strong>Namespaces </strong>- Sí señores!!! éste recurso tan valioso por el que muchos pelearon y firmaron para su inclusión, por fin fue tomado en cuenta, claro está que aun se encuentra en su etapa primitiva, pero puedo decir por experiencia &#8211; ya testié este magnifico release &#8211; que funciona de mil maravillas!</li>
<li><strong>Late static bindings</strong> &#8211; Éste es un concepto nuevo, incorporado por PHP, que se basa en el trabajo con métodos estáticos durante el runtime, la esencia de éste concepto es más que nada &#8220;obligar&#8221; al pc, a que si se trabaja con herencia de clases, en el caso de métodos heredados o locales, usar el último elemento static definido, que a diferencia de self, puede ser de la clase padre o de la hija. (Esto es lo que yo he entendido, si alguien entendió algo diferente lo invito a corregirme en los comentarios <img src='http://www.trickyweb.cl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , éste concepto es nuevo así que es dificil entenderlo de primeras)</li>
<li><strong>Closures </strong>- Muchos esperaban también ésta característica, los closures son funciones anónimas, de manera similar a Javascript.</li>
<li><strong>Recolector de basura opcional para referencias cíclicas</strong> &#8211; PHP borra las referencias no utilizadas al finalizar un ámbito , pero al momento de definir clases o variables con referencias a veces se busca eliminar ciertas referencias antes de salir del ámbito (lo que si no es bien tratado puede producir memory leaks), lo que busca este recolector es más que nada eso, cuando se presentan referencias cíclicas facilitar el trabajo de liberación adecuada de memoria (evitándonos los molestos unsets que a más de alguno supongo le ha quebrado el cráneo buscando el problema en la fuga de memoria)</li>
<li>Nuevas extensiones, se arreglaron alrededor de 140 bugs, entre otras cosas.</li>
</ul>
<p>A continuación enseñaré como instalar PHP 5.3 en Fedora (Sí, aún no se incluye en los repos oficiales por ser relativamente nuevo).</p>
<p>Requisitos:</p>
<ul>
<li>YUM instalado</li>
<li>RPM instalado</li>
</ul>
<p>Primero instalamos el package <strong>remi-release</strong>, que es un package creado por un francés, puedes ver su <a href="http://http://blog.famillecollet.com/pages/Config-en">blog acá</a>, éste paquete provee la configuración del repositorio para YUM y la llave GPG usada para firmar el repositorio, ¿cómo se hace?, copy-pastea lo siguiente en el terminal según tu versión:</p>
<p><strong>Fedora 12 i386, ppc, ppc64 o x86_64</strong><br />
<code>rpm -Uvh http://rpms.famillecollet.com/remi-release-12.rpm</code></p>
<p><strong>Fedora 11 i386, ppc, ppc64 o x86_64</strong></p>
<p><code>wget http://rpms.famillecollet.com/remi-release-11.rpm<br />
rpm -Uvh remi-release-11.rpm</code></p>
<p><strong>Fedora 10 i386, ppc, ppc64 o x86_64</strong><br />
<code>wget http://rpms.famillecollet.com/remi-release-10.rpm<br />
rpm -Uvh remi-release-10.rpm</code></p>
<p><strong>Fedora 9 i386, ppc, ppc64 o x86_64</strong><br />
<code>wget http://rpms.famillecollet.com/remi-release-9.rpm<br />
rpm -Uvh remi-release-9.rpm</code></p>
<p><strong>Fedora 8 i386, ppc, ppc64 o x86_64</strong></p>
<p><code>wget http://rpms.famillecollet.com/remi-release-8.rpm<br />
rpm -Uvh remi-release-8.rpm</code></p>
<p><strong>Fedora 7 i386, ppc o x86_64</strong></p>
<p><code>wget http://rpms.famillecollet.com/remi-release-7.rpm<br />
rpm -Uvh remi-release-7.rpm</code></p>
<p><strong>Fedora Core 6 i386, ppc o x86_64</strong><br />
<code>wget http://rpms.famillecollet.com/remi-release-6.rpm<br />
rpm -Uvh remi-release-6.rpm<br />
</code><br />
<strong>Fedora Core 5 (repositorio no mantenido)</strong></p>
<p><code>wget http://rpms.famillecollet.com/remi-release-5.rpm<br />
rpm -Uvh remi-release-5.rpm<br />
</code><br />
<strong>Fedora Core 4 (repositorio no mantenido)</strong></p>
<p><code>wget http://rpms.famillecollet.com/remi-release-4.rpm<br />
rpm -Uvh remi-release-4.rpm</code><br />
<strong><br />
Fedora Core 3 (repositorio no mantenido)</strong><br />
<code>wget http://rpms.famillecollet.com/remi-release-3.rpm<br />
rpm -Uvh remi-release-3.rpm</code></p>
<p>Luego configuramos manualmente YUM:<br />
<code>su -<br />
cd /etc/yum.repos.d<br />
wget http://rpms.famillecollet.com/remi-fedora.repo</code></p>
<p>Se instala la llave GPG correspondiente al repositorio:<br />
<code>rpm --import RPM-GPG-KEY-remi</code></p>
<p>Luego se lista la llave instalada mediante el comando:<br />
<code>rpm -q gpg-pubkey --qf "%{summary} ->%{version}-%{release}\n"</code></p>
<p>Para todo este proceso, si quedas con dudas (y le pegas al inglés) puedes visitar el <a href="http://http://blog.famillecollet.com/pages/Config-en">blog</a>.</p>
<p>Para instalar PHP 5.3 obviamente debes tener instalados los servicios <strong>httpd </strong>(al menos en fedora 11 vienen instalados asi que no habría complicaciones).<br />
Para instalar al susodicho recurso, usaremos el siguiente comando en nuestra consola y con atributos de root:<br />
<code>yum --enable remi update php-\*</code></p>
<p>Y voilá, php 5.3 se configura igual que sus versiones anteriores, no deberías tener problemas (a menos que seas novato, para cualquier efecto, basta con configurar el <strong>php.ini</strong>, y la parte de <strong>DocumentRoot</strong> en caso que quieras cambiar la carpeta, pero eso no es tema ahora, corresponde a la configuración de PHP <img src='http://www.trickyweb.cl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> , si quieres aprender a configurar un servidor web, mejor aprende a configurar apache que es el que mueve todo el asunto).</p>
<p>Y bueno, ahora solo queda probar las nuevas características, php proporciona una buena documentación como para entender a cabalidad y mediante ejemplos como trabajar de manera óptima con cada uno de sus elementos.</p>
<p>Si lo quieren en algún post puedo mostrar como trabajar con Namespaces y closures <img src='http://www.trickyweb.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ya que ese tema no va al caso ahora.<br />
Espero éste corto tutorial les sirva y puedan disfrutar, como yo, de las nuevas características de PHP 5.3 <img src='http://www.trickyweb.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trickyweb.cl/2009/11/14/how-toinstalar-php-5-3-en-fedora/feed/</wfw:commentRss>
		<slash:comments>456</slash:comments>
		</item>
		<item>
		<title>HOWTO: Crack WEP en Linux!</title>
		<link>http://www.trickyweb.cl/2009/10/20/recuperar-clave-wifi-con-encriptacion-wep-en-linux/</link>
		<comments>http://www.trickyweb.cl/2009/10/20/recuperar-clave-wifi-con-encriptacion-wep-en-linux/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 22:15:48 +0000</pubDate>
		<dc:creator>Ball</dc:creator>
				<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.trickyweb.cl/?p=439</guid>
		<description><![CDATA[Mas de alguna vez a alguien le debe haber pasado esto. Un dia cualquiera, de la nada se nos olvida la clave para acceder a nuestra red wifi con encriptacion wep,  nuestro mundo se nos viene abajo, no?. Pero tranquilo muchacho!, con este pequeño tutorial tendras herramientas (reiniciar el router no cuenta ¬¬) para recuperar [...]]]></description>
			<content:encoded><![CDATA[<p>Mas de alguna vez a alguien le debe haber pasado esto. Un dia cualquiera, de la nada se nos olvida la clave para acceder a nuestra red wifi con encriptacion wep,  nuestro mundo se nos viene abajo, no?. Pero tranquilo muchacho!, con este pequeño tutorial tendras herramientas <span style="text-decoration: line-through;">(reiniciar el router no cuenta ¬¬)</span> para recuperar tu clave&#8230;</p>
<p>Para este caso hemos trabajado con Ubuntu 9.04 ya que es la distribucion (a mi juicio) que tiene menos problemas en reconociento de tarjetas wifi, pero en todo caso, cualquier otra distribucion linux deberia servir.</p>
<p>En primer lugar abrimos una terminal, e instalamos el aircrack-ng.</p>
<p style="text-align: center;">&#8220;<em><strong>Apt-get install aircrack-ng</strong></em>&#8220;</p>
<p><img class="alignnone" title="Instalando Aircrack-ng" src="http://img21.imageshack.us/img21/5735/installo.jpg" alt="" width="496" height="159" /></p>
<p>Una vez terminada la instalacion, comenzamos los pasos magicos =D. Para todos los pasos se debe trabajar a nivel de root, para esto simplemente al abrir una terminal escribimos:</p>
<p style="text-align: center;"><em>&#8220;</em><strong><em>sudo –s</em></strong><em>&#8220;</em></p>
<p>e ingresamos nuestra clave.</p>
<p>Ahora estamos listos para empezar, aquí vamos&#8230;</p>
<p>Primero abrimos una terminal y escribimos el comando “<strong><em>iwconfig</em></strong>” el cual nos indicara las interfaces inalambricas que tenemos instaladas.</p>
<p>Si no nos aparece algo como esto (imagen), significa que nuestra placa no esta soportada =( y no podremos continuar.</p>
<p>Si este no es tu caso, continuamos&#8230;</p>
<p><img class="alignnone" title="iwconfig" src="http://img5.imageshack.us/img5/2645/iwconfig.jpg" alt="" width="508" height="308" /></p>
<p>Como podemos ver, mi interfaz es la wlan0.</p>
<p>2- Ahora debemos detener nuestra interfaz, para utilizarla en modo monitor. Para eso utilizamos el comando “<em><strong>airmon-ng stop wlan0</strong></em> ”, donde wlan0 corresponde al nombre de la interfaz que en el paso anterior obtuvimos.</p>
<p>3- Ahora utilizamos el comando “<em><strong>airmon-ng start wlan0</strong></em> “ para poner nuestra interfaz en modo monitor.</p>
<p><img class="alignnone" title="airmon-ng start wlan0 " src="http://img245.imageshack.us/img245/7351/starje.jpg" alt="" width="509" height="323" /></p>
<p>4- Luego de esto observamos que  el monitor se encuentra habilitado con el nombre <strong>mon0</strong>.</p>
<p>5- Ahora abrimos una nueva terminal y en modo root escribimos “<em><strong>airodump-ng mon0</strong></em>“, donde lo que hace este comando es escanear las redes cercanas.</p>
<p><img class="alignnone" title="Redes" src="http://img245.imageshack.us/img245/1374/sinttulo6s.jpg" alt="" width="526" height="156" /></p>
<p>6- Como podemos observar, hay un listado de redes posibles, en este caso si el  lector desea ir al cielo, aplica su etica informatica y trabaja en base a la red wifi de su propiedad, (<span style="text-decoration: line-through;">para los demas, esta mas que claro.</span>)</p>
<p>Los datos que tenemos que tener en cuenta son:</p>
<ul>
<li>BSSID que corresponde a la direccion mac de la red.</li>
</ul>
<ul>
<li>CH corresponde al canal.</li>
</ul>
<ul>
<li>ESSID nombre de la red.</li>
</ul>
<p>Ya con estos datos podemos dejar de escanear redes.</p>
<p>7- Abrimos una nueva terminal en root, y escribimos:</p>
<p style="text-align: center;">“<strong><em>airodump-ng -c X &#8211;bssid CC:CC:CC:CC:CC:CC -w PACKS mon0</em> </strong>“</p>
<p>Donde   &#8220;<strong><em>X</em></strong>&#8221; indica el canal de la red a detectar, &#8220;<em><strong>CC:CC:CC:CC:CC:CC</strong></em>&#8221; indica la direccion mac de la red en cuestion (BSSID) y por utimo “PACKS” corresponde a el archivo donde se guardaran los paquetes (se puede poner cualquier nombre).</p>
<p><strong>IMPORTANTE</strong>: esta nueva terminal no la debes cerrar (de preferencia no cierres ninguna hasta terminar todo el proceso, <span style="text-decoration: line-through;">sino atente a las consecuencias</span>).</p>
<p>8- Ahora en una nueva terminal (siempre en root) escribimos:</p>
<p style="text-align: center;">“<em><strong>aireplay-ng -1 0 -e xxxxxx -a XX:XX:XX:XX:XX:XX -h 11:22:33:44:55:66 mon0</strong></em>”</p>
<p>Donde &#8220;<strong><em>xxxxxxx</em></strong>&#8221; corresponde al nombre de la red, &#8220;<strong>XX:XX:XX:XX:XX:XX</strong>&#8221; es la direccion mac de la misma red y <em>&#8220;</em><strong><em>11:22:33:44:55:66&#8243;</em></strong> es nuestra direccion mac (del pc desde donde trabajamos) .</p>
<p><img class="alignnone" title="aireplay-ng" src="http://img11.imageshack.us/img11/3295/sinttulo8da.jpg" alt="" width="520" height="139" /></p>
<p>8- Nuevamente abrimos una nueva terminal en root y escribimos:</p>
<p style="text-align: center;">“<em><strong>aireplay-ng -3 -b XX:XX:XX:XX:XX:XX -h 11:22:33:44:55:66 mon0</strong></em>”</p>
<p>Donde &#8220;<strong>XX:XX:XX:XX:XX:XX</strong>&#8221; a la dirección mac del punto de acceso (mac de la red), &#8220;<strong><em>11:22:33:44:55:66</em></strong>&#8221; dirección mac que hemos asociado antes en el paso anterior (nuestra)<strong>.</strong></p>
<p><strong><img class="alignnone" title="aireplay-ng 2" src="http://img11.imageshack.us/img11/6274/sinttulo7e.jpg" alt="" width="516" height="89" /></strong></p>
<p>De aquí en adelante el aireplay ira capturando paquetes, pero cada captura tiene pocas peticiones ARP. Asi que tenemos que esperar hasta que haya capturado unas  150.000 (ciento cincuenta mil). El proceso demora un buen tiempo dependiendo de la cercania e interferencia con la red wifi.</p>
<p><strong> </strong></p>
<p>Ya cuando hayamos llegado a las 150.000, sin cerrar los terminales anteriores escribimos el siguiente comando para desencriptar la clave con los paquetes ya capturados.</p>
<p style="text-align: center;">“<em><strong>aircrack-ng -z *.cap </strong></em>”</p>
<p><strong><img class="alignnone" title="Fin" src="http://img196.imageshack.us/img196/9008/sinttulo9w.jpg" alt="" width="499" height="222" /></strong></p>
<p>Esperamos un poco, y wala!, tenemos nuestra clave wep en hexadecimal, lo unico que basta por hacer es tomar el Key Found! que viene en formato -&gt; XX:XX:XX:XX:XX e ingresarlo la clave como XXXXXXXXXX (quitando los &#8220;:&#8221;).</p>
<p>Y asi hemos recuperado nuestra clave wifi con encriptacion wep =D.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trickyweb.cl/2009/10/20/recuperar-clave-wifi-con-encriptacion-wep-en-linux/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>C# Básico &#8211; Windows Forms</title>
		<link>http://www.trickyweb.cl/2009/09/24/c-basico-windows-forms/</link>
		<comments>http://www.trickyweb.cl/2009/09/24/c-basico-windows-forms/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 21:32:26 +0000</pubDate>
		<dc:creator>Camilo Zambrano Lagos</dc:creator>
				<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.trickyweb.cl/?p=226</guid>
		<description><![CDATA[Hola!, creo que muchos han buscado tutoriales por la red y se han aburrido de leer mucho, espero esta no sea la ocasión porque intentaré presentar de manera práctica y precisa el tema a tratar.
Esta vez presentaré un tutorial básico de C#, dirigido netamente a la creación de programas con entorno gráfico (GUI) para windows.

Para [...]]]></description>
			<content:encoded><![CDATA[<p>Hola!, creo que muchos han buscado tutoriales por la red y se han aburrido de leer mucho, espero esta no sea la ocasión porque intentaré presentar de manera práctica y precisa el tema a tratar.</p>
<p>Esta vez presentaré un tutorial básico de C#, dirigido netamente a la creación de programas con entorno gráfico (GUI) para windows.</p>
<p><span id="more-226"></span></p>
<p>Para entender a cabalidad este post recomiendo leer los posts sobre Orientación a objetos teórica, este tutorial de Orientación a objetos está en 3 partes, puedes leerlos haciendo click en los siguientes links respectivamente:</p>
<ol>
<li>Orientación a Objetos<a href="http://www.trickyweb.cl/2009/08/27/orientacion-a-objetos-parte-i-2/"> p1</a>.</li>
<li>Orientación a Objetos <a href="http://www.trickyweb.cl/2009/08/29/orientacion-a-objetos-parte-ii-2/">p2</a>.</li>
<li>Orientación a Objetos <a href="http://www.trickyweb.cl/2009/09/13/orientacion-a-objetos-parte-iii/">p3</a>.</li>
</ol>
<p>Para trabajar, hay que trabajar con un IDE apropiado para el caso, en este momento se utilizará <em><strong><a href="http://www.microsoft.com/express/vcsharp/">Microsoft Visual C# Express 2008</a></strong></em>.</p>
<p>Partamos&#8230;</p>
<p style="margin-bottom:2px"><span style="font-size:12pt;"><strong>Breve Historia &#8211; [</strong></span><span style="font-size:10pt"><a href="http://es.wikipedia.org/wiki/C_sharp#Historia">Extracto de Wikipedia</a></span><a href="http://es.wikipedia.org/wiki/C_sharp#Historia"></a><span style="font-size:12pt"><strong>]</strong></span></p>
<p>Durante el desarrollo de la plataforma .NET, las bibliotecas de clases fueron escritas originalmente en el lenguaje compilador Simple Managed C. En enero de 1999, Anders Hejlsberg formó un equipo con la misión de desarrollar un nuevo lenguaje de programación llamado Cool (C Orientado a Objetos). Este nombre tuvo que ser cambiado debido a problemas de marca pasando a llamarse C#. La biblioteca de clases de la plataforma .NET fue migrada entonces al nuevo lenguaje.<br /> <br />
Hejlsberg lideró el proyecto de desarrollo de C#. Anteriormente, ya participó en el desarrollo de otros lenguajes como Turbo Pascal, J++ y Borland Delphi.</p>
<hr />
Como se hizo notar en el post <a href="http://www.trickyweb.cl/2009/09/02/c-c-c-cual-es-la-diferencia/">C – C++ – C#: Cuál es la diferencia?</a>, C# es una extensión de C, por lo que los tipos de datos básicos con los que se trabajaba en C son iguales a los de C#, la diferencia está en que en C# tenemos tipos de datos que ahorran un trabajo inmenso en comparación con C. Como ejemplo de dichos tipos de datos, tenemos el tipo<strong> bool</strong>, <strong>string</strong>, que no aparecen en C, pero si en C#.</p>
<p>Pues bien, ya teniendo esta información a mano, vamos a comenzar a trabajar en nuestra aplicación.</p>
<ol>
<li> Para crear un nuevo proyecto, debes dirigirte a <strong>Archivo</strong> &gt;&gt; <strong>Nuevo Proyecto</strong> como se muestra en la imagen que viene a continuación.<br/>
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/1.png" rel="thumbnail" title="Archivo &gt;&gt; Nuevo Proyecto"><img src="http://www.trickyweb.cl/img/tuto_cs/1.png" width="129" height="96" alt="Archivo &gt;&gt; Nuevo Proyecto" /></a></p>
</li>
<li>Selecciona Aplicación de Windows Forms, ponle un nombre a tu proyecto y haz clic en aceptar.
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/2.png" rel="thumbnail" title="Aplicación de Windows Forms"><img src="http://www.trickyweb.cl/img/tuto_cs/2.png" width="129" height="96" alt="Archivo &gt;&gt; Nuevo Proyecto" /></a></p>
</li>
<li> Aparecerá lo siguiente:
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/3.png" rel="thumbnail" title="Nuevo Form"><img src="http://www.trickyweb.cl/img/tuto_cs/3.png" width="129" height="96" alt="Nuevo Form" /></a></p>
</li>
</ol>
<p>Vamos a hacer algo básico, que al hacer clic en un botón, aparezca un mensaje que diga &#8220;Hola Mundo!&#8221;, para ello, debemos insertar el botón, para ello insertaremos el botón en el formulario:</p>
<ol>
<li> Busca el botón(Button) en la barra de herramientas, generalmente está en un extremo izquierdo, como se puede ver en la imagen:
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/4.png" rel="thumbnail" title="Localizar Botón"><img src="http://www.trickyweb.cl/img/tuto_cs/4.png" width="129" height="96" alt="Localizar Botón" /></a></p>
</li>
<li> Selecciona el botón y arrástralo hacia el formulario
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/5.png" rel="thumbnail" title="Seleccionar y arrastrar botón"><img src="http://www.trickyweb.cl/img/tuto_cs/5.png" width="129" height="96" alt="Seleccionar y arrastrar botón" /></a></p>
</li>
<li>Es posible fijarse que el texto del botón dice button1, ¿nada bonito no? pues bien, es posible fijarse que en la esquina inferior derecha hay una ventana llamada propiedades, ahí al seleccionar el botón, podemos modificar los atributos del objeto botón (Recordar, por lo leído que C# trabaja orientado a objetos, por lo que todo lo &#8220;visual&#8221; son objetos, con métodos y atributos).<br /> <br />
En dicha ventana, busca un campo llamado <strong>Text</strong>, ahi al lado aparece el texto del botón (button1), y modificalo a tu antojo.</p>
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/6.png" rel="thumbnail" title="Cambia el texto del botón"><img src="http://www.trickyweb.cl/img/tuto_cs/6.png" width="129" height="96" alt="Cambia el texto del botón" /></a></p>
</li>
</ol>
<p>Listo, se tiene lo que se necesita, ahora vas a probar lo que tenemos creado, haz clic en el símbolo <img src="http://www.trickyweb.cl/img/tuto_cs/play.png" alt="Debug" /> para iniciar la depuración, aquí comenzará la ejecución de lo que llevamos de aplicación y en caso de haber errores, el sistema lo hará saber y marcará el lugar del error, para arreglarlo.</p>
<p>Es posible apreciar, que aparecerá la ventana con el botón en medio, y si apretamos el botón&#8230;no pasará NADA.</p>
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/7.png" rel="thumbnail" title="No pasa nada!!"><img src="http://www.trickyweb.cl/img/tuto_cs/7.png" width="129" height="96" alt="No pasa nada!!" /></a></p>
<p>¿Lamentable no?, probablemente en este punto estés algo decepcionado porque creías que esto era mágico y todo vendría para llegar y hacer, lamentablemente no es así, por lo que habrá que configurar la aparición del mensaje por nuestra cuenta, y para ello habrá que acceder directamente al código de la aplicación, para ello, detén la depuración cerrando la ventana generada.</p>
<p>Posterior a ello, haz doble clic en el botón, haciendo esto accederás al código que define a la clase Form1 (en nuestro caso), y específicamente al evento Click del objeto botón.</p>
<p>Aquí me daré el lujo de detenerme un momento, en este momento el lector se pregunta <strong>¿qué es un evento?</strong>, un evento es una acción realizada por el usuario (o bien por el mismo objeto) que el objeto captará, y en base a la acción o efecto captado por el botón, ocurrirá algo es decir, el cambio de estado de un atributo o la llamada a un método.</p>
<p>Bien, al acceder al código, al comienzo del código se verá lo siguiente:</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">using</span> <span class="kw5">System</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">using</span> <span class="kw5">System</span>.<span class="me1">Collections</span>.<span class="me1">Generic</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">using</span> <span class="kw5">System</span>.<span class="me1">ComponentModel</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">using</span> <span class="kw5">System</span>.<span class="me1">Data</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">using</span> <span class="kw5">System</span>.<span class="me1">Drawing</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">using</span> <span class="kw5">System</span>.<span class="me1">Linq</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">using</span> <span class="kw5">System</span>.<span class="me1">Text</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">using</span> <span class="kw5">System</span>.<span class="me1">Windows</span>.<span class="me1">Forms</span>;</div>
</li>
</ol>
</div>
<p>Esos elementos son librerías que el sistema utiliza para acceder a los diferentes objetos y trabajar con los diferentes recursos gráficos y de sistema, es algo asi como el <strong>#include </strong>en C.</p>
<p>Luego es posible apreciar lo siguiente:</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">namespace</span> Tutorial_CS</div>
</li>
</ol>
</div>
<p>Un <strong>namespace</strong> son agrupaciones de nombres que permiten identificar elementos con los mismos nombres, pero que pertenecen a entornos diferentes. Esto lo usarás y entenderás mas a la perfección al momento de trabajar con ejemplos más complejos.</p>
<p>Luego aparecen elementos que, si manejas POO, te parecerán conocidos:</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> partial <span class="kw4">class</span> Form1 <span class="sy0">:</span> Form</div>
</li>
</ol>
</div>
<p>&#8220;Casi&#8221; todo lo de acá es conocido, la palabra <strong>partial </strong>hace referencia a que la clase Form1 ha sido definido parcialmente mediante mas de un archivo de código fuente, por lo que algunos archivos contienen sus atributos, otros sus métodos, etc, permitiendo así entregar un código mínimo para trabajar y evitar que el usuario cometa algún error que pueda dañar la configuración central de la aplicación que se está trabajando, además de facilitar el trabajo modulado ya que más de un programador pueden trabajar en una misma clase pero en diferentes sectores de ella y facilitar la <strong>reutilización de código</strong>.</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> Form1<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; InitializeComponent<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">private</span> <span class="kw1">void</span> button1_Click<span class="br0">&#40;</span><span class="kw4">object</span> sender, EventArgs e<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>El primer método (sin tipo de dato de salida) es un constructor, generalmente es opcional, pero en éste caso es necesario (al menos en la main window) ya que mediante éste método se inicializan los componentes del form( <strong><em>InitializeComponent()</em></strong> ) y es posible cargarlo al inicio.</p>
<p>El segundo método es el que hace referencia a la acción a realizar cuando se haga click sobre el botón 1 (&#8221;Presioname!&#8221;, evento Click).<br /> <br />
Trabajaremos en éste método, agrega lo siguiente dentro de ésta función:</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1">MessageBox.<span class="me1">Show</span><span class="br0">&#40;</span><span class="st0">&quot;Hola Mundo!&quot;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Ahora, vuelve a hacer click en el botón para depurar, podrás ver lo siguiente si haces click en el botón (ver Imagen).</p>
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/8.png" rel="thumbnail" title="Vive!!"><img src="http://www.trickyweb.cl/img/tuto_cs/8.png" width="129" height="96" alt="Vive!!" /></a></p>
<p>Perfecto!! Ahora tienes tu primera aplicación hecha en C#.</p>
<p style="margin-bottom:2px"><span style="font-size:12pt;"><strong>¿Cómo trabajo con otros eventos?</strong></span></p>
<p>Es fácil (Si!, es fácil, con práctica todo es facil <img src='http://www.trickyweb.cl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ), para crear un nuevo evento,sitúate en el constructor y escribe lo siguiente:</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> Form1<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; InitializeComponent<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; button1.</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Automáticamente, después del &#8220;.&#8221; se abrirá una ventana (ver Imagen) de la que podrás escoger tanto métodos, como manipuladores de eventos o bien atributos.<br /> <br />
Se quiere configurar un manipulador de evento, por lo que debes seleccionar alguno de los elementos que aparezcan con el ícono <img src="http://www.trickyweb.cl/img/tuto_cs/event.png" alt="Evento" />, en este caso se escogerá el evento MouseHover, que hace referencia al posicionamiento del mouse sobre el botón, sin hacer clic. Luego debes escribir lo siguiente:</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1">button1.<span class="me1">MouseHover</span> <span class="sy0">+=</span> <span class="kw3">new</span> EventHandler<span class="br0">&#40;</span>button1_MO<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Con ello se está creando un nuevo manipulador de eventos, llamado button1_MO , que será un método que coordinará la acción a realizar cuando el mouse esté sobre el botón.<br /> <br />
Luego, basta con crear el método button1_MO (o como tu quieras llamarle):</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">private</span> <span class="kw1">void</span> button1_MO<span class="br0">&#40;</span><span class="kw4">object</span> sender, EventArgs e<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Ahora, se va a definir una nueva acción a realizar para este MouseHover, que un texto que aparezca en el form, el que tu quieras, cambie a otro luego de poner el mouse sobre el botón.<br /> <br />
Para ello, arrastra un objeto <strong>label</strong> presente en la barra de herramientas de manera análoga a lo que se hizo con el botón y define su propiedad <strong>Text</strong> (ver Imagen).</p>
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/9.png" rel="thumbnail" title="Inserta un nuevo objeto label"><img src="http://www.trickyweb.cl/img/tuto_cs/9.png" width="129" height="96" alt="Inserta un nuevo objeto label" /></a></p>
<p>Luego, vuelve al código de la aplicación y escribe esto dentro del método button1_MO:</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1">label1.<span class="me1">text</span> <span class="sy0">=</span> <span class="st0">&quot;el texto que quieras&quot;</span>;</div>
</li>
</ol>
</div>
<p>En nuestro caso &#8220;el texto que quieras&#8221; será &#8220;Informática &#038; Tecnología&#8221;, con esto se le ordenará a la aplicación, que al posicionar el mouse sobre el botón, el texto del label cambie a &#8220;Informática &#038; Tecnología&#8221;.<br /> <br />
Ahora, puedes volver a debuggear la aplicación y probar los resultados <img src='http://www.trickyweb.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p style="margin-bottom:2px"><span style="font-size:12pt;"><strong>¿Cómo recibir y mostrar datos?</strong></span></p>
<p>Esto, a pesar de parecer complejo, es igual de fácil que el resto de elementos, para ingresar datos necesitarás una estructura que permita recibir datos, para ello existe una herramienta llamada <strong>TextBox</strong>, que permite ingresar texto (nada más), el resto dependerá de las órdenes que nosotros entreguemos al código.</p>
<p>Para ello deberás reestructurar el contenido del formulario con el que estás trabajando y será necesario que insertes los siguientes elementos:</p>
<ol>
<li>TextBox</li>
<li>Label</li>
<li>2 Botones</li>
</ol>
<p>El formulario debería quedar algo así:</p>
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/10.png" rel="thumbnail" title="Partir de nuevo..."><img src="http://www.trickyweb.cl/img/tuto_cs/10.png" width="129" height="96" alt="Partir de nuevo..." /></a></p>
<p>Lo que se hará, es una aplicación que reciba la edad de la persona y luego le calcule los días (utópicamente) que debería llevar viva la persona, esto es, si la persona tiene 2 años, entonces lleva vividos 2*365 días.<br /> <br />
Por lo que<br /> <br />
<img style="border:0px;vertical-align:middle;" src='http://l.wordpress.com/latex.php?latex=%5Ctextrm%7BDias+vividos%7D%3D2%2A365&#038;bg=808080&#038;fg=000000'  alt="\textrm{Dias vividos}=2*365" /><br /> <br />
Ahora, haz doble click en el botón y sitúate en el método button1_click y escribe lo siguiente:</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">int</span> edad,dVividos;</div>
</li>
<li class="li1">
<div class="de1">edad <span class="sy0">=</span> Int32.<span class="me1">Parse</span><span class="br0">&#40;</span>textBox1.<span class="me1">Text</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">dVividos <span class="sy0">=</span> edad<span class="sy0">*</span><span class="nu0">365</span>;</div>
</li>
<li class="li1">
<div class="de1">MessageBox.<span class="me1">Show</span><span class="br0">&#40;</span><span class="st0">&quot;La persona ha vivido &quot;</span><span class="sy0">+</span>dVividos<span class="sy0">+</span><span class="st0">&quot; dias&quot;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Como puedes apreciar, lo anterior no dista mucho al trabajo con funciones y variables locales en C, la gran diferencia, está en la concatenación de cadenas, mientras en C era necesario el uso de la función <strong>strcat</strong>, aquí basta con unir cadenas usando el operador <strong>+</strong>, permitiendo incluso concatenar cadenas con números.<br /> <br />
La otra diferencia, es el uso de la función <strong>Int32.Parse</strong>, que permite de manera sencilla, transformar una cadena en número (considerando que si hay caracteres, el sistema arrojará un error por lo que se hace <strong>necesario</strong> validar el contenido de la cadena).<br /> <br />
Aquí es posible notar que Parse() es un método de la clase Int32.</p>
<p>No te sorprendas si en algún código fuente te encuentras con <strong>System.Windows.Forms</strong>.algo o <strong>System.</strong>algo ya que a veces para evitar confusiones es necesario poner antes del nombre del método o propiedad, o bien de la clase, el namespace al que pertenecen.</p>
<p>Ahora, no olvidemos que se tiene un botón que dice &#8220;Limpiar&#8221;, la función de este botón será sencilla: limpiar el contenido del textBox.<br /> <br />
Para ello, hace doble click en el botón 2, y en el método que controla su evento click escribe lo siguiente:</p>
<div class="geshi no csharp">
<ol>
<li class="li1">
<div class="de1">textBox1.<span class="me1">Text</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span>;</div>
</li>
</ol>
</div>
<p>Debuggea la aplicación (ver Imagen) y verás que como se dijo al principio, no era tan dificil! <img src='http://www.trickyweb.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . </p>
<p style="text-align:center">
<a href="http://www.trickyweb.cl/img/tuto_cs/11.png" rel="thumbnail" title="Vive!!"><img src="http://www.trickyweb.cl/img/tuto_cs/11.png" width="129" height="96" alt="Vive!!" /></a></p>
<p>Perfecto!! Ahora tenemos nuestra primera aplicación hecha en C#.</p>
<p>Ojalá haya servido este post y alivie las dudas de mucha gente que sé, necesitaba este empujoncito.</p>
<p>Deseas descargar el ejemplo? &#8211; <a href="http://www.trickyweb.cl/downloads/Tutorial_CS.zip">Bájalo acá</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trickyweb.cl/2009/09/24/c-basico-windows-forms/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Orientación a Objetos &#8211; Parte III</title>
		<link>http://www.trickyweb.cl/2009/09/13/orientacion-a-objetos-parte-iii/</link>
		<comments>http://www.trickyweb.cl/2009/09/13/orientacion-a-objetos-parte-iii/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 21:19:09 +0000</pubDate>
		<dc:creator>Camilo Zambrano Lagos</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[OO]]></category>
		<category><![CDATA[Orientación a Objetos]]></category>

		<guid isPermaLink="false">http://www.trickyweb.cl/?p=191</guid>
		<description><![CDATA[Pido disculpas por la tardanza en la salida de la tercera parte de este post, la semana agitada que concluye hoy no me dejó escribir algo extenso, pero ahora libero lo que es la tercera y última versión de Orientación a Objetos.
En esta parte tercera y final de los fundamentos de la Orientación a Objetos, [...]]]></description>
			<content:encoded><![CDATA[<p>Pido disculpas por la tardanza en la salida de la tercera parte de este post, la semana agitada que concluye hoy no me dejó escribir algo extenso, pero ahora libero lo que es la tercera y última versión de Orientación a Objetos.<br />
En esta parte tercera y final de los fundamentos de la Orientación a Objetos, se tratarán los conceptos planteados al final de la segunda parte, en el punto que trata los propósitos de este paradigma.<br />
<span id="more-191"></span><br />
<span style="font-size:11pt;"><strong>Jerarquía</strong></span><br />
Cuando de jerarquía hablamos, generalmente se viene a la mente del lector el tema del orden y del mando, en la orientación a objetos la definición de este concepto no dista mucho de la convención social aceptada, pero aplicada a las clases.<br />
Tenemos por ejemplo que las entidades se pueden organizar jerárquicamente tal que una clase principal pueda diversificarse en otros tipos de clases derivadas, en donde cada derivación de dicha clase, posee los atributos y métodos tanto de la clase principal, como los suyos propios, esto es lo que se conoce como comúnmente como <strong>herencia</strong>.<br />
Un ejemplo claro de ello son los animales, tenemos que los animales tienen propiedades en común, pero se dividen en clases, partiendo por los invertebrados y los vertebrados, luego, los vertebrados pueden subdividirse en mamíferos,aves, peces, anfibios y reptiles, mientras que los invertebrados pueden subdividirse en otras clases, como los moluscos, artrópodos, medusas, etc, y a su misma vez, por ejemplo, los artrópodos también pueden clasificarse en insectos,arácnidos, entre otros.</p>
<p>Para ello entonces, tendríamos una clase principal, que sería la clase <strong>Animal</strong>, con ciertos atributos y métodos. Luego extenderíamos esta clase agregándole propiedades, en éste caso le agregaremos el atributo de poseer o no esqueleto interno articulado, y así sucesivamente se irán extendiendo clases, hasta que no existan mas sucesiones jerárquicas.</p>
<p>Ésta sucesión jerárquica es posible representarla mediante <strong>árboles de herencia</strong>, en el caso del ejemplo expuesto, el árbol sería el de la imagen que viene a continuación.<br />
<img src="http://trickyweb.cl/img/arbolDeHerencia.png" alt="Arbol de Herencia de la clase Animal" /></p>
<p><span style="font-size:11pt;"><strong>Encapsulamiento</strong></span><br />
Cuando se habla de principio de encapsulamiento, a veces se generan confusiones al intentar entender la idea de este principio, ya que en sí es un poco enredado tal vez entender como se hace presente tal concepto en la cotidianeidad.<br />
El encapsulamiento se refiere a que muchos objetos poseen métodos y atributos que no son visibles a los otros objetos de su entorno, mientras que otros atributos son compartidos abiertamente con estos, dividiendo tales métodos y atributos, en interfaces públicas y privadas.<br />
Un ejemplo claro es una persona, la persona posee atributos como lo son el color de pelo, color de piel, contextura, etc, y métodos tales como hablar, pensar, reir, correr, etc.<br />
Es posible apreciar que la gran mayoría de los atributos y métodos que he mencionado como ejemplo son públicos, porque todo el entorno es capaz de apreciar el color del pelo, el color de piel, la contextura, o bien porque el entorno también puede interactuar con los métodos hablar, reir y correr,es decir, son visibles al entorno.<br />
El único caso que no cumple con la interfaz pública, es el método pensar, ¿porqué? simple, porque al pensar, solo la persona sabe lo que piensa, y la única manera de dar a conocer su pensamiento, es através de un método que permita acceder a tal pensamiento y expresarlo, por ejemplo hablar, uno expone sus pensamientos a través del habla, pero no accede a ellos directamente, a ésta tipo de métodos se le conoce como <strong>método de acceso</strong>.</p>
<p><span style="font-size:11pt;"><strong>Abstracción</strong></span><br />
Éste es un tema ya conocido, se habló bastante sobre la abstracción en la parte 2 de éste tutorial, pero para refrescar un poco la memoria al lector, cuando nos referimos al principio de abstracción estamos hablando de generar un modelo conceptual de objeto através de una representación real de dicho objeto.</p>
<p>Para re-entender mejor el concepto de abstracción, invitamos al lector a echar un vistazo a <a href="http://www.trickyweb.cl/2009/08/29/orientacion-a-objetos-parte-ii-2/">éste enlace</a>.</p>
<p><span style="font-size:11pt;"><strong>Modularidad</strong></span><br />
Éste principio se basa en el paradigma de solución llamado <strong>dividir y conquistar</strong><em> &#8211; divide and conquer -</em> usado frecuentemente para solucionar problemas que en su totalidad son complejos, pero que fragmentandolos es posible obtener una solución efectiva.<br />
Éste principio apunta principalmente a la programación orientada a objetos, ya que al fragmentar el programa en módulos, se permite comprender cabalmente el funcionamiento del sistema completo, a partir del entendimiento de cada una de las partes por separado.</p>
<p>También existen otros principios que complementan aún mas la orientación a objetos, que son fenómenos inherentes que se intentan representar y modelar conceptualmente, estos son el <strong>polimorfismo</strong> y el <strong>paso de mensajes</strong>.</p>
<p><span style="font-size:11pt;"><strong>Polimorfismo</strong></span><br />
Éste principio se basa en que un objeto, a veces presenta diferentes comportamientos según el entorno, el contexto en el que se encuentre, esto será bien entendido por el lector durante el tutorial de POO <em>- por ahora no hay apuro en entenderlo, ya que ejemplificandolo mediante código quedará totalmente entendido -</em> por lo que no se profundizará más en éste tema.</p>
<p><span style="font-size:11pt;"><strong>Paso de mensajes</strong></span><br />
Generalmente cuando se trabaja con un sistema compuesto por objetos en un entorno, en algún momento se debe efectuar un cambio de estado por parte de un objeto, sobre otro, para ello se recurre al paso de mensajes.<br />
La implementación del paso de mensajes en la POO simplemente consiste en que un objeto llame a un método del objeto al que se le realizará el cambio de estado, mientras que en la programación estructurada básicamente es llamar a una función.<br />
Un ejemplo claro del paso de mensajes, teóricamente hablando , es el caso del ataque a antígenos por parte de los anticuerpos que cada persona genera.<br />
Para atacar antígenos <em>- bacterias, virus, cualquier cuerpo extraño que ingrese al organismo -</em> primero éstos deben ser reconocidos por una anticuerpo, quien deja una marca que indica que éste cuerpo extraño debe ser atacado por el sistema inmune <em>- que a su vez está compuesto por otros objetos </em>.</p>
<p>Bueno, aquí finaliza el tutorial, ojalá sea del agrado del lector y sea entendible. Ésto solo es la parte básica de la teoría de la OO, hay más temas a tratar pero prefiero dejarlo para el tutorial de POO ya que los temas que siguen<em> &#8211; como relaciones inter objetos, polimorfismo a cabalidad, etc -</em> es mejor explicarlos mediante código y también porque algunos se escapan de la parte teórica para pasar a la parte de runtime.</p>
<p>Saludos! </p>
]]></content:encoded>
			<wfw:commentRss>http://www.trickyweb.cl/2009/09/13/orientacion-a-objetos-parte-iii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HOW TO: Parsear XML en PHP</title>
		<link>http://www.trickyweb.cl/2009/08/31/how-to-parsear-xml-en-php/</link>
		<comments>http://www.trickyweb.cl/2009/08/31/how-to-parsear-xml-en-php/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 18:54:18 +0000</pubDate>
		<dc:creator>Camilo Zambrano Lagos</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[parsear xml con php]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://trickyweb.webatu.com/?p=114</guid>
		<description><![CDATA[Hola!, este tutorial será breve y conciso, es para enseñar a parsear código XML con PHP.
Este post es algo off-topic en relación con lo que he posteado antes - OO - pero esto no quita que siga posteando las siguientes partes de orientación a objetos, es sólo que para tal tutorial necesito algo más de [...]]]></description>
			<content:encoded><![CDATA[<p>Hola!, este tutorial será breve y conciso, es para enseñar a parsear código XML con PHP.</p>
<p>Este post es algo off-topic en relación con lo que he posteado antes <em>- OO -</em> pero esto no quita que siga posteando las siguientes partes de orientación a objetos, es sólo que para tal tutorial necesito algo más de tiempo para redactar.<br />
<span id="more-114"></span><br />
Lo que se requiere para este tutorial:</p>
<ol>
<li> Conocimientos en XML</li>
</ol>
<p>Primero, tenemos el siguiente archivo XML:</p>
<table style="width:100%" cellpadding="0" cellspacing="0">
<tr>
<td style="font-size:8pt">ejemplo-xml.xml</td>
</tr>
<tr>
<td>
<div style="background-color:white;font:9pt courier new">
&lt;?xml version=&#8221;1.0&#8243; ?&gt;<br />
&lt;posts&gt;<br />
&nbsp;&lt;post&gt;<br />
&nbsp;&nbsp;&lt;titulo&gt;Mi XML&lt;/titulo&gt;<br />
&nbsp;&nbsp;&lt;autor&gt;Camilo Zambrano L.&lt;/autor&gt;<br />
&nbsp;&nbsp;&lt;fecha&gt;31-08-2009&lt;/fecha&gt;<br />
&nbsp;&nbsp;&lt;contenido&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Este es mi XML.<br />
&nbsp;&nbsp;&lt;/contenido&gt;<br />
&nbsp;&lt;/post&gt;<br />
&nbsp;&lt;post&gt;<br />
&nbsp;&nbsp;&lt;titulo&gt;Segundo Post&lt;/titulo&gt;<br />
&nbsp;&nbsp;&lt;autor&gt;Juan Fulano Perez&lt;/autor&gt;<br />
&nbsp;&nbsp;&lt;fecha&gt;01-09-2009&lt;/fecha&gt;<br />
&nbsp;&nbsp;&lt;contenido&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Post muy entretenido.<br />
&nbsp;&nbsp;&lt;/contenido&gt;<br />
&nbsp;&lt;/post&gt;<br />
&lt;/posts&gt;
</div>
</td>
</tr>
</table>
<p>Lo que haremos en éste caso es analizar los datos del XML y enviar una solicitud mediante PHP para obtener ciertos valores del archivo XML.</p>
<table style="width:100%" cellpadding="0" cellspacing="0">
<tr>
<td style="font-size:8pt">ejemplo-xml.php</td>
</tr>
<tr>
<td>
<div style="background-color:white;font:9pt courier new">
&lt;?php<br />
$xml = simplexml_load_file(&#8221;ejemplo-xml.xml&#8221;);<br />
/* La idea es que al ejecutar este script en el navegador, se<br/> impriman los datos de cada post */<br />
foreach($xml-&gt;post as $post){<br />
echo $post-&gt;titulo.&#8221;&lt;br/&gt;&#8221;;<br />
echo $post-&gt;autor.&#8221;&lt;br/&gt;&#8221;;<br />
echo $post-&gt;fecha.&#8221;&lt;br/&gt;&#8221;;<br />
echo $post-&gt;contenido.&#8221;&lt;br/&gt;&#8221;;<br />
echo &#8220;&lt;hr/&gt;&#8221;;<br />
}<br />
?&gt;
</div>
</td>
</tr>
</table>
<p>Como es posible darse cuenta, es posible acceder a los nodos XML como si el archivo XML fuese un objeto.<br />
<span style="font:9pt courier new">$xml-&gt;post</span> accede directamente al primer nodo post, pero si usamos <span style="font:9pt courier new">foreach</span> accedemos a todos los nodos post existentes dentro del archivo.</p>
<p>Con las herramientas otorgadas es posible un centenar de cosas, esto es solo la base, si hay alguna duda no olviden consultar, que para eso estamos.</p>
<p>Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trickyweb.cl/2009/08/31/how-to-parsear-xml-en-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Orientación a Objetos &#8211; Parte II</title>
		<link>http://www.trickyweb.cl/2009/08/29/orientacion-a-objetos-parte-ii-2/</link>
		<comments>http://www.trickyweb.cl/2009/08/29/orientacion-a-objetos-parte-ii-2/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 03:09:49 +0000</pubDate>
		<dc:creator>Camilo Zambrano Lagos</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[OO]]></category>
		<category><![CDATA[Orientación a Objetos]]></category>

		<guid isPermaLink="false">http://trickyweb.wordpress.com/?p=58</guid>
		<description><![CDATA[En la presente parte, se estudiarán los conceptos básicos de la orientación a objetos y el propósito de este paradigma.

Conceptos Básicos
En la introducción se habló bastante sobre el término abstracción. En sí, la abstracción consiste en aislar aquella información de una entidad que no resulta relevante al contexto en el cual se está trabajando, esto [...]]]></description>
			<content:encoded><![CDATA[<p>En la presente parte, se estudiarán los <strong>conceptos básicos de la orientación a objetos</strong> y el <strong>propósito de este paradigma</strong>.<br />
<span id="more-58"></span><br />
<span style="font-size:11pt;"><strong>Conceptos Básicos</strong></span><br />
En la introducción se habló bastante sobre el término <strong>abstracción</strong>. En sí, la abstracción consiste en aislar aquella información de una entidad que no resulta relevante al contexto en el cual se está trabajando, esto es, generar un modelo de lo que una entidad representa en el mundo real sin la información poco relevante. Es importante que éste término quede claro ya que en muchos aspectos de la OO, y de la POO <em>- Programación Orientada a Objetos -</em> se ocupará, tanto implícitamente como explícitamente.</p>
<p>Durante la abstracción hecha al momento de modelar la aplicación, es inevitable <em>- y obvio por lo demás &#8211; </em> fijarse en aquellas entidades (<em>nociones de objeto</em>) del mundo real sobre las que se trabajará, a ese conjunto de entidades se le denomina <strong>dominio de la aplicación</strong>.</p>
<p>Tomemos como ejemplo, los alumnos de un instituto o universidad, en éste caso el dominio lo conforman cada uno de los alumnos, con sus nombres,teléfonos, direcciones, correos electrónicos, notas, etc.</p>
<p>Toda entidad en el mundo real tiene dos características fundamentales, su <strong>estado</strong> y su <strong>comportamiento</strong>, por ejemplo, las entidades de tipo <em>contacto</em>, tienen estados <em>- como su nombre, teléfono, etc &#8211; </em>, y a la vez también presentan un comportamiento <em>- como rendir prueba, definir horario, etc -</em>. Dichas características tienen un equivalente a nivel de software, en el caso del estado, éste se representa mediante atributos <em>- un estado puede estar representado por más de un atributo -</em> mientras que la implementación de comportamiento(s) es(son) llamado(s) <strong>método(s)</strong>, tomando en cuenta que en éste tipo de programación los métodos controlan las variables de estado, las manipulan. Estas características tambien son llamadas <strong>miembros</strong>.</p>
<p>Probablemente más de alguna vez el lector, si ha oído o leído sobre OO, habrá leido &#8211; o escuchado en su defecto &#8211; los términos <strong>clase</strong> y <strong>objeto</strong>, ¿cuál es la diferencia entre ambos términos?; clase es la &#8220;traducción&#8221; de un concepto del mundo real, mientras que objeto es la instancia de una clase, esto es, la clase es una suerte de plantilla, modelo de cómo será el objeto instanciado.</p>
<p>Lo más seguro es que del parrafo anterior, el lector haya entendido totalmente <strong>NADA</strong> &#8211; y es entendible, digamos, a primeras es muy dificil separar lo conceptual de lo real &#8211; pero para evitar dejar dudas, se hará mas explícito lo dicho mediante un ejemplo:</p>
<blockquote><p> La clase auto tiene en su definición, un modelo, un color, etc. El objeto es un auto concreto, por ejemplo, un auto Mazda con modelo V8, color negro
</p></blockquote>
<p>Como resumen podríamos decir, que una clase es la abstracción de la entidad, esto significa ¡que podremos instanciar cuantos objetos de una misma clase queramos!.</p>
<p>Más adelante, en el tutorial acerca de la POO, hablaremos más acerca de estos conceptos y se profundizará aún más el tratamiento de estos términos, por ahora sólo basta con conocer estos términos.</p>
<p><span style="font-size:11pt;"><strong>Propósitos de este paradigma</strong></span><br />
El propósito principal de este paradigma es proporcionar nuevos enfoques para construir sistemas de software complejos mediante a partir de fragmentos modularizados y reutilizables de software, estos nuevos enfoques deben ser capaces de manipular sin problemas tanto sistemas grandes como pequeños, y hacer mas flexible, mantenible y capaz de evolucionar a modo de adaptación.<br />
Para suplir estos propósitos, es que existen cuatro elementos dentro de la OO:</p>
<ol>
<li>Abstracción</li>
<li>Encapsulamiento</li>
<li>Modularidad</li>
<li>Jerarquía</li>
</ol>
<p>Todos estos elementos <strong>deben existir</strong>, por lo que, si falta almenos uno de ellos, el modelo ya no se considera orientado a objetos.</p>
<p>Aquí concluye la parte II del tutorial, cualquier duda, no duden en comentar y la tercera parte contendrá las explicaciones a cada elemento mencionado en la lista anterior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trickyweb.cl/2009/08/29/orientacion-a-objetos-parte-ii-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Orientación a Objetos &#8211; Parte I</title>
		<link>http://www.trickyweb.cl/2009/08/27/orientacion-a-objetos-parte-i-2/</link>
		<comments>http://www.trickyweb.cl/2009/08/27/orientacion-a-objetos-parte-i-2/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 21:56:00 +0000</pubDate>
		<dc:creator>Camilo Zambrano Lagos</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[OO]]></category>
		<category><![CDATA[Orientación a Objetos]]></category>

		<guid isPermaLink="false">http://trickyweb.wordpress.com/?p=30</guid>
		<description><![CDATA[Introducción
La orientación a objetos, mas allá de ser un paradigma de programación es una forma alternativa de ver el mundo y lo que nos rodea con una mirada diferente a la que comunmente tenemos.

Mediante esta cosmovisión, el individuo es capaz de entender un problema abstrayendo ciertos elementos de dicho problema y generando modelos de sistema, [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:11pt;"><strong>Introducción</strong></span></p>
<p>La <strong>orientación a objetos</strong>, mas allá de ser un paradigma de programación es una forma alternativa de ver el mundo y lo que nos rodea con una mirada diferente a la que comunmente tenemos.<br />
<span id="more-30"></span><br />
Mediante esta cosmovisión, el individuo es capaz de entender un problema abstrayendo ciertos elementos de dicho problema y generando modelos de sistema, enfocados en ciertas entidades principales del problema que se desea resolver. Cabe destacar que la OO<em> &#8211; acrónimo de Orientación a Objetos &#8211; </em>es válida para muchos campos de las ciencias formales y en la vida cotidiana <em>- si bien no se ocupan los mismos conceptos, existen ciertas analogías con conceptos de las ciencias formales, como por ejemplo la inferencia lógica (ver bibliografía) -</em>, sin embargo, la ciencia que implementó esta cosmovisión es la informática, en donde su uso en la actualidad cada vez es mayor.</p>
<p>La idea de este tutorial acerca de la OO y sus aplicaciones es invitar al lector a entender y poner en práctica la modelación de sistemas orientados a objetos, en este caso, entender como aplicar la orientación a objetos en la creación de proyectos y aplicaciones.</p>
<p>Lo que se presentará en esta primera parte, es la base conceptual<em> &#8211; en esta sección no se hablará en lo absoluto de código -</em> por lo que si el lector ya sabe en que consiste la orientación a objetos en la parte teórica, lo mejor es que se abstenga de leer porque lo único que habrá en esta sección será teoría.</p>
<p><span style="font-size:11pt;"><strong>Algo de historia</strong></span></p>
<p>Las primeras nociones de orientación a objetos se dan a conocer a comienzo de los &#8216;60 en la Universidad de Noruega, bajo el alero de un equipo a cargo del Dr. Krysten Nygaard, que en principio buscaba desarrollar sistemas informáticos para simular ciertos sistemas físicos, como por ejemplo el del funcionamiento y rendimiento de un motor.</p>
<p>El proceso resultó ser dificultoso por la complejidad de las aplicaciones realizadas y por que debían ser necesaria y forzosamente modificados. Para solucionar tales complejidades se ideó el modelado del programa en forma paralela al objeto físico, esto es, el programa se modularía de tal modo que si el objeto estaba compuesto por cien partes, el programa estuviera así compuesto por cien modulos lo que permitía un paralelismo y correspondencia entre el sistema físico y el informático. Lo anterior permitió tambien la abstracción de un modelo físico en un modulo informático.</p>
<p>Gracias a la solución entregada, los dos puntos en los cuales se producía conflicto lograron ser resueltos; de partida, se estaba ofreciendo un sistema que permitia fragmentar un programa por partes, abstrayendo de manera efectiva un modelo físico pudiendo controlar de ese modo el mantenimiento del sistema de simulación.</p>
<p>De la orientación a objetos &#8211; informáticamente hablando &#8211; a medida que el tiempo ha ido pasando, se han obtenido muchos beneficios, uno de ellos es la reusabilidad, es decir, el poder valerse de un código existente para ser utilizado en otros softwares.</p>
<p>A partir de la necesidad de trabajar con un lenguaje que netamente implemente estas ideas, se diseñó un lenguaje llamado <strong>Simula-67</strong> <em>- que en la actualidad se sigue utilizando</em> &#8211; surgiendo a la postre varios lenguajes diseñados para facilitar el desarrollo de sistemas complejos , como por ejemplo <strong>Smalltalk </strong><em>- creado por Xerox para trabajar en la construcción de entornos gráficos, pero eso es otro cuento -</em>, la sucesión del lenguaje C<em> &#8211; llamada C++ &#8211; </em>a la que agregaron componentes basándose en la estructura de <strong>Smalltalk</strong> y <strong>Simula-67</strong>.</p>
<p>Actualmente en los campos de la inteligencia artificial, tambien se ha extendido el desarrollo de lenguajes basados en la orientación a objetos.</p>
<p>Aquí finaliza la primera parte de esta sección. Espero sea de utilidad, en la parte II se hablará de los <strong>conceptos básicos de la orientación a objetos</strong> y <strong>el propósito de este paradigma</strong>.</p>
<p><strong>Bibliografía:</strong><br />
<a href="http://www.slideshare.net/soreygarcia/orientacion-a-objetos-para-dummies-presentation">http://www.slideshare.net/soreygarcia/orientacion-a-objetos-para-dummies-presentation</a><br />
<a href="http://www.ati.es/novatica/1995/mar-abr/n114obje.html">http://www.ati.es/novatica/1995/mar-abr/n114obje.html</a><br />
<a href="http://www.wikilearning.com/articulo/analogia_entre_el_diseno_orientado_a_objetos_y_las_inferencias_logicas_utilizadas_en_el_proceso_de_la_investigacion_cientifica_y_los_procesos_de_aprendizaje-conceptos_basicos_de_diseno_orientado_a_objetos/19383-1">http://www.wikilearning.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trickyweb.cl/2009/08/27/orientacion-a-objetos-parte-i-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
