<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3353396321042613314</id><updated>2026-10-30T07:08:26.785+01:00</updated><category term="Programacion"/><category term="Java"/><category term="javascripts"/><category term="Linux"/><category term="UML"/><category term="Apache Server"/><category term="Hardware"/><category term="Mac"/><category term="Redes"/><category term="Windows"/><category term="Z80"/><category term="ASM"/><category term="Droid"/><category term="Informatica"/><category term="XML"/><category term="XSLT"/><category term="git"/><category term="maven"/><title type='text'>TECHFICO</title><subtitle type='html'>Cuaderno de Informática</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-720509167935021142</id><published>2025-10-12T19:00:00.003+02:00</published><updated>2025-10-22T09:52:17.403+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASM"/><category scheme="http://www.blogger.com/atom/ns#" term="Informatica"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Arquitectura del ordenador</title><content type='html'>&lt;p&gt;&amp;nbsp;La información o datos (como se le quiera llamar) se carga en el ordenador, se procesa, y sale nueva información. Pero lo que verdaderamente nos interesa es lo que ocurre dentro del bloque que representa al&amp;nbsp;ordenador.&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKWCrda9LDdOXyGj2K50lelIPyl4bNvJt0vX4bMUJxvSCo5YpVSU5F_fXvwiQBCXY_YRqzudOPCeLW2N5j4keSmQD5iklJqtTyJhls9ondRC4o87MWuVNy0Lwdwz_owrOSk2Eq1jXT6U9gxVq7KrDNqAJf0OXcICBDykTB_7v9QDdYhqfmFQp8i__8t-k/s461/Screenshot%202025-10-12%20at%2018-50-13%20Iniciacion%20A%20Los%20Microprocesadores%20Free%20Download%20Borrow%20and%20Streaming%20Internet%20Archive.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;232&quot; data-original-width=&quot;461&quot; height=&quot;161&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKWCrda9LDdOXyGj2K50lelIPyl4bNvJt0vX4bMUJxvSCo5YpVSU5F_fXvwiQBCXY_YRqzudOPCeLW2N5j4keSmQD5iklJqtTyJhls9ondRC4o87MWuVNy0Lwdwz_owrOSk2Eq1jXT6U9gxVq7KrDNqAJf0OXcICBDykTB_7v9QDdYhqfmFQp8i__8t-k/s320/Screenshot%202025-10-12%20at%2018-50-13%20Iniciacion%20A%20Los%20Microprocesadores%20Free%20Download%20Borrow%20and%20Streaming%20Internet%20Archive.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Fig. 1 Diagrama de bloques del ordenador.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;En primer lugar, necesitamos un conjunto de instrucciones que hemos de seguir. Sin definir por ahora cómo hemos de escribirlas, imaginemos que las instrucciones se encuentran en las casillas con las etiquetas instrucción 1, instrucción 2, instrucción 3, etc., y que el ordenador comenzará con la instrucción 1, avanzando paulatinamente paso a paso. Nosotros podemos identificar algunas instrucciones que nos serán útiles. STOP es la primera de ellas, y resulta suficientemente clara si se piensa en su significado.&lt;br /&gt;&lt;br /&gt;La segunda no es tan facil de definir, pero no resulta dificil comprender que un ordenador que solamente avance de instrucción en instrucción tendría un uso bastante limitado. Seria muy útil poder decir: “Si el último resultado fue X, continúe con la siguiente instrucción; pero si el resultado no fue X, no continúe, vaya a la instrucción número N y prosiga a partir de ese punto.” Esto nos permitiria escribir programas flexibles. Volviendo nuevamente a nuestro ayudante y al recibo de la luz, podriamos comprobar si hay partidas pendientes para cada consumidor y, si el resultado fuese afirmativo, enviarle la correspondiente notificación en los términos adecuados. Finalmente necesitaremos las instrucciones aritméticas de suma y resta.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicXkj97sleoEYQ7_anvYUvHwcPw62RxP2sOxNhy69ij2h7uaM8cGGSITId1wo0dyGbJp075RF-46O3pgqqd7jdER-XHGcyXgbXjU1o20ZLC4jp9ta6YjUBK-Ph4EuZlAaseWw_1ED_ZSKX4UuAvDxWs-p3T2h2mPg4NyKwmFQ2nwM50Ni2rY0sfMdOk8g/s527/Screenshot%202025-10-12%20at%2018-51-06%20Iniciacion%20A%20Los%20Microprocesadores%20Free%20Download%20Borrow%20and%20Streaming%20Internet%20Archive.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;527&quot; data-original-width=&quot;458&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicXkj97sleoEYQ7_anvYUvHwcPw62RxP2sOxNhy69ij2h7uaM8cGGSITId1wo0dyGbJp075RF-46O3pgqqd7jdER-XHGcyXgbXjU1o20ZLC4jp9ta6YjUBK-Ph4EuZlAaseWw_1ED_ZSKX4UuAvDxWs-p3T2h2mPg4NyKwmFQ2nwM50Ni2rY0sfMdOk8g/s320/Screenshot%202025-10-12%20at%2018-51-06%20Iniciacion%20A%20Los%20Microprocesadores%20Free%20Download%20Borrow%20and%20Streaming%20Internet%20Archive.png&quot; width=&quot;278&quot; /&gt;&amp;nbsp;&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Fig. 2 Diagrama de bloques ampliado.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;De esta manera, la sustitución de nuestro ayudante por un equipo electrónico puede resumirse como se ilustra en la figura 2. En la parte superior del diagrama tenemos las palabras entrada de datos y salida de datos, que representan nuestra comunicación con la máquina. En el centro del diagrama tenemos la unidad aritmética, que equivale a la calculadora. A continuación se encuentra un bloque llamado acumulador consistente en un conjunto de controles biestables capaces de contener un número en binario. En el DIM-1 hay 16 controles biestables, de modo que puede contener cualquier número entre 0000000000000000 (cero) y 1111111111111111 (65535 en decimal). El acumulador es el equivalente de la hoja de papel y se usa para almacenar resultados intermedios.&lt;br /&gt;&lt;br /&gt;A la derecha del acumulador se encuentra la memoria de datos que por su estructura suele ser comparada a una hilera de casillas de palomas, cada una con una dirección única. Cada casilla puede alojar un número. En el DIM-1 hay 4096 casillas que pueden contener otros tantos números binarios de 16 bits, dentro de los limites indicados en el parrafo anterior. El lector podrá preguntarse por qué un número tan extraño como el 4096. La respuesta es que cuando tengamos que dirigirnos a la memoria lo haremos en binario, y un número binario de doce bits nos permite el acceso a todas las posiciones comprendidas entre 000000000000 y 111111111111. El último número es 4095 en el sistema decimal, y por tanto hay 4096 posiciones a las que podemos dirigirnos con un número de doce bits. Esto es lo que se conoce como memoria de 4K (K indica mil, un tanto libremente). Generalmente, las memorias de los ordenadores están formadas por bloques de 4K, de modo que pueden encontrarse memorias desde 4K hasta 64K (actualmente 65536). Los equipos microprocesadores se venden a menudo con memorias de |K, lo que representa 1024 posiciones.&lt;br /&gt;&lt;br /&gt;Asociado a la memoria está el almacenamiento intermedio de datos. Este es un registro de 16 bits, similar al acumulador, cuya función consiste en almacenar los datos sacados de la memoria mientras son utilizados. Del mismo modo, los datos que han de ser colocados en la memoria pasarán antes por el almacenamiento intermedio de la memoria.&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;A continuación, en una memoria de 4K idéntica a la de datos, tenemos las instrucciones. Más adelante veremos que esto es una complicación innecesaria y que los datos e instrucciones se almacenan en la misma memoria. No obstante, por el momento consideraremos que ambas están separadas. La memoria de instrucciones es idéntica a la de datos, que, como hemos visto, esta formada por una hilera de casillas, cada una capaz de almacenar un número de 16 bits. Estos números representan instrucciones para la maquina de manera que, por ejemplo, el número 1111000000000000 significa Stop. El acceso a las posiciones de esta memoria también se realiza mediante una dirección única.&lt;br /&gt;&lt;br /&gt;Asociados con la memoria de instrucciones aparecen el contador de instrucciones y el almacenamiento intermedio de instrucciones. El contador de instrucciones es un registro que se usa para contener la dirección de la instrucción en curso. La memoria de instrucciones tiene 4K posiciones y, por consiguiente, son necesarios 12 bits para acceder a ella. El contador de instrucciones es por tanto, un registro de 12 bits.&lt;br /&gt;&lt;br /&gt;En un programa normal avanzamos de instrucción en instrucción, de manera secuencial, a menos que encontremos la instrucción especial: “si ocurre X haga esto, sino haga lo otro” que mencionábamos anteriormente. Después de haber ejecutado una instrucción, el contador ha de ser incrementado para que nos indique la dirección de la siguiente instrucción. Por eso sería útil convertir este registro en un simple contador binario, ya que cada vez que ejecutásemos una instrucción sólo tendríamos que enviar un impulso al contador para obtener la dirección de la siguiente. La instrucción condicional requiere la incorporación de otros: medios en el contador de instrucciones, pero sobre este tema volveremos mas adelante.&lt;br /&gt;&lt;br /&gt;La memoria de instrucciones cuenta también con un almacenamiento intermedio de instrucciones que realiza el mismo cometido que el almacenamiento de la memoria de datos. Al iniciarse el ciclo de ejecución de una instrucción, el contador se dirige a la memoria de instrucciones, y el número que se halle en la posición buscada es colocado en el almacenamiento intermedio de instrucciones. Este número representa la instrucción que ha de ser ejecutada.&lt;/p&gt;&lt;p&gt;Finalmente tenemos el control. Este enlaza todas las partes del ordenador y se encarga de que cada una de ellas lleve a cabo su cometido en el momento preciso, por lo que en cierta manera puede ser considerado como el “conductor”. Además, el control tiene la misión de comprobar qué número se encuentra en el almacenamiento intermedio de instrucciones y de decidir a qué instrucción representa.&lt;br /&gt;&lt;br /&gt;Para comprender cómo se coordinan todas estas partes, veamos por donde se encamina el ordenador cuando ejecuta una instrucción. La instrucción en cuestión se halla en la posición 3220 y el número allí contenido representa: “Sumar el número que está en la posición 4057 al número del acumulador y colocar el resultado en el acumulador.” El número que pueda representar esta particular instrucción no nos preocupa por el momento; nos basta con saber que el control lo reconocerá.&lt;br /&gt;&lt;br /&gt;Comenzaremos a seguir la máquina al final de la instrucción anterior (3219). El contador indicará la instrucción 3219. Cuando esta finaliza, el control envía un impulso al contador de instrucciones incrementándolo a 3220. En ese momento el control ordena a la memoria de instrucciones que lea, y el número que se encuentra en la posición de memoria 3220 es transferido al almacenamiento intermedio de instrucciones. El control examina este número y decide qué significa: “Sumar el número que está en la posición 4057 al número que se encuentra en el acumulador, y colocar el resultado en el acumulador.”&lt;br /&gt;&lt;br /&gt;Ahora el control se dirige (“direccional”) la memoria de datos con la dirección 4057 y ordena su lectura. El número de la posición 4057 está ahora en el almacenamiento intermedio de la memoria, y el control exige a la unidad aritmética que sume los números contenidos en el acumulador y en el almacenamiento intermedio de la memoria. Una vez realizada esta operación, el control toma el resultado de la unidad aritmética y lo coloca en el acumulador.&lt;br /&gt;&lt;br /&gt;Por último, el control envía un impulso al contador de instrucciones para incrementarlo a 3221, que es el número correspondiente a la siguiente instrucción. Esta acción completa el ciclo de ejecución de la instrucción.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Supongamos que la instrucción 3221 es: “Poner el número que se halla en el acumulador, en la posición de memoria 1750.” Sigamos los pasos de la máquina para ver cómo la ejecuta.&lt;br /&gt;&lt;br /&gt;Ya hemos incrementado el contador de instrucciones y contiene el número 3221. El control se dirige a la memoria de instrucciones y le ordena que lea el número contenido en la posición 3221 y lo transfiera al almacenamiento intermedio de instrucciones, donde el control lo identifica como: “Poner el número que se halla en el acumulador, en la posición de memoria 1750.”&lt;br /&gt;&lt;br /&gt;El control toma el número del acumulador y lo coloca en el almacenamiento intermedio de la memoria de datos. Después envia la dirección 1750 a la memoria de datos y le ordena que escriba en la posición 1750 los datos que están en el almacenamiento intermedio de la memoria. El control incrementa a 3222 el contador de instrucciones mediante el correspondiente impulso, y con ello se completa el ciclo de ejecución.&lt;br /&gt;&lt;br /&gt;Como puede verse, cada ciclo se divide en dos partes distintas. En la primera el control se dirige a la memoria de instrucciones, transfiere la instrucción al almacenamiento intermedio, y “descifra” su significado; esto es, decide lo que representa el número que se encuentra en el almacenamiento intermedio.&lt;br /&gt;&lt;br /&gt;En la segunda parte, el control ejecuta la instrucción. Normalmente esta operación implica el uso de la memoria de datos, ya que casi siempre se manejan datos de la memoria y datos del acumulador.&lt;br /&gt;&lt;br /&gt;Esta segunda parte es común para todos los ordenadores y se le ha llamado “latido” del ordenador. A estas dos partes se les llama a menudo ciclo de instrucción y ciclo de datos.&lt;br /&gt;&lt;br /&gt;El control en ningún momento accede simultáneamente a la memoria de datos y a la de instrucciones. Por consiguiente, en la figura 3 hemos simplificado el equipo utilizando sólo una memoria para datos e instrucciones. Esto es perfectamente factible dado que tanto los datos como las instrucciones se almacenan en la memoria en forma de números de 16 bits y la memoria no conoce el significado de su contenido.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjegqj1ixcSFhJwHEiCVXP84RdsVfPVG_jRs-gg9lk-XIYqLHBPHiHce-rIbNraRI2LuC1tiNru16XmkWB2tgiAFyGpWFJWznm4BQdkJRuoaEKS06BbV-KW82ydeiCfqOWnbhFFlgVMJdb3rJbS8hMjMYtXFIC47vDEuTblK2o7l-uBoc9wISUUJqZYn0I/s550/Screenshot%202025-10-12%20at%2018-57-33%20Iniciacion%20A%20Los%20Microprocesadores%20Free%20Download%20Borrow%20and%20Streaming%20Internet%20Archive.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;550&quot; data-original-width=&quot;455&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjegqj1ixcSFhJwHEiCVXP84RdsVfPVG_jRs-gg9lk-XIYqLHBPHiHce-rIbNraRI2LuC1tiNru16XmkWB2tgiAFyGpWFJWznm4BQdkJRuoaEKS06BbV-KW82ydeiCfqOWnbhFFlgVMJdb3rJbS8hMjMYtXFIC47vDEuTblK2o7l-uBoc9wISUUJqZYn0I/s320/Screenshot%202025-10-12%20at%2018-57-33%20Iniciacion%20A%20Los%20Microprocesadores%20Free%20Download%20Borrow%20and%20Streaming%20Internet%20Archive.png&quot; width=&quot;265&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Fig. 3 Memoria de datos e instrucciones.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;El uso de la misma memoria para almacenar datos e instrucciones tiene una ventaja muy importante que posiblemente no se haga evidente de inmediato. No es sólo la propia memoria la que ignora si el número en una posición determinada representa una isntrucción o representa datos; el ordenador, en su conjunto, también lo ignora hasta que se produce el acceso a la posición mediante el ciclo de instrucción o el ciclo de datos. Esto significa que una instrucción puede ser tratada como datos y manejada por otras instrucciones.&lt;br /&gt;&lt;br /&gt;De buenas a primeras esto puede parecer un poco alarmante, y para algunos la idea de que un ordenador modifique sus propias instrucciones puede resultarles totalmente siniestra. Pero como veremos más adelante al construir nuestro conjunto de instrucciones, el uso de este método no es cosa de otro mundo.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/720509167935021142/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2025/10/arquitectura-del-ordenador.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/720509167935021142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/720509167935021142'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2025/10/arquitectura-del-ordenador.html' title='Arquitectura del ordenador'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKWCrda9LDdOXyGj2K50lelIPyl4bNvJt0vX4bMUJxvSCo5YpVSU5F_fXvwiQBCXY_YRqzudOPCeLW2N5j4keSmQD5iklJqtTyJhls9ondRC4o87MWuVNy0Lwdwz_owrOSk2Eq1jXT6U9gxVq7KrDNqAJf0OXcICBDykTB_7v9QDdYhqfmFQp8i__8t-k/s72-c/Screenshot%202025-10-12%20at%2018-50-13%20Iniciacion%20A%20Los%20Microprocesadores%20Free%20Download%20Borrow%20and%20Streaming%20Internet%20Archive.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-2038616827056563271</id><published>2020-09-08T09:28:00.009+02:00</published><updated>2025-10-12T19:29:06.637+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Nociones Básicas de lenguaje de programación JAVA</title><content type='html'>&lt;p&gt;&lt;b&gt;Estructura Básica de JAVA&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Java es un lenguaje muy funcional, fue diseñado para ser parecido a C++, concretamente para facilitar un rápido y fácil aprendizaje para un gran número de programadores.&lt;br /&gt;&lt;br /&gt;Java elimina muchas de las características de C++, para mantener la simplicidad del lenguaje añade caracteristicas muy útiles como el &quot;garbage collector&quot;(reciclador de memoria dinámica o recolector automático de basura).&lt;br /&gt;&lt;br /&gt;No es necesario preocuparse de liberar memoria, el recolector de basura se encarga de ello. Como es una aplicación que se ejecuta &quot;en segundo plano&quot; (programa que se ejecuta en memoria de forma concurrente a otras a otroas aplicaciones) y es de baja prioridad, cuando entra en acción, permite liberar bloques de memoria muy grande, lo que mejora la gestión de la memoria.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;Java reduce en un 50% los errores más comunes de programación con lenguajes como C y C++ al eliminar michas de las características de éstos, entre las que destacan:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.- Aritmética de punteros &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.- registros (struct)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.- definición de tipos(typedef)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.- macros(#define)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.- necesidad de liberar memoria(free)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lenguaje Orientado a Objetos&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Java implementa la tecnología básica de C++ con algunas mejoras y elimina algunas cosas para mantener el objetivo de la simplicidad del lenguaje.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Java trabaja con sus datos como objetos y con interfaces a esos objetos.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Soporta las tres características propias de la orientación a objetos:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. encapsulación &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. herencia&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. polimorfismo&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Las plantillas de objetos son llamadas, clases y sus copias, instancias.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Las instancias necesitan ser construidas y destruidas en espacios de memoria.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Java incorpora funcionalidad llamada resolución dinámica de métodos(no existe en C++).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * C++ trabaja con librerías dinámicas(DLLs) que obligan a recopilar la aplicación cuando se retocan las funciones que se encuentran en su interior. Este inconveniente es el resulto por Java, mediante una interfaz específica llamad RTTI(RunTime Type Indentification, Identificación de Tipo en Tiempo de Ejecución). Las clases en Java tiene una representación que permite a los programadores interrogar en tiempo de ejecución por el tipo de clases y asociar dinamicamente la clase con el resultado de la búsqueda.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Distribuido&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Java se ha construido con grandes capacidades de interconexión TCP/IP. Existen librerías de rutinas para acceder e interactuar con protocolos como el protocolo HTTP y el protocolo FTP. Esto permite a los programadores acceder a la información a través de la red con tanta facilidad como a los ficheros locales.&lt;br /&gt;&lt;br /&gt;Lo que realmente hace Java es proporcionar las librerías y herramientas para que los programas puedan seer distribuidos, es decir, que se corran en varias maquinas&amp;nbsp; interactuando entre ellas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Verificaciones&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Java realiza verificaciones en busca de problemas en tiempo de compilación y en tiempo de ejecución.&lt;br /&gt;&lt;br /&gt;- La comprobación de tipos en java ayuda a detectar errores, lo antes posible, en la fase de implementación. En Java la declaración de un método se hace justo antes de su definición indicando en ella los tipos de datos pasados como argumentos y el tipo de dato envuelto, reduciendo así las posibilidades de error.&lt;br /&gt;- Maneja la memoria para eliminar las preocupaciones por parte del programador de la liberación de memoria o de la corrupción de memoria.&lt;br /&gt;- Implementa los arrays como bloques de memoria contiguos con comprobación de límites, para evitar la posibilidad de sobrescribir o corromper memoria a causa de punteros que señalan a zonas equivocadas. Estas características reducen drásticamente el tiempo de desarrollo de aplicaciones Java.&lt;br /&gt;- Para asegurar el funcionamiento de la aplicación, realiza una verificación de los bytecodes. No es el código máquina directamente entendible por el hardware, pero ha pasado la fase del compilador, como el análisis de instrucciones, orden de operaciones, etc., y ya tiene generada la pila de ejecución de órdenes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Arquitectura neutral&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Para establecer Java como parte integral de la red, el compilador Java compila su código a un fichero objeto de formato independiente de la arquitectura de la máquina en que se ejecutará. Cualquier máquina que tenga el sistema de ejecución(run-tine o maquina virtual Java) puede ejecutar ese código objeto, sin importar en modo alguno la máquina en que ha sido generado. Actualmente existen sistemas run-time para Solaris, SunOs, Windows, Linux, Irix, Aix, Mac, Apple.&lt;br /&gt;&lt;br /&gt;El código fuente de Java se &quot;compila&quot; a un código de bytes de bajo nivel independiente de la máquina. Este código(bytecodes) está diseñado para ejecutarse en máquina hipotética que es implementada por un sistema run-time, que sí es dependiente de la máquina. Lo que es realmente dependiente de la máquina es la Máquina Virtual Java (JVM) y las librerías fundamentales, que también nos permitirían acceder directamente al hardware de la máquina.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Seguro&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;En el lenguaje Java, las características como los punteros o el casting(cambio de tipo de un objeto) implícito que hacen los compiladores de C y C++ se eliminan para prevenir el acceso ilegal a la memoria. El lenguaje C, por ejemplo, tiene lagunas de seguridad importantes. Por ejemplo, al desarrollar en C se utilizan punteros junto a operaciones aritméticas. Esto le permite al programador que un puntero haga referencia a un lugar conocido de la memoria y puede sumar o restar algún valor, para referirse a otro lugar de la memoria. Si otros programadores conocen nuestras estructuras de datos pueden extraer información confidencial de nuestro sistema.&lt;br /&gt;&lt;br /&gt;El código Java pasa unas pruebas antes de ejecutarse en un máquina. El código se pasa a través de un verificador de bytecodes que comprueba el formato de los fragmentos de código y aplica un probador de teoremas para detectar fragmentos de código ilegal(código que falsea punteros, viola derechos de acceso sobre objetos o intenta cambiar el tipo o clase de un objeto.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Portable&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Más allá de la portabilidad básica por ser de arquitectura independiente, Java implementa otros estandares de portabilidad para facilitar el desarrollo. Los enteros son siempre enteros además de ser enteros de 32 bits en complemento de 2, también Java construye sus interfaces de usuario a través de un sistema abstracto de ventanas de forma que las ventanas puedan ser implantadas en entornos unix, Pc o Mac.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Interpretado&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;El intérprete Java(sistema run-time o máquina virtual Java) puede ejecutar directamente los bytecodes. No obstante, Java es más lento que otros lenguajes de programación, más que C++, ya que debe ser interpretado antes de ser ejecutado en vez de ser ejecutado directamente como sucede en cualquier programa compilado de forma tradicional.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En definitiva Java para conseguir ser un lenguaje independiente del sistema operativo y del procesador que incorpore la máquina utilizada, es tanto interpretado como compilado. El código fuente escrito en cualquier editor se compila generando los bytecodes. Este código intermedio es de muy bajo nivel, pero sin alcanzar las instrucciones en código máquina propias de cada plataforma. Ese mismo código es el que se puede ejecutar sobre cualquier plataforma. Para ello hace falta la JVM, que sí es completamente dependiente de la máquina y del sistema operativo, que interpreta dinámicamente los bytecodes. Con este sistema es fácil crear aplicaciones multiplataforma, pero para ejecutarlas es necesario que exista la JVM correspondiente al sistema operativo utilizado.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Multihebrado&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Al sr multihreaded(multihebrado), Java permite muchas actividades simultáneas en un programa. Los hilos(a veces llamados, procesos ligeros), que son piezasa independientes(líneas de ejecución) de un proceso. No ha de confundirse un hilo con un proceso. Hilo es la unidad mínima ejecutable, mientras que proceso es la unidad mínima planificable. Un proceso está formado por hilos. Al estar los hilos construidos en el lenguaje, son más fáciles de usar y más robustos que sis homólogos en C o C++.&lt;br /&gt;&lt;br /&gt;Por ejemplo, es posible que el interfaz gráfico de una aplicación(las ventanas, botones, controles, etc) se ejecutan en un hilo(thread) encargado de dibujarlos en la pantalla, mientras que las acciones que llevan asociadas se ejecutan en otro, consiguiendo una respuesta más rápida de la aplicación.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgO9vgMGy8jB8rtlRim_pw8aBKSkcaan2TkiWGovvCGyxXgMRLJd3dy-S_mdmLUIhYy8bkVdL2ePioZnKvMfIlNc1-OB58sKnHAwamuqZAo8aEwznenYkGWz5OAcufMWvzKtQbBb6bjk0/s494/Dibujo.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;447&quot; data-original-width=&quot;494&quot; height=&quot;363&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgO9vgMGy8jB8rtlRim_pw8aBKSkcaan2TkiWGovvCGyxXgMRLJd3dy-S_mdmLUIhYy8bkVdL2ePioZnKvMfIlNc1-OB58sKnHAwamuqZAo8aEwznenYkGWz5OAcufMWvzKtQbBb6bjk0/w400-h363/Dibujo.jpeg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Dinámico&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Java se beneficia todo lo posible de la tecnología orientada a objetos. Java no intenta conectar todos los módulos que comprenden una aplicación hasta el tiempo de ejecución. Las librerías nuevas o actualizadas no paralizan las aplicaciones actuales(siempre que mantengan el API anterior).&lt;br /&gt;&lt;br /&gt;Java también simplifica el uso de protocolos nuevos o actualizados. Sí un sistema dado ejecuta una aplicación Java sobre la red y encuentra una pieza de la aplicación que no sabe manejar, Java es capaz de traer automaticamente cualquiera de esas piezas que el sistema necesita para funcionar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;JDK&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;La herramienta básica para empezar a desarrollar aplicaciones o applets en Java es el JDK(Java Development Kit o kit de desarrollo Java), que consiste basicamente en un compliador y un intérprete(JVM) para la línea de comandos. No dispone de un entorno de desarrollo integrado (IDE), pero es suficiente para aprender el lenguaje y desarrollar pequeñas aplicaciones. Es todo lo que necesitamos para poder compilar y ejecutar nuestros programas Java.&lt;br /&gt;&lt;br /&gt;La API de Java está formada por varios paquetes que se distribuyen con el JDK como biblioteca de clases. Estos paquetes proporcionan una interfaz común para desarrollar aplicaciones Java en todas las plataformas Java.&lt;br /&gt;&lt;br /&gt;La API de Java está formada por varios paquetes de desarrollo principales y de un paquete de soporte de depuración. Estos paquetes son colecciones de objetos relacionados. Por ejemplo, vienen separados según se trate de programas de ventas, mini-aplicaciones, software de conexión, etc.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Nivel léxico, gramatical y semántico de los lenguajes de programación&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Uno de los objetivos de los lenguajes de programación de alto nivel es que son fáciles de entender, por eso todos los lenguajes de programación de alto nivel como Java, C, C++, python y otros tienen una estructura similar al lenguaje natural(ingles), Aunque existen construcciones concretras que las pueden diferenciar entre diferentes lenguajes.&lt;br /&gt;&lt;br /&gt;Una de las diferencias y que no esta a simple vista se concretra en la forma de compilar e interpretar que se traducen en el texto escrito en el lenguaje de alto nivel a código máquina y ejecutable por el ordenador.&lt;br /&gt;&lt;br /&gt;Como ya hemos visto, Java no es muy distinto de cualquier otro lenguaje, incluido el castellano. Casi todos hemos empezado aprendiendo las letras que forman parte del alfabeto de nuestra lengua, y en todo caso, usemos el método que usemos para aprender a leer, seguro que tenemos que usarlas de una en una al escribir un texto. Igual ocurre en Java. El lenguaje se construye sobre un alfabeto, un conjunto de símbolos que son los que podemos emplear para escribir nuestros programas.&lt;br /&gt;&lt;br /&gt;Tradicionalmente, el alfabeto que venía usándose para todos los lenguajes de programación era el código ASCII de 8 bits, lo que permitía un conjunto de 256 símbolos distintos, que más o menos coincidían con los caracteres usados en la mayoría de los países occidentales. Pero eso imposibilitaba el uso de caracteres propios de los idiomas de muchos paises.&lt;br /&gt;&lt;br /&gt;Para evitar ese problema, Java ha incorporado como alfabeto el código Unicode, que es un nuevo código estándar de E/S que isa 16 bits para representar cada carácter, lo que da un número suficientemente amplio(2^16 = 65.536 posibles caracteres distintos).&lt;br /&gt;&lt;br /&gt;El código Unicode es totalmente compatible con ASCII, ya que respeta el código ASCII, lo que realmente hace es colocar 8 bits a cero delante para convertirlos en Unicode.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nivel léxico: Tokenización&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Inicialmente el compilador percibe nuestro fichero de texto con el código fuente en Java como una secuencia de caracteres, que le van siendo suministrados uno a uno, tal como se escribre y de los cuales&amp;nbsp; tiene que ir extrayendo las palabras con significado propio(tokens, en la jerga informatica que se refiere a la compilación). Este proceso e el análisis léxico de nuestro programa, y se denomina tokenización. Para ello, algunos caracteres tendrán que interpretarse de forma especial por el compilador, indicándole que ahí termina un token y comienza otro. Son los separadores, y así tenemos la primera noción léxica que introduciremos, la de separador.&lt;br /&gt;&lt;br /&gt;En Java se consideran separadores los siguientes caracteres/grupos de caracteres:&lt;br /&gt;&lt;br /&gt;- Espacio en blanco: es el típico separador. Es un carácter más del alfabeto(Unicode), pero cuya misión es introducir un corte entre dos palabras.&lt;br /&gt;- Return: es el símbolo de return, intro o nueva línea. Es un separador con exactamente las mismas propiedades que un espacio en blanco.&lt;br /&gt;- Tabulador: denominado también otro separador.&lt;br /&gt;- comentario: un comentario cumple asimismo las funciones de separador. Los comentarios poseen la función de documentación sobre el código fuente, pero desde el punto léxico del lenguaje, son más que separadores.&lt;br /&gt;- Operador: actúan como separadores que permiten defierenciar tokens distintos, pero con la peculiaridad de que se mantienen a sí mismos como tokens significativos, por lo que no podrán ser sustituidos por ningún otro separador. Son las excepción a la regla que mecionamosen los párrafos siguientes.&lt;br /&gt;&lt;br /&gt;Ejemplo: la expresión a=3+4 incluye dos operadores (= y +) que permiten separar el nombre de la variable &quot;a&quot; del primer operadory éste del segundo operando 4, generando la secuencia de tokens a, =, 3, +, 4. &lt;br /&gt;&lt;br /&gt;Durante la primera fase de análisis del código fuente, el análisis léxico, el compilador de Java aplica la siguiente regla: &lt;br /&gt;&lt;br /&gt;Toda secuencia de uno o más separadores se sustituye por un único espacio en blanco que establece una división entre tokens.&lt;br /&gt;&lt;u&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;Tipos de tokens&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;no todos los tokens son iguales ni todos deben ser interpretados de&amp;nbsp; la misma forma.&amp;nbsp; Los tipos de tokens en Java son:&lt;br /&gt;&lt;br /&gt;- Palabras reservadas&lt;br /&gt;- Operadores&lt;br /&gt;- Literales&lt;br /&gt;- Identificadores&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;br /&gt;int numero = 8;&lt;br /&gt;&lt;br /&gt;* int, se usa para indicar lo que ponemos a continuación va a ser una variable de tipo entero. El lenguaje Java le da un significado concreto, y no podemos usarla con ningún otro sentido que no sea el reservado para ella por el lenguaje. Por eso es una palabra reservada.&lt;br /&gt;* numero, es el nombre que he decidido darle a la variable. Cualquier elemento que yo use en el lenguaje debe tener un nombre (variables, constantes, clases, métodos, etc.) y ese nombre lo elige el programador que lo crea, de esta forma nos permite identificarlo y distinguirlo de otros elementos. Es un identificador.&lt;br /&gt;* =, es un operador de asignación que indica ina operación o acción a realizar, en este caso se le asigna a la variable con nombre &quot;numero&quot; el valor que lleva detras de &quot;=&quot;, en este caso 8.&lt;br /&gt;* 8, representa el valor concreto que forman la categoría de los enteros en Java. Es un valor literalm un literal de tipo entero.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tipos básicos o primitivos&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Cada uno de los tipos básicos tiene una palabra reservada asociada que permite declarar variables como pertenecientes a ese tipo. En la unidad 2, donde hablábamos de los tipos de datos y sus características, ya hicimos una introducción a los tipos básicos de Java.&lt;br /&gt;&lt;br /&gt;La declaración de una variable consiste en indicar el tipo de los valores que va a almacenar seguido del nombre de esa variable, que nos va a permitir referirnos de forma cómoda al valor que contiene.&lt;br /&gt;&lt;br /&gt;Java es un lenguaje fuertemente tipado, que quiere decir que no podremos usar ninguna variable si previamente no le hemos asignado un tipo. Además el lenguaje se preocupa de comprobar exhaustivamente que cualquier valor que se intenta guardar en una variable sea exactamente del mismo tipo que la variable. Además, cada tipo nos proporciona una serie de operaciones disponibles para usar con los datos de ese tipo.&lt;br /&gt;&lt;br /&gt;Los tipos primitivos en Java son: boolean, char, byte, short, int, long, float, double.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Literales de los tipos primitivos.&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Cada tipo tiene por tanto su conjunto finito de valores válidos. Por ejemplo, de tipo Boolean, sólo permite dos valores posibles, que son true(verdadero) y false(falso). Estos valores, aunque son literales, funcionan en la práctica como palabras reservadas, ya que no pueden usarse con ningún otro significado en Java. Por ejemplo, no se puede crear una variable llamada true, o llamada false.&lt;br /&gt;&lt;br /&gt;Por otro lado, los literales de tipo Char se representan mediante comillas simples. Cualquier símbolo Unicode situado entre comillas simples es un literal de tipo carácter. Ejemplo: &#39;A&#39;, &#39;a&#39;, &#39;7&#39;, &#39;?&#39;, &#39;+&#39;.&lt;br /&gt;&lt;br /&gt;Los símbolos de Unicode correspondientes al ASCII (primer bloque de 8bits que forman Unicode, concretamente los 8bits menos significativos de unicode), se pueden representar asimismo en notación octal. Para ello, conociendo el valor octal de un carácter(N), el literal correspondiente se representa como&#39;\N&#39;. Por ejemplo si sabemos que tanto en ASCII como unicode, la letra A(mayúscula) es el símbolo número 65, y que 65 en octal es 101, podemos representar esta letra como &#39;\101&#39;.&lt;br /&gt;&lt;br /&gt;Cualquier símbolo Unicode se puede especificar utilizando su valor hexadecimal, precedido por la secuencia de escape \u. Por ejemplo, si sabemos que el símbolo Pi mayúscula del griego se representa en unicode con el valor hexadecimal 0370, dicho carácter se especificará en Java como el literal &#39;\u0370&#39;.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Literales de tipo entero.&lt;br /&gt;&lt;/u&gt;&lt;br /&gt;Un número entero se define como una secuenncia de dígitos(0-9) que puede llevar delante signo o no. La única precaución que hay que tener es que para cada tipo primitivo de enteros(byte, short, int y long) se deben utilizar valores comprendidos en su rango de valores permitidos.&lt;br /&gt;&lt;br /&gt;Los números enteros se pueden especificar en tres notaciones: decimal, octal y hexadecimal.&lt;br /&gt;&lt;br /&gt;Todos los números por defecto están escritos en base decimal, a excepcion de los números que comienzan por 0, que se consideran que están en base octal, y los que comienzan por Ox o 0x(es decir, de un cero seguido de una x, mayúscula o minúscula), que se tratan como números en hexadecimal, pudiendo contener en dicho caso, además de dígitos(los números del 0 al 9), las letras A, B, C, D, E, o F(en mayúsculas o minúsculas). Ejemplo:&lt;br /&gt;&lt;br /&gt;- 90&lt;br /&gt;- 0132&lt;br /&gt;- 0X5A&lt;br /&gt;- 0x5A&lt;br /&gt;- 0X5a&lt;br /&gt;- 0x5a&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Literales de tipo real.&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;En Java hay dos tipos de números reales, que son float y double. La diferencia básica es la precisión de la representación y el rango de valores representables, debido al mayor tamaño de double, que usa 64 bits en vez de 32 de float para representar cada valor.&lt;br /&gt;&lt;br /&gt;La diferencia entre float y double es que la utilización de un mayor número de bits en el caso de double permite aumentar tanto la precisión de mantisa(número de dígitos significativos) como los valores extremos del exponente.&lt;br /&gt;&lt;br /&gt;En cualquier caso, lo que aquí nos interesa es la especificaciónv de literales de este tipo.&lt;br /&gt;&lt;br /&gt;Un número se considera real si posee decimales(lo que supone que se utilice el punto de separación entre la parte entera y la decimal, aunque cualquiera de las dos puede estar vacía), o poseé un exponente(el exponente se introduce mediante la letra e ò E), o va precedido por una letra identificativa de tipo(que es f ò F para float y d ò D para double).&lt;br /&gt;&lt;br /&gt;Según el criterio de utilización del punto(en ingles se utiliza el punto para la separación de los decimales, por lo que a estos números se los denomina de punto&amp;nbsp; flotante), los siguientes números son reales y no enteros:&lt;br /&gt;&lt;br /&gt;- 137.36&lt;br /&gt;- 137.&lt;br /&gt;- .56&lt;br /&gt;&lt;br /&gt;Si la parte entera o decimal es nula(valor igual a 0) se puede omitir. Mientras que 137 es número entero, 137. es un número real.&lt;br /&gt;&lt;br /&gt;Un número real se puede representar como NeM(equivalente NEM), donde N es un número real y M es un entero. Ejemplo de números son todos reales y poseen en mismo valor:&lt;br /&gt;&lt;br /&gt;- 1584.0&lt;br /&gt;- 1584E1 = 1584e1 = 1584e+1&lt;br /&gt;- 15.84E2&lt;br /&gt;- 1.584E3&lt;br /&gt;- .1584E4&lt;br /&gt;&lt;br /&gt;Tipo float:&lt;br /&gt;&lt;br /&gt;- 16f&lt;br /&gt;- 16F&lt;br /&gt;- 115.94f&lt;br /&gt;&lt;br /&gt;Tipo double:&lt;br /&gt;&lt;br /&gt;- 56823d&lt;br /&gt;- 56823D&lt;br /&gt;- 98.234d&lt;br /&gt;&lt;br /&gt;es importante tener en cuenta que en caso de no especificar la letra postfija correspondiente al tipo float, todos los números reales se consideran de tipo double por defecto.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/2038616827056563271/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2020/09/nociones-basicas-de-lenguaje-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/2038616827056563271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/2038616827056563271'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2020/09/nociones-basicas-de-lenguaje-de.html' title='Nociones Básicas de lenguaje de programación JAVA'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgO9vgMGy8jB8rtlRim_pw8aBKSkcaan2TkiWGovvCGyxXgMRLJd3dy-S_mdmLUIhYy8bkVdL2ePioZnKvMfIlNc1-OB58sKnHAwamuqZAo8aEwznenYkGWz5OAcufMWvzKtQbBb6bjk0/s72-w400-h363-c/Dibujo.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-7179025684679973473</id><published>2019-09-04T00:24:00.002+02:00</published><updated>2025-10-12T19:30:27.323+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Recursividad y función Fibonacci</title><content type='html'>&lt;p&gt;&lt;u&gt;&lt;b&gt;Concepto&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
La recursividad es un mecanismo que parece no aportar nada y que le resulta muy es algo complicado de entender. Se puede resumir como un mecanismo muy potente con el que se consigue que determinados programas mejoren su rendimiento y se escriban de forma más simple y clara, facilitando la actualización y modificación del código.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;En programación, se usa el término recursividad para referirnos a procedimientos o métodos que contienen en su implementación llamadas a sí mismo, es decir un método es recursivo si para ejecutarse se llama así mismo.&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;
Aspecto de la declaración de un metodo recursivo:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;modificadores devuelto=&quot;&quot; tipo=&quot;&quot; y=&quot;&quot;&gt; &lt;span style=&quot;font-size: small;&quot;&gt;metodoRecursivo(&lt;lista argumentos=&quot;&quot; de=&quot;&quot;&gt;) {&lt;/lista&gt;&lt;/span&gt;&lt;/modificadores&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sentencia;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;metodoRecursivo(&lt;lista argumentos=&quot;&quot; de=&quot;&quot;&gt;);&lt;/lista&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En negrita es la llamada que el método se hace a sí mismo.&lt;br /&gt;
&lt;br /&gt;
Pero, si para ejecutar a un método hay que haer uina llamada al mismo método que a su vez hará una llamada al mismo método, y así sucesivamente, ¿no habremos entrado en un &lt;b&gt;bucle infinito&lt;/b&gt; que hará que nunca terminemos?.&lt;br /&gt;
&lt;br /&gt;
No, si las cosas se hacen bien, aunque evidentemente, es posible hacerlas mal.&lt;br /&gt;
&lt;br /&gt;
¿Qué debemos tener en cuenta a la hora de saber si un método recursivo está bien definido?&lt;br /&gt;
&lt;br /&gt;
* Además de la llamada al propio método, deben existir otras sentencias en la definición del método que establezcan al menos un caso base, es decir, un caso para el que se conoce la solución, y para el que la llamada al método puede devolver un valor o terminar la ejecución sin necesidad de volver a invocar de nuevo al propio método.&lt;br /&gt;
* Cada nueva llamada al propio método debe reducir el problema, es decir, debe acercarnos más al caso base.&lt;br /&gt;
&amp;nbsp;* La solución debe ser correcta para los caso no base. Es decir, debemos ser capaces de expresar correctamente la solución de un caso a partir de las soluciones de casos menos complejas, para poder construir la solución de cualquier caso a partir de las soluciones del caso base.&lt;br /&gt;
&lt;br /&gt;
ejemplo del &lt;b&gt;calculo factorial de un número&lt;/b&gt;: &lt;br /&gt;
&lt;br /&gt;
El factorial de un número entero positivo &quot;n&quot; se representa como n!(que se lee como &quot;n factorial&quot;).&lt;br /&gt;
&lt;br /&gt;
Sabemos que dado un número entero positivo, el factorial se puede definir de dos formas:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Definición Iterativa:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Como el producto de todos los números enteros compredidos entre 1 y el propio número:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;n!=n*(n-1)*(n-2)*...*3*2*1&lt;/b&gt;. Además, por convenio, para extender la definición también al cero, se define &lt;b&gt;0!=1&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Para calcular el factorial de esta forma, tenemos que repetir un ciclo en el que se vaya acumulando el producto del númeropor el anterior, hasta que lleguemos a uno.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Definición Recursiva&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Como el producto del propio número por el factorial del número anterior.&lt;br /&gt;
&lt;br /&gt;
Es evidente que (n-1)! = (n-1)* (n-2)* ... *3*2*1, lo que nos lleva a poder escribir que n!=n*(n-1)!, siendo además 0!=1 igual que antes. Acabamos de hacer una definición por recurrencia del factorial de un número. &quot;el factorial de un número vale 1 si el número es 0, y el producto del propio número por el factorial del anteior, en otro caso.&quot;&lt;br /&gt;
&lt;br /&gt;
Para calcular el factorial de esta forma, es como su le encargáramos la tarea a una persona que no sabe calcular el valor final del factorial n, pero sabe que n * (n-1)*(n-2)!, y le pregunta a su vez a a otra persona el valor de (n-2)!, y así sucesivamente hasta que llegamos a preguntarle a una persona el valor de 0! y esa persoba responde que 0! = 1. A partir de ese momento, la persona que le preguntó tiene toda la información para calcular 1!, lo calcula, y le responde&amp;nbsp; a la persona que le preguntó, que completa el cálculo de 2!, y así sucesivamente, hasta llegar a la persona que calcular(n-1)!, que completa el cálculo y le proporciona su valor a quien le preguntó, que multiplica ese valor por n y obtiene el valor de n!.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;La recursividad ees una poderosa herramienta en programación y ofrece una alternativa a las soluciones iterativas complejas de algunos algoritmos.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Razones por las que se debe usar la recursividad:&lt;br /&gt;
&lt;br /&gt;
1.- Los problemas resultan más fáciles de resolver que con estructuras iterativas.&lt;br /&gt;
2.- Proporciona soluciones más simples.&lt;br /&gt;
3.- Proporciona soluciones elegantes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En el caso del factorial se a podido ver que habia dos posibles soluciones, una iterativa y ora recursiva.&lt;br /&gt;
&lt;br /&gt;
No solo no existen casdos en los que sea obligatorio, sino que siempre existe una solución iterativa, y ésta siempre será más eficiente, es decir, necesitará cosumir menos recursos de memoria y de CPU, y obtendrá la solución en menos tiempo.&lt;br /&gt;
&lt;br /&gt;
Lo que ocurre es que a veces, por la naturaleza recursiva del problema, no es fácil encontrar la solución iterativa, o resulta complicada y difícil de entender.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;La recursividad se debe usar cuando sea realmente necesaria, es decir, cuando no exista una solucion iterativa simple. Cuando las dos soluciones son fácilmente explicables, siempre será preferible la solución iterativa.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, la recursividad requiere hacer una asignación dinámica de memoria, que no es posible en todos los lenguajes de programación. Ejemplos, en Java si lo es.&lt;br /&gt;
&lt;br /&gt;
Cada vez que se hace una &lt;b&gt;&lt;i&gt;llamada al método recursivo&lt;/i&gt;&lt;/b&gt;, es necesario guardar en la pila(stack) todos los datos de la llamada que aún no ha terminado(son las variables de memoria que tenga definidas el método), lo que se conoce como &lt;b&gt;&lt;i&gt;entorno volátil&lt;/i&gt;&lt;/b&gt; de esa ejecución.&lt;br /&gt;
&lt;br /&gt;
Essto incluye almacenar en la memoria todos los valores de registro del microprocesador, para poder restablecerlos posteriormente y continuar por el mismo punto de la ejecución de esa llamada que se habia dejado.&lt;br /&gt;
&lt;br /&gt;
Cuando hay muchas llamadas sucesivas, estas llamadas se van almacenando en la pila(stack), de forma que se irán retirando de ella en orden contrario al que entraron o se introdujeron.&lt;br /&gt;
&lt;br /&gt;
Ejemplo, el último en entrar es el primero en salir. (estructura LIFO: Last-IN, First-OUT)&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4R8AEd968SzoSOMRD1tyOF0ghZ8wMYmjaDu41Q_0Vm2EPyoi9XG87epDbV8fKxfjk4yq6DhPg2htRaFtlUTGY-f6LM8MD3D4xhrdUY404SFGRDGjTk-JaIdnKdEwCYeWsQtSoowY_s1U/s1600/Sin-t%25C3%25ADtulo-1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;186&quot; data-original-width=&quot;195&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4R8AEd968SzoSOMRD1tyOF0ghZ8wMYmjaDu41Q_0Vm2EPyoi9XG87epDbV8fKxfjk4yq6DhPg2htRaFtlUTGY-f6LM8MD3D4xhrdUY404SFGRDGjTk-JaIdnKdEwCYeWsQtSoowY_s1U/s1600/Sin-t%25C3%25ADtulo-1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Todo ese tiempo de CPU dedicado a:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Guardar los datos de cada ejecución en la pila,&lt;/li&gt;
&lt;li&gt;cargar los de la nueva llamada para cuando al final ésta termine&lt;/li&gt;
&lt;li&gt;ir de nuevo sacando esos valores de la pila en orden contrario a como se introdujeron&lt;/li&gt;
&lt;li&gt;para restaurarlos en la CPU y completar la llamada,&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
Es la causa resonsable de que las soluciones recursivas requieran mucho más tiempo de cpu y mucha más memoria.&lt;br /&gt;
&lt;br /&gt;
Con una solución &lt;b&gt;iterativa&lt;/b&gt; sólo tendremos un método ejecutándose, por lo que sólo necesitaremos memoria para una copia de cada una de las variables que usa ese método. Por otro lado, no hay que hacer ninguna operación de almacenar en la pila los datos de ejecución para posteriormente reanudarla, ya que la llamada al método iterativo se ejecuta hasta finalizar, sin intervención de ninguna otra llamada.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Función Fibonacci&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
LA función Fibonacci calcula el valor del término n-ésimo de la sucesión de Fibonacci, en la que el primer término es 0, el segundo1 y a partir de ahí, cada nuevo término se calcula como la suma de los dos inmediatamente anteriores. Puede también inicializarse los dos primeros términos con otros valores, pero lo que no cambia es la forma de obtener los sucesivos términos.&lt;br /&gt;
&lt;br /&gt;
Por tanto, la función Fibonacci se puede definir como:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Fibonacci(n)=n, si n=0 ó n=1&lt;/li&gt;
&lt;li&gt;Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2), si n &amp;gt; 1&lt;/li&gt;
&lt;/ul&gt;
Ejemplo de código Java:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;left: 141.8px; top: 364.784px; transform: scaleX(0.998875);&quot;&gt;static int fibonacci (int n) &lt;/span&gt;&lt;span style=&quot;left: 141.8px; top: 395.083px; transform: scaleX(0.998875);&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;left: 141.8px; top: 425.283px; transform: scaleX(0.998875);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;left: 141.8px; top: 425.283px; transform: scaleX(0.998875);&quot;&gt;&amp;nbsp;&amp;nbsp; if ((n == 0) || (n == 1)) {&lt;/span&gt;&lt;span style=&quot;left: 141.8px; top: 455.484px; transform: scaleX(0.998875);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;left: 141.8px; top: 455.484px; transform: scaleX(0.998875);&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;left: 141.8px; top: 485.684px; transform: scaleX(0.998875);&quot;&gt;&amp;nbsp;&amp;nbsp; } else {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;left: 141.8px; top: 485.684px; transform: scaleX(0.998875);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;left: 141.8px; top: 515.884px; transform: scaleX(0.998875);&quot;&gt;&amp;nbsp;&amp;nbsp;     return fibonacci(n-1) + fibonacci(n-2);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;left: 141.8px; top: 515.884px; transform: scaleX(0.998875);&quot;&gt;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;left: 141.8px; top: 546.085px; transform: scaleX(0.998875);&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
El algoritmo recursivo que implementa a esta función es muy sencillo de hacer, pero muy ineficiente. Si intentas calcular el término 40 de la sucesión, verás cómo tarda un tiempo considerable en resolverlo, y si introduces un valor más alto, posiblemente parezca que el ordenador se ha bloqueado debido a lo que tardar en responder. Este tiempo depende del ordenador en el que se ejecuta.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/7179025684679973473/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2019/09/recursividad-y-funcion-fibonacci.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/7179025684679973473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/7179025684679973473'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2019/09/recursividad-y-funcion-fibonacci.html' title='Recursividad y función Fibonacci'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4R8AEd968SzoSOMRD1tyOF0ghZ8wMYmjaDu41Q_0Vm2EPyoi9XG87epDbV8fKxfjk4yq6DhPg2htRaFtlUTGY-f6LM8MD3D4xhrdUY404SFGRDGjTk-JaIdnKdEwCYeWsQtSoowY_s1U/s72-c/Sin-t%25C3%25ADtulo-1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-636522646802596980</id><published>2019-06-04T12:10:00.002+02:00</published><updated>2020-09-08T09:30:45.649+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Busqueda de datos en un ArrayList</title><content type='html'>Codigo ejemplo interesante para realizar busqueda de datos dentro de un ArrayList:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: small;&quot;&gt;if (!&lt;b&gt;listaTenistas&lt;/b&gt;.isEmpty()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tenista t = null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean encontrado = false;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!encontrado &amp;amp;&amp;amp; i &amp;lt; listaTenistas.size()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = listaTenistas.get(i);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (t.getNombre().equalsIgnoreCase(jtNombreBuscar.getText())) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; encontrado = true;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (encontrado) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; indice = i;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarDatosTenista(indice);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JOptionPane.showMessageDialog(this, &quot;El tenista &quot; + jtNombreBuscar.getText() + &quot; no ha sido encontrado&quot;, &quot;No encontrado&quot;, JOptionPane.ERROR_MESSAGE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JOptionPane.showMessageDialog(this, &quot;No se han añadido tenistas a la lista&quot;, &quot;Lista vacía&quot;, JOptionPane.ERROR_MESSAGE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
listaTenista es el ArrayList, de la clase Tenista, en la que se crea un metodo privado que devuelve el nombre &lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;escrito&amp;nbsp;en el campo de texto&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;jtNombreBuscar&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: small;&quot;&gt;. metodo llamado getNombre().&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/636522646802596980/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2019/06/busqueda-de-datos-en-un-arraylist.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/636522646802596980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/636522646802596980'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2019/06/busqueda-de-datos-en-un-arraylist.html' title='Busqueda de datos en un ArrayList'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-2189311609909000242</id><published>2017-09-12T14:17:00.002+02:00</published><updated>2017-09-12T14:17:38.508+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Z80"/><title type='text'>Cambiar dirección de rutina</title><content type='html'>Este ejemplo hace lo mismo que &lt;a href=&quot;http://techfico.blogspot.com.es/2017/09/entendiendo-las-primeras-instrucciones.html&quot;&gt;este&lt;/a&gt;, pero POKEamos antes a la dirección 50000 una vez ensamblada el byte 162 o cualquier otro que probemos.&lt;br /&gt;
&lt;br /&gt;
Este sería el listado para ensamblar:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;   ; Listado 3: Rellenado de pantalla
   ; recibiendo el patron como parametro.
   ORG 40000
 
   ; En vez de 162, ponemos en A lo que hay en la
   ; dirección de memoria 50000
   LD A, (50000)
 
   ; El resto del programa es igual:
   LD HL, 16384
   LD (HL), A
   LD DE, 16385
   LD BC, 6911
   LDIR
   RET
&lt;/pre&gt;
&lt;br /&gt;
Por lo tanto una vez cargado en ensamblador, hacemos esto.
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;POKE 50000, 162 
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Lo que hace este poke es llamar llamar a la direccion 50000 y le ponemos el byte 162, para que cuando hagamos un &quot;&lt;b&gt;RANDOMIZE USR 40000&lt;/b&gt;&quot; en la dirección 50000 este el byte 162 y puede funciona la rutina que se a programado en &quot;&lt;b&gt;ORG 40000&lt;/b&gt;&quot;.</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/2189311609909000242/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/09/cambiar-direccion-de-rutina.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/2189311609909000242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/2189311609909000242'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/09/cambiar-direccion-de-rutina.html' title='Cambiar dirección de rutina'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-8958671277637600974</id><published>2017-09-07T13:19:00.001+02:00</published><updated>2025-10-12T19:31:56.104+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Z80"/><title type='text'>Entendiendo las primeras instrucciones</title><content type='html'>Este será mi primer articulo para entender el lenguaje de ensamblador(ASM) del microprocesador Z80.&lt;br /&gt;
&lt;br /&gt;
Bien pues vamos a ver que es lo que hace este código:&lt;br /&gt;
&lt;br /&gt;
&lt;pre name=&quot;code&quot;&gt;ORG 40000
   LD HL, 16384
   LD A, 162
   LD (HL), A
   LD DE, 16385
   LD BC, 6911
   LDIR
   RET
&lt;/pre&gt;&lt;p&gt;
&lt;br /&gt;
Este código se compila, se ensambla en unos bytes, que es binario. Lo que hace este código es poner toda la pantalla con el byte 162.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;
Paso a paso:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;ORG 40000&lt;/span&gt;&lt;/span&gt; Es la directiva del compilador, donde se indica dónde debe compilar el código que le sigue.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;LD HL, 16384&lt;/span&gt; carga el valor 16384 en el registro HL(16384 = &amp;nbsp;$4000 -&amp;gt; H=$40 L = $00)&lt;br /&gt;
&lt;br /&gt;
Hay que decir que a partir de &lt;b&gt;16384 &lt;/b&gt;se ubica la memoria de video. Los primeros bytes son el contenido de pixels activos y no activos, y a partir de &lt;b&gt;22528 &lt;/b&gt;se ubican los atributos de color [&lt;i&gt;1 byte por cada bloque de 8x8&lt;/i&gt;]&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;LD A, 162&lt;/span&gt; carga el valor 162 en el registro A(A=162).&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;LD(HL), A&lt;/span&gt;&lt;/span&gt; mete el valor de A en la dirección de memoria apuntada por HL. El HL vale $4000(Hexadecimal) y A vale 162; quiere decir que en la dirección de memoria 16384 va a meter el valor 162.&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;LD DE, 16385&lt;/span&gt;&lt;/span&gt; carga 16385 en el registro DE. &lt;b&gt;16835 &lt;/b&gt;es la siguiente dirección de vídeo, es decir, la siguiente dirección después de 16384 que se metio un 162(LD A, 162). DE suele ser un registro de &quot;DE&quot;stino.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;LD BC, 6911&lt;/span&gt;&lt;/span&gt; carga 6911 en el registro BC. BC suele ser el registro contador, tanto en B como en C.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;LDIR&lt;/span&gt;&lt;/span&gt; es un incrementador repetido, quiere decir &lt;b&gt;L&lt;/b&gt;oa&lt;b&gt;D&lt;/b&gt; &lt;b&gt;I&lt;/b&gt;ncrementando &lt;b&gt;R&lt;/b&gt;epetido. que lo que hace es leer el contenido de memoria apuntada por DE, incrementa HL y DE, decrementa BC, y se repite hasta que BC valga 0.&lt;br /&gt;
&lt;br /&gt;
Es decir, lo que hace en general este &amp;nbsp;código es arrastrar el &lt;b&gt;162&lt;/b&gt; desde la primera dirección de memoria que le indicamos, en este caso el primer valor de HL 16384($4000 hexadecimal), pasando por 16385, 16386, etc...&lt;br /&gt;
&lt;br /&gt;
Y en ámbitos generales lo que hace este programa es rellenar con el valor 162, 6912 bytes, empezando por el primer valor de HL(16384). En lugar de 6192(pixeles más atributos de color), rellena solo 6144(BC = 6143).&lt;br /&gt;
&lt;br /&gt;
Otro ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;&lt;pre name=&quot;code&quot;&gt;ORG 40000
   LD HL, 0
   LD DE, 20000
   LD BC, 16
   LDIR
   RET
&lt;/pre&gt;
&lt;br /&gt;
En este ejemplo, copia 16 bytes desde la posición &quot;0&quot; de memoria, a la posición 20.000 de memoria.</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/8958671277637600974/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/09/entendiendo-las-primeras-instrucciones.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/8958671277637600974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/8958671277637600974'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/09/entendiendo-las-primeras-instrucciones.html' title='Entendiendo las primeras instrucciones'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-2963045343338759831</id><published>2017-03-27T12:20:00.000+02:00</published><updated>2017-03-27T12:20:19.825+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>El objeto Event</title><content type='html'>Los generadores de eventos necesitan información adicional para procesar las tareas que tienen que realizar. Si una función procesa, por ejemplo, el evento &lt;b&gt;click&lt;/b&gt;, lo más probable es que necesite conocer la posición en la que estaba el ratón en el momento de realizar el click; aunque esto quizás tampoco sea muy habitual, a no ser que estemos programando alguna utilizadad de tipo gráfico.&lt;br /&gt;
&lt;br /&gt;
Lo que sí es más común es tener información adicional en los eventos del teclado. Ejemplo, cuando pulsamos una tecla nos interesa saber cuál ha sido la tecla pulsada, o si tenemos a mayores alguna tecla especial pulsada como Alt, Control. Etc.&lt;br /&gt;
&lt;br /&gt;
Los navegadores gestionan de forma diferente los objetos &lt;b&gt;Event&lt;/b&gt;. Por ejemplo, en las versiones antiguas de Internet Explorer, el objeto &lt;b&gt;Event&lt;/b&gt;&amp;nbsp;forma parte del objeto &lt;b&gt;window&lt;/b&gt;, mientras que en otros navegadores como Firefox, Chrome, etc., para acceder al objeto &lt;b&gt;Event &lt;/b&gt;lo haremos a través de un parámetro, que escribimos en la función que gestionará el evento.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nota&lt;/b&gt;: En Internet Explorer no se puede programar que un evento se dispare en la fase de captura, ya que el IE los eventos siempre burbujean.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/2963045343338759831/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/03/el-objeto-event.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/2963045343338759831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/2963045343338759831'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/03/el-objeto-event.html' title='El objeto Event'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-3411403532211866638</id><published>2017-03-27T10:41:00.000+02:00</published><updated>2017-03-27T11:17:10.234+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>El DOM, sus propiedades y métodos</title><content type='html'>El DOM (Modelo de Objeto del Documento), es esencialmente una interfaz de programación de aplicaciones (API), que proporciona un conjunto estándar de objetos, para representar documentos HTML y XML, un modelo estándar sobre cómo pueden combinarse dichos objetos, y una interfaz estandar para acceder a ellos y manipularlos. A través del DOM los programas pueden acceder y modificar el contenido, estructura y estilo de los documentos HTML y XML, que es para lo que se diseño principalmente. El responsable del &lt;b&gt;DOM es el W3C&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;El DOM está separado en 3 partes / niveles:&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
DOM Core - modelo estándar para cualquier documento estructurado.&lt;br /&gt;
DOM XML - modelo estándar para documentos XML.&lt;br /&gt;
DOM HTML - modelo estándar para documentos HTML.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;El DOM HTML es un estándar dónde se define cómo acceder, modificar, añadir o borrar elementos HTML.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
En el DOM se definen los &lt;b&gt;objetos &lt;/b&gt;y &lt;b&gt;propiedades &lt;/b&gt;de todos los elementos del documento, y los métodos para acceder a ellos.&lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que muchas de las funciones de Internet Explorer 4 y posteriores del modelo de objetos, no forman parte de la expecificación DOM W3C.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9-GwbvZX9ddiSL6GFIbxtakQaIIO0q0L0zbB4k3vp32FxVupinj33wqWcFsoux0TnaBRLGwWsb071dPvQpb3bbQtLQQ1uJhhc7F50dZrPL0xjCo0X9GRbdtVaOhqcd497xDNKQnZSTYk/s1600/f0401.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;268&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9-GwbvZX9ddiSL6GFIbxtakQaIIO0q0L0zbB4k3vp32FxVupinj33wqWcFsoux0TnaBRLGwWsb071dPvQpb3bbQtLQQ1uJhhc7F50dZrPL0xjCo0X9GRbdtVaOhqcd497xDNKQnZSTYk/s400/f0401.gif&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
El DOM transforma todos los documentos XHTML en un conjunto de elementos, a los que llama &lt;b&gt;nodos&lt;/b&gt;. En el HTML DOM &lt;b&gt;cada nodo es un objeto&lt;/b&gt;. Estos nodos están conectados entre sí y representan los contenidos de la página web, y la relación que hay entre ellos. Cuando unimos todos estos nodos de forma jerárquica, obtenemos una estructura similar a un arbol, por lo que muchas veces se suele referenciar como árbol DOM, &quot;&lt;b&gt;árbol de nodos&quot;&lt;/b&gt;, etc.&lt;br /&gt;
&lt;br /&gt;
Ejemplo de arbol de nodo:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjT9d_aW8Vlt32AZMhmcMtNGhgHOOHciVhprmIAKZZU0Z4Hl257J75wyNzBT41CbTmCVFxuPJXvDdRDQyBulnlQ_cx2qxoLtPVUJgB5UZu9C3oM0m9bfJ-Kjnx_htdrqLc49XVo5Cc15g/s1600/DWEC06_CONT_R04_arbol.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;301&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjT9d_aW8Vlt32AZMhmcMtNGhgHOOHciVhprmIAKZZU0Z4Hl257J75wyNzBT41CbTmCVFxuPJXvDdRDQyBulnlQ_cx2qxoLtPVUJgB5UZu9C3oM0m9bfJ-Kjnx_htdrqLc49XVo5Cc15g/s400/DWEC06_CONT_R04_arbol.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Los rectángulos del gráfico representa un nodo del DOM, y las lineas representan la relación entre los nodos. La raíz del árbol de nodos es un nodo especial, denominado &quot;&lt;b&gt;document&lt;/b&gt;&quot;. A partir de ese nodo, cada etiqueta XHTML se transformará en nodos de tipo &quot;elemento&quot; o &quot;texto&quot;. El nodo inmediantamente superior será el nodo padre y todos los nodos que están por debajo serán nodos hijos.&lt;br /&gt;
&lt;br /&gt;
Algunos de los tipos de nodos:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;document&lt;/b&gt;, es el nodo raíz y del que derivan todos los edemás nodos del árbol.&lt;br /&gt;
&lt;b&gt;element&lt;/b&gt;, representa cada una de las etiquetas XHTML. Es el único nodo que puede contener atributos y el único del que pueden derivar otros nodos.&lt;br /&gt;
&lt;b&gt;Attr&lt;/b&gt;, con este tipo de nodos representamos los atributos de las etiquetas XHTML, es decir, un nodo por cada atributos = valor.&lt;br /&gt;
&lt;b&gt;Text&lt;/b&gt;, es el nodo que contiene el texto encerrado por una etiqueta XHTML.&lt;br /&gt;
&lt;b&gt;comment&lt;/b&gt;. representa los comentarios incluidos en la página XHTML.&lt;br /&gt;
&lt;br /&gt;
Los otros tipos de nodos pueden ser: CdataSection, documentFragment, documentType, EntityReference, entity, Notation y processingInstruction.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Acceso a los nodos.&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
El accededr a un nodo específico lo podremos hacer empleando dos métodos: a través de los nodos padres, o bien usando método de acceso directo. A través de los nodos padres partiendo del nodo raiz, accediendo a los nodos hijos y asi sucesivamente hasta llegar al elemento que queriamos.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;GetElementsName()&lt;/b&gt;, Esta función obtiene una colección, que contiene todos los elementos de la página XHTML cuyo atributo name coincida con el indicado como parámetro.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;var elementos = document.getElementsByName(&quot;apellidos&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Una colección no es un array, aunque se le parezca mucho, ya que aunque puedas recorrerla y referenciar a sus elementos como un array, no se pueden usar métodos de array, como &lt;b&gt;push &lt;/b&gt;o &lt;b&gt;pop&lt;/b&gt;, en la colección.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;b&gt;getElementById()&lt;/b&gt;,&amp;nbsp;esta función es la más utilizada, ya que nos permite acceder directamente al elemento por el ID. Entre paréntesis escribiremos la cadena de texto con el ID. Es muy importante que el ID sea único para cada elemento de una misma página. La función nos devolverá únicamente el nodo buscando.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;var elemento= document.getElementById(&quot;apellidos&quot;);
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NOTA:&lt;/b&gt;&amp;nbsp;Cuando escribimos los atributos en HTML, da igual que se pongan en mayúsculas o minúsculas, pero si estamos trabajando con XHTML debermos escribirlos siempre en minúculas , ejemplo type, value, size, etc.&lt;br /&gt;
&lt;br /&gt;
El tamaño máximo de lo que se puede almacenar en un nodo de texto, depende del navegador, por lo que muchas veces, si el texto es muy largo, tendremos que consultar varios nodos para &amp;nbsp;ver todo el contenido.&lt;br /&gt;
&lt;br /&gt;
En el DOM de HTML, para acceder al valor de un nodo de texto, o modificarlo, es muy común ver la porpiedad innerHTML. Esta propiedad es de microsoft al igual que &lt;b&gt;outerHTML&lt;/b&gt;. Aunque hasta HTML5 no estaba en el estándar de W3C esta propiedad está soportada por todos los navegadors, y es muy rápida en su uso para hacr modificaciones, del contenido de un DIV por ejemplo. &lt;b&gt;outerHTML&lt;/b&gt;&amp;nbsp;no se soporta en el estandar.&lt;br /&gt;
&lt;br /&gt;
Para modificar el contenido del nodo, modificaremos la propiedad &lt;b&gt;nodeValue.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;document.getElementsByTagName(&quot;p&quot;)[0].childNodes[1].firstChild.nodeValue = &quot;Texto MODIFICADO&quot;;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Lo que hace es cambiar la cadena de texto &quot;texto HTML&quot;, por &quot;texto MODIFICADO&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Creación y borrado de nodos&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;
La creación y borrado de nodos fue uno de los objetos para los que se creó el DOM. Podremos crear elementos y luego insertarlos en el DOM, y la actualización quedará reflejada automaticamente por el navegador. También podremos mover nodos ya existentes, simplemente insertándolo en cualquier otro lugar del árbol del DOM.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que cuando estemos creando nodos de elementos, el elemento debe estar en minúsculas. Aunque en HTML esto daría igual, el XHTML sí que es sensible a mayúsculas y tendrá que ir, por lo tanto, en minúsculas.&lt;br /&gt;
&lt;br /&gt;
para crear se usan los metodos &lt;b&gt;createElement()&lt;/b&gt;, &lt;b&gt;createTextNode() &lt;/b&gt;y &lt;b&gt;appendChild()&lt;/b&gt;, que nos permitirán crear un elemento, crear un nodo de texto y añadir un nuevo nodo hijo.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;//Creamos tres elementos nuevos: p, b, br
var elementoP = document.createElement(&#39;p&#39;);
var elementoB = document.createElement(&#39;b&#39;);&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;var elementoBR = document.createElement(&#39;br&#39;);&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;//Le asignamos un nuevo atributo title al elementoP que hemos creado.
elementoP.setAttribute(&#39;title&#39;,&#39;Parrafo creado desde JavaScript&#39;);&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;//Preparamos los nodos de texto
var texto1 = document.createTextNode(&#39;Con JavaScript se &#39;);
var texto2 = document.createTextNode(&#39;pueden realizar &#39;);
var texto3 = document.createTextNode(&#39;un monton&#39;);
var texto4 = document.createTextNode(&#39; de cosas sobre el documento.&#39;);&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;//Añadimos al elemento B los nodos de texto2, elemento BR y texto3.
elementoB.appendChild(texto2);
elementoB.appendChild(elementoBR);
elementoB.appendChild(texto3);
 
//Añadimos al elemento P los nodos de texto1, elemento B y texto 4.
elementoP.appendChild(texto1);
elementoP.appendChild(elementoB);
elementoP.appendChild(texto4);&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;//insertamos el nuevo párrafo como un nuevo hijo de nuestro párrafo
document.getElementById(&#39;parrafito&#39;).appendChild(elementoP);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Propiedades y métodos de los objetos nodo&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;
Todo lo que se utiliza en la actualidad es el DOM 2, y algunas de las extensiones de DOM 3. Por que el DOM 3 esa creado para XHTML.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nota&lt;/b&gt;: hay que procurar evitar utilizar funciones especificas de DOM 1 por los problemas inesperados que se pueddad dar sobre todo si se utilizan en XHTML.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;b&gt;&lt;u&gt;Gestión de eventos&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;
Cuando el usuario hace algo, se produce un evento. Tambien habrá algunos eventos que no están relacionados directamente con acciones de usuario: ejemplo: el evento carga de un documento, que es el caso de &quot;load&quot;, se dispara automaticamente cuando un documento ha sido cargado en el navegador.&lt;br /&gt;
&lt;br /&gt;
Existen diferencias, en lo que es la gestión de eventos, por unos navegadores u otros. Esas diferencias provocan que los programadores tengan que tener mucha precaución con los métodos y propiedades que usan, dependiendo del navegador que ejecutará la página de javascript.&lt;br /&gt;
&lt;br /&gt;
un ejemplo de solución es &lt;b&gt;cross-browser&lt;/b&gt;&amp;nbsp;para asignar evento, independientemente del navegador utilizado. Ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;function crearEvento(elemento, tipoEvento, funcion) {&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;    if (elemento.addEventListener) {&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;        elemento.addEventListener(tipoEvento, funcion, false);&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;    } else if (elemento.attachEvent) {&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;        elemento.attachEvent(&quot;on&quot; + tipoEvento, funcion);&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;    } else {&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;        elemento[&quot;on&quot; + tipoEvento] = funcion;&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;    }&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;}&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;var miparrafo = document.getElementById(&quot;parrafito&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;crearEvento(miparrafo, &#39;click&#39;, function () {&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;    alert(&quot;hola&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;});&lt;/code&gt;&lt;/pre&gt;
el método &lt;b&gt;addeventListener()&lt;/b&gt; no funciona en Internet Explorer 8, pero sí en cambio está ya implementado en Internet Explorer 9. Si tienes Windows XP no podrás usar ese evento ya que la última versión de IE que se puede usar en Windows XP es la 8 y no deja instalar la versión 9. La recomendación es que tengas las ultimas versiones de Mozilla Firefox o Google Chrome.</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/3411403532211866638/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/03/el-dom-sus-propiedades-y-metodos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3411403532211866638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3411403532211866638'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/03/el-dom-sus-propiedades-y-metodos.html' title='El DOM, sus propiedades y métodos'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9-GwbvZX9ddiSL6GFIbxtakQaIIO0q0L0zbB4k3vp32FxVupinj33wqWcFsoux0TnaBRLGwWsb071dPvQpb3bbQtLQQ1uJhhc7F50dZrPL0xjCo0X9GRbdtVaOhqcd497xDNKQnZSTYk/s72-c/f0401.gif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-1025406493209235368</id><published>2017-02-25T13:52:00.004+01:00</published><updated>2017-03-06T15:00:09.415+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>El objeto RegExp</title><content type='html'>El objeto &lt;b&gt;regExp&lt;/b&gt;&amp;nbsp;es tanto un literal como un objto de javaScript, por lo que también se podrá crear usando un constructor:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;var expresionregular = new RegExp(&quot;texto expresion regular&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
La expresión &lt;b&gt;RegExp&lt;/b&gt;&amp;nbsp;es compilada cuando se ejecuta el script, por lo tanto se recomienda usar el literal cuando sabemos que la expresión no cambiará. Una versión compilada es mucho más eficiente.&lt;br /&gt;
&lt;br /&gt;
Usaremos el objeto, cuando asbemos que la expresión regular va a cambiar, o cuando vamos a proporcionarla en tiempo d ejecución.&lt;br /&gt;
&lt;br /&gt;
Al igual que otros objetos en javascript, el objeto regExp también tiene sus propiedades y métodos.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;global:  Especifica que sea utilizado el modificador &quot;g&quot;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;ignoreCase: Especifica que sea utilizado el modificador &quot;i&quot;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;lastIndex: El índice donde comenzar la siguiente búsqueda.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;multiline: Especifica si el modificador &quot;m&quot; es utilizado.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;source:  El texto de la expresión regular RegExp.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Métodos de RegExp&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;

&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;compile(): Compila una expresión regular.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;exec():  Busca la coincidencia en una cadena. Devolverá la primera coincidencia.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;test():  Busca la coincidencia en una cadena. Devolverá true o false.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;Ejemplos:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;// Comprobando si una subcadena existe dentro de otra
&lt;/span&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;var datos = new Array();
datos[0] = &quot;El Blogger de Google&quot;;     // verdadero
datos[1] = &quot;El blogger de Google&quot;;          // falso
datos[2] = &quot;BloggerGoogle&quot;;          // verdadero
datos[3] = &quot;Google Blogger&quot;;          // falso
 
var patron = /Blog.*Goog/;
// Patrón de búsqueda
// Contenga &quot;Blog&quot; cualquier caracter(.) 0 o más veces (*) y a continuación &quot;Goog&quot;
for (var i = 0; i &amp;lt; datos.length; i++)
  alert(datos[i] + &quot; &quot; + patron.test(datos[i]));

// Validación de un número de Seguridad social americano

function comprobar()
{  
     var numero = document.getElementById(&quot;ssn&quot;).value;
     var patron = /^\d{3}-?\d{2}-?\d{3}$/;
     if (numero.match(patron))
          alert(&quot;Correcto: el número &quot;+numero+&quot; cumple el estándar americano&quot;);
     else
          alert(&quot;Error: el número &quot;+numero+&quot; NO cumple el estandar.&quot;);
}&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;/pre&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;
&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/1025406493209235368/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/02/el-objeto-regexp.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/1025406493209235368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/1025406493209235368'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/02/el-objeto-regexp.html' title='El objeto RegExp'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-2216200762069107270</id><published>2017-02-24T14:01:00.001+01:00</published><updated>2017-02-24T14:01:27.308+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Expresiones regulares y objetos regExp</title><content type='html'>Las expresiones regulares son patrones de búsqueda, que se pueden utilizar para encontrar txto que coincida con el patrón especificado.&lt;br /&gt;
&lt;br /&gt;
ejemplo de busqueda sin utilizar expresiones regulares:&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;var texto = &quot;la linea de alta velocidad llegará pronto a toda España,&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;var subcadena = &quot;velocidad&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;var i = texto.indexOf(subcadena); // devuelve 17, índice de donde se encuentra la subcadena.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;if (i != -1) // correcto, se ha encontrado la subcadena.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Este código funciona porque esta buscando cadenas que cumplen un patrón en lugar de una cadena exacta. ¿Pero qué pasaría si hiciéramos una búsqueda más general? Por ejemplo si quisiéramos buscar la cadena &quot;car&quot; en textos como &quot;cartón&quot;, &quot;bicarbonato&quot;, &quot;practicar&quot;, ...?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cuando se búsque cadenas que cumplen un patrón en lugar de una cadena exacta, necesitaremos usar &lt;/b&gt;&lt;i style=&quot;font-weight: bold;&quot;&gt;expresiones regulares&lt;/i&gt;. Podrías intentar hacerlo con funciones de &lt;b&gt;string&lt;/b&gt;, pero al final, es mucho más sencillo hacerlo con expresiones regulares, aunque la sintaxis de las mismas es un poco extraña y no necesariamente muy amigable.&lt;br /&gt;
&lt;br /&gt;
En &lt;i&gt;javascript&lt;/i&gt;&amp;nbsp;las expresiones regulares se gestionan a través del objeto &lt;b&gt;regExp&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Crear un literal del tipo &lt;b&gt;regExp&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;var expresion = /expresion regular/;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
La expresión regular está contenida entre &quot;&lt;b&gt;/&lt;/b&gt;&quot;, y no lleva comillas. Las comillas sólo se pondrán en la expresión regular, cuando formen parte del patrón en si mismo.&lt;br /&gt;
&lt;br /&gt;
Las expresiones regulares están hechas de caracteres, solos o en combinación con caracteres especiales, que se proporcionarán para búsquedas más complejas. Por ejemplo, lo siguiente es una expresión regular que realiza una búsqueda que contenga las palabras &lt;i&gt;Aloe vera&lt;/i&gt;, en ese orden y separadas por uno o más espacios en medio:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;var expresion = /Aloe\s+Vera/;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Los caracteres especiales &amp;nbsp;en este ejemplo son, la barra invertida (\), que tiene dos efectos:&lt;br /&gt;
&lt;br /&gt;
Se utiliza para indicar que se trata de un carácter especial, o se usa con carácter especial, tales como el signo más (+), para indicar que el carácter debe ser tratado literalmente. En este caso, la barra invertida se utiliza con &quot;&lt;b&gt;s&lt;/b&gt;&quot;, que tranforma la letra &lt;b&gt;s&lt;/b&gt;&amp;nbsp;en un carácter especial indicando un espacio en blanco, un tabulador, un slto de línea, etc. el símbolo&amp;nbsp;+ indica que el carácter anterior puede aparecer una o más veces.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/2216200762069107270/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/02/expresiones-regulares-y-objetos-regexp.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/2216200762069107270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/2216200762069107270'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/02/expresiones-regulares-y-objetos-regexp.html' title='Expresiones regulares y objetos regExp'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-6001486180095230565</id><published>2017-02-22T20:00:00.000+01:00</published><updated>2017-02-22T20:00:55.939+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Modelo de registro de eventos tradicional</title><content type='html'>En los navegadores antiguos, el modelo que se utilizaba era el modelo en línea. Con la llegada de DHTML, el modelo se extendió para ser más flxible. En este nuevo modelo el evento pasa a ser una propiedad del elemento, así que por ejemplo los navegadores modernos ya aceptan el siguiente código de javaScript:&lt;br /&gt;
&lt;br /&gt;
elemento.onclick = hacerAlgo; // cuando el usuario haga click en el objeto, se llamara a la función hacerAlgo();&lt;br /&gt;
&lt;br /&gt;
Esta forma de registro, no la estandarizo W3C, pero debido a que fue ampliamente utilizada por netscape y Microsoft, todavia es válida hoy en día. La ventaja de este modelo es que podremos asignar un evento a un objeto desde javaScript, co lo que ya estamos separando el código de la estructura. Fíjate que aquí los nombres de los eventos si que van siempre en minúsculas.&lt;br /&gt;
&lt;br /&gt;
elemento.onClick = hacerAlgo;&lt;br /&gt;
&lt;br /&gt;
Para eliminar un gestor de eventos de un elemento u objeto, le asignaremos &lt;i&gt;null&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
elmento.onclick = null;&lt;br /&gt;
&lt;br /&gt;
Otra gran ventaja es que como el gestor de eventos es una función, podremos realizar una llamada directa a ese gestor, con lo que estamos disparando el evento de forma manual. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
elemento.onClick();&lt;br /&gt;
// al hacer click estamos disparando el evento de forma manual y se ejecutará la función hacerAlgo();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/6001486180095230565/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/02/modelo-de-registro-de-eventos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/6001486180095230565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/6001486180095230565'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/02/modelo-de-registro-de-eventos.html' title='Modelo de registro de eventos tradicional'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-3279878557392827551</id><published>2017-02-22T18:59:00.000+01:00</published><updated>2017-02-23T02:06:46.901+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Modelo de registro de eventos en línea</title><content type='html'>En el modelo de registro de eventos en líneas (estandarizado por Netscape), el evento es añadido como un atributo más a la etiqueta HTML.&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;a a=&quot;&quot; aqui=&quot;&quot; font=&quot;&quot; gt=&quot;&quot; href=&quot;https://www.blogger.com/pagina.html&quot; lt=&quot;&quot; onclick=&quot;alert(&#39;Has pulsado en el enlace&#39;)&quot; ulsa=&quot;&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Cuando hacemos click en el enlace, se llama al gestor de eventos &lt;b&gt;onclick&lt;/b&gt;(al hacer click) y se ejecuta el script; que contiene en este caso una alerta de javascript. También se podría realizar lo mismo pero llamando a una función:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;function alertar() {
   alert(&quot;Has pulsado en el enlace&quot;);
}&lt;/pre&gt;
&lt;br /&gt;
La mezcla de minúsculas y mayúsculas en los nombres de evento (&lt;b&gt;onClick&lt;/b&gt;, &lt;b&gt;onMouseOver&lt;/b&gt;) es sólo por tradición, ya que HTML es insensible a mayúsculas y minúsculas. En cambio en XHTML, sí que los atributos tendrán que ir obligatoriamente siempre en minúsculas: tienes que escribir &lt;b&gt;onClick &lt;/b&gt;y &lt;b&gt;onMouseOver&lt;/b&gt;. Es muy importante que te fijes en ésto, ya que probablemente trabajarás con XHTML y deberás cumplir el estandar: &quot;todos los nombres de atributos irán siempre en minúscula&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;No uses el modelo de registro de eventos en línea&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
no se recomienda el modelo, aun que en algún ejemplo lo hayas visto.&lt;br /&gt;
&lt;br /&gt;
Si un evento genera la ejecución de un script y además también se genera la acción por defecto para ese objeto entonces:&lt;br /&gt;
&lt;br /&gt;
1.- el script se ejecutará primero.&lt;br /&gt;
2.- La acción por defecto se ejecutará después.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hay que evitar la acción por defecto&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A veces es interesante el bloquear o evitar que se ejecute la acción por defecto. Por ejemplo, en nuestro caso anterior podríamos evitar que nos conecte con la nueva pagina.html. Cuando programamos un gestor de eventos, ese gestor podrá devolver un valor booleano true o false.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: white; font-family: &amp;quot;DejaVu Sans Mono&amp;quot;; font-size: 12px; line-height: 20px; margin-bottom: 0.4em; margin-top: -0.4em;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;DejaVu Sans Mono&amp;quot;;&quot;&gt;onClick=&quot;alertar(); return false&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
También se podría crear una función y que nos preguntará si queremos o no ir a la pagina pagina.html:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;onClick=&quot;return preguntar()&quot;


function preguntar() {
     return confirm(&quot;¿Desea realmente ir a esa dirección?&quot;);
}
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/3279878557392827551/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/02/modelo-de-registro-de-eventos-en-linea.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3279878557392827551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3279878557392827551'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/02/modelo-de-registro-de-eventos-en-linea.html' title='Modelo de registro de eventos en línea'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-6699928119035347392</id><published>2017-02-21T14:25:00.000+01:00</published><updated>2017-02-21T14:25:09.256+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Eventos en Javascript</title><content type='html'>Hay que tener en cuenta que, sin eventos pŕaticamenete no hay scripts. En casi todas las paginas web que incorporan Javascript, Suele haber eventos programados que disparan la ejecución de dichos scripts, por que javascript fue diseñado para añadir interactividad a las páginas: el usuario realiza algo y la página reacciona.&lt;br /&gt;
&lt;br /&gt;
Por lo tanto, javascript necesita detectar de alguna forma las acciones del usuario para saber cuando reaccionar. También necesita saber las funciones, que queremos que ejecute cuando se produzcan esas acciones.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Las acciones:&lt;/i&gt;&lt;br /&gt;
Cuando el usuario hace algo se produce un evento. Puede haber eventos que no esten relacionando directamente con la acción que pueda realizar un usuario, por ejemplo eventos de carga(&lt;b&gt;load&lt;/b&gt;) de un documento, que se produce cuando el documento ha sido cargado.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Tipos de eventos:&lt;/i&gt;&lt;br /&gt;
Los eventos &lt;b&gt;mouseOver&lt;/b&gt; y &lt;b&gt;mouseOut &lt;/b&gt;se hicieron muy famosos a raíz de su utilización para hacer el efecto de sustitución de una imagen por otra al pasar el raton por encima.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Incompatibilidades entre navegadores
&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Muchas veces, lo que se hacía en un principio antes de programar cualquier evento, era detectar qué navegador estábamos utilizando, para saber si nuestro navegador soportaba, o no, los métodos y propiedades que queríamos usar.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;if (Netscape) {
        utilizar modelo Netscape
}
else if (Explorer) {
        utilizar modelo Microsoft
}
&lt;/pre&gt;
&lt;br /&gt;
Pero hoy en día ni esto ni el modelo de detección basado en DHTML se recomiendan debido a las diferencias que hay entre todos los navegadores actuales. Por lo tanto hay que intentar usar modelos de detección de eventos estándar y que sean los navegadores los que tengan que adaptarse a ese modelo.</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/6699928119035347392/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/02/eventos-en-javascript.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/6699928119035347392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/6699928119035347392'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/02/eventos-en-javascript.html' title='Eventos en Javascript'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-4027697524510784603</id><published>2017-02-21T13:05:00.002+01:00</published><updated>2017-02-23T02:07:54.391+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Usando &quot;this&quot; en funciona javascript</title><content type='html'>En javascript tenemos un método que nos permite llamar a una función, pasándole directamente la referencia del objeto, sin tener que usar variables globales o referenciar al objeto al comienzo de cada función.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Par hacerlo hay que se necesita usar la palabra reservada &lt;b&gt;this&lt;/b&gt;, que hace referencia siempre al objeto que contiene el código de javasript en donde usamos dicha palabra reservada.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;ejemplo:&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
Si programamos una función para un botón, que al hacer &lt;i&gt;click &lt;/i&gt;haga algo, ai dentro de esa función usamos la palabra &lt;b&gt;this&lt;/b&gt;,entonces estaremos haciendo referencia al objeto en el cúal hemos hecho &lt;i&gt;click&lt;/i&gt;, que ene este caso será el botón. El uso de &lt;b&gt;this&lt;/b&gt; nos permitira evitar usar variable globales, y el tener que programar script más genéricos.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;ejemplo:&lt;/i&gt;&lt;/div&gt;
&lt;pre&gt;&amp;lt;input id=&quot;edad&quot; name=&quot;edad&quot; onclick=&quot;identificar(this)&quot; type=&quot;text&quot; value=&quot;55&quot; /&amp;gt;  
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;Y se accede con la función:&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: xx-small;&quot;&gt;function identificar(objeto) {&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: xx-small;&quot;&gt;&amp;nbsp; &amp;nbsp;var atrName = objeto.name;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: xx-small;&quot;&gt;&amp;nbsp; &amp;nbsp;var atrId = objeto.id;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: xx-small;&quot;&gt;&amp;nbsp; &amp;nbsp;var atrValue = objeto.value;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: xx-small;&quot;&gt;&amp;nbsp; &amp;nbsp;var atrType = objeto.type;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: xx-small;&quot;&gt;&amp;nbsp; &amp;nbsp;alert(&quot;Datos del campo pulsado: Name: &quot; + atrName + &quot; ID: &quot; + atrId + &quot;Value: &quot; + atrValue + &quot;Type: &quot; + atrType);&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: xx-small;&quot;&gt;}
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
En este ejemplo, cada vez que hagamos click en alguno de los objetos, llamaremos a la función &lt;b&gt;indentificar(this)&lt;/b&gt;, y a esa función le pasaremos como parámetro &lt;b&gt;this&lt;/b&gt;, que en este caso será la referencia al objeto en el cuál hemos hecho &lt;i&gt;click&lt;/i&gt;. La función &lt;b&gt;indentificar() &lt;/b&gt;recibe ese parámetro, y lo almacena en la variable objeto, la cuál le permit imprimir todas las referencias al &lt;i&gt;name, id, value &lt;/i&gt;y &lt;i&gt;type&lt;/i&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/4027697524510784603/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2017/02/usando-this-en-funciona-javascript.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/4027697524510784603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/4027697524510784603'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2017/02/usando-this-en-funciona-javascript.html' title='Usando &quot;this&quot; en funciona javascript'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-419282693044450117</id><published>2016-12-28T12:25:00.002+01:00</published><updated>2016-12-28T12:25:23.799+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><title type='text'>Propiedades y métodos del objeto Array</title><content type='html'>Propiedades y métodos del objeto Array.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Propiedades&lt;/b&gt; del objeto Array:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;constructor&lt;/span&gt;: devuelve la función que creó el prototipo del objeto array.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;length&lt;/span&gt;: ajusta o devuelve el número de elementos en un array.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;prototype&lt;/span&gt;: te permite añadir propiedades y métodos a un objeto.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Métodos &lt;/b&gt;del objeto Array:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;concat()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Une dos o más arrays, y devuelve una copia de los arrays unidos.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;join()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Une todos los elementos de un array en una cadena de texto.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;pop()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Elimina el último elemento de un array y devuelve ese elemento.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;push()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Añade nuevos elementos al final de un array, y devuelve la nueva longitud.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;reverse()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Invierte el orden de los elementos en un array.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;shift()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Elimina el primer elemento de un array, y devuelve ese elemento.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;slice()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Selecciona una parte de un array y devuelve el nuevo array.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;sort()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Ordena los elementos de un array.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;splice()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Añade/elimina elementos a un array.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;toString()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Convierte un array a una cadena y devuelve el resultado.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;unshift()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Añade nuevos elementos al comienzo de un array, y devuelve la nueva longitud.&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;valueOf()&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Devuelve el valor primitivo de un array.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/419282693044450117/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2016/12/propiedades-y-metodos-del-objeto-array.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/419282693044450117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/419282693044450117'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2016/12/propiedades-y-metodos-del-objeto-array.html' title='Propiedades y métodos del objeto Array'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-5597437872107539364</id><published>2016-12-28T11:57:00.001+01:00</published><updated>2016-12-28T11:57:48.686+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><title type='text'>Borrar elementos de un Array</title><content type='html'>Para borra cualquier dato almacenado en un elemento del array, se hace ajustando el valor del array a &quot;null&quot; o una cadena vacia (&quot;&quot;).&lt;br /&gt;
&lt;br /&gt;
En las versiones más modernas de los navegadores a aparecido el operador delete.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NOTA&lt;/b&gt;: Al borrar un elemento del array, se eliminará su índice en la lista de índice del array, pero no se reducirá la longitud del array. Ejemplo:&lt;br /&gt;
&lt;br /&gt;
miarray.length; // resultado: 8&lt;br /&gt;
delete miarray[5];&lt;br /&gt;
miarray.length; // resultado: 8&lt;br /&gt;
miarray[5]; // resultado: undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El proceso de borrar una entrada del array no libera la memoria ocupada por esos datos necesariamente. El intérprete del javascript encargado de gestionar la colección de basura en memoria, se encargará de libera memoria ocupada cuando la necesite.&lt;br /&gt;
&lt;br /&gt;
Para tener mayor control sobre la eliminación de elementos de un array, se utiliza:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;splice(índice, número de elementos a eliminar)&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;splice()&lt;/span&gt;, esta soportado por la mayoría de los navegadores. Este método se puede usar en cualquier array, y te permite eliminar un elemento o una secuencia de elementos de un array, provocando que la longitud del array se ajuste al nuevo número de elementos.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;delete&lt;/span&gt;, es compatible a partir de estas versiones: winIE4 +, MacIE4 +, Moz +, Safari +, Opera +, Chrome +.&lt;br /&gt;
&lt;br /&gt;
Ejemplo de uso de delete:&lt;br /&gt;
&lt;br /&gt;
var &amp;nbsp;oceanos = new &amp;nbsp;array(&quot;Atlantico&quot;,&quot;Pacifico&quot;,&quot;Artico&quot;,&quot;Indico&quot;);&lt;br /&gt;
delete oceanos[2]; // Se elminina &quot;Artico&quot;.&lt;br /&gt;
&lt;br /&gt;
Que sucede:&lt;br /&gt;
El tercer elemento del array(&quot;Artico&quot;), será eliminado del mismo, pero la longitud del array seguirá siendo la misma, y el array quedará así:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
oceanos[0] = &quot;Atlantico&quot;;&lt;br /&gt;
oceanos[1] = &quot;Pacifico&quot;;&lt;br /&gt;
oceanos[3] = &quot;Indico&quot;;&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;
Si se hace referencia a &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;oceanos[2] &lt;/span&gt;nos devolverá un resultado indefinido(undefined).&lt;br /&gt;
&lt;br /&gt;
Para reducir el tamaño hay que utilizar &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;splice()&lt;/span&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
oceanos.splice(2.1); // Las posiciones del array resultante serán 0, 1 y 2.
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
El operador delete, se recomienda para arrays que usen texto como indices del array, ya que de esta forma se producirán menos confusiones a la hora de borrar los elementos.</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/5597437872107539364/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2016/12/borrar-elementos-de-un-array.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/5597437872107539364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/5597437872107539364'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2016/12/borrar-elementos-de-un-array.html' title='Borrar elementos de un Array'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-6692009983841239957</id><published>2016-12-27T13:30:00.005+01:00</published><updated>2016-12-27T13:30:52.025+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><title type='text'>Creación de Arrays diferentes</title><content type='html'>Para crear un objeto array, usaremos el constructor new Array():&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
var miarray = new Array();&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;
El objeto array dispone de la propiedad que nos indica su longitud. lenght, longitud, que será &quot;0&quot; para un array vacío. Si queremos precisar el tamaño del array durante la inicialización (por ejemplo para que se cargue con valores null) se puede hacer pasandole parametros al constructor:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;var personas = new Array(40);&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;code&gt;personas[53] =  &quot;Irene Sáinz Veiga&quot;;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
longitud = personas.length; &amp;nbsp; &amp;nbsp; &amp;nbsp;// asignará a la variable longitud el valor 54&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Introducir datos en un array&lt;/b&gt;, es tan simple como crear una serie de sentencias de asignación, una por cada elemento del array.:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;sistemaSolar = new Array( );&lt;br /&gt;
sistemaSolar[0] = &quot;Mercurio&quot;; sistemaSolar[1] = &quot;Venus&quot;; sistemaSolar[2] = &quot;Tierra&quot;;&lt;br /&gt;
sistemaSolar[3] = &quot;Marte&quot;; sistemaSolar[4] = &quot;Jupiter&quot;; sistemaSolar[5] = &quot;Saturno&quot;;&lt;br /&gt;
sistemaSolar[6] = &quot;Urano&quot;; sistemaSolar[7] = &quot;Neptuno&quot;;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
El termino de &quot;&lt;b&gt;array denso&lt;/b&gt;&quot; quiere decir que los datos están empaquetados dentro del array, sin espacions y comenzando en la posición 0, Otra forma permitida a partir de la version de javaScript 1.2+, sería aquella en la que no se empea el constructor y se definen los arrays de forma literal:&lt;br /&gt;
&lt;br /&gt;
sistemaSolar = [&quot;Mercurio&quot;, &quot;Venus&quot;, &quot;Tierra&quot;, &quot;Martes&quot;, &quot;Jupiter&quot;, &quot;Saturno&quot;, &quot;Urano&quot;, &quot;Neptuno&quot;];&lt;br /&gt;
&lt;br /&gt;
Los corchetes sustituyen a la llamada al constructor &lt;i&gt;new Array()&lt;/i&gt;. Hay que tener cuidado con esta forma de creación que quizás no funcione en navegadores antiguos.&lt;br /&gt;
&lt;br /&gt;
Y para terminar vamos a ver otra forma de creación de un &quot;&lt;b&gt;array mixto&lt;/b&gt;&quot; (o también denominado objeto literal), en el que las posiciones son referenciadas con índices de tipo texto o números, mezclándoloes de forma aleatoria. Si las posiciones índice están definidas por un texto, para acceder a ellas lo haremos utilizando su nombre y no su número(en este caso si usamos el número nos daría una posición undefined). El formato de creación sería:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;nombrearray = {&quot;indice&quot; : valor, indice2 : &quot;valor2&quot;};&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;var datos = { &quot;numero&quot;: 42, &quot;mes&quot; : &quot;Junio&quot;, &quot;hola&quot; : &quot;mundo&quot;, 69 : &quot;96&quot; };&lt;br /&gt;
document.write(&quot;&lt;br /&gt;
&quot;+datos[&quot;numero&quot;]+ &quot; -- &quot; + datos[&quot;mes&quot;]+ &quot; -- &quot; + datos[&quot;hola&quot;]+ &quot; -- &quot; + datos[69]+ &quot;&lt;br /&gt;
&quot;);&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;En el caso de hacer un &quot;&lt;b&gt;array mixto&lt;/b&gt;&quot;&lt;b&gt;&amp;nbsp;&lt;/b&gt;hay que hacerlo utilizando &lt;b&gt;las llaves {}&lt;/b&gt;.</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/6692009983841239957/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2016/12/creacion-de-arrays-diferentes.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/6692009983841239957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/6692009983841239957'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2016/12/creacion-de-arrays-diferentes.html' title='Creación de Arrays diferentes'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-7399945488429383704</id><published>2016-12-20T21:43:00.001+01:00</published><updated>2016-12-20T21:43:12.932+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><title type='text'>Indexación en arrays</title><content type='html'>Los arrays nos permiten guardar un montón de elementos y acceder a ellos de una manera independiente. Cada elemento es referenciado por la posición que ocupa dentro del array. Dichas posiciones se llaman índices y siempre son correlativos. Existen tres formas de indexar los elementos de un array:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;- &lt;b&gt;indexación base-cero(0)&lt;/b&gt;: en este modo, el primer elemento del array será el componente 0, es decir tendrá el indice 0.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;- &lt;b&gt;Indexación base-uno(1)&lt;/b&gt;: en este modo, el primer elemento tiene el índice 1.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;- &lt;b&gt;indexación base-n(n)&lt;/b&gt;: este modo, es un modo versátil de indexación, en el que el índice del primer elemento puede ser elegido libremente.&lt;br /&gt;
&lt;br /&gt;
En &lt;b&gt;javascript &lt;/b&gt;cuando trabajamos con índice numéricos utilizaremos la &lt;b&gt;indexación base-cero(0)&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Los arrays se introdujeron en javascript a partir de la versión 1.1, es decir que en cualquier navegador moderno disponible actualmente no tendrás ningún problema para poder usar arrays.</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/7399945488429383704/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2016/12/indexacion-en-arrays.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/7399945488429383704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/7399945488429383704'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2016/12/indexacion-en-arrays.html' title='Indexación en arrays'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-4763449577626955963</id><published>2016-07-12T10:05:00.001+02:00</published><updated>2016-07-12T10:05:33.584+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hardware"/><title type='text'>Perifericos, Buses de expansión</title><content type='html'>Los periféricos internos podrían conectarse directamente al &lt;b&gt;bus de sistema&lt;/b&gt;. Sin embargo, una solución mejor consiste en conectarlos a un bus adicional, llamado &lt;b&gt;bus de expansión&lt;/b&gt;. Esta disposicion permite conectar al sistema una amplia variedad de dispositivos periféricos y, al mismo tiempo aislar el trafico de información entre la memoria y el procesador, del tráfico correspondiente a la entrada/salida. Este bus adicional se encontrará comunicado con el bus de sistema a través de un dispositivo llamado &quot;interfaz de bus de expansión&quot;, cuya misión es la de regular las transferencias de datos entre el bus de sistema y los controladores conectados a dicho bus de expansión.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFYR9Tlxj2Py7Q7KpwaTCBpPO_M0ofuFiXFS6mqwtcp2kGvckTkQ7olhQz58hbNk0tQE2iY4cB0x-BEhU9G1snye5cGavj40xyOH-W87Zge6-Y8TatN37avl_GQp3y64hcSu8i_tPWsl8/s1600/bus.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFYR9Tlxj2Py7Q7KpwaTCBpPO_M0ofuFiXFS6mqwtcp2kGvckTkQ7olhQz58hbNk0tQE2iY4cB0x-BEhU9G1snye5cGavj40xyOH-W87Zge6-Y8TatN37avl_GQp3y64hcSu8i_tPWsl8/s1600/bus.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Principales buses de expansión:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Bus ISA&lt;/b&gt;. Bus de expansión con una anchura de bus de 16 bits y con una frecuencia de funcionamiento de hasta 8 Mhz, que fue durante un tiempo el patrón de la industria. En un procipio recibía el nombre de bus AT, pero luego paso a llamarse &lt;b&gt;Bus ISA&lt;/b&gt;(Industry Standard Architecture). Es un bus de expansión ya obsoleto que podemos encontrar en algunas placas antiguas. Las ranuras de expansión ISA suelen ser de color negro.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Bus PCI&lt;/b&gt;. Bus de expansión de alto rendimiento con una anchura de bus de 32 bits, bus PCI convecional, o 64 bits, bus PCI - X, con frecuencias de funcionamiento de 33 Mhz par las primeras y de 66 Mhz o 133 Mhz para las segundas. Es el bus de expansión más extendido actualmente. Hoy en día conocemos como bus PCI (Periphal Component Interconnect, interconexión de componentes periféricos) las ranuras de expansión PCI suelen sre de color blanco crema y suele haber unas 4 o 5 en la placa.&lt;br /&gt;
&lt;br /&gt;
Las tarjetas PCI tienen capacidad Plug%play, lo cual supone un gran avance, pues automatiza un proceso que hasta este momento había que realizar a mano. Es decir, este tipo de tarjetas viene con un chip de memoria ROM en el que viene guardado toda la información necesaria para el proceso de configuración.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Bus AGP&lt;/b&gt;. Con la aparición de necesidades de tratamiento masivo y más rápido de graficos 2D y 3D, se han tenido que mejorar de alguna manera las prestaciones que ofrece el bus PCI a las tarjetas gráficas. Esto se consigue con un nuevo bus de expansión, llamado AGP (Accelerate Graphics Port, puerto de gráficos acelerado), lo cual es un nuevo estandar de intel y a sido bien acogido por la gran totalidad de las empresas fabricantes de tarjetas de video o chip de aceleración grafica, El bus AGP proporciona una via ultra rapida entre el sistema de memoria principal y el controlador gráfico, lo cual acelra el procesamiento gráfico. Además, al situar en él la tarjeta gráfica, que es probablemente el periférico que más tráfico genere, el bus PCI queda más descargado, mejorandose el rendimiento global del sistema.&lt;br /&gt;
&lt;br /&gt;
El bus AGP solo soporta una ranura de xpansión, es decir, se utilizará explusivamente para video. Dicha ranura suele ser de color marrón.&lt;br /&gt;
&amp;nbsp;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/4763449577626955963/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2016/07/perifericos-buses-de-expansion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/4763449577626955963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/4763449577626955963'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2016/07/perifericos-buses-de-expansion.html' title='Perifericos, Buses de expansión'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFYR9Tlxj2Py7Q7KpwaTCBpPO_M0ofuFiXFS6mqwtcp2kGvckTkQ7olhQz58hbNk0tQE2iY4cB0x-BEhU9G1snye5cGavj40xyOH-W87Zge6-Y8TatN37avl_GQp3y64hcSu8i_tPWsl8/s72-c/bus.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-3607097497431152506</id><published>2016-06-24T12:13:00.000+02:00</published><updated>2016-06-24T12:13:30.175+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>El desarrollo y diseño web</title><content type='html'>La web fue creada por &lt;b&gt;Tim Berners-Lee&lt;/b&gt;, un especialista del laboratorio europeo de partículas (CERN) en 1989. Su creación fue pensada como una necesidad de una herramienta colaborativa que soportara el conocimiento científico, a nivel mundial.&lt;br /&gt;
&lt;br /&gt;
Por web se pueden entender tres cosas:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;El proyecto inicial del CERN&lt;/li&gt;
&lt;li&gt;El conjunto de protocolos de desarrollados en dicho proyecto.&lt;/li&gt;
&lt;li&gt;El espacio de información formado por todos los servidores interconectados.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
El desarrollo web ha sido y sigue estando muy influenciado por múltiples campos como el de las nuevas tecnologías, los avances científicos, el diseño gráfico, la programación, las redes, el diseño de interfaces de usuario, la &lt;b&gt;usabilidad &lt;/b&gt;y una variedad de múltiples recursos.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;Areas de la web&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Existen cinco áreas que cubren la mayor parte de las facetas del diseño web:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Contenido&lt;/b&gt;: Este incluye la forma y la organización del contenido del sitio. En este campo entra tanto el texto que escribimos hasta como esta organizado, presentado y estructurado usando tecnologías de marcas como HTML.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Visual&lt;/b&gt;: Hace referencia a la plantilla empleada en un sitio web. Esta plantilla generalmente se genera usando HTML, CSS o incluso Flash y puede incluir elementos gráficos para decoración o navegación. La parte visual es la parte más obvia del &lt;i&gt;diseño web.&lt;/i&gt;pero no es la única disciplina o la más importante.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;tecnología&lt;/b&gt;: Entran dentro tecnologías web como HTML o CSS, hace referencia a los distintos tipos de elementos interactivos en un sitio web, exactamente son aquellos que contribuyen empleando técnicas de programación.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Distribución&lt;/b&gt;: LA velocidad y fiabilidad con la que un sitio web se distribuye en internet o en una red interna corporativa está relacionado con el hardware/software utilizado y el tipo de arquitectura de red utilizada en la conexión.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Propósito&lt;/b&gt;: Normalmente esta relacionada la creación de un sitio web con un propósito económico. Por lo tanto este elemento debería considerarse en todas las decisiones que tomemos en las diferentes áreas.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjo2BlaITbslS7UyPCoXs3fBeYncENKITaCxbhlx0nXL5fmAYZQ7e6mpYN16hRUq7maFtgmBb-sah1J_aXmp2XKhNDj2e5nlYQIzY3zzB2EiBj2sgPwXg6jUnR2iPmcUzyx8wTBTuZKU0/s1600/fundamentos-diseo-web-3-728.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjo2BlaITbslS7UyPCoXs3fBeYncENKITaCxbhlx0nXL5fmAYZQ7e6mpYN16hRUq7maFtgmBb-sah1J_aXmp2XKhNDj2e5nlYQIzY3zzB2EiBj2sgPwXg6jUnR2iPmcUzyx8wTBTuZKU0/s400/fundamentos-diseo-web-3-728.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;Cliente-servidor&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Los sitios web de hoy en día siguen un modelo basado en la &lt;b&gt;programación cliente-servidor&lt;/b&gt;, con tres elementos comunes:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;El lado del &lt;b&gt;servidor(server-side)&lt;/b&gt;: incluye el hardware y software del servidor web así como diferentes elementos de programación y tecnologías incrustadas. Las tecnologías pueden abarcar un rango amplio desde programas CGI escritos en PERL hasta aplicaciones multihilo basadas en Java, incluyendo tecnologías de servidor de base de datos que soporten múltiples sitios web.&lt;/li&gt;
&lt;li&gt;El lado del &lt;b&gt;cliente(cliente-side)&lt;/b&gt;: hace referencia a los navegadores web y está soportado por tecnologías como HTML, CSS y lenguajes como javaScript y controles ActiveX, los cuales se utilizan para crear la presentación de la página o proporcionar características interactivas.&lt;/li&gt;
&lt;li&gt;La &lt;b&gt;red&lt;/b&gt;: describe los diferentes elementos de conectividad utilizados para mostrar el sitio web al usuario.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/3607097497431152506/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2016/06/el-desarrollo-y-diseno-web.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3607097497431152506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3607097497431152506'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2016/06/el-desarrollo-y-diseno-web.html' title='El desarrollo y diseño web'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjo2BlaITbslS7UyPCoXs3fBeYncENKITaCxbhlx0nXL5fmAYZQ7e6mpYN16hRUq7maFtgmBb-sah1J_aXmp2XKhNDj2e5nlYQIzY3zzB2EiBj2sgPwXg6jUnR2iPmcUzyx8wTBTuZKU0/s72-c/fundamentos-diseo-web-3-728.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-7935735774117407950</id><published>2016-06-24T10:30:00.001+02:00</published><updated>2016-06-24T10:31:17.138+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Convertir cadenas a numeros</title><content type='html'>Para convertir cadenas a números existen las funciones: &lt;b&gt;parseInt()&lt;/b&gt; y &lt;b&gt;parseFloat()&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;parseInt(&quot;34&quot;) // resultado = 34
parseInt(&quot;89.76&quot;) // resultado = 89
parseFloat devolverá un entero o un número real según el caso:
parseFloat(&quot;34&quot;) // resultado = 34
parseFloat(&quot;89.76&quot;) // resultado = 89.76
4 + 5 + parseInt(&quot;6&quot;) // resultado = 15
&lt;/pre&gt;
&lt;br /&gt;
Si lo que se quiere hacer es realizar la conversión de números a cadenas, es más sencillo, por lo que solo hay que concatenar una cadena vacía al principio, de esta manera el número sera convertido a su cadena equivalente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;(&quot; &quot; + 3400) // resultado = &quot;3400&quot;
(&quot; &quot; + 3400).length // resultado = 4
&lt;/pre&gt;
&lt;br /&gt;
En el último ejemplo podemos comprobar que al convertirlo a cadena, se pueden contar la cantidad de caracteres que contiene &quot;3400&quot;. Hay que tener en cuenta que la Longitud de una cadena es un numero, no una cadena.</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/7935735774117407950/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2016/06/convertir-cadenas-numeros.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/7935735774117407950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/7935735774117407950'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2016/06/convertir-cadenas-numeros.html' title='Convertir cadenas a numeros'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-3021639314688307444</id><published>2016-04-05T13:00:00.001+02:00</published><updated>2016-04-05T13:01:10.915+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><title type='text'>Etimología para informáticos</title><content type='html'>&lt;b&gt;&lt;i&gt;Bots &lt;/i&gt;&lt;/b&gt;-&lt;b&gt;&lt;i&gt; &lt;/i&gt;&lt;/b&gt;es un programa informático que realiza funciones muy diversas, imitando el comportamiento de un humano.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Honeypot&lt;/i&gt;&lt;/b&gt; - Se denomina &lt;i&gt;honeypot&lt;/i&gt;(tarro de miel) al software o conjunto de 
computadores cuya intención es atraer a atacantes, simulando ser 
sistemas vulnerables o débiles a los ataques. Es una herramienta de 
seguridad informática utilizada para recoger información sobre los 
atacantes y sus técnicas. Los &lt;i&gt;honeypots&lt;/i&gt; pueden distraer a los 
atacantes de las máquinas más importantes del sistema, y advertir 
rápidamente al administrador del sistema de un ataque, además de 
permitir un examen en profundidad del atacante, durante y después del 
ataque al &lt;i&gt;honeypot&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Spambot&lt;/i&gt;&lt;/b&gt; - Es un programa informático o robot que utiliza usuarios de internet(spammers) para enviar cualquier tipo de spam o mensaje no solicitado por el receptor. El spambot envía mensajes por email, enlaces a blogs o webs en el área de comentarios, así como en redes sociales; relleno automático de formularios entre otros.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;spam&lt;/b&gt;&lt;/i&gt; -&amp;nbsp; Se llama &lt;i&gt;spam&lt;/i&gt;, correo basura o mensaje basura a los mensajes no solicitados, no deseados o de remitente no conocido (correo anónimo), habitualmente de tipo publicitario,
 generalmente enviados en grandes cantidades (incluso masivas) que 
perjudican de alguna o varias maneras al receptor. La acción de enviar 
dichos mensajes se denomina &lt;i&gt;spamming&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Spammer&lt;/i&gt;&lt;/b&gt; - Los &lt;i&gt;spammers&lt;/i&gt; (individuos o empresas que envían correo no deseado)
 utilizan diversas técnicas para conseguir las largas listas de 
direcciones de correo que necesitan para su actividad, generalmente a 
través de robots o programas automáticos que recorren internet en busca 
de direcciones.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Workflow&lt;/i&gt;&lt;/b&gt; - Flujo de trabajo(&lt;i&gt;workflow&lt;/i&gt;) es el estudio de los aspectos operacionales de una actividad de trabajo:
 cómo se estructuran las tareas, cómo se realizan, cuál es su orden 
correlativo, cómo se sincronizan, cómo fluye la información que soporta 
las tareas y cómo se le hace seguimiento al cumplimiento de las tareas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/3021639314688307444/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2016/04/etimologia-para-informaticos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3021639314688307444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3021639314688307444'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2016/04/etimologia-para-informaticos.html' title='Etimología para informáticos'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-3818769987649197885</id><published>2015-10-23T01:38:00.001+02:00</published><updated>2015-10-24T01:53:42.967+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Enlaces simbolicos en windows</title><content type='html'>Para la creación de enlaces simbolicos en windows, primero tienes que abrir &lt;b&gt;cmd&lt;/b&gt; y luego poner:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;hlcode&quot; style=&quot;background: #808080; box-shadow: 1px 1px 0px #000; color: white; font-family: courier;&quot;&gt;
&lt;div class=&quot;syntax&quot;&gt;
&lt;pre&gt;mklink /D directorio_origen   directorio_enlazado&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
De esta manera cuando se haga un cambio en origen se reflejará lo mismo en el directorio enlazado.</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/3818769987649197885/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2015/10/enlaces-simbolicos-en-windows.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3818769987649197885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/3818769987649197885'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2015/10/enlaces-simbolicos-en-windows.html' title='Enlaces simbolicos en windows'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-5734016278388531117</id><published>2015-02-08T14:24:00.002+01:00</published><updated>2015-02-08T14:45:53.584+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Crear lanzador de una aplicación en linux</title><content type='html'>Yo he Querido hacer un lanzador con el programa sublime_text, y aquí los pasos: &lt;br /&gt;
&lt;br /&gt;
– Crear un enlace simbolico de la aplicación a la carpeta /usr/bin/:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;wp_syntax&quot;&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;dos&quot; style=&quot;font-family: monospace;&quot;&gt;sudo ln -s /home/xxxx/sublime-text-2/sublime_text /usr/bin/sublime_text&lt;/pre&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
– Copiar el icono donde se encuentran los iconos del sistema, viene en el descomprimido de sublime_text cuando lo descagamos:&lt;br /&gt;
&lt;div class=&quot;wp_syntax&quot;&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;dos&quot; style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=&quot;dos&quot; style=&quot;font-family: monospace;&quot;&gt;sudo cp sublime.png /usr/share/icons/&lt;/pre&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
– Creamos el archivo &lt;b&gt;sublime.desktop&lt;/b&gt; con el siguiente contenido:&lt;br /&gt;
&lt;div class=&quot;wp_syntax&quot;&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;dos&quot; style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=&quot;dos&quot; style=&quot;font-family: monospace;&quot;&gt;[Desktop Entry]
Version=2.0
Type=Application
Name=Sublime Text 2
Comment=Editor Sublime Text 2
TryExec=sublime_text
Exec=sublime_text &lt;span style=&quot;color: #33cc33;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #448888;&quot;&gt;F&lt;/span&gt;
Icon=/usr/share/icons/sublime.png
MimeType=text/plain;&lt;/pre&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
Y lo copiamos al directorio /usr/share/applications/:&lt;br /&gt;
&lt;div class=&quot;wp_syntax&quot;&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;dos&quot; style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=&quot;dos&quot; style=&quot;font-family: monospace;&quot;&gt;sudo cp sublime.desktop /usr/share/applications/&lt;/pre&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
Y listo. </content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/5734016278388531117/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2015/02/crear-lanzador-de-una-aplicacion-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/5734016278388531117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/5734016278388531117'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2015/02/crear-lanzador-de-una-aplicacion-en.html' title='Crear lanzador de una aplicación en linux'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3353396321042613314.post-354518290792393738</id><published>2015-02-08T12:49:00.002+01:00</published><updated>2015-02-08T14:20:17.500+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Eliminar Cinnamon</title><content type='html'>&lt;h2&gt;
Eliminar Cinnamon&lt;/h2&gt;
Si quieres eliminar &lt;b&gt;Cinnamon&lt;/b&gt; y todos los archivos que tengan relación usa los siguientes comandos:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get purge cinnamon* nemo-* cjs muffin* python-nemo
sudo rm /etc/apt/sources.list.d/tsvetko_tsvetkov-cinnamon*.list
sudo apt-get update
&lt;/code&gt;&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techfico.blogspot.com/feeds/354518290792393738/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://techfico.blogspot.com/2015/02/eliminar-cinnamon.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/354518290792393738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3353396321042613314/posts/default/354518290792393738'/><link rel='alternate' type='text/html' href='http://techfico.blogspot.com/2015/02/eliminar-cinnamon.html' title='Eliminar Cinnamon'/><author><name>ladrón de dados</name><uri>http://www.blogger.com/profile/05012562492521982086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0lxB2riaJkWO3w4L4QOUtQG9mOHk2gZ2ary_56duKBOAwA7v1PdLtDlCFoYfDJj5LH59-rhpBoNWVfUwcvgz0kymT-h_G_d9KhY38Dpxj6vFJxUD9pgw1hE27ntf0IXWzaMXKURNBlu1evfMq0D2_pJdq-0-1THdcihSwARBbQZw_-I/s220/Logo_2023.jpg'/></author><thr:total>0</thr:total></entry></feed>