<?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: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-4660807499187681334</id><updated>2012-02-16T18:45:23.054-08:00</updated><title type='text'>fabricio tejedor</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-1737687786874859292</id><published>2009-11-27T17:46:00.001-08:00</published><updated>2009-11-27T17:46:45.022-08:00</updated><title type='text'>PARA APLICAR PROGRAMAS DE JAVA</title><content type='html'>http://luanunp.blogspot.com/2008/10/solucion-ejecutable-jar-con-jcreator.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-1737687786874859292?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/1737687786874859292/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/11/para-aplicar-programas-de-java.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/1737687786874859292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/1737687786874859292'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/11/para-aplicar-programas-de-java.html' title='PARA APLICAR PROGRAMAS DE JAVA'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-7665178086260471370</id><published>2009-10-28T15:56:00.000-07:00</published><updated>2009-10-28T15:58:33.637-07:00</updated><title type='text'>PERMUTACIONES</title><content type='html'>&lt;strong&gt;Factorial de un número natural&lt;/strong&gt;&lt;br /&gt;Es el producto de los “n” factores consecutivos desde “n” hasta 1. El factorial de un número se denota por n!.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;1! = 1&lt;br /&gt;Variaciones&lt;br /&gt;Se llama variaciones ordinarias de m elementos tomados de n en n (m ≥ n) a los distintos grupos formados por n elementos de forma que:&lt;br /&gt;No entran todos los elementos.&lt;br /&gt;Sí importa el orden. &lt;br /&gt;No se repiten los elementos.&lt;br /&gt; &lt;br /&gt;También podemos calcular las variaciones mediante factoriales:&lt;br /&gt; &lt;br /&gt;Las variaciones se denotan por  &lt;br /&gt;Variaciones con repetición&lt;br /&gt;Se llama variaciones con repetición de m elementos tomados de n en n a los distintos grupos formados por n elementos de manera que:&lt;br /&gt;No entran todos los elementos si m &gt; n. Sí pueden entrar todos los elementos si m ≤ n&lt;br /&gt;Sí importa el orden. &lt;br /&gt;Sí se repiten los elementos.&lt;br /&gt; &lt;br /&gt;Permutaciones&lt;br /&gt;Sí entran todos los elementos.&lt;br /&gt;Sí importa el orden.&lt;br /&gt;No se repiten los elementos.&lt;br /&gt; &lt;br /&gt;Combinaciones&lt;br /&gt;Se llama combinaciones de m elementos tomados de n en n (m ≥ n) a todas las agrupaciones posibles que pueden hacerse con los m elementos de forma que:&lt;br /&gt;No entran todos los elementos.&lt;br /&gt;No importa el orden. &lt;br /&gt;No se repiten los elementos.&lt;br /&gt; &lt;br /&gt;También podemos calcular las combinaciones mediante factoriales:&lt;br /&gt; &lt;br /&gt;Binomio de Newton&lt;br /&gt;La fórmula que nos permite hallar las potencias de un binomio se conoce como binomio de Newton.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-7665178086260471370?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/7665178086260471370/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/10/permutaciones.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/7665178086260471370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/7665178086260471370'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/10/permutaciones.html' title='PERMUTACIONES'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-2074119715882271266</id><published>2009-09-09T16:41:00.000-07:00</published><updated>2009-09-09T16:42:04.696-07:00</updated><title type='text'>PAGINA DE HTML-KIT.PARA DISEÑAR PAG. WEB</title><content type='html'>http://www.comocreartuweb.com/html-kit-tutorial/tutorial-html-kit-introducion.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-2074119715882271266?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/2074119715882271266/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/09/pagina-de-html-kitpara-disenar-pag-web.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/2074119715882271266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/2074119715882271266'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/09/pagina-de-html-kitpara-disenar-pag-web.html' title='PAGINA DE HTML-KIT.PARA DISEÑAR PAG. WEB'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-6780956902476022615</id><published>2009-08-24T17:54:00.001-07:00</published><updated>2009-08-24T17:54:35.332-07:00</updated><title type='text'></title><content type='html'>PAGINA DE BASE DE DATOS Y ARCHIVOS:&lt;br /&gt;http://ict.udlap.mx/people/carlos/is341/bases01.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-6780956902476022615?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/6780956902476022615/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/08/pagina-de-base-de-datos-y-archivos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/6780956902476022615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/6780956902476022615'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/08/pagina-de-base-de-datos-y-archivos.html' title=''/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-4155532561357955700</id><published>2009-08-24T17:39:00.000-07:00</published><updated>2009-08-24T17:45:31.130-07:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;1. &lt;span style="font-size:180%;"&gt;Introducción&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;1.1 &lt;span style="font-size:130%;"&gt;&lt;strong&gt;Aplicación de bases de datos&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;1.1.&lt;strong&gt;1 Antecedentes&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;La información ha llegado a ser el eje que mueve a la mayoría de las organizaciones hoy día&lt;br /&gt;La cantidad de información que se maneja actualmente es en extremo enorme.&lt;br /&gt;Se tiene la necesidad de tenerla perfectamente organizada de manera que pueda ser accesada fácilmente y por otro lado se debe tener disponible todo el tiempo (sistemas 24x7)&lt;br /&gt;La solución: las personas de computación han desarrollado conceptos, técnicas y sistemas bajo un tópico conocido como "bases de datos" (databases)&lt;br /&gt;&lt;br /&gt;1.1.2&lt;strong&gt;&lt;span style="font-size:130%;"&gt; Definición&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Surgen entonces los primeros conceptos:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;Dato:&lt;/span&gt;&lt;/strong&gt; es la representación física de un aspecto de la realidad&lt;br /&gt;Base de datos: conjunto de datos, que pueden estar organizados y/o interrelacionados de alguna manera con un propósito particular&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;DBMS*:&lt;/span&gt;&lt;/strong&gt; Sistema Manejador de Bases de Datos (DataBase Manager/Management System) es una colección e datos interrelacionados y un conjunto de programas para accesarlos. En otras palabras un sistema para crear, manipular y aprovechar bases de datos.*Algunos lo llaman SGBD (Sistema Gestionador de Bases de Datos)&lt;br /&gt;&lt;br /&gt;1.1.3 &lt;strong&gt;&lt;span style="font-size:180%;"&gt;Escenarios de bases de datos&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Podemos afirmar que las bases de datos están en todas partes, cualquier problema que podamos pensar podemos asociar una base de datos&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Bancos:&lt;/span&gt;&lt;/strong&gt; cuentas, transacciones, fondos de ahorro, SAR&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Aerolíneas:&lt;/span&gt;&lt;/strong&gt; reservaciones, pasajes, suministros, personal de vuelos&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Escuelas:&lt;/span&gt;&lt;/strong&gt; cursos, calificaciones, horarios&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Negocios:&lt;/span&gt;&lt;/strong&gt; compras, proveedores, ventas, clientes, devoluciones&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Fábricas:&lt;/span&gt;&lt;/strong&gt; flujo de procesos, almacenes, envíos&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Recursos Humanos:&lt;/span&gt;&lt;/strong&gt; empleados, puestos, salarios, impuestos, prestaciones&lt;br /&gt;Curiosamente el uso de las bases de datos puede llegar a ser tan transparente que para algunos pareciera que no existen como en las transacciones de web o el cajero del banco (ATM).&lt;br /&gt;&lt;br /&gt;1.2&lt;strong&gt;&lt;span style="font-size:180%;"&gt; Sistemas de bases de datos vs sistemas de archivos(Databases vs File Systems)&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;El camino hacia las bases de datos ha sido largo y en el trayecto se han desarrollado un gran número de técnicas que forman los cimientos de las bd y de otras tecnologías.&lt;br /&gt;&lt;strong&gt;Dentro de estas técnicas tenemos:&lt;br /&gt;&lt;/strong&gt;Archivos, Sistemas de Archivos, Acceso y manipulación de archivos, Indices&lt;br /&gt;Pero...&lt;br /&gt;por qué no es suficiente utilizar las herramientas anteriores y es necesario emplear un DBMS ?no es lo mismo ?cuál es la diferencia ?&lt;br /&gt;No es lo mismo, un sistemas de archivos aún cuando pensemos que contiene lógicamente archivos y que se cuenta con índices para accesar los registros en ellos, carece de mucha funcionalidad que se emplea en la mayoría de las aplicaciones, aunque como se mencionó anteriormente, un DBMS emplea sistemas de archivos e índices para la manipulación de datos.&lt;br /&gt;&lt;strong&gt;La funcionalidad adicional que provee un DBMS surge en base de algunos inconvenientes al emplear sistemas de archivos únicamente:&lt;br /&gt;&lt;/strong&gt;Redundancia de datos e inconsistencias (Redundancy and Inconsistency): formatos, duplicidad de información (alto costo de almacenamiento y acceso) e incongruencia entre datos o copias de datos a lo largo del sistema.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Dificultad de acceso (Access):&lt;/span&gt;&lt;/strong&gt; en un sistema de archivos no se pueden obtener aquellos datos que no estén implantados en un programa, se carece de niveles de abstracción.&lt;br /&gt;Aislamiento de datos (Isolation): debido al factor tiempo y los requerimientos que van surgiendo se puede llegar a tener un problema al intentar separar un conjunto de datos porque ya se tiene un enredo en los archivos y se podría dar el caso en que dos usuarios estén manipulando la misma información pero de distinta manera.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Integridad (Integrity):&lt;/span&gt;&lt;/strong&gt; si queremos asociar dos datos, por ejemplo un alumno con una materia que esté cursando, debemos asegurarnos que ambas entidades existan, de lo contrario el alumno parecerá cursando un curso fantasma y viceversa. Para ello se emplean "restricciones de consistencia" (consistency constraints)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Atomicidad (Atomicity):&lt;/span&gt;&lt;/strong&gt; el problema clásico de transacciones bancarias, u ocurre toda la transacción o no ocurre nada pero no puede quedarse a medias.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Acceso concurrente (Concurrent-access):&lt;/span&gt;&lt;/strong&gt; garantizar un buen tiempo de respuesta, que todos los usuarios puedan accesar y/o modificar la información; esto no es fácil porque también hay que considerar que aunque los datos son los mismos, las aplicaciones no necesariamente lo son.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Seguridad (Security):&lt;/span&gt;&lt;/strong&gt; no toda la información debe estar disponible a todos los usuarios, algunos usuarios solo tendrán permisos de lectura, esto es relativamente sencillo de resolver aplicando "roles" pero el problema aumenta cuando en luegar de pensar en terminos de usuarios pensamos en terminos de aplicaciones ya que el número de roles y sus combinaciones aumenta y mantener las restricciones de seguridad se torna complicado.&lt;br /&gt;Podemos entonces extender la definición de DBMS como un sistema robusto que es capaz de emplear algoritmos de almacenamiento y recuperación de información para poder implementar un modelo de datos de manera física garantizando que todas las transacciones que se realizan con respecto a dichos datos sean "ácidas" (Atomicity, Consistency, Isolation, Durability).&lt;br /&gt; &lt;br /&gt;1.3 &lt;strong&gt;&lt;span style="font-size:180%;"&gt;Vistas de datos&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Una de las ventajas de emplear una base de datos es que los datos se pueden ver a distintos niveles de abstracción, separando por ejemplo detalles de almacenamiento y mantenimiento.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Niveles de abstracción:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Nivel Físico:&lt;/span&gt;&lt;/strong&gt; el más bajo y define cómo los datos son almacenados&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Nivel Lógico:&lt;/span&gt;&lt;/strong&gt; define qué datos hay almacenados y cómo se relacionan&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Nivel de visión:&lt;/span&gt;&lt;/strong&gt; más alto nivel, define vistas de "partes" de la base de datos, esto para restringir el acceso a determinados datos o bien para simplificar la interacción&lt;br /&gt;&lt;br /&gt;1.4 &lt;strong&gt;&lt;span style="font-size:180%;"&gt;Modelos de datos&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;1.4.1 &lt;strong&gt;&lt;span style="font-size:180%;"&gt;Definición&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;Un modelo de datos es una colección de herramientas conceptuales para describir datos, sus relaciones, semántica y restricciones de consistencia&lt;br /&gt;Exiten 3 niveles de modelado:&lt;br /&gt;Conceptual&lt;br /&gt;Modelo Entidad-Relación&lt;br /&gt;Lógico&lt;br /&gt;Modelo Relacional&lt;br /&gt;Físico&lt;br /&gt;Implementación en el DBMS&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-4155532561357955700?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/4155532561357955700/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/08/1.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/4155532561357955700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/4155532561357955700'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/08/1.html' title=''/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-6863557031890470516</id><published>2009-08-24T17:37:00.001-07:00</published><updated>2009-08-24T17:37:50.980-07:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;LAS FASES DEL PROCESO DE PROGRAMACIÓN&lt;/strong&gt;&lt;br /&gt;A fin de poder asegurar que un sistema cumpla con el sistema requerido por el cliente, no basta simplemente con un levantamiento y diseño funcional, especificación de los casos de uso y descripción de procesos. Es imprescindible el la comunicación con el Equipo de Desarrollo. Es decir, con la participación del programador.&lt;br /&gt;Para DocIRS, un programador debe participar del análisis de los problemas delineados por el ingeniero de procesos en términos de los requerimientos detallados. Desde ahí va diseñando la estrategia a seguir en la estructura del programa. Codifica las instrucciones implementando algoritmos en el lenguaje de programación adecuado. Verifica la lógica del programa preparando rutinas de prueba. Revisa, depura y corrige los programas. Evalúa y modifica los programas existentes para tomar en cuenta los cambios producidos en los requerimientos del sistema. Finalmente prepara el documento base de la ayuda de usuarios. &lt;br /&gt;Nótese que un programador debe comprender y expresarse a través de un lenguaje de alta programación. Este conocimiento puede ser por oficio práctico, intuición o por estudio formales . Los lenguajes de programación  utilizan formalización matemática, tanto en su estructura como en su simbología.  Sus convenciones y usos se realizan especialmente utilizando leyes algebraicas, tales como la Lógica de Bool, particularmente Algebra de Proposiciones, Teoría de Conjuntos, Funciones (algebra y sus propiedades), Series Numéricas, Recursividad, etc. y por tanto un programador trabaja fundamentado en conceptos matemáticos.&lt;br /&gt;Cualquier consideración del proceso de programación mismo debe comenzar aislando cada una de sus fases componentes. Se identifica las siguientes cinco fases:&lt;br /&gt;1. Análisis del problema2. Desarrollo de la solución3. Construcción de la solución en forma de programa4. Prueba5. Mantenimiento&lt;br /&gt;&lt;a href="http://www.docirs.cl/acerca_fases_proceso_programacion.htm#inicio"&gt;&lt;/a&gt;&lt;a name="2"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name="1"&gt;&lt;/a&gt;El análisis del problema se refiere a la etapa del proceso en la que el programador toma conocimiento del problema antes de proceder a desarrollar una solución. Es un proceso de “introducción”, de naturaleza cognoscitiva y muy difícil de describir. Son demasiados los programadores que recorren esta etapa muy rápidamente, lo que hace que entiendan mal o malinterpreten las especificaciones. Algunos programadores prefieren devolver las especificaciones del problema al diseñador, para reducir la posibilidad de malentendido. Los errores que se cometen en esta etapa son con mucha frecuencia difíciles de detectar y consumen mucho tiempo cuando se les trata de remediar en las etapas posteriores. &lt;a href="http://www.docirs.cl/acerca_fases_proceso_programacion.htm#inicio"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name="3"&gt;&lt;/a&gt;La segunda etapa, el desarrollo de la solución, es eminentemente creativa. Aquí se debe hacer hincapié en la formulación del algoritmo antes que en su codificación en un lenguaje de programación en particular. Aunque algunos podrían argumentar que la habilidad para resolver problemas es algo innato y que es difícil educar o mejorar la creatividad, existe suficiente evidencia en el sentido de que algunos enfoques sistemáticos tienen mucho valor.&lt;br /&gt;También es una alternativa recurrir a desarrollos anteriores hechos para otras soluciones (la librería propia) y desde allí comenzar el proceso de creación. Siempre y cuando el problema central haya sido resuelto realmente, puesto que si no es así esta situación acarreará problemas en las fases posteriores. Otro punto de suma importancia en esta etapa, es el definir la arquitectura del modelo de datos, las relaciones lógicas básicas y las pautas a seguir en las transacciones con la base(s) de datos que tendrá la aplicación. (Asumimos que en esta etapa, ya debe estar delineado el conjunto de clases de funciones que tendrá el sistema, y que posteriormente se transformarán en las entidades u objetos).&lt;a href="http://www.docirs.cl/acerca_fases_proceso_programacion.htm#inicio"&gt;&lt;/a&gt;&lt;a name="4"&gt;&lt;/a&gt;&lt;br /&gt;La tercera etapa identificada es la construcción de la solución desarrollada en forma de un programa real (o código). Considerando que la solución ha sido bien definida, este proceso es casi directo, pues es un proceso mental inmediato de las fases anteriores. Mediante rutinas, funciones, script, procedimientos y reglas del lenguaje de programación, se va ensamblando la aplicación de acuerdo con los estándares de estilo y de estructura. &lt;a href="http://www.docirs.cl/acerca_fases_proceso_programacion.htm#inicio"&gt;&lt;/a&gt;&lt;a name="5"&gt;&lt;/a&gt;&lt;br /&gt;La cuarta fase se refiere a la revisión y corrección del programa sea en de Ambiente de Desarrollo o Prueba. Es inevitable realizar pruebas mientras va construyendo las componentes de la aplicación. Todo programador experto prueba no sólo mentalmente cada instrucción cuando la está escribiendo, sino que va ejecutando las rutinas de cualquier módulo o sección de su programa antes de proceder a pasar a Ambiente de Prueba, donde probarán los que establecieron el diseño funcional del sistema. La prueba de las aplicaciones nunca es sencilla; Es natural que las pruebas muestran la presencia de errores y nunca se puede demostrar la ausencia de ellos. Una prueba con éxito sólo significa que no se detectaron errores bajo las circunstancias especiales de dicha prueba; esto no significa nada frente a otras circunstancias. Aunque se sabe, que el programado repite múltiples veces sus formas de prueba de lo que construye y siempre dejará espacios que encontrará un tercero.&lt;br /&gt;En teoría, la (única manera en que las pruebas pueden demostrar que un programa es correcto es que se examinen todos los casos posibles (lo cual se conoce como una prueba exhaustiva), situación que es imposible técnicamente, incluso para los programas más simples.&lt;br /&gt;Significa esto que las pruebas son inútiles? Definitivamente, no. El programador puede hacer mucho por reducir el número de casos a probar a partir del número requerido por una prueba exhaustiva. Tomando con mucho cuidado y seleccionando apropiadamente el diseño de los casos de prueba, puede reducirse el número de ellos, haciendo posible una prueba razonable con un número relativamente pequeño de casos.&lt;br /&gt;La prueba de un programa es una tarea tan creativa como su mismo desarrollo, por lo que debe considerarse con la misma diligencia y entusiasmo. Algunos principios de las pruebas son claros: trátese de iniciar las pruebas de un programa con una mentalidad de saboteador, casi disfrutando la tarea de buscar un error. Hay que sospechar de todo. Los casos de prueba deberían diseñarse a partir de las especificaciones originales, en lugar del programa mismo; si se efectúan a partir del programa, algunos aspectos del problema que han sido pasados por alto durante su construcción también lo serán cuando se le pruebe. Para reducir las posibilidades de que esto ocurra en las compañías profesionales de programación, los encargados suelen insistir en que sean personas diferentes a los programadores originales quienes tengan a su cargo la prueba de los programas. Los usuarios de los programas disponen, con frecuencia, de sus propios datos de prueba desarrollados, independientemente, para usarlos cuando el programa esté a su disposición. Téngase en cuenta que la contraparte del cliente evalúa muy mal al equipo de desarrollo o proveedor cuyas aplicaciones no son capaces de pasar las pruebas de los usuarios. Por eso de cualquier forma que se haga, una prueba completa antes de pasar a la revisión del cliente es una parte esencial de los proyecto de programación.&lt;a href="http://www.docirs.cl/acerca_fases_proceso_programacion.htm#inicio"&gt;&lt;/a&gt;&lt;a name="6"&gt;&lt;/a&gt;&lt;br /&gt;La quinta etapa del proceso de programación, el mantenimiento del programa. Sin embargo, su importancia en el trabajo real nunca debe despreciarse. En general, el costo de mantenimiento de un programa de uso generalizado es del orden del 40% o más del costo de su desarrollo”. Al contrario de lo que sucede con el mantenimiento de hardware, el mantenimiento de los programas no se refiere a la reparación o cambio de partes deterioradas, sino a las modificaciones que deben hacerse a los defectos del diseño, lo cual puede incluir el desarrollo de funciones adicionales para reunir nuevas necesidades. El tiempo de los desarrolladores para producir nuevos programas se ve siempre afectado por el tiempo que deben dedicar al mantenimiento de los programas viejos. La inevitabilidad del mantenimiento debe reconocerse y, en consecuencia, deben realizarse las acciones que sean necesarias para reducir el tiempo que ello implica.&lt;a href="http://www.docirs.cl/acerca_fases_proceso_programacion.htm#inicio"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name="8"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-6863557031890470516?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/6863557031890470516/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/08/las-fases-del-proceso-de-programacion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/6863557031890470516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/6863557031890470516'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/08/las-fases-del-proceso-de-programacion.html' title=''/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-2324798588395871600</id><published>2009-05-29T18:22:00.000-07:00</published><updated>2009-05-29T18:23:43.966-07:00</updated><title type='text'>Programa en java</title><content type='html'>class CCalcular&lt;br /&gt;{&lt;br /&gt; public static void main(String[] args)&lt;br /&gt; {&lt;br /&gt; float dato1 , dato2 , dato3 , dato4 , resultado;&lt;br /&gt;  float result;&lt;br /&gt;   dato1 = 2;&lt;br /&gt; dato2 = 4;&lt;br /&gt; dato3 = 8; &lt;br /&gt;dato4 = 5;   &lt;br /&gt;  //Suma&lt;br /&gt; resultado = dato1 + dato2 + dato3 + dato4;&lt;br /&gt; System.out.println (dato1 + "+" + dato2 + "+" + dato3 + "+" + dato4 + "=" + resultado);&lt;br /&gt;  //Media&lt;br /&gt;  result = resultado / 2;&lt;br /&gt; System.out.println (resultado + "/" + 2 + "=" + result );   &lt;br /&gt;      }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-2324798588395871600?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/2324798588395871600/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/programa-en-java.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/2324798588395871600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/2324798588395871600'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/programa-en-java.html' title='Programa en java'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-1836436331832456458</id><published>2009-05-29T18:15:00.000-07:00</published><updated>2009-05-29T18:29:43.900-07:00</updated><title type='text'>Programa en java</title><content type='html'>class CEcuacion&lt;br /&gt;{&lt;br /&gt;// realizar una ecuacion.&lt;br /&gt;public static void main(String[] args)&lt;br /&gt;{&lt;br /&gt;float valora, valorb, valorc;&lt;br /&gt;float resultado;&lt;br /&gt;valora = 1;&lt;br /&gt;valorb = 5;&lt;br /&gt;valorc = 2;&lt;br /&gt;resultado = 0;&lt;br /&gt;resultado=(valorb * valorb - 4*(valora*valorc))/(2*valora);&lt;br /&gt;System.out.println(resultado);&lt;br /&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-1836436331832456458?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/1836436331832456458/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/class-cecuacion-realizar-una-ecuacion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/1836436331832456458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/1836436331832456458'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/class-cecuacion-realizar-una-ecuacion.html' title='Programa en java'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-2015268022241321531</id><published>2009-05-29T18:12:00.000-07:00</published><updated>2009-05-29T18:30:05.103-07:00</updated><title type='text'>Programa en java</title><content type='html'>class CMundoJava&lt;br /&gt;{&lt;br /&gt;/* Este programa mostrara la palabra bienvenido al mundo de java.&lt;br /&gt;* Tambien mostrara la frace " prodras dar resultado a muchos problemas "&lt;br /&gt;*/&lt;br /&gt;public static void main (String[] args)&lt;br /&gt;{&lt;br /&gt;System.out.println (" Bienvenido al mundo de java");&lt;br /&gt;System.out.println (" Podras dar resultado a muchos problemas");&lt;br /&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-2015268022241321531?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/2015268022241321531/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/class-cmundojava-este-programa-mostrara.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/2015268022241321531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/2015268022241321531'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/class-cmundojava-este-programa-mostrara.html' title='Programa en java'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-9219889069971853942</id><published>2009-05-04T18:47:00.000-07:00</published><updated>2009-05-18T17:11:36.420-07:00</updated><title type='text'></title><content type='html'>1) A) las clases son declaraciones de un objeto, lo que significa, que una clase es la definición de un objeto. Cuando programamos un objeto y definimos sus características realmente se programa una clase.&lt;br /&gt;&lt;br /&gt;B) las subclases son un grupo intermedio entre clase y orden que se crea por la necesidad de agrupar en conjuntos naturales los numerosos órdenes de una clase.&lt;br /&gt;&lt;br /&gt;C) La instancia es una modelo básica de comunicación con la administración pública que, con ligeras variantes, un administrado o interesado puede utilizar para reclamar, solicitar, denunciar o como substituto de algún impreso.&lt;br /&gt;&lt;br /&gt;2) Java es un lenguaje de programación con el que podemos realizar cualquier tipo de programa.&lt;br /&gt;&lt;strong&gt;Características de java:&lt;/strong&gt;Las características mas frecuentes de java nos ayudaran haber para que tipo de problemas esta pensado este programa:&lt;br /&gt;&lt;br /&gt;Ø &lt;strong&gt;Es simple:&lt;/strong&gt; es un lenguaje sencillo de aprender con sintaxis parecidas a las de c++ pero mas simplificado.&lt;br /&gt;&lt;br /&gt;Ø &lt;strong&gt;Es orientada al objeto:&lt;/strong&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;Ø &lt;strong&gt;Es distribuido:&lt;/strong&gt; java se ha construido con extensas capacidades de interconexión TCP/Inexisten librerías de rutinas para acceder e interactuar con protocolos como http y 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;strong&gt;Es robusto:&lt;/strong&gt; java realiza verificaciones en busca de problemas tanto en tiempo de compilación como en tiempo de ejecución.&lt;br /&gt;Ø &lt;strong&gt;Es portable:&lt;/strong&gt; mas allá de la portabilidad básica por ser de arquitectura independiente, java implementa otros estándares de portabilidad para facilitar el desarrollo.&lt;br /&gt;Ø &lt;strong&gt;Es interpretado:&lt;/strong&gt; el intérprete java puede ejecutar directamente el código objeto. Enlazar un programa, normalmente, consume menos recursos que compilarlo, por lo que los desarrolladores con java pasaran mas tiempo desarrollando y menos esperando por el ordenador.&lt;br /&gt;Ø &lt;strong&gt;Es multithreaded:&lt;/strong&gt; consiste en un mejor rendimiento interactivo y un mejor comportamiento en tiempo real.&lt;br /&gt;Ø &lt;strong&gt;Es dinámica:&lt;/strong&gt; java se beneficia todo lo posible de la tecnología orientada a objeto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-9219889069971853942?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/9219889069971853942/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/1-las-clases-son-declaraciones-de-un.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/9219889069971853942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/9219889069971853942'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/1-las-clases-son-declaraciones-de-un.html' title=''/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-9054176023687810863</id><published>2009-05-04T17:15:00.000-07:00</published><updated>2009-05-04T17:16:27.550-07:00</updated><title type='text'>Evaluacion</title><content type='html'>Evaluativo.&lt;br /&gt;&lt;br /&gt;1) Defina Clases, Subclases, instancias.&lt;br /&gt;2) ¿Qué es Java y cuáles son sus características más notorias?&lt;br /&gt;3) Desarrolle un algoritmo que permita determinar si un número dado es par, impar o cero.&lt;br /&gt;4) Desarrolle un algoritmo que permita determinar de una serie de números cuántos son par, impar o cero.&lt;br /&gt;5) Desarrolle un algoritmo que lea un número , y si es negativo que lo imprima.&lt;br /&gt;6) Desarrolle un algoritmo que lea una serie de números , imprima el número si es negativo y el positivo del mismo.&lt;br /&gt;7) Desarrolle un algoritmo que le permita leer el nombre , la edad , el sexo y el estado civil de cualquier persona e imprima el nombre de la persona si es un hombre casado y mayor de 40 años o una mujer soltera menor de 50 años.&lt;br /&gt;8) Desarrolle un algoritmo que le permita leer las notas de las materias que ha cursado un estudiante hasta el momento, saque su promedio e imprima su nombre, número de carnet y el promedio.&lt;br /&gt;9) Desarrolle un algoritmo para leer el nombre de un empleado, el salario básico por hora y el número de horas trabajadas durante una semana. Calcule el salario neto, teniendo en cuenta que si el número de horas trabajadas durante la semana es mayor de 48 horas, esas horas demás se consideran horas extras y tienen un recargo del 35%. Imprima el nombre del empleado y su salario neto.&lt;br /&gt;10) Desarrolle un algoritmo que le permita determinar dadas  tres cajas cada una con 15 números ,  en cuál caja está un número dado.&lt;br /&gt;11) Desarrolle un algoritmo que le permita determinar el número medio de tres números. El número medio es aquel que no es el mayor ni el menor.&lt;br /&gt;12) Analiza el siguiente programa en java, define cada partes del mismo, e identifica clase e instancia.&lt;br /&gt;class CAritmetica&lt;br /&gt;{&lt;br /&gt;  /*&lt;br /&gt;   * Operaciones aritméticas &lt;br /&gt;   */&lt;br /&gt;  public static void main (String[] args)&lt;br /&gt;  {&lt;br /&gt;    int dato1, dato2, resultado;&lt;br /&gt;&lt;br /&gt;    dato1 = 20;&lt;br /&gt;    dato2 = 10;&lt;br /&gt;  &lt;br /&gt;    // Suma&lt;br /&gt;    resultado = dato1 + dato2;&lt;br /&gt;    System.out.println(dato1 + " + " + dato2 + " = " + resultado);&lt;br /&gt;  &lt;br /&gt;    // Resta&lt;br /&gt;    resultado = dato1 - dato2;&lt;br /&gt;    System.out.println(dato1 + " - " + dato2 + " = " + resultado);&lt;br /&gt;  &lt;br /&gt;    // Producto&lt;br /&gt;    resultado = dato1 * dato2;&lt;br /&gt;    System.out.println(dato1 + " * " + dato2 + " = " + resultado);&lt;br /&gt;  &lt;br /&gt;    // Cociente&lt;br /&gt;    resultado = dato1 / dato2;&lt;br /&gt;    System.out.println(dato1 + " / " + dato2 + " = " + resultado);&lt;br /&gt;  }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-9054176023687810863?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/9054176023687810863/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/evaluacion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/9054176023687810863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/9054176023687810863'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/05/evaluacion.html' title='Evaluacion'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-8487198780318345359</id><published>2009-04-29T17:18:00.000-07:00</published><updated>2009-04-29T18:52:01.933-07:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;&lt;span style="font-size:180%;"&gt;La Clase Systemstrong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;Hay ocasiones en que se necesita acceder a recursos del sistema , como son los dispositivos de entrada/salida, el reloj del sistema, etc. Java dispone de la clase System, que proporciona acceso a estos recursos, independientemente de la plataforma. Es decir, que si se ejecuta un programa en una plataforma diferente a la que se ha desarrollado, no es necesaria ninguna modificación para tener en cuenta las peculiaridades de la nueva plataforma.&lt;br /&gt;&lt;br /&gt;La clase System es miembro del paquete java.lang y en ella se definen los dispositivos estándar de entrada/salida&lt;br /&gt;&lt;br /&gt;static PrintStream err;&lt;br /&gt;static InputStream in;&lt;br /&gt;static PrintStream out;&lt;br /&gt;y dispone de varios métodos, algunos de los cuales ya se han utilizado en secciones anteriores, sin saber muy bien lo que se estaba haciendo, cosa que se intentará remediar ahora.&lt;br /&gt;&lt;br /&gt;static void arraycopy( Object,int,Object,int,int )&lt;br /&gt;static long currentTimeMillis()&lt;br /&gt;static void exit( int )&lt;br /&gt;static void gc()&lt;br /&gt;static Properties getProperties()&lt;br /&gt;static String getPropertie( String )&lt;br /&gt;static String getPropertie( String,String )&lt;br /&gt;static SecurityManager getSecurityManager()&lt;br /&gt;static native int identityHashCode( Object )&lt;br /&gt;static void load( String )&lt;br /&gt;static void loadLibrary( String )&lt;br /&gt;static void runFinalization()&lt;br /&gt;static void runFinalizersOnExit( boolean )&lt;br /&gt;static void setErr( PrintStream )&lt;br /&gt;static void setIn( InputStream )&lt;br /&gt;static void setOut( PrintStream )&lt;br /&gt;static void setProperties( Properties )&lt;br /&gt;static void setSecurityManager( SecurityManager )&lt;br /&gt;No se puede instanciar ningún objeto de la clase System, porque es una clase final y todos sus contenidos son privados; por ellos es por lo que no hay una lista de constructores en la enumeración de métodos. Es decir, la clase System siempre está ahí disponible para que se pueda invocar cualquiera de sus métodos utilizando la sintaxis de punto (.) ya conocida&lt;br /&gt;&lt;br /&gt;System.out.println( "Hola Java" );&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Entrada/Salida estándar&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;En otra sección del Tutorial se trata a fondo este tema de la entrada y salida, aquí solamente interesa su relación con la clase System. Los dispositivos de entrada/salida probablemente sean uno de los aspectos más utilizado de esta clase.&lt;br /&gt;&lt;br /&gt;La clase System proporciona automáticamente cuando comienza la ejecución de un programa, un stream para leer del dispositivo estándar de entrada (normalmente, el teclado), un stream para presentar información en el dispositivo estándar de salida (normalmente, la pantalla) y otro stream donde presentar mensajes de error, que es el dispositivo estándar de error (normalmente, la pantalla).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Los tres streams de entrada/salida están controlados por esta clase y se referencian como:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;System.in entrada estándar&lt;br /&gt;System.out salida estándar&lt;br /&gt;System.err salida de error estándar&lt;br /&gt;&lt;br /&gt;Las variables internas de la clase System out y err son de tipo PrintStream, es decir, que tienen acceso a los métodos de la clase PrintStream. La clase PrintStream proporciona tres métodos para poder visualizar información: print(), println() y write().&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Los dos primeros ya se han utilizado en el Tutorial ampliamente, con lo que no resultan extrañas sentencias como:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;System.out.print( … );&lt;br /&gt;System.out.println( … );&lt;br /&gt;System.out.write( … );&lt;br /&gt;Los métodos print() y println() son semejante, la única diferencia es que println() coloca automáticamente un carácter nueva línea en el stream, tras la lista de argumentos que se le pase.&lt;br /&gt;&lt;br /&gt;El método write() se utiliza para escribir bytes en el stream, es decir, para escribir datos que no pueden interpretarse como texto, como pueden ser los datos que componen un gráfico.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Los métodos print() y println() aceptan un argumento de cualquiera de los siguientes tipos:&lt;/strong&gt; Object, String, char[], int, long, float, double o boolean. En cada caso, el sistema convierte el dato a un conjunto de caracteres que transfiere al dispositivo estándar de salida. Si se invoca al método println() sin argumentos, simplemente se inserta un carácter nueva línea en el stream.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Además, hay versiones sobrecargadas de estos métodos para visualizar adecuadamente objetos de varias clases estándar. Por ejemplo, las siguientes sentencias&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;Thread obj = new Thread;&lt;br /&gt;System.out.println( obj );&lt;br /&gt;Producirían la siguiente salida en pantalla:&lt;br /&gt;&lt;br /&gt;Thread[Thread-4,5,main]&lt;br /&gt;Cuando se utilizan print() y println() sobre un objeto, la salida dependerá de ese objeto; por ejemplo, si se imprime un objeto String, visualizaremos el contenido de la cadena y si se imprime un objeto Thread obtenemos una salida en formato:&lt;br /&gt;&lt;br /&gt;claseThread[nombre,prioridad,grupo]&lt;br /&gt;como en el ejemplo anterior.&lt;br /&gt;&lt;br /&gt;Propiedades del Sistema&lt;br /&gt;&lt;br /&gt;Ya se ha indicado al tratar la clase Properties que las Propiedades son pares de clave/valor que los programas Java pueden utilizar para establecer y mantener diversos atributos o parámetros, que estarían disponibles en todas sus invocaciones.&lt;br /&gt;&lt;br /&gt;El sistema Java también mantiene un conjunto de Propiedades del Sistema que contienen información acerca del entorno en que se está ejecutando como: el usuario actual, la versión actual del ejecutable de Java, etc. Estas Propiedades se fijan cuando arranca el Sistema.&lt;br /&gt;&lt;br /&gt;En la fecha de hoy, invierno del 97, los applets pueden acceder a algunas de las Propiedades del sistema, pero no a todas. Además, los applets no pueden escribir las Propiedades del sistema. Supongo que en adelante esto cambiará.&lt;br /&gt;&lt;br /&gt;La clase System dispone de varios métodos para leer y escribir las Propiedades del sistema. A estas Propiedades se puede acceder a través de la clave o se puede leer el conjunto completo de Propiedades.&lt;br /&gt;&lt;br /&gt;Los dos métodos que proporciona la clase System para leer las propiedades del sistema son getProperty() y getProperties(). De la primera hay dos versiones sobrecargadas. La primera de ellas es:&lt;br /&gt;&lt;br /&gt;static String getProperty( String key );&lt;br /&gt;Solamente tiene un argumento y devuelve un objeto de tipo String. Si no es capaz de encontrar la propiedad indicada en la clave, devolverá una referencia nula. La segunda versión sobrecargada de getProperty()&lt;br /&gt;&lt;br /&gt;static String getProperty( String clave,String def );&lt;br /&gt;necesita dos argumentos. El primero es la propiedad clave que se quiere consultar y el segundo argumento es el valor por defecto que devolverá el método si la propiedad clave no se encuentra entre las propiedades, o si esa propiedad clave sí se encuentra pero no tiene asignado ningún valor.&lt;br /&gt;&lt;br /&gt;El tercer método para acceder a las Propiedades del sistema es getProperties(), que devuelve un objeto Properties conteniendo el conjunto completo de pares clave/valor del sistema. Una vez obtenido este objeto, se puede usar cualquiera de sus métodos para obtener la información que se necesite.&lt;br /&gt;&lt;br /&gt;Las Propiedades del sistema también se pueden modificar a través del método setProperties() de esta clase System. Este método coge un objeto Properties que haya sido inicializado con el adecuado conjunto de pares clave/valor que se desee y reemplaza el conjunto completo de Propiedades del sistema por los nuevos valores representados por el objeto.&lt;br /&gt;&lt;br /&gt;En general, hay que tener cuidado de no sobreescribir las Propiedades del sistema. El método setProperties() cambia las Propiedades del sistema solamente para la ejecución actual en que se está utilizando. El sistema Java reinicializa las Propiedades cada vez que se arranca, luego los cambios realizados por este método no son persistentes. Si se quiere que lo sean, hay que salvarlos en un fichero antes de concluir la aplicación y cargarlos de nuevo al arrancar. La clase Properties proporciona métodos para realizar ambas tareas.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Finalización&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Todos los objetos en Java son instanciados dinámicamente, en tiempo de ejecución, en la pila. Cuando ya no exista variable alguna que referencie al objeto, éste será marcado para su reciclado.&lt;br /&gt;&lt;br /&gt;El reciclador de memoria, o cualquier nombre que quiera dársele, se ejecuta asíncronamente en segundo plano, recogiendo los objetos que ya no estén referenciados y haciendo que la memoria que ocupaban quede libre y sea devuelta al sistema para su reutilización.&lt;br /&gt;&lt;br /&gt;El método finalize() de un objeto siempre se ejecuta antes de que la memoria ocupada por ese objeto sea liberada. Este método se puede sobreescribir para las clases que se desee, de forma que se ejecuten un conjunto de setencias determinado antes de liberar la memoria.&lt;br /&gt;&lt;br /&gt;Se puede forzar una ejecución del reciclador de memoria invocando al método gc(). Además, se puede forzar a que el sistema ejecute la finalización de los objetos utilizando la llamada al método runFinalization(), que invocará a todos los métodos finalize() de los objetos que estén marcados para ser reciclados.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Copia de arrays&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Para copiar eficientemente datos desde un array a otro se puede utilizar el método arraycopy(). Este método requiere cinco argumentos, de forma que se indiquen los arrays de origen y destino y el número de elementos que se van a copiar.&lt;br /&gt;&lt;br /&gt;static void arraycopy( Object src,int src_position,Object dst,&lt;br /&gt;int dst_position,int length );&lt;br /&gt;El array destino debe estar localizado en memoria antes de llamarlo y debe ser lo suficientemente largo para contener los datos que se le van a pasar.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Salida del Sistema&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Se puede abandonar el intérprete Java llamando al método exit() y pasándole un int como código de salida. Sin embargo, la invocación de este método está sujeta a restricciones de seguridad, Así, dependiendo del navegador sobre el que se esté ejecutando un applet, una llamada a exit() desde dentro del applet puede originar una excepción de seguridad, SecurityException.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Seguridad&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;El controlador de seguridad es un objeto que asegura una cierta política de seguridad a la aplicación Java. Se puede fijar el controlador de seguridad para las aplicaciones utilizando el método setSecurityManager() y se puede recuperar el que esté actualmente definido utilizando el método getSecurityManager().&lt;br /&gt;&lt;br /&gt;El controlador de seguridad para una aplicación solamente se puede fijar una vez. Normalmente, un navegador fija su controlador de seguridad al arrancar, con lo cual, en acciones posteriores los applets no pueden fijarlo de nuevo, o se originará una excepción de seguridad si el applet lo intenta.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Recursos dependientes del Sistema&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Deberíamos ser capaces de satisfacer todas nuestras necesidades de programación utilizando la interfaz independiente de plataforma que proporciona la clase System. Pero también es posible saltarse este interfaz y acceder directamente a los recursos del sistema en que se esté ejecutando el programa Java.&lt;br /&gt;&lt;br /&gt;El sistema Java proporciona un objeto Runtime que representa el entorno en que se está corriendo, y que se puede utilizar para acceder directamente a los recursos de la plataforma.&lt;br /&gt;&lt;br /&gt;Al hacer esto, probablemente se esté perdiendo parte de la portabilidad que caracteriza a Java, pero se está ganando velocidad de ejecución, o la obtención de información propia del sistema en que se está ejecutando la aplicación.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Colecciones&lt;/strong&gt;&lt;br /&gt;Java tiene matrices para almacenar grupos de datos de tipo similar, que son muy útiles para modelos simples de acceso a datos. Sin embargo, las Colecciones o enumeraciones ofrecen una manera más completa y orientada a objetos para almacenar conjuntos de datos de tipo similar. Las Colecciones tienen su propia asignación de memoria y posibilidad de una nueva asignación para ampliarlas. Tienen interfaces de método para su iteración y recorrido. Se pueden indexar mediante algo más complejo y útil que los simples enteros. Hasta el JDK 1.1, las Colecciones parecían estar incorporadas a Java por necesidad de aportar alguna herramienta para el almacenamiento de datos. Pero en el JDK 1.2, se han revisado completamente las Colecciones y ahora el programador dispone de toda la potencia de estas nuevas estructuras de datos, a las cuales se ha hecho referencia en secciones anteriores, a las cuales debe remitirse el lector, aquí solamente se citarán por estar incluidas dentro de las clases base de Java, y muy por encima.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Enumeraciones&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Enumeration es un interfaz simple que permite enumerar todos los elementos de cualquier conjunto de objetos. Especifica dos métodos:&lt;br /&gt;&lt;br /&gt;Bboolean hasMoreElements()&lt;br /&gt;Object nextElement()&lt;br /&gt;El primer método devuelve true cuando todavía quedan más elementos que extraer y false cuando se han enumerado todos los elementos del conjunto. El segundo método, devuelve una referencia a objeto genérica, cuyo tipo hay que convertir al tipo de clase de la cual el objeto es una instancia.&lt;br /&gt;&lt;br /&gt;En el programa de ejemplo, java816.java, se utiliza una clase llamada Coleccion para implementar una enumeración de objetos de tipo Integer, y la clase principal que crea una instancia de Coleccion, itera sobre sus valores e imprime cada uno de ellos. Coleccion no contiene realmente ningún dato; simplemente devuelve la secuencia de enteros que ha construido.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Vector&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Un Vector es una matriz ampliable de referencia a objeto. Internamente, un Vector implementa una estrategia de crecimiento para minimizar la reasignación y el espacio desperdiciado. Los objetos se pueden almacenar al final de un Vector utilizando el método addElement() o en un índice dado mediante el método insertElement(). Se puede almacenar una matriz de objetos en un Vector utilizando el método copyInto(). Una vez se ha almacenado un conjunto de objetos en un Vector, se puede utilizar para buscar un elemento en concreto utilizando los métodos contains(), indexOf() o lastIndexOf(). También se puede extraer un objeto de una posición específica de un Vector utilizando los métodos elementAt(), firstElement() y lastElement().&lt;br /&gt;&lt;br /&gt;Un Stack, pila, es una subclase de Vector que implementa una pila simple del tipo FIFO (primero en entrar, primero en salir. Además de los métodos estándar de la clase padre, Stack implementa el método push(), que coloca objetos en la parte superior de la pila y el método pop() que retira y devuelve el objeto superior de la pila. También dispone del método peek() para obtener el objeto superior de la pila, pro no retirarlo. El método empty() devolverá true si no hay nada en la pila. El método search() comprobará si existe un objeto en la pila y devolverá el número de llamadas al método pop() que se necesitarán realizar para que dicho objeto se quede en la parte superior de la pila, o –1 si el objeto pasado como parámetro no se encuentra.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Diccionario&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Un Dictionary es una clase abstracta que representa un depósito para almacenar claves/valores. Una clave es un nombre que se utiliza para recuperar un valor más adelante. Dada una clave y un valor, se puede almacenar el valor en un Dictionary con el método put( clave,valor ). Después se puede utilizar get( clave ) para recuperar el valor. Se pueden devolver las claves y valores como una Enumeration utilizando los métodos keys() y elements(). El método size() devuelve el número de parejas clave/valor almacenadas en un diccionario y el método isEmpty() devuelve true cuando no queda ninguna pareja. Se puede utilizar el método remove( clave ) para eliminar una pareja clave/valor.&lt;br /&gt;&lt;br /&gt;Una Hashtable, tabla hash, es una implementación concreta de un Dictionary. Se puede utilizar una instancia de Hashtable para almacenar objetos arbitrarios que están indexados por cualquier otro objeto arbitrario. La utilización más habitual de una Hashtable es utilizar un String como clave para almacenar objetos como valores. El ejemplo java818.java, crea una tabla hash para almacenar información acerca del Tutorial.&lt;br /&gt;&lt;br /&gt;import java.util.Dictionary;&lt;br /&gt;import java.util.Hashtable;&lt;br /&gt;&lt;br /&gt;class java818 {&lt;br /&gt;public static void main( String args[] ) {&lt;br /&gt;Hashtable ht = new Hashtable();&lt;br /&gt;&lt;br /&gt;ht.put( "titulo","Tutorial de Java" );&lt;br /&gt;ht.put( "autor","Agustin Froufe" );&lt;br /&gt;ht.put( "email","froufe@arrakis.es" );&lt;br /&gt;ht.put( "patria","Spain" );&lt;br /&gt;ht.put( "edad",new Integer( 31 ) );&lt;br /&gt;show( ht );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;static void show( Dictionary d ) {&lt;br /&gt;System.out.println( "Titulo: " + d.get( "titulo" ) );&lt;br /&gt;System.out.println( "Autor: " + d.get( "autor" ) );&lt;br /&gt;System.out.println( "E-mail: " + d.get( "email" ) );&lt;br /&gt;System.out.println( "Pais: " + d.get( "patria" ) );&lt;br /&gt;System.out.println( "Edad: " + d.get( "edad" ) );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;La salida del programa, muestra cómo el método show(), que toma un Dictionary abstracto como parámetro, es capaz de recuperar todos los valores que se han almacenado en el método main().&lt;br /&gt;&lt;br /&gt;C:\&gt; java java818&lt;br /&gt;Titulo: Tutorial de Java&lt;br /&gt;Autor: Agustin Froufe&lt;br /&gt;E-mail: froufe@arrakis.es&lt;br /&gt;Pais: Spain&lt;br /&gt;Edad: 31&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;EXEPCION DE JAVA:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Una excepción es un evento que ocurre durante la ejecución de un programa y detiene el flujo normal de la secuencia de instrucciones de ese programa; en otras palabras, una excepción es una condición anormal que surge en una secuencia de código durante su ejecución.&lt;br /&gt;Las excepciones en Java están destinadas, al igual que en el resto de los lenguajes que las soportan, para la detección y corrección de errores. Si hay un error, la aplicación no debería morirse y generar un core (o un crash en caso del DOS). Se debería lanzar (throw) una excepción que a su vez debería capturar (catch) y resolver la situación de error, o poder ser tratada finalmente (finally) por un gestor por defecto u omisión. Java sigue el mismo modelo de excepciones que se utiliza en C++. Utilizadas en forma adecuada, las excepciones aumentan en gran medida la robustez de las aplicaciones.&lt;br /&gt;En este Tutorial de Java no se pretende entrar en detalle en las ventajas que representa la utilización de excepciones, para ello debe el lector recurrir al Java Tutorial de Sun, en donde hay una completa discusión acerca de este aspecto de Java.&lt;br /&gt;La gestión de excepciones en Java proporciona un mecanismo excepcionalmente poderoso para controlar programas que tengan muchas características dinámicas durante su ejecución. Las excepciones son formas muy limpias de manejar errores y problemas inesperados en la lógica del programa, y no deberían considerarse como un mecanismo general de ramificaciones o un tipo de sentencias de salto. Los lugares más indicados para utilizar excepciones son aquellos en los que se usan valores como 0 o 1, en C/C++, para indicar algún fallo funcional. Por ejemplo:#include &lt;sys&gt;&lt;br /&gt;int fd;&lt;br /&gt;fd = open( "leeme.txt" );&lt;br /&gt;if( fd == -1 &amp;amp;&amp;amp; errno == EEXIT )&lt;br /&gt;fd = open( "defecto.txt" );&lt;br /&gt;}&lt;br /&gt;En este programa C, si falla la primera sentencia open() por cualquiera de las 19 razones distintas de EEXIT por las que puede fallar, entonces el programa se continuaría ejecutando y moriría por alguna razón misteriosa más adelante, dejando atrás un problema de depuración complicado y frustrante.&lt;br /&gt;La versión Java del código anterior, tal como se muestra a continuación: FilterReader fr;&lt;br /&gt;try {&lt;br /&gt;Fr = new FilterReader( "leeme.txt" );&lt;br /&gt;} catch( FileNotFoundException e ) {&lt;br /&gt;fr = new FilterReader( "defecto.txt" );&lt;br /&gt;}&lt;br /&gt;proporciona una oportunidad para capturar una excepción más genérica y tratar la situación con elegancia o, en el peor de los casos, imprimiría el estado de la pila de memoria.&lt;br /&gt;Por ello, que la utilización adecuada de las excepciones proporcionará un refinamiento profesional al código que cualquier usuario futuro de las aplicaciones que salgan de la mano del programador que las utilice agradecerá con toda seguridad.&lt;br /&gt;&lt;a name="Cap9_1_1"&gt;&lt;/a&gt;Manejo de excepciones&lt;br /&gt;A continuación se muestra cómo se utilizan las excepciones, reconvirtiendo en primer lugar el applet de saludo a partir de la versión iterativa de &lt;a href="http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/fuentes/HolaIte.java"&gt;HolaIte.java&lt;/a&gt;:import java.awt.*;&lt;br /&gt;import java.applet.Applet;&lt;br /&gt;public class HolaIte extends Applet {&lt;br /&gt;private int i = 0;&lt;br /&gt;private String Saludos[] = {&lt;br /&gt;"Hola Mundo!",&lt;br /&gt;"HOLA Mundo!",&lt;br /&gt;"HOLA MUNDO!!"&lt;br /&gt;};&lt;br /&gt;public void paint( Graphics g ) {&lt;br /&gt;g.drawString( Saludos[i],25,25 );&lt;br /&gt;i++;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Normalmente, un programa termina con un mensaje de error cuando se lanza una excepción. Sin embargo, Java tiene mecanismos para excepciones que permiten ver qué excepción se ha producido e intentar recuperarse de ella.&lt;br /&gt;Vamos a reescribir el método paint() de esa versión iterativa del saludo:public void paint( Graphics g ) {&lt;br /&gt;try {&lt;br /&gt;g.drawString( Saludos[i],25,25 );&lt;br /&gt;} catch( ArrayIndexOutOfBoundsException e ) {&lt;br /&gt;g.drawString( "Saludos desbordado",25,25 );&lt;br /&gt;} catch( Exception e ) {&lt;br /&gt;// Cualquier otra excepción&lt;br /&gt;System.out.println( e.toString() );&lt;br /&gt;} finally {&lt;br /&gt;System.out.println( "Esto se imprime siempre!" );&lt;br /&gt;}&lt;br /&gt;i++;&lt;br /&gt;}&lt;br /&gt;La palabra clave finally define un bloque de código que se quiere que sea ejecutado siempre, de acuerdo a si se capturó la excepción o no. En el ejemplo anterior, la salida en la consola, con i=4 sería:C:\&gt;java HolaIte&lt;br /&gt;Saludos desbordado&lt;br /&gt;¡Esto se imprime siempre!&lt;br /&gt;&lt;br /&gt;Cuando se produce una condición excepcional en el transcurso de la ejecución de un programa, se debería generar, o lanzar, una excepción. Esta excepción es un objeto derivado directa, o indirectamente, de la clase Throwable. Tanto el intérprete Java como muchos métodos de las múltiples clases de Java pueden lanzar excepciones y errores.&lt;br /&gt;La clase Throwable tiene dos subclases: Error y Exception. Un Error indica que se ha producido un fallo no recuperable, del que no se puede recuperar la ejecución normal del programa, por lo tanto, en este caso no hay nada que hacer. Los errores, normalmente, hacen que el intérprete Java presente un mensaje en el dispositivo estándar de salida y concluya la ejecución del programa. El único caso en que esto no es así, es cuando se produce la muerte de un thread, en cuyo caso se genera el error ThreadDead, que lo que hace es concluir la ejecución de ese hilo, pero ni presenta mensajes en pantalla ni afecto a otros hilos que se estén ejecutando.&lt;br /&gt;Una Exception indicará una condición anormal que puede ser subsanada para evitar la terminación de la ejecución del programa. Hay nueve subclases de la clase Exception ya predefinidas, y cada una de ellas, a su vez, tiene numerosas subclases.&lt;br /&gt;Para que un método en Java, pueda lanzar excepciones, hay que indicarlo expresamente.void MetodoAsesino() throws NullPointerException,CaidaException&lt;br /&gt;Se pueden definir excepciones propias, no hay por qué limitarse a las nueve predefinidas y a sus subclases; bastará con extender la clase Exception y proporcionar la funcionalidad extra que requiera el tratamiento de esa excepción.&lt;br /&gt;También pueden producirse excepciones no de forma explícita como en el caso anterior, sino de forma implícita cuando se realiza alguna acción ilegal o no válida.&lt;br /&gt;Las excepciones, pues, pueden originarse de dos modos: el programa hace algo ilegal (caso normal), o el programa explícitamente genera una excepción ejecutando la sentencia throw (caso menos normal). La sentencia throw tiene la siguiente forma: throw ObtejoExcepction;&lt;br /&gt;El objeto ObjetoException es un objeto de una clase que extiende la clase Exception.&lt;br /&gt;Origina una excepción de división por cero:class java901 {&lt;br /&gt;public static void main( String[] a ) {&lt;br /&gt;int i=0, j=0, k;&lt;br /&gt;k = i/j; // Origina un error de division-by-zero&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Si compilamos y ejecutamos esta aplicación Java, obtendremos la siguiente salida por pantalla:% javac java901.java&lt;br /&gt;% java java901&lt;br /&gt;java.lang.ArithmeticException: / by zero&lt;br /&gt;at java901.main(java901.java:25)&lt;br /&gt;Las excepciones predefinidas, como ArithmeticException, se conocen como excepciones runtime. Actualmente, como todas las excepciones son eventos runtime, sería mejor llamarlas excepciones irrecuperables. Esto contrasta con las excepciones que se generan explícitamente, a petición del programador, que suelen ser mucho menos severas y en la mayoría de los casos no resulta complicado recuperarse de ellas. Por ejemplo, si un fichero no puede abrirse, se puede preguntar al usuario que indique otro fichero; o si una estructura de datos se encuentra completa, siempre se podrá sobreescribir algún elemento que ya no se necesite.&lt;br /&gt;&lt;br /&gt;Todas las excepciones deben llevar un mensaje asociado a ellas al que se puede acceder utilizando el método getMessage(), que presentará un mensaj describiendo el error o la excepción que se ha producido.&lt;br /&gt;&lt;br /&gt;Si se desea, se pueden invocar otros métodos de la clase Throwable que presentan un traceado de la pila en donde se ha producido la excepción, o también se pueden invocar para convertir el objeto Exception en una cadena, que siempre es más intelegible y agradable a la vista.&lt;br /&gt;&lt;br /&gt;Los nombres de las excepciones indican la condición de error que representan. Las siguientes son las excepciones predefinidas más frecuentes que se pueden encontrar:&lt;br /&gt;&lt;br /&gt;&lt;a name="Cap9_2_2"&gt;&lt;/a&gt;&lt;strong&gt;ArithmeticException&lt;/strong&gt;&lt;br /&gt;Las excepciones aritméticas son típicamente el resultado de división por 0:int i = 12 / 0;&lt;br /&gt;&lt;a name="Cap9_2_3"&gt;&lt;/a&gt;NullPointerException&lt;br /&gt;Se produce cuando se intenta acceder a una variable o método antes de ser definido:class Hola extends Applet {&lt;br /&gt;Image img;&lt;br /&gt;paint( Graphics g ) {&lt;br /&gt;g.drawImage( img,25,25,this );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;a name="Cap9_2_4"&gt;&lt;/a&gt;&lt;strong&gt;IncompatibleClassChangeException&lt;br /&gt;&lt;/strong&gt;El intento de cambiar una clase afectada por referencias en otros objetos, específicamente cuando esos objetos todavía no han sido recompilados.&lt;br /&gt;&lt;a name="Cap9_2_5"&gt;&lt;/a&gt;&lt;strong&gt;ClassCastException&lt;br /&gt;&lt;/strong&gt;El intento de convertir un objeto a otra clase que no es válida.y = (Prueba)x; // donde x no es de tipo Prueba&lt;br /&gt;&lt;a name="Cap9_2_6"&gt;&lt;/a&gt;&lt;strong&gt;NegativeArraySizeException&lt;br /&gt;&lt;/strong&gt;Puede ocurrir si hay un error aritmético al cambiar el tamaño de un array.&lt;br /&gt;&lt;a name="Cap9_2_7"&gt;&lt;/a&gt;&lt;strong&gt;OutOfMemoryException &lt;/strong&gt;&lt;br /&gt;¡No debería producirse nunca! El intento de crear un objeto con el operador new ha fallado por falta de memoria. Y siempre tendría que haber memoria suficiente porque el garbage collector se encarga de proporcionarla al ir liberando objetos que no se usan y devolviendo memoria al sistema.&lt;br /&gt;&lt;a name="Cap9_2_8"&gt;&lt;/a&gt;&lt;strong&gt;NoClassDefFoundException&lt;br /&gt;&lt;/strong&gt;Se referenció una clase que el sistema es incapaz de encontrar.&lt;br /&gt;&lt;a name="Cap9_2_9"&gt;&lt;/a&gt;&lt;strong&gt;ArrayIndexOutOfBoundsException &lt;&lt;/strong&gt;&lt;br /&gt;Es la excepción que más frecuentemente se produce. Se genera al intentar acceder a un elemento de un array más allá de los límites definidos inicialmente para ese array.&lt;br /&gt;&lt;a name="Cap9_2_10"&gt;&lt;/a&gt;UnsatisfiedLinkException&lt;br /&gt;Se hizo el intento de acceder a un método nativo que no existe. Aquí no existe un método a.kk()class A {&lt;br /&gt;native void kk();&lt;br /&gt;}&lt;br /&gt;y se llama a a.kk(), cuando debería llamar a A.kk().&lt;br /&gt;&lt;a name="Cap9_2_11"&gt;&lt;/a&gt;&lt;strong&gt;InternalException&lt;br /&gt;&lt;/strong&gt;Este error se reserva para eventos que no deberían ocurrir. Por definición, el usuario nunca debería ver este error y esta excepción no debería lanzarse.&lt;br /&gt;El compilador Java obliga al programador a proporcionar el código de manejo o control de algunas de las excepciones predefinidas por el lenguaje. Por ejemplo, el siguiente programa java902.java, no compilará porque no se captura la excepción InterruptedException que puede lanzar el método sleep().import java.lang.Thread;&lt;br /&gt;class java902 {&lt;br /&gt;public static void main( String args[] ) {&lt;br /&gt;java902 obj = new java902();&lt;br /&gt;obj.miMetodo();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void miMetodo() {&lt;br /&gt;// Aqui se produce el error de compilacion, porque no se esta&lt;br /&gt;// declarando la excepcion que genera este metodo&lt;br /&gt;Thread.currentThread().sleep( 1000 ); // currentThread() genera&lt;br /&gt;// una excepcion&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Este es un programa muy simple, que al intentar compilar, producirá el siguiente error de compilación que se visualizará en la pantalla tal como se reproduce a continuación:% javac java902.java&lt;br /&gt;java902.java:41: Exception java.lang.InterruptedException must be caught,&lt;br /&gt;or it must be declared in the throws clause of this method.&lt;br /&gt;Thread.currentThread().sleep( 1000 ); // currentThread() genera&lt;br /&gt;^&lt;br /&gt;Como no se ha previsto la captura de la excepción, el programa no compila. El error identifica la llamada al método sleep() como origen del problema. Así que, la siguiente versión del programa, soluciona el problema generado por esta llamada.import java.lang.Thread;&lt;br /&gt;class java903 {&lt;br /&gt;public static void main( String args[] ) {&lt;br /&gt;// Se instancia un objeto&lt;br /&gt;java903 obj = new java903();&lt;br /&gt;// Se crea la secuencia try/catch que llamara al metodo que&lt;br /&gt;// lanza la excepcion&lt;br /&gt;try {&lt;br /&gt;// Llamada al metodo que genera la excepcion&lt;br /&gt;obj.miMetodo();&lt;br /&gt;}catch(InterruptedException e){} // Procesa la excepcion&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Este es el metodo que va a lanzar la excepcion&lt;br /&gt;void miMetodo() throws InterruptedException {&lt;br /&gt;Thread.currentThread().sleep( 1000 ); // currentThread() genera&lt;br /&gt;// una excepcion&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Lo único que se ha hecho es indicar al compilador que el método miMetodo() puede lanzar excepciones de tipo InterruptedException. Con ello conseguimos propagar las excepción que genera el método sleep() al nivel siguiente de la jerarquía de clases. Es decir, en realidad no se resuelve el problema sino que se está pasando a otro método para que lo resuelva él.&lt;br /&gt;&lt;br /&gt;En el método main() se proporciona la estructura que resuelve el problema de compilación, aunque no haga nada, por el momento. Esta estructura consta de un bloque try y un bloque catch, que se puede interpretar como que intentará ejecutar el código del bloque try y si hubiese una nueva excepción del tipo que indica el bloque catch, se ejecutaría el código de este bloque, si ejecutar nada del try.&lt;br /&gt;&lt;br /&gt;La transferencia de control al bloque catch no es una llamada a un método, es una transferencia incondicional, es decir, no hay un retorno de un bloque catch.&lt;br /&gt;&lt;a name="Cap9_2_12"&gt;&lt;/a&gt;&lt;strong&gt;Crear Excepciones Propias&lt;br /&gt;&lt;/strong&gt;También el programador puede lanzar sus propias excepciones, extendiendo la clase System.exception. Por ejemplo, considérese un programa cliente/servidor. El código cliente se intenta conectar al servidor, y durante 5 segundos se espera a que conteste el servidor. Si el servidor no responde, el servidor lanzaría la excepción de time-out:class ServerTimeOutException extends Exception {}&lt;br /&gt;public void conectame( String nombreServidor ) throws Exception {&lt;br /&gt;int exito;&lt;br /&gt;int puerto = 80;&lt;br /&gt;exito = open( nombreServidor,puerto );&lt;br /&gt;if( exito == -1 )&lt;br /&gt;throw ServerTimeOutException;&lt;br /&gt;}&lt;br /&gt;Si se quieren capturar las propias excepciones, se deberá utilizar la sentencia try:public void encuentraServidor() {&lt;br /&gt;...&lt;br /&gt;try {&lt;br /&gt;conectame( servidorDefecto );&lt;br /&gt;catch( ServerTimeOutException e ) {&lt;br /&gt;g.drawString(&lt;br /&gt;"Time-out del Servidor, intentando alternativa",5,5 );&lt;br /&gt;conectame( servidorAlterno );&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;Cualquier método que lance una excepción también debe capturarla, o declararla como parte del interfaz del método. Cabe preguntarse entonces, el porqué de lanzar una excepción si hay que capturarla en el mismo método. La respuesta es que las excepciones no simplifican el trabajo del control de errores. Tienen la ventaja de que se puede tener muy localizado el control de errores y no hay que controlar millones de valores de retorno, pero no van más allá.&lt;br /&gt;&lt;br /&gt;Y todavía se puede plantear una pregunta más, al respecto de cuándo crear excepciones propias y no utilizar las múltiples que ya proporciona Java. Como guía, se pueden plantear las siguientes cuestiones, y si la respuesta es afirmativa, lo más adecuado será implementar una clase Exception nueva y, en caso contrario, utilizar una del sistema.&lt;br /&gt;&lt;br /&gt;¿Se necesita un tipo de excepción no representado en las que proporciona el entorno de desarrollo Java?&lt;br /&gt;¿Ayudaría a los usuarios si pudiesen diferenciar las excepciones propias de las que lanzan las clases de otros desarrolladores?&lt;br /&gt;¿Si se lanzan las excepciones propias, los usuarios tendrán acceso a esas excepciones?&lt;br /&gt;¿El package propio debe ser independiente y auto-contenido?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;CAPTURA DE EXEPCIONES&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Las excepciones lanzadas por un método que pueda hacerlo deben recoger en bloque try/catch o try/finally.int valor;&lt;br /&gt;try {&lt;br /&gt;for( x=0,valor = 100; x &lt; name="Cap9_3_1"&gt;&lt;span style="font-family:verdana;font-size:180%;"&gt;&lt;strong&gt;try&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Es el bloque de código donde se prevé que se genere una excepción. Es como si dijésemos "intenta estas sentencias y mira a ver si se produce una excepción". El bloque try tiene que ir seguido, al menos, por una cláusula catch o una cláusula finally.&lt;br /&gt;La sintaxis general del bloque try consiste en la palabra clave try y una o más sentencias entre llaves.try {&lt;br /&gt;// Sentencias Java&lt;br /&gt;}&lt;br /&gt;Puede haber más de una sentencia que genere excepciones, en cuyo caso habría que proporcionar un bloque try para cada una de ellas. Algunas sentencias, en especial aquellas que invocan a otros métodos, pueden lanzar, potencialmente, muchos tipos diferentes de excepciones, por lo que un bloque try consistente en una sola sentencia requeriría varios controladores de excepciones.&lt;br /&gt;También se puede dar el caso contrario, en que todas las sentencias, o varias de ellas, que puedan lanzar excepciones se encuentren en un único bloque try, con lo que habría que asociar múltiples controladores a ese bloque. Aquí la experiencia del programador es la que cuenta y es el propio programador el que debe decidir qué opción tomar en cada caso.&lt;br /&gt;Los controladores de excepciones deben colocarse inmediatamente después del bloque try. Si se produce una excepción dentro del bloque try, esa excepción será manejada por el controlador que esté asociado con el bloque try.&lt;br /&gt;&lt;br /&gt;&lt;a name="Cap9_3_2"&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:180%;"&gt;&lt;strong&gt;catch&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Es el código que se ejecuta cuando se produce la excepción. Es como si dijésemos "controlo cualquier excepción que coincida con mi argumento". No hay código alguno entre un bloque try y un bloque catch, ni entre bloques catch. La sintaxis general de la sentencia catch en Java es la siguiente:catch( UnTipoTrhowable nombreVariable ) {&lt;br /&gt;// sentencias Java&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;El argumento de la sentencia declara el tipo de excepción que el controlador, el bloque catch, va a manejar.&lt;br /&gt;En este bloque tendremos que asegurarnos de colocar código que no genere excepciones. Se pueden colocar sentencias catch sucesivas, cada una controlando una excepción diferente. No debería intentarse capturar todas las excepciones con una sola cláusula, como esta: catch( Excepcion e ) { ...&lt;br /&gt;Esto representaría un uso demasiado general, podrían llegar muchas más excepciones de las esperadas. En este caso es mejor dejar que la excepción se propague hacia arriba y dar un mensaje de error al usuario.&lt;br /&gt;Se pueden controlar grupos de excepciones, es decir, que se pueden controlar, a través del argumento, excepciones semejantes. Por ejemplo:class Limites extends Exception {}&lt;br /&gt;class demasiadoCalor extends Limites {}&lt;br /&gt;class demasiadoFrio extends Limites {}&lt;br /&gt;class demasiadoRapido extends Limites {}&lt;br /&gt;class demasiadoCansado extends Limites {}&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;try {&lt;br /&gt;if( temp &gt; 40 )&lt;br /&gt;throw( new demasiadoCalor() );&lt;br /&gt;if( dormir &lt; name="Cap9_3_3"&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;finally&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Es el bloque de código que se ejecuta siempre, haya o no excepción. Hay una cierta controversia entre su utilidad, pero, por ejemplo, podría servir para hacer un log o un seguimiento de lo que está pasando, porque como se ejecuta siempre puede dejar grabado si se producen excepciones y si el programa se ha recuperado de ellas o no.&lt;br /&gt;&lt;br /&gt;Este bloque finally puede ser útil cuando no hay ninguna excepción. Es un trozo de código que se ejecuta independientemente de lo que se haga en el bloque try.&lt;br /&gt;&lt;br /&gt;A la hora de tratar una excepción, se plantea el problema de qué acciones se van a tomar. En la mayoría de los casos, bastará con presentar una indicación de error al usuario y un mensaje avisándolo de que se ha producido un error y que decida si quiere o no continuar con la ejecución del programa.&lt;br /&gt;Por ejemplo, se podría disponer de un diálogo como el que se presenta en el código siguiente:public class DialogoError extends Dialog {&lt;br /&gt;DialogoError( Frame padre ) {&lt;br /&gt;super( padre,true );&lt;br /&gt;setLayout( new BorderLayout() );&lt;br /&gt;// Presentamos un panel con continuar o salir&lt;br /&gt;Panel p = new Panel();&lt;br /&gt;p.add( new Button( "¿Continuar?" ) );&lt;br /&gt;p.add( new Button( "Salir" ) );&lt;br /&gt;add( "Center",new Label(&lt;br /&gt;"Se ha producido un error. ¿Continuar?" ) )&lt;br /&gt;add( "South",p );&lt;br /&gt;}&lt;br /&gt;public boolean action( Event evt,Object obj ) {&lt;br /&gt;if( "Salir".equals( obj ) ) {&lt;br /&gt;dispose();&lt;br /&gt;System.exit( 1 );&lt;br /&gt;}&lt;br /&gt;return( false );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Y la invocación, desde algún lugar en que se suponga que se generarán errores, podría ser como sigue:try {&lt;br /&gt;// Código peligroso&lt;br /&gt;}&lt;br /&gt;catch( AlgunaExcepcion e ) {&lt;br /&gt;VentanaError = new DialogoError( this );&lt;br /&gt;VentanaError.show();&lt;br /&gt;}&lt;br /&gt;Lo cierto es que hay autores que indican la inutilidad del bloque finally, mientras que desde el Java Tutorial de Sun se justifica plenamente su existencia. El lector deberá revisar todo el material que esté a su alcance y crearse su propia opinión al respecto.&lt;br /&gt;En el programa &lt;a href="http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/fuentes/java904.java"&gt;java904.java&lt;/a&gt;, se intenta demostrar el poder del bloque finally. En él, un controlador de excepciones intenta terminar la ejecución del programa ejecutando una sentencia return. Antes de que la sentencia se ejecute, el control se pasa al bloque finally y se ejecutan todas las sentencias de este bloque. Luego el programa termina. Es decir, quedaría demostrado que el bloque finally no tiene la última palabra palabra.&lt;br /&gt;El programa redefine el método getMessage() de la clase Throwable, porque este método devuelve null si no es adecuadamente redefinido por la nueva clase excepción.&lt;br /&gt;&lt;a name="Cap9_3_4"&gt;&lt;/a&gt;&lt;strong&gt;throw&lt;/strong&gt;&lt;br /&gt;La sentencia throw se utiliza para lanzar explícitamente una excepción. En primer lugar se debe obtener un descriptor de un objeto Throwable, bien mediante un parámetro en una cláusula catch o, se puede crear utilizando el operador new. La forma general de la sentencia throw es:throw ObjetoThrowable;&lt;br /&gt;El flujo de la ejecución se detiene inmediatamente después de la sentencia throw, y nunca se llega a la sentencia siguiente. Se inspecciona el bloque try que la engloba más cercano, para ver si tiene la cláusula catch cuyo tipo coincide con el del objeto o instancia Thorwable. Si se encuentra, el control se transfiere a ese sentencia. Si no, se inspecciona el siguiente bloque try que la engloba, y así sucesivamente, hasta que el gestor de excepciones más externo detiene el programa y saca por pantalla el trazado de lo que hay en la pila hasta que se alcanzó la sentencia throw. En el programa siguiente, &lt;a href="http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/fuentes/java905.java"&gt;java905.java&lt;/a&gt;, se demuestra como se hace el lanzamiento de una nueva instancia de una excepción, y también cómo dentro del gestor se vuelve a lanzar la misma excepción al gestor más externo.class java905 {&lt;br /&gt;static void demoproc() {&lt;br /&gt;try {&lt;br /&gt;throw new NullPointerException( "demo" );&lt;br /&gt;} catch( NullPointerException e ) {&lt;br /&gt;System.out.println( "Capturada la excepcion en demoproc" );&lt;br /&gt;throw e;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public static void main( String args[] ) {&lt;br /&gt;try {&lt;br /&gt;demoproc();&lt;br /&gt;} catch( NullPointerException e ) {&lt;br /&gt;System.out.println( "Capturada de nuevo: " + e );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Este ejemplo dispone de dos oportunidades para tratar el mismo error. Primero, main() establece un contexto de excepción y después se llama al método demoproc(), que establece otro contexto de gestión de excepciones y lanza inmediatamente una nueva instancia de la excepción. Esta excepción se captura en la línea siguiente. La salida que se obtiene tras la ejecución de esta aplicación es la que se reproduce:% java java905&lt;br /&gt;Capturada la excepcion en demoproc&lt;br /&gt;Capturada de nuevo: java.lang.NullPointerException: demo&lt;br /&gt;&lt;a name="Cap9_3_5"&gt;&lt;/a&gt;throws&lt;br /&gt;Si un método es capaz de provocar una excepción que no maneja él mismo, debería especificar este comportamiento, para que todos los métodos que lo llamen puedan colocar protecciones frente a esa excepción. La palabra clave throws se utiliza para identificar la lista posible de excepciones que un método puede lanzar. Para la mayoría de las subclase de la clase Exception, el compilador Java obliga a declarar qué tipos podrá lanzar un método. Si el tipo de excepción es Error o RuntimeException, o cualquiera de sus subclases, no se aplica esta regla, dado que no se espera que se produzcan como resultado del funcionamiento normal del programa. Si un método lanza explícitamente una instancia de Exception o de sus subclases, a excepción de la excepción de runtime, se debe declarar su tipo con la sentencia throws. La declaración del método sigue ahora la sintaxis siguiente:type NombreMetodo( argumentos ) throws excepciones { }&lt;br /&gt;En el ejemplo siguiente, &lt;a href="http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/fuentes/java906.java"&gt;java906.java&lt;/a&gt;, el programa intenta lanzar una excepción sin tener código para capturarla, y tampoco utiliza throws para declarar que se lanza esta excepción. Por tanto, el código no será posible compilarlo.class java906 {&lt;br /&gt;static void demoproc() {&lt;br /&gt;System.out.println( "Capturada la excepcion en demoproc" );&lt;br /&gt;throw new IllegalAccessException( "demo" );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public static void main( String args[] ) {&lt;br /&gt;demoproc();&lt;br /&gt;}&lt;br /&gt;El error de compilación que se produce es lo suficientemente explícito:% javac java906.java&lt;br /&gt;java906.java:30: Exception java.lang.IllegalAccessException must be caught, or&lt;br /&gt;it must be declared in the throws clause of this method.&lt;br /&gt;throw new IllegalAccessException( "demo" );&lt;br /&gt;^&lt;br /&gt;Para hacer que este código compile, se convierte en el ejemplo siguiente, &lt;a href="http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/fuentes/java907.java"&gt;java907.java&lt;/a&gt;, en donde se declara que el método puede lanzar una excepción de acceso ilegal, con lo que el problema asciende un nivel más en la jerarquía de llamadas. Ahora main() llama a demoproc(), que se ha declarado que lanza una IllegalAccessException, por lo tanto colocamos un bloque try que pueda capturar esa excepción.class java907 {&lt;br /&gt;static void demoproc() throws IllegalAccessException {&lt;br /&gt;System.out.println( "Dentro de demoproc" );&lt;br /&gt;throw new IllegalAccessException( "demo" );&lt;br /&gt;}&lt;br /&gt;public static void main( String args[] ) {&lt;br /&gt;try {&lt;br /&gt;demoproc();&lt;br /&gt;} catch( IllegalAccessException e ) {&lt;br /&gt;System.out.println( "Capturada de nuevo: " + e );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;La cláusula catch comprueba los argumentos en el mismo orden en que aparezcan en el programa. Si hay alguno que coincida, se ejecuta el bloque y sigue el flujo de control por el bloque finally (si lo hay) y concluye el control de la excepción.&lt;br /&gt;&lt;br /&gt;Si ninguna de las cláusulas catch coincide con la excepción que se ha producido, entonces se ejecutará el código de la cláusula finally (en caso de que la haya). Lo que ocurre en este caso, es exactamente lo mismo que si la sentencia que lanza la excepción no se encontrase encerrada en el bloque try.&lt;br /&gt;&lt;br /&gt;El flujo de control abandona este método y retorna prematuramente al método que lo llamó. Si la llamada estaba dentro del ámbito de una sentencia try, entonces se vuelve a intentar el control de la excepción, y así continuamente.&lt;br /&gt;&lt;br /&gt;Cuando una excepción no es tratada en la rutina en donde se produce, lo que sucede es lo siguiente. El sistema Java busca un bloque try..catch más allá de la llamada, pero dentro del método que lo trajo aquí. Si la excepción se propaga de todas formas hasta lo alto de la pila de llamadas sin encontrar un controlador específico para la excepción, entonces la ejecución se detendrá dando un mensaje. Es decir, podemos suponer que Java nos está proporcionando un bloque catch por defecto, que imprime un mensaje de error, indica las últimas entradas en la pila de llamadas y sale.&lt;br /&gt;&lt;br /&gt;No hay ninguna sobrecarga en el sistema por incorporar sentencias try al código. La sobrecarga se produce cuando se genera la excepción.&lt;br /&gt;&lt;br /&gt;Se ha indicado ya que un método debe capturar las excepciones que genera, o en todo caso, declararlas como parte de su llamada, indicando a todo el mundo que es capaz de generar excepciones. Esto debe ser así para que cualquiera que escriba una llamada a ese método esté avisado de que le puede llegar una excepción, en lugar del valor de retorno normal. Esto permite al programador que llama a ese método, elegir entre controlar la excepción o propagarla hacia arriba en la pila de llamadas. La siguiente línea de código muestra la forma general en que un método declara excepciones que se pueden propagar fuera de él, tal como se ha visto a la hora de tratar la sentencia throws:tipo_de_retorno( parametros ) throws e1,e2,e3 { }&lt;br /&gt;Los nombres e1,e2,... deben ser nombres de excepciones, es decir, cualquier tipo que sea asignable al tipo predefinido Throwable. Observar que, como en la llamada al método se especifica el tipo de retorno, se está especificando el tipo de excepción que puede generar (en lugar de un objeto Exception).&lt;br /&gt;&lt;br /&gt;He aquí un ejemplo, tomado del sistema Java de entrada/salida:byte readByte() throws IOException;&lt;br /&gt;short readShort() throws IOException;&lt;br /&gt;char readChar() throws IOException;&lt;br /&gt;void writeByte( int v ) throws IOException;&lt;br /&gt;void writeShort( int v ) throws IOException;&lt;br /&gt;void writeChar( int v ) throws IOException;&lt;br /&gt;&lt;br /&gt;Lo más interesante aquí es que la rutina que lee un char, puede devolver un char; no el entero que se requiere en C. C necesita que se devuelva un int, para poder pasar cualquier valor a un char, y además un valor extra (-1) para indicar que se ha alcanzado el final del fichero. Algunas de las rutinas Java lanzan una excepción cuando se alcanza el fin del fichero.&lt;br /&gt;&lt;br /&gt;Cuando se crea una nueva excepción, derivando de una clase Exception ya existente, se puede cambiar el mensaje que lleva asociado. La cadena de texto puede ser recuperada a través de un método. Normalmente, el texto del mensaje proporcionará información para resolver el problema o sugerirá una acción alternativa. Por ejemplo:class SinGasolina extends Exception {&lt;br /&gt;SinGasolina( String s ) { // constructor&lt;br /&gt;super( s );&lt;br /&gt;}&lt;br /&gt;....&lt;br /&gt;// Cuando se use, aparecerá algo como esto&lt;br /&gt;try {&lt;br /&gt;if( j &lt; 1 )&lt;br /&gt;throw new SinGasolina( "Usando deposito de reserva" );&lt;br /&gt;} catch( SinGasolina e ) {&lt;br /&gt;System.out.println( o.getMessage() );&lt;br /&gt;}&lt;br /&gt;Esto, en tiempo de ejecución originaría la siguiente salida por pantalla:&gt; Usando deposito de reserva&lt;br /&gt;Otro método que es heredado de la superclase Throwable es printStackTrace(). Invocando a este método sobre una excepción se volcará a pantalla todas las llamadas hasta el momento en donde se generó la excepción (no donde se maneje la excepción). Por ejemplo:// Capturando una excepción en un método&lt;br /&gt;class testcap {&lt;br /&gt;static int slice0[] = { 0,1,2,3,4 };&lt;br /&gt;public static void main( String a[] ) {&lt;br /&gt;try {&lt;br /&gt;uno();&lt;br /&gt;} catch( Exception e ) {&lt;br /&gt;System.out.println( "Captura de la excepcion en main()" );&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;static void uno() {&lt;br /&gt;try {&lt;br /&gt;slice0[-1] = 4;&lt;br /&gt;} catch( NullPointerException e ) {&lt;br /&gt;System.out.println( "Captura una excepcion diferente" );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Cuando se ejecute ese código, en pantalla observaremos la siguiente salida:&gt; Captura de la excepcion en main()&lt;br /&gt;&gt; java.lang.ArrayIndexOutOfBoundsException: -1&lt;br /&gt;at testcap.uno(test5p.java:19)&lt;br /&gt;at testcap.main(test5p.java:9)&lt;br /&gt;Con todo el manejo de excepciones podemos concluir que se proporciona un método más seguro para el control de errores, además de representar una excelente herramienta para organizar en sitios concretos todo el manejo de los errores y, además, que se pueden proporcionar mensajes de error más decentes al usuario indicando qué es lo que ha fallado y por qué, e incluso podemos, a veces, recuperar al programa automáticamente de los errores.&lt;br /&gt;&lt;br /&gt;La degradación que se produce en la ejecución de programas con manejo de excepciones está ampliamente compensada por las ventajas que representa en cuanto a seguridad de funcionamiento de esos mismos programas.&lt;a name="Cap9_2_1"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-8487198780318345359?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/8487198780318345359/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/la-clase-system-hay-ocasiones-en-que-se.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/8487198780318345359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/8487198780318345359'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/la-clase-system-hay-ocasiones-en-que-se.html' title=''/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-4247621777845419302</id><published>2009-04-08T18:10:00.000-07:00</published><updated>2009-04-08T18:29:23.911-07:00</updated><title type='text'></title><content type='html'>&lt;div align="center"&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;tipos de datos&lt;/span&gt;&lt;/strong&gt; &lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;a name="_Toc458424597"&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;a.) Tipos de datos enteros&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;: &lt;br /&gt;&lt;/span&gt;&lt;strong&gt;Se usan para representar números enteros con signo. Hay cuatro tipos: byte, short, int y long.&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:130%;color:#cc33cc;"&gt;Literales enteros&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Son básicos en la programación en Java y presentan tres formatos:&lt;br /&gt;Decimal: Los literales decimales aparecen como números ordinarios sin ninguna notación especial.&lt;br /&gt;Hexadecimal: Los hexadecimales (base 16) aparecen con un 0x ó 0X inicial, notación similar a la utilizada en C y C++.&lt;br /&gt;Octal: Los octales aparecen con un 0 inicial delante de los dígitos.&lt;br /&gt;Por ejemplo, un literal entero para el número decimal 12 se representa en Java como 12 en decimal, como 0xC en hexadecimal, y como 014 en octal.&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;b.) Tipo de datos boolean:&lt;/span&gt;&lt;br /&gt;Se usa para almacenar variables que presenten dos estados, que serán representados por los valores true y false. Representan valores bi-estado, provenientes del denominado álgebra de Boole.&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;color:#cc33cc;"&gt;Literales Booleanos&lt;/span&gt;&lt;br /&gt;Java utiliza dos palabras clave para los estados: true (para verdadero) y false (para falso). Este tipo de literales es nuevo respecto a C/C++, lenguajes en los que el valor de falso se representaba por un 0 numérico, y verdadero cualquier número que no fuese el 0.&lt;br /&gt;Para declarar un dato del tipo booleano se utiliza la palabra reservada boolean:&lt;br /&gt;boolean reciboPagado = false; // ¡¿Aun no nos han pagado?!.&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;c .) Tipo de datos carácter:&lt;/span&gt;&lt;br /&gt;Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin signo de 16 bits.&lt;br /&gt;Java a diferencia de C/C++ distingue entre matrices de caracteres y cadenas.&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;color:#cc33cc;"&gt;Literales carácter&lt;/span&gt;&lt;br /&gt;Representan un único carácter (de la tabla de caracteres Unicode 1.1) y aparecen dentro de un par de comillas simples. De forma similar que en C/C++. Los caracteres especiales (de control&lt;/strong&gt; &lt;strong&gt;y no imprimibles) se representan con una barra invertida ('\') seguida del código carácter.&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;Tipos de variables&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:130%;color:#ff0000;"&gt;Las variables,&lt;/span&gt; también llamadas caracteres cuantitativos, son aquellas cuyas variaciones son susceptibles de ser medidas cuantitativamente, es decir, que pueden expresar numéricamente la magnitud de dichas variaciones. Por intuición y por experiencia sabemos que pueden distinguirse dos tipos de variables; las continuas y las discretas .&lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Las variables continuas&lt;/span&gt; se caracterizan por el hecho de que para todo para de valores siempre se puede encontrar en valor intermedio, (el peso, la estatura, el tiempo empleado para realizar un trabajo, etc.)&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Una variable es continua,&lt;/span&gt; cuando puede tomar infinitos valores intermedios dentro de dos valores consecutivos. Por ejemplo, la estatura, el peso, la temperatura.&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Las variables discretas&lt;/span&gt; serán aquellas que pueden tomar solo un número limitado de valores separados y no continuos; son aquellas que solo toman un determinado números de valores, porque entre dos valores consecutivos no pueden tomar ningún otro.&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-4247621777845419302?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/4247621777845419302/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/tipos-de-datos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/4247621777845419302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/4247621777845419302'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/tipos-de-datos.html' title=''/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-6863047794463995329</id><published>2009-04-06T18:19:00.000-07:00</published><updated>2009-04-08T17:43:54.652-07:00</updated><title type='text'></title><content type='html'>&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Multi&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Thead&lt;/span&gt;: soporta de modo nativo los &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;threat&lt;/span&gt; o hilos, sin necesidad del uso de &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;librerías&lt;/span&gt; especificas (como es el caso del c++). Esto le permite &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;además&lt;/span&gt; que cada hilo de una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;duplicación&lt;/span&gt; java pueda correr en una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;CPU&lt;/span&gt; distinta, si la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;duplicación&lt;/span&gt; se ejecuta en una maquina que posee varias &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;CPU&lt;/span&gt;. las aplicaciones c++ no son capaces de distribuir de modo transparente para el programador la carga entre varias &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;CPU&lt;/span&gt;.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;actividad:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;averiguar para que &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;sirben&lt;/span&gt; los siguientes comandos, funciones e interpretes que pertenecen al paquete java:&lt;br /&gt;a) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;javac&lt;/span&gt;&lt;br /&gt;b) java&lt;br /&gt;c) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;apple&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;viewer&lt;/span&gt;.&lt;br /&gt;d) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;javadoc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tipos de datos:&lt;/strong&gt;&lt;br /&gt;Investiga sobre los distintos tipos de datos y variables:&lt;br /&gt;enteros, reales, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;carácter&lt;/span&gt; y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;buliano&lt;/span&gt;.&lt;br /&gt;Variables.&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;Desarrollo&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;strong&gt;1-b)&lt;span style="font-size:180%;"&gt;Java&lt;/span&gt;; es un lenguaje de programación orientado a objetos.A diferencia de los lenguajes de programación convencionales, que generalmente están diseñados para ser compilados a código nativo, Java es compilado en un bytecode que es ejecutado (usando normalmente un compilador JIT), por una máquina virtual Java.&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;strong&gt;El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos mucho más simple y elimina herramientas de bajo nivel como punteros.Java está sólo lejanamente emparentado con JavaScript, aunque tengan nombres similares y compartan una sintaxis al estilo de C algo parecida.&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;1-d)&lt;span style="font-size:180%;"&gt;Javadoc&lt;/span&gt;; es una herramienta que viene integrada con el JDK. Es un ejecutable, como "javac" (el compilador) y también se especifican las clases que se quieren "compilar". Lo diferente con javadoc es que no genera código ejecutable (bytecode en el caso de Java), sino documentos html.&lt;br /&gt;Personalmente veo a javadoc como otra gran bondad de ese lenguaje sobrehumano que es Java. Aligera una de las tareas que supongo que la mayoría de los programadores considera un estorbo: La documentación. &lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;strong&gt;¿Cómo funciona javadoc?&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; Es muy sencillo. A medida que se codifica una clase se colocan comentarios delimitados por "/**" y "*/" para indicar inicio y fin del comentario respectivamente. En medio puede ir cualquier cantidad de texto con los caracteres que se desee. Dichos comentarios se colocan justo sobre la declaración de atributos y métodos públicos. Los comentarios colocados sobre métodos y atributos privados son ignorados por defecto, porque de todas formas dado el principio de abstracción del paradigma de programación orientada a objetos no tiene sentido saber para qué sirven si no son accesibles.&lt;br /&gt;El ejecutable javadoc parsea los archivos de las clases y organiza los documentos html. En caso de haber herencia, incluye también los comentarios de los métodos y atributos heredados. También dispone de etiquetas y palabras especiales para ayudar a especificar mejor ciertas cosas como los parámetros de un método. &lt;/strong&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-6863047794463995329?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/6863047794463995329/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/multi-thead-soporta-de-modo-nativo-los.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/6863047794463995329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/6863047794463995329'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/multi-thead-soporta-de-modo-nativo-los.html' title=''/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-7217397561989927233</id><published>2009-04-01T18:35:00.000-07:00</published><updated>2009-04-01T18:49:06.077-07:00</updated><title type='text'>Rendimiento Medio</title><content type='html'>en la actualidad la velocidad del procesado de código java es semejante a la de c++, hay siertas pruebas estándares de comparaciòn (bench mark), en la cuales java gana a c++ y viceversa. esto es asi gracias al uso de compiladores yust in time, los cuales traducen los bete codec de java en código para una determinada CPU que no presisa de la maquina virtual para ser ejecutado, y guardan el resultado de dicha combercion, voviendolo a llamar en caso de volverlos a necesitar, lo que se evita en este caso la sobre caso de trabajo asociada ala interpretacion de bitcodec&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-7217397561989927233?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/7217397561989927233/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/rendimiento-medio.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/7217397561989927233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/7217397561989927233'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/rendimiento-medio.html' title='Rendimiento Medio'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-3889728152117993003</id><published>2009-04-01T18:31:00.000-07:00</published><updated>2009-04-01T18:35:18.203-07:00</updated><title type='text'>Arquitectura Natural</title><content type='html'>El código generado por el compilador Java es independiente de la arquitectura: podría&lt;br /&gt;ejecutarse en un entorno UNIX, Mac o Windows.&lt;br /&gt;El motivo de esto es que el que realmente&lt;br /&gt;ejecuta el código generado por el compilador no es el procesador del ordenador directamente,&lt;br /&gt;sino que este se ejecuta mediante una máquina virtual.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-3889728152117993003?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/3889728152117993003/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/arquitectura-natural.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/3889728152117993003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/3889728152117993003'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/04/arquitectura-natural.html' title='Arquitectura Natural'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-1666864839383946173</id><published>2009-03-31T17:32:00.000-07:00</published><updated>2009-05-04T17:33:21.805-07:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;&lt;span style="font-size:180%;"&gt;Java&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;Estructura y gestión de datos&lt;br /&gt;En la actualidad existen diversos tipos de lenguajes que han sido creados para una determinada función, están especialmente diseñados para facilitar la programación de distintos tipos de problemas, garantizando la seguridad de las aplicaciones para obtener una mayor facilidad de programación y conseguir un mayor aprovechamiento de los recursos del ordenador.&lt;br /&gt;Cuando un programador elige un lenguaje debe pensar en sus necesidades y la facilidad de la programación.&lt;br /&gt;Como nuevos estudiantes de java debemos preguntarnos para que fue pensado este programa.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;Que es java?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Java es un lenguaje de programación con el que podemos realizar cualquier tipo de programa. En la actualidad es un lenguaje muy extendido y cada vez cobra más importancia tanto en el ámbito de Internet como en la informática en general. Está desarrollado por la compañía Sun Microsystems con gran dedicación y siempre enfocado a cubrir las necesidades tecnológicas más punteras.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:trebuchet ms;"&gt;¿Para que se creo java?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;La tecnología Java se creó como una herramienta de programación para ser usada en un proyecto de set-top-box (cuya traducción literal al español es aparato que se coloca encima del televisor, es el nombre con el que se conoce el dispositivo encargado de la recepción y opcionalmente decodificación de señal de televisión analógica o digital (DTV), para luego ser mostrada en un dispositivo de televisión) en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Características de java&lt;/strong&gt;&lt;br /&gt;Las características mas generales de java nos ayudaran haber para que tipo de problemas esta pensado este lenguaje:&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Simple:&lt;/span&gt;&lt;/strong&gt; es un lenguaje sencillo de aprender de sintaxis parecida ala de c++ pero mas simplificado. Cabe aclarar que los creadores de java partieron de la sintaxis de c++, tratando de eliminar las partes complicadas y las fuentes de error del lenguaje.&lt;br /&gt;Orientado a objeto: posiblemente sea el lenguaje mas orientado a objeto de los existentes; en java todo a excepción de los tipos fundamentales de variables (int, char, long, etc.) es un objeto.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Distribuido:&lt;/span&gt;&lt;/strong&gt; java esta muy orientado al trabajo en red soportando protocolos como tcp/IP, udp, http y ftp. El uso de estos protocolos es bastante sencillo comparándolo con otros lenguajes que los soportan&lt;br /&gt;HTTP define la sintaxis y la semántica que utilizan los elementos software de la arquitectura Web (clientes, servidores, proxies) para comunicarse. Es un protocolo orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Robusto&lt;/strong&gt;&lt;br /&gt;El compilador java detecta muchos errores que otros compiladores solo detectarían en tiempo de ejecución o incluso nunca.&lt;br /&gt;If(a=b) then, el compilador java no nos dejaría compilar este código.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Seguro:&lt;/span&gt;&lt;/strong&gt; es un lenguaje muy seguro en cuanto al desarrollo de sus aplicaciones, especialmente en los apple. Esto son programas diseñados para ser ejecutados en una página Web. El programa java garantiza que ningún apple puede escribir o leer desde nuestro disco, o mandar información del usuario que accede ala pagina a través de la red (como por ejemplo la dirección de correo electrónico. En general no permite realizar cualquier acción que pudiera dañar la maquina o violar la intimidad del que visita la pagina Web.&lt;br /&gt;portable: en java no hay aspectos dependientes de la inplementacion, java sigen los mismos estandares en cuanto a tamaño y almacenamiento de datos, esto no ocurre asi en c++ por ejemplo. en este un entero puede tener un tamaño de 16, 32, o mas bits siendo la unica limitacion que un entero sea mayor que un yort o menor que un long int. c++ vajo sistema operativo iunit almacena los datos en formatos littleendia mientras que vajo windon lo ase en formato big endia. java lo ase siempre en little endian para evitar comfucion.&lt;br /&gt;nota: Big y Little Endian se refiere al formato en el cual un dato con múltiples bytes se ordena para escribirse en la memoria de una computadora.&lt;br /&gt;En el formato Big Endian el extremo más grande de cualquier dato aparece en primer lugar. El segundo formato Little Endian se almacena al contrario, es decir al inicio se pone el dato más pequeño.&lt;br /&gt;Conocer estos formatos nos ayudan a interpretar archivos correctamente, ya que el uso entre formatos Big-endian y Little endian depende de la arquitectura del procesador. Un ejemplo más concreto de esto es Intel(Little Endian) y Apple clásico (Big Endian).&lt;br /&gt;&lt;br /&gt;Es PORTABLE :&lt;br /&gt;Más allá de la portabilidad básica por ser de arquitectura independiente, Java implementa otros estándares de portabilidad para facilitar el desarrollo. Los enteros son siempre enteros y además, enteros de 32 bits en complemento a 2. Además, 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;Es INTERPRETADO :&lt;br /&gt;El intérprete Java (sistema run-time) puede ejecutar directamente el código objeto. Enlazar (linkar) un programa, normalmente, consume menos recursos que compilarlo, por lo que los desarrolladores con Java pasarán más tiempo desarrollando y menos esperando por el ordenador. No obstante, el compilador actual del JDK es bastante lento. Por ahora, que todavía no hay compiladores específicos de Java para las diversas plataformas, Java es más lento que otros lenguajes de programación, como C++, ya que debe ser interpretado y no ejecutado como sucede en cualquier programa tradicional.&lt;br /&gt;&lt;br /&gt;Se dice que Java es de 10 a 30 veces más lento que C, y que tampoco existen en Java proyectos de gran envergadura como en otros lenguajes. La verdad es que ya hay comparaciones ventajosas entre Java y el resto de los lenguajes de programación, y una ingente cantidad de folletos electrónicos que supuran fanatismo en favor y en contra de los distintos lenguajes contendientes con Java. Lo que se suele dejar de lado en todo esto, es que primero habría que decidir hasta que punto Java, un lenguaje en pleno desarrollo y todavía sin definición definitiva, está maduro como lenguaje de programación para ser comparado con otros; como por ejemplo con Smalltalk, que lleva más de 20 años en cancha.&lt;br /&gt;&lt;br /&gt;Es MULTITHREADED :&lt;br /&gt;Al ser multithreaded (multihilvanado, en mala traducción), Java permite muchas actividades simultáneas en un programa. Los threads (a veces llamados, procesos ligeros), son básicamente pequeños procesos o piezas independientes de un gran proceso. Al estar los threads contruidos en el lenguaje, son más fáciles de usar y más robustos que sus homólogos en C o C++.&lt;br /&gt;El beneficio de ser miltithreaded consiste en un mejor rendimiento interactivo y mejor comportamiento en tiempo real. Aunque el comportamiento en tiempo real está limitado a las capacidades del sistema operativo subyacente (Unix, Windows, etc.), aún supera a los entornos de flujo único de programa (single-threaded) tanto en facilidad de desarrollo como en rendimiento.&lt;br /&gt;&lt;br /&gt;Cualquiera que haya utilizado la tecnología de navegación concurrente, sabe lo frustrante que puede ser esperar por una gran imagen que se está trayendo. En Java, las imágenes se pueden ir trayendo en un thread independiente, permitiendo que el usuario pueda acceder a la información en la página sin tener que esperar por el navegador.&lt;br /&gt;&lt;br /&gt;Es DINAMICO :&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ía nuevas o actualizadas no paralizarán las aplicaciones actuales (siempre que mantengan el API anterior).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nachocabanes.blogspot.com/2006/12/el-formato-big-endian-y-el-little.html" target="_blank"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-1666864839383946173?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/1666864839383946173/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/03/java-estructura-y-gestion-de-datos-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/1666864839383946173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/1666864839383946173'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/03/java-estructura-y-gestion-de-datos-en.html' title=''/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-4533393601733669095</id><published>2009-03-25T16:09:00.000-07:00</published><updated>2009-03-25T16:12:54.547-07:00</updated><title type='text'>Programacion Orientada a Objetos</title><content type='html'>Introducción&lt;br /&gt;&lt;br /&gt;La programación orientada a objetos expresa un programa como un conjunto de objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar.&lt;br /&gt;&lt;br /&gt;De esta forma, un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos.&lt;br /&gt;&lt;br /&gt;Los métodos y atributos están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a ninguno de ellos, hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.&lt;br /&gt;&lt;br /&gt;Origen&lt;br /&gt;&lt;br /&gt;Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado en el Centro de Cómputo Noruego en Oslo. Al parecer, en este centro, trabajaban en simulaciones de naves, y fueron confundidos por la explosión combinatoria de cómo las diversas cualidades de diversas naves podían afectar unas a las otras. La idea ocurrió para agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamiento. Fueron refinados más tarde para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar "en marcha" en lugar de tener un sistema basado en programas estáticos.&lt;br /&gt;&lt;br /&gt;La programación orientada a objetos tomó posición como el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C.&lt;br /&gt;&lt;br /&gt;Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del código. Los lenguajes orientados a objetos "puros", por otra parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet, y a la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en su versión 5 se ha ido modificando y soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos.&lt;br /&gt;&lt;br /&gt;Conceptos fundamentales&lt;br /&gt;&lt;br /&gt;La programación orientada a objetos es una nueva forma de programar que trata de encontrar una solución a estos problemas. Entre ellos destacan los siguientes:&lt;br /&gt;&lt;br /&gt;Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas, (de c a d),Es la facilidad mediante la cual la clase D ha definido en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D.&lt;br /&gt;&lt;br /&gt;Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos). Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.&lt;br /&gt;&lt;br /&gt;Método: algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.&lt;br /&gt;&lt;br /&gt;Evento: un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.&lt;br /&gt;&lt;br /&gt;Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.&lt;br /&gt;&lt;br /&gt;Atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.&lt;br /&gt;&lt;br /&gt;Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.&lt;br /&gt;Componentes de un objeto:atributos, identidad, relaciones y métodos.&lt;br /&gt;&lt;br /&gt;Representación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.&lt;br /&gt;&lt;br /&gt;Características de la POO&lt;br /&gt;&lt;br /&gt;Hay un cierto desacuerdo sobre exactamente qué características de un método de programación o lenguaje le definen como "orientado a objetos", pero hay un consenso general en que las características siguientes son las más importantes (para más información, seguir los enlaces respectivos):&lt;br /&gt;&lt;br /&gt;Abstracción: Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.&lt;br /&gt;&lt;br /&gt;Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.&lt;br /&gt;&lt;br /&gt;Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su.&lt;br /&gt;&lt;br /&gt;Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.&lt;br /&gt;&lt;br /&gt;Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-4533393601733669095?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/4533393601733669095/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/03/programacion-avanzada-de-objetos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/4533393601733669095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/4533393601733669095'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/03/programacion-avanzada-de-objetos.html' title='Programacion Orientada a Objetos'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-6647889789408278173</id><published>2009-03-18T17:26:00.000-07:00</published><updated>2009-05-20T18:59:04.925-07:00</updated><title type='text'>tabla comparativa</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;Creador&lt;br /&gt;Fecha de la primera edición pública&lt;br /&gt;Última versión estable&lt;br /&gt;Coste (USD)&lt;br /&gt;Licencia de softwares&lt;br /&gt;Motor de navegación actual&lt;br /&gt;Amaya&lt;br /&gt;W3C, INRIA&lt;br /&gt;14 de noviembre de 1996&lt;br /&gt;10.0.1&lt;br /&gt;Gratuito&lt;br /&gt;Libre: W3C&lt;br /&gt;propio&lt;br /&gt;Camino&lt;br /&gt;The Camino Project&lt;br /&gt;febrero de 2002&lt;br /&gt;1.5&lt;br /&gt;Gratuito&lt;br /&gt;Libre: MPL, MPL/GNU/GN LGNU tri-licencia&lt;br /&gt;Gecko&lt;br /&gt;Chrome&lt;br /&gt;Google&lt;br /&gt;septiembre de 2008&lt;br /&gt;1.0.154.36&lt;br /&gt;Gratuito&lt;br /&gt;Libre: BSD&lt;br /&gt;WebKit&lt;br /&gt;Dillo&lt;br /&gt;Arellano Cid, Geerken, Rota, et al.&lt;br /&gt;diciembre de 1999&lt;br /&gt;2.1&lt;br /&gt;Gratuito&lt;br /&gt;Libre: GNU&lt;br /&gt;gzilla&lt;br /&gt;ELinks&lt;br /&gt;Baudis, Fonseca, et al.&lt;br /&gt;diciembre de 2001&lt;br /&gt;0.10.6&lt;br /&gt;Gratuito&lt;br /&gt;Libre: GNU&lt;br /&gt;propio&lt;br /&gt;Epiphany&lt;br /&gt;GNOME&lt;br /&gt;diciembre de 2002&lt;br /&gt;2.18.0&lt;br /&gt;Gratuito&lt;br /&gt;Libre: GNU&lt;br /&gt;Gecko&lt;br /&gt;Flock&lt;br /&gt;The Flock Team&lt;br /&gt;1.2.5&lt;br /&gt;Gratuito&lt;br /&gt;Libre: GNU&lt;br /&gt;Gecko&lt;br /&gt;Galeon&lt;br /&gt;Marco Pesenti Gritti&lt;br /&gt;junio de 2000&lt;br /&gt;2.0.1&lt;br /&gt;Gratuito&lt;br /&gt;Libre: GNU&lt;br /&gt;Gecko&lt;br /&gt;iCab&lt;br /&gt;Alexander Clauss&lt;br /&gt;1998&lt;br /&gt;4.0.0&lt;br /&gt;Gratuito (previa),$30 (pro)&lt;br /&gt;Software no libre&lt;br /&gt;iCab&lt;br /&gt;Internet Explorer&lt;br /&gt;Microsoft,Spyglass&lt;br /&gt;agosto de 1995&lt;br /&gt;7.0.5730.11[1]&lt;br /&gt;Gratuito&lt;br /&gt;Software no libre&lt;br /&gt;Trident&lt;br /&gt;Internet Explorer para Mac&lt;br /&gt;Microsoft&lt;br /&gt;27 de marzo de 2000&lt;br /&gt;5.2.3&lt;br /&gt;Gratuito&lt;br /&gt;Software no libre&lt;br /&gt;Tasman&lt;br /&gt;K-Meleon&lt;br /&gt;Doozan, Erikson, Vallet, Dorian et al.&lt;br /&gt;26 de noviembre de 2000&lt;br /&gt;1.5.1&lt;br /&gt;Gratuito&lt;br /&gt;Libre: GNU&lt;br /&gt;Gecko&lt;br /&gt;Konqueror&lt;br /&gt;KDE&lt;br /&gt;octubre de 2000&lt;br /&gt;4.1.2&lt;br /&gt;Gratuito&lt;br /&gt;Libre: GNU&lt;br /&gt;KHlML&lt;br /&gt;Links&lt;br /&gt;Twibright Labs&lt;br /&gt;1999&lt;br /&gt;2.2&lt;br /&gt;Gratuito&lt;br /&gt;Libre: GNU&lt;br /&gt;propio&lt;br /&gt;Lynx&lt;br /&gt;Montulli, Grobe, Rezac, et al.&lt;br /&gt;julio de 1993&lt;br /&gt;2.8.6&lt;br /&gt;Gratuito&lt;br /&gt;Libre: GNU&lt;br /&gt;propio&lt;br /&gt;Maxthon&lt;br /&gt;Maxthon International Limited&lt;br /&gt;11 de julio de 2002&lt;br /&gt;2.0.8.1720&lt;br /&gt;Gratuito&lt;br /&gt;Software no libre&lt;br /&gt;Trident y soporte parcial para Gecko&lt;br /&gt;Mosaic&lt;br /&gt;Marc Andreessen and Eric Bina, NCSA&lt;br /&gt;2 de abril de 1993&lt;br /&gt;2.6&lt;br /&gt;Gratuito (no comercial)&lt;br /&gt;Software no libre&lt;br /&gt;propio&lt;br /&gt;Mozilla&lt;br /&gt;Mozilla Foundation&lt;br /&gt;7 de diciembre de 1998&lt;br /&gt;1.7.13&lt;br /&gt;Gratuito&lt;br /&gt;Libre: MPL, MPL/GNU/LGNU tri-licencia&lt;br /&gt;Gecko&lt;br /&gt;Mozilla Firefox&lt;br /&gt;Mozilla Foundation&lt;br /&gt;26 de septiembre de 2002&lt;br /&gt;3.0.7&lt;br /&gt;Gratuito&lt;br /&gt;Libre: MPL, MPL/GNU/LGNU tri-licencia&lt;br /&gt;Gecko&lt;br /&gt;Netscape&lt;br /&gt;División Netscape de AOL&lt;br /&gt;14 de noviembre de 2000&lt;br /&gt;9.0.0.6&lt;br /&gt;Gratuito&lt;br /&gt;Software no libre, MPL/GNU/LGNU tri-licencia&lt;br /&gt;Gecko (Usado desde la versión 9)&lt;br /&gt;OmniWeb&lt;br /&gt;The Omni Group&lt;br /&gt;17 de marzo de 1995&lt;br /&gt;5.7&lt;br /&gt;$30&lt;br /&gt;Software no libre,partes bajo símil-BSD&lt;br /&gt;WebKit&lt;br /&gt;Opera&lt;br /&gt;Opera Software&lt;br /&gt;8 de diciembre de 1996&lt;br /&gt;9.64&lt;br /&gt;Gratuito&lt;br /&gt;Software no libre&lt;br /&gt;Presto&lt;br /&gt;Safari&lt;br /&gt;Apple Inc.&lt;br /&gt;23 de junio de 2003&lt;br /&gt;3.2.3&lt;br /&gt;Parte de Mac OS X[2]&lt;br /&gt;Software no libre,partes bajo GNU LGNU&lt;br /&gt;WebKit&lt;br /&gt;SeaMonkey&lt;br /&gt;SeaMonkey Council&lt;br /&gt;30 de enero de 2006&lt;br /&gt;1.1.13&lt;br /&gt;Gratuito&lt;br /&gt;Libre: MPL, MPL/GNU/GNU LGNU tri-licencia&lt;br /&gt;Gecko&lt;br /&gt;WorldWideWeb&lt;br /&gt;Tim Berners-Lee&lt;br /&gt;agosto de 1991&lt;br /&gt;0.17&lt;br /&gt;Gratuito&lt;br /&gt;Libre: Dominio público&lt;br /&gt;NeXTSTEP built-in&lt;br /&gt;Creador&lt;br /&gt;Fecha de la primera edición pública&lt;br /&gt;Última versión estable&lt;br /&gt;Coste (USD)&lt;br /&gt;Licencia de software&lt;br /&gt;Motor de navegación actual&lt;br /&gt;&lt;a id="Soporte_de_sistemas_operativos" name="Soporte_de_sistemas_operativos"&gt;&lt;/a&gt;&lt;br /&gt;Soporte de sistemas operativos&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-6647889789408278173?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/6647889789408278173/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/03/tabla-comparativa.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/6647889789408278173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/6647889789408278173'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/03/tabla-comparativa.html' title='tabla comparativa'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4660807499187681334.post-3377389872121007554</id><published>2009-03-18T16:34:00.000-07:00</published><updated>2009-04-03T16:14:13.344-07:00</updated><title type='text'>sistema operativo</title><content type='html'>&lt;div align="left"&gt;El sistema operativo es el programa (o software) más importante de un ordenador. Para que funcionen los otros programas, cada ordenador de uso general debe tener un sistema operativo. Los sistemas operativos realizan tareas básicas, tales como reconocimiento de la conexión del teclado, enviar la información a la pantalla, no perder de vista archivos y directorios en el disco, y controlar los dispositivos periféricos tales como impresoras, escáner, etc.&lt;br /&gt;En sistemas grandes, el sistema operativo tiene incluso mayor responsabilidad y poder, es como un policía de tráfico, se asegura de que los programas y usuarios que están funcionando al mismo tiempo no interfieran entre ellos. El sistema operativo también es responsable de la seguridad, asegurándose de que los usuarios no autorizados no tengan acceso al sistema.&lt;br /&gt;&lt;strong&gt;Clasificación de los Sistemas Operativos&lt;/strong&gt;&lt;br /&gt;Los sistemas operativos pueden ser clasificados de la siguiente forma:&lt;br /&gt;Multiusuario: Permite que dos o más usuarios utilicen sus programas al mismo tiempo. Algunos sistemas operativos permiten a centenares o millares de usuarios al mismo tiempo.&lt;br /&gt;Multiprocesador: soporta el abrir un mismo programa en más de una cpu.&lt;br /&gt;Multitarea: Permite que varios programas se ejecuten al mismo tiempo.&lt;br /&gt;Multitramo: Permite que diversas partes de un solo programa funcionen al mismo tiempo.&lt;br /&gt;Tiempo Real: Responde a las entradas inmediatamente. Los sistemas operativos como DOS y UNIX, no funcionan en tiempo real.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Cómo funciona un Sistema Oper&lt;/span&gt;ativo&lt;/strong&gt;&lt;br /&gt;Los sistemas operativos proporcionan una plataforma de software encima de la cual otros programas, llamados aplicaciones, puedan funcionar. Las aplicaciones se programan para que funcionen encima de un sistema operativo particular, por tanto, la elección del sistema operativo determina en gran medida las aplicaciones que puedes utilizar.&lt;br /&gt;Los sistemas operativos más utilizados en los PC son DOS, OS/2, y Windows, pero hay otros que también se utilizan, como por ejemplo Linux.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Cómo se utiliza un Sistema Operativo&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Un usuario normalmente interactúa con el sistema operativo a través de un sistema de comandos, por ejemplo, el sistema operativo DOS contiene comandos como copiar y pegar para copiar y pegar archivos respectivamente. Los comandos son aceptados y ejecutados por una parte del sistema operativo llamada procesador de comandos o intérprete de la línea de comandos. Las interfaces gráficas permiten que utilices los comandos señalando y pinchando en objetos que aparecen en la pantalla.&lt;br /&gt;&lt;strong&gt;Ejemplos de Sistema Operativo&lt;/strong&gt;&lt;br /&gt;A continuación detallamos algunos ejemplos de sistemas operativos:&lt;br /&gt;&lt;strong&gt;Familia Windows&lt;/strong&gt;&lt;br /&gt;Windows 95&lt;br /&gt;Windows 98&lt;br /&gt;Windows ME&lt;br /&gt;Windows NT&lt;br /&gt;Windows 2000&lt;br /&gt;Windows 2000 server&lt;br /&gt;Windows XP&lt;br /&gt;Windows Server 2003&lt;br /&gt;Windows CE&lt;br /&gt;Windows Mobile&lt;br /&gt;Windows XP 64 bits&lt;br /&gt;Windows Vista (Longhorn)&lt;br /&gt;&lt;strong&gt;Familia Macintosh&lt;/strong&gt;&lt;br /&gt;Mac OS 7&lt;br /&gt;Mac OS 8&lt;br /&gt;Mac OS 9&lt;br /&gt;Mac OS X&lt;br /&gt;&lt;strong&gt;Familia UNIX&lt;/strong&gt;&lt;br /&gt;AIX&lt;br /&gt;AMIX&lt;br /&gt;GNU/Linux&lt;br /&gt;GNU / Hurd&lt;br /&gt;HP-UX&lt;br /&gt;Irix&lt;br /&gt;Minix&lt;br /&gt;System V&lt;br /&gt;Solaris&lt;br /&gt;UnixWare&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4660807499187681334-3377389872121007554?l=fabriciotejedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabriciotejedor.blogspot.com/feeds/3377389872121007554/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/03/sistema-operativo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/3377389872121007554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4660807499187681334/posts/default/3377389872121007554'/><link rel='alternate' type='text/html' href='http://fabriciotejedor.blogspot.com/2009/03/sistema-operativo.html' title='sistema operativo'/><author><name>fabricio</name><uri>http://www.blogger.com/profile/15987138571391616528</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_5HbStJl-6sA/SsqLsmM5NFI/AAAAAAAAACo/6RUm9EKmvCo/S220/27200909112513%5B1%5D.jpg'/></author><thr:total>0</thr:total></entry></feed>
