SlideShare una empresa de Scribd logo
1 de 60
Descargar para leer sin conexión
REPÚBLICA BOLIVARIANA DE VENEZUELA
MINISTERIO DEL P.P PARA LA EDUCACIÓN UNIVERSITARIA, CIENCIA Y
TECNOLOGÍA
INSTITUTO UNIVERSITARIO POLITÉCNICO “SANTIAGO MARIÑO”
EXTENSIÓN MATURÍN
LA PROGRAMACIÓN ORIENTADA A OBJETOS Y EL LENGUAJE DE
PROGRAMACIÓN JAVA
Docente: Realizado Por:
Ing. María Aguilera Julio C Rojas M
C.I.V-19.091.776
Gustavo E Cedeño C
C.I.V-18.926.649
Materia:
Programación No Numérica I
Carrera:
Ingeniería De Sistemas (47)
Maturín, Marzo de 2016
INTRODUCCIÓN
La programación orientada a objetos es una ciencia, un modelo de programación, con su
teoría y su metodología, que conviene conocer y estudiar antes de nada. Dicho esto, lo
normal es que toda persona que vaya a desarrollar aplicaciones orientadas a objetos
aprenda primero la “ciencia” (o adquiera la forma de pensar) y después el lenguaje,
porque “ciencia” sólo hay una y lenguajes muchos. Es muy importante destacar que
cuando hacemos referencia a la programación orientada a objetos no estamos hablando
de unas cuantas características nuevas añadidas a un lenguaje de programación.
Estamos hablando de una nueva forma de pensar acerca del proceso de descomposición
de problemas y de desarrollo de soluciones de programación.
La programación orientada a objetos surge en la historia como un intento para dominar
la complejidad que, de forma innata, posee el software. Tradicionalmente, la forma de
enfrentarse a esta complejidad ha sido empleando lo que llamamos programación
estructurada, que consiste en descomponer el problema objeto de resolución en
subproblemas y más subproblemas hasta llegar a acciones muy simples y fáciles de
codificar. Se trata de descomponer el problema en acciones, en verbos.
El lenguaje de programación Java es un lenguaje de alto nivel, orientado a objetos. El
lenguaje es inusual porque los programas Java son tanto compilados como interpretados.
La compilación, que ocurre una vez por programa, traduce el código Java a un lenguaje
intermedio llamado Java bytecode. El Bytecode, por su turno, es analizado y ejecutado
(interpretado) por Java Virtual Machine (JVM) un traductor entre el idioma, el sistema
operativo subyacente y el hardware. Todas las implementaciones del lenguaje de
programación deben emular JVM, para permitir que los programas Java ejecuten en
cualquier sistema que tenga una versión de JVM.
La plataforma Java es una plataforma sólo de software que ejecuta sobre la base de
varias plataformas de hardware. Está compuesto por JVM y la interfaz de programación
de aplicaciones (API) Java un amplio conjunto de componentes de software (clases) listos
para usar que facilitan el desarrollo y despliegue de applets y aplicaciones. La API Java
abarca desde objetos básicos a conexión en red, seguridad, generación de XML y
servicios web.
Está agrupada en bibliotecas conocidas como paquetes de clases e interfaces
relacionadas. También está probado que JVM es una plataforma robusta para ejecutar
lenguajes que no sean Java.
DESARROLLO
PROGRAMACIÓN ORIENTADA A OBJETO
1.- ¿Qué es la Orientación a Objeto?
Es un paradigma de programación que usa objetos en sus interacciones, para diseñar
aplicaciones y programas informáticos.
Está basada en varias técnicas, incluyendo herencia, cohesión, abstracción,
polimorfismo, acoplamiento y encapsulamiento.
Su uso se popularizó a principios de la década de 1990. En la actualidad, existe una gran
variedad de lenguajes de programación que soportan la orientación a objetos.
2.- ¿Qué es un objeto?
Un objeto es una unidad dentro de un programa de computadora que consta de un estado
y de un comportamiento, que a su vez constan respectivamente de datos almacenados
y de tareas realizables durante el tiempo de ejecución. Un objeto puede ser creado
instanciando una clase, como ocurre en la programación orientada a objetos, o mediante
escritura directa de código y la replicación otros objetos, como ocurre en la programación
basada en prototipos.
Estos objetos interactúan unos con otros, en contraposición a la visión tradicional en la
cual un programa es una colección de subrutinas (funciones o procedimientos), o
simplemente una lista de instrucciones para el computador. Cada objeto es capaz de
recibir mensajes, procesar datos y enviar mensajes a otros objetos de manera similar a
un servicio.
3.- ¿Qué es una clase?
Una clase es una plantilla para la creación de objetos de datos según un modelo
predefinido. Las clases se utilizan para representar entidades o conceptos, como los
sustantivos en el lenguaje. Cada clase es un modelo que define un conjunto de variables
-el estado, y métodos apropiados para operar con dichos datos -el comportamiento. Cada
objeto creado a partir de la clase se denomina instancia de la clase.
Las clases son un pilar fundamental de la programación orientada a objetos. Permiten
abstraer los datos y sus operaciones asociadas al modo de una caja negra. Los lenguajes
de programación que soportan clases difieren sutilmente en su soporte para diversas
características relacionadas con clases. La mayoría soportan diversas formas de
herencia. Muchos lenguajes también soportan características para proporcionar
encapsulación, como especificadores de acceso.
Una clase también puede tener una representación (metaobjeto) en tiempo de ejecución,
que proporciona apoyo en tiempo de ejecución para la manipulación de los metadatos
relacionados con la clase.
4.- ¿Qué es un 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ó. Un objeto por sí solo no tiene
mucho significado. Ejemplo: el objeto "bicicleta" no tiene mucho sentido si no interactúa
con un objeto "persona" que pedalee.
La interacción entre objetos se produce mediante mensajes. Los mensajes son llamados
a métodos de un objeto en particular.
Podemos decir que el objeto persona envía el mensaje "girar a la izquierda" al objeto
bicicleta.
Los mensajes pueden contener parámetros. Por ejemplo teniendo un método en la clase
bicicleta llamado "Girar" que recibe como parámetro la dirección (derecha o izquierda).
Un mensaje está compuesto por los siguientes tres elementos:
1. El objeto destino, hacia el cual el mensaje es enviado
2. El nombre del método a llamar
3. Los parámetros solicitados por el método
5.- Mencione y explique los dos principios que rigen la orientación a objeto.
El corazón del desarrollo de software de objetos son los conceptos de encapsulación de
datos y abstracción
Abstracción
Denota las características esenciales de un objeto, donde se capturan sus
comportamientos. 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. El proceso de abstracción permite seleccionar las
características relevantes dentro de un conjunto e identificar comportamientos
comunes para definir nuevos tipos de entidades en el mundo real. La abstracción
es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante
ella podemos llegar a armar un conjunto de clases que permitan modelar la
realidad o el problema que se quiere atacar.
Encapsulamiento
Significa reunir todos los elementos que pueden considerarse pertenecientes a
una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la
cohesión diseño estructurado de los componentes del sistema. Algunos autores
confunden este concepto con el principio de ocultación, principalmente porque se
suelen emplear conjuntamente.
6.- Mencione y explique las cuatro características de la orientación a objeto.
Existe un acuerdo acerca de qué características contempla la "orientación a objetos". Las
características siguientes son las más importantes:
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. O, dicho de otro modo, las
referencias y las colecciones de objetos pueden contener objetos de diferentes
tipos, y la invocación de un comportamiento en una referencia producirá el
comportamiento correcto para el tipo real del objeto referenciado. Cuando esto
ocurre en "tiempo de ejecución", esta última característica se llama asignación
tardía o asignación dinámica. Algunos lenguajes proporcionan medios más
estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y
la sobrecarga de operadores de C++.
Herencia
Las clases no se encuentran 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. Estos
pueden compartir y extender su comportamiento sin tener que volver a
implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases
y estas en árboles o enrejados que reflejan un comportamiento común. Cuando
un objeto hereda de más de una clase se dice que hay herencia múltiple; siendo
de alta complejidad técnica por lo cual suele recurrirse a la herencia virtual para
evitar la duplicación de datos.
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 específica 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 estado. Esto asegura
que otros objetos no puedan cambiar el estado interno de un objeto de manera
inesperada, eliminando efectos secundarios e interacciones inesperadas. Algunos
lenguajes relajan esto, permitiendo un acceso directo a los datos internos del
objeto de una manera controlada y limitando el grado de abstracción. La aplicación
entera se reduce a un agregado o rompecabezas de objetos.
Recolección de basura
La recolección de basura (garbage collection) es la técnica por la cual el entorno
de objetos se encarga de destruir automáticamente, y por tanto desvincular la
memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos.
Esto significa que el programador no debe preocuparse por la asignación o
liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la
liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos que
se extendieron para soportar el Paradigma de Programación Orientada a Objetos
como C++ u Object Pascal, esta característica no existe y la memoria debe
desasignarse expresamente.
FUNDAMENTOS DE PROGRAMACIÓN EN JAVA
1.- Historia de JAVA
Java se creó como una herramienta de programación para ser usada en un proyecto de
set-top-box en una pequeña operación denominada the Green Project en Sun
Microsystems en el año 1991. El equipo (Green Team), compuesto por trece personas y
dirigido por James Gosling, trabajó durante 18 meses en Sand Hill Road en Menlo Park
en su desarrollo.
El lenguaje se denominó inicialmente Oak (por un roble que había fuera de la oficina de
Gosling), luego pasó a denominarse Green tras descubrir que Oak era ya una marca
comercial registrada para adaptadores de tarjetas gráficas y finalmente se renombró a
Java.
Es frecuentada por algunos de los miembros del equipo. Pero no está claro si es un
acrónimo o no, aunque algunas fuentes señalan que podría tratarse de las iniciales de
sus diseñadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otros abogan
por el siguiente acrónimo, Just Another Vague Acronym ("sólo otro acrónimo ambiguo
más"). La hipótesis que más fuerza tiene es la de que Java debe su nombre a un tipo de
café disponible en la cafetería cercana, de ahí que el icono de java sea una taza de café
caliente. Un pequeño signo que da fuerza a esta teoría es que los 4 primeros bytes (el
número mágico) de los archivos.class que genera el compilador, son en hexadecimal,
0xCAFEBABE. A pesar de todas estas teorías, el nombre fue sacado al parecer de una
lista aleatoria de palabras.3
Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una
estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras una sesión
maratoniana de tres días entre John Gaga, James Gosling, Patrick Naughton, Wayne
Rosing y Eric Schmidt, el equipo reorientó la plataforma hacia la Web. Sintieron que la
llegada del navegador web Mosaic, propiciaría que Internet se convirtiese en un medio
interactivo, como el que pensaban era la televisión por cable. Naughton creó entonces
un prototipo de navegador, WebRunner, que más tarde sería conocido como HotJava.
En 1994, se les hizo una demostración de HotJava y la plataforma Java a los ejecutivos
de Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al
23 de mayo de 1995, durante las conferencias de SunWorld, a que vieran la luz pública
Java y HotJava, el navegador Web. El acontecimiento fue anunciado por John Gage, el
Director Científico de Sun Microsystems. El acto estuvo acompañado por una pequeña
sorpresa adicional, el anuncio por parte de Marc Andreessen, Vicepresidente Ejecutivo
de Netscape, de que Java sería soportado en sus navegadores. El 9 de enero del año
siguiente, 1996, Sun fundó el grupo empresarial JavaSoft para que se encargase del
desarrollo tecnológico. Dos semanas más tarde la primera versión de Java fue publicada.
2.- ¿Qué es el JDK?
Java Development Kit o (JDK), es un software que provee herramientas de desarrollo
para la creación de programas en Java. Puede instalarse en una computadora local o en
una unidad de red.
En la unidad de red se pueden tener las herramientas distribuidas en varias
computadoras y trabajar como una sola aplicación.
En los sistemas operativos Microsoft Windows sus variables de entorno son:
 JAVAPATH: es una ruta completa del directorio donde está instalado JDK.
 CLASSPATH: son las bibliotecas o clases de usuario.
 PATH: variable donde se agrega la ubicación de JDK.
Los programas más importantes que se incluyen son:
 appletviewer.exe: es un visor de applets para generar sus vistas previas, ya que
un applet carece de método main y no se puede ejecutar con el programa java.
 javac.exe: es el compilador de Java.
 java.exe: es el master escuela (intérprete) de Java.
 javadoc.exe: genera la documentación de las clases Java de un programa.
3.- ¿Qué es el JRE?
Java Runtime Environment o JRE es un conjunto de utilidades que permite la ejecución
de programas Java.
En su forma más simple, el entorno en tiempo de ejecución de Java está conformado por
una Máquina Virtual de Java o JVM, un conjunto de bibliotecas Java y otros componentes
necesarios para que una aplicación escrita en lenguaje Java pueda ser ejecutada. El JRE
actúa como un "intermediario" entre el sistema operativo y Java.
La JVM es el programa que ejecuta el código Java previamente compilado (bytecode)
mientras que las librerías de clases estándar son las que implementan el API de Java.
Ambas JVM y API deben ser consistentes entre sí, de ahí que sean distribuidas de modo
conjunto.
Un usuario sólo necesita el JRE para ejecutar las aplicaciones desarrolladas en lenguaje
Java, mientras que para desarrollar nuevas aplicaciones en dicho lenguaje es necesario
un entorno de desarrollo, denominado JDK, que además del JRE (mínimo imprescindible)
incluye, entre otros, un compilador para Java.
4.- El compilador de JAVA
La función de un compilador es convertir un programa escrito un en lenguaje como Java
a un lenguaje que la computadora pueda entender. Los programas en Java se convierten
en códigos de bytes. El comando para llamar al compilador es: javac MiPrograma.java
Donde el nombre del compilador es javac y MiPrograma.java es el nombre del archivo
que contiene el código de nuestro programa.
Al compilar el programa, el compilador verifica que éste obedezca las reglas de
programación en Java, y si algo sale mal, muestra los mensajes de error apropiados. El
compilador crea un archivo con el sufijo .class. Este contiene el código de bytes
equivalente a su programa en Java.
Pero el archivo .class que produce el compilador no está listo todavía para ejecutarse ya
que requiere vincularse con las bibliotecas de clases Java proceso que se realizará
cuando el programa se ejecute.
5.- La máquina virtual de JAVA
Una máquina virtual Java (en inglés Java Virtual Machine, JVM) es una máquina virtual
de proceso nativo, es decir, ejecutable en una plataforma específica, capaz de interpretar
y ejecutar instrucciones expresadas en un código binario especial (el bytecode Java), el
cual es generado por el compilador del lenguaje Java.
El código binario de Java no es un lenguaje de alto nivel, sino un verdadero código
máquina de bajo nivel, viable incluso como lenguaje de entrada para un microprocesador
físico. Como todas las piezas del rompecabezas Java, fue desarrollado originalmente por
Sun.
La JVM es una de las piezas fundamentales de la plataforma Java. Básicamente se sitúa
en un nivel superior al hardware del sistema sobre el que se pretende ejecutar la
aplicación, y este actúa como un puente que entiende tanto el bytecode como el sistema
sobre el que se pretende ejecutar. Así, cuando se escribe una aplicación Java, se hace
pensando que será ejecutada en una máquina virtual Java en concreto, siendo ésta la
que en última instancia convierte de código bytecode a código nativo del dispositivo final.
La gran ventaja de la máquina virtual java es aportar portabilidad al lenguaje, de manera
que desde Sun Microsystems se han creado diferentes máquinas virtuales java para
diferentes arquitecturas, y, así, un programa .class escrito en Windows puede ser
interpretado en un entorno Linux. Tan solo es necesario disponer de dicha máquina virtual
para dichos entornos. De ahí el famoso axioma que sigue a Java: "escríbelo una vez,
ejecútalo en cualquier parte", o "Write once, run anywhere".
Pero los intentos de la compañía propietaria de Java y productos derivados de construir
microprocesadores que aceptaran el Java bytecode como su lenguaje de máquina fueron
más bien infructuosos.
La máquina virtual de Java puede estar implementada en software, hardware, una
herramienta de desarrollo o un Web browser; lee y ejecuta código precompilado bytecode
que es independiente de la plataforma multiplataforma. La JVM provee definiciones para
un conjunto de instrucciones, un conjunto de registros, un formato para archivos de
clases, la pila, un heap con recolector de basura y un área de memoria. Cualquier
implementación de la JVM que sea aprobada por SUN debe ser capaz de ejecutar
cualquier clase que cumpla con la especificación.
Existen varias versiones, en orden cronológico, de la máquina virtual de Java. En general
la definición del Java bytecode no cambia significativamente entre versiones, y si lo hace,
los desarrolladores del lenguaje procuran que exista compatibilidad hacia atrás con los
productos anteriores.
A partir de J2SE 5.0, los cambios en la especificación de la JVM han sido desarrollados
bajo el auspicio de la Java Community Process (JCP) y especificada en la JSR 924.1
Desde el año 2006, cambios en la especificación para soportar las modificaciones del
formato del fichero de clases (JSR 2022 ) se están llevando a cabo en una versión de
mantenimiento en la JSR 924. Las especificaciones para la JVM están publicadas en lo
que se conoce como "el libro azul". Así reza el prefacio: Esperamos que esta
especificación documente suficientemente la Máquina Virtual de Java para hacer posibles
implementaciones desde cero. Sun proporciona tests que verifican que las
implementaciones de la Máquina Virtual de Java operen correctamente
Kaffe es un ejemplo de una implementación de JVM desde cero. Sun es la propietaria de
la marca registrada "Java", que usa para certificar aquellas implementaciones que se
ajustan y son totalmente compatibles con sus especificaciones.
6.- Explique la anatomía de un programa en JAVA
La anatomía de un programa en JAVA se encuentra compuesto por estas series de
pasos que deben realizarse en ese orden que son los siguientes:
1. Como preparar un Programa en Java:
Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción El
nombre de archivo debe tener el sufijo .java MiPrograma.java
Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción Utilizar
el comando javac para compilar el programa: javac MiPrograma.java
Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción El
compilador crea un nuevo archivo (código de bytes): MiPrograma.class
Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción Ejecutar
el programa iniciando la Máquina Virtual con el comando java: java MiPrograma
2. La estructura de una clase en Java:
Estructura de una clase Definición de una clase Código fuente
3. Anatomía de una aplicación Java:
Anatomía del programa: HolaMundo public class HolaMundo { public static void main(
String[] args ) { System.out.print( "Hola mundo" ); } }
El encabezado de la clase, El encabezado del método main, Paréntesis de llave,
System.out.print
4. Compilación y ejecución de una aplicación Java:
Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción public
class HolaMundo { public static void main( String[] args ) { System.out.print( "Hola mundo"
); } }
Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción public
class HolaMundo { public static void main( String[] args ) { System.out.print( "Hola mundo"
); } }
Escribir Proceso Códigos Máquina Código Compilación de Bytes Virtual Fuente
7.- ¿Cuáles son los tipos de programas que pueden hacerse en JAVA?
Los programas en Java suelen estar en una de las siguientes categorías:
 Applets
Los applets son pequeños programas que se incorporan en una página Web y que
por lo tanto, necesitan de un Navegador Web compatible con Java para poder
ejecutarse. A menudo los applets se descargan junto con una página HTML desde
un Servidor Web y se ejecutan en la máquina cliente.
 Aplicaciones
Las aplicaciones son programas standalone de propósito general que
normalmente se ejecutan desde la línea de comandos del sistema operativo. Con
Java se puede realizar cualquier programa que normalmente se crearía con algún
otro lenguaje de programación.
 Servlets
Los servlets al contrario de los applets son programas que están pensados para
trabajar en el lado del servidor y desarrollar aplicaciones Web que interactúen con
los clientes. Los servlets son una alternativa de la programación CGI tradicional.
8.- Entornos de desarrollo integrado (IDE), para JAVA.
Hemos generado nuestro primer programa Java usando las herramientas más básicas
posibles: el bloc de notas y la ventana consola de DOS. Los programadores utilizan
herramientas más sofisticadas ya que facilitan el trabajo enormemente. Dentro de estas
herramientas podríamos hablar de entornos de desarrollo (IDEs) o frameworks.
A veces ambos términos se confunden. Nosotros nos referiremos a IDE como a un
programa que nos permite desarrollar código en un lenguaje y que incorpora
habitualmente:
a) Un espacio para la escritura de código con cierta ayuda interactiva para generar código
y para indicar los errores de sintaxis que se cometan por parte del programador.
b) La posibilidad de compilar y ejecutar el código escrito.
c) La posibilidad de organizar los proyectos de programación.
d) Herramientas auxiliares para programadores para detección de errores o análisis de
programas (debuggers).
e) Otras opciones como utilidades para pruebas, carga de librerías, etc.
Existen diversos IDEs para Java. Vamos a citar algunos de ellos:
a) Eclipse: software libre que se puede descargar en http://www.eclipse.org. Es uno de
los entornos Java más utilizados a nivel profesional. El paquete básico de Eclipse se
puede expandir mediante la instalación de plugins para añadir funcionalidades a medida
que se vayan necesitando.
b) Netbeans: software libre que se puede descargar en http://www.netbeans.org. Otro de
los entornos Java muy utilizados, también expandible mediante plugins. Facilita bastante
el diseño gráfico asociado a aplicaciones Java.
c) BlueJ: software libre que se puede descargar en http://bluej.org. Es un entorno de
desarrollo dirigido al aprendizaje de Java (entorno académico) y sin uso a nivel
profesional. Es utilizado en distintas universidades para la enseñanza de Java. Destaca
por ser sencillo e incluir algunas funcionalidades dirigidas a que las personas que estén
aprendiendo tengan mayor facilidad para comprender aspectos clave de la programación
orientada a objetos.
d) JBuilder: software comercial. Se pueden obtener versiones de prueba o versiones
simplificadas gratuitas en la web http://www.embarcadero.com buscando en la sección
de productos y desarrollo de aplicaciones. Permite desarrollos gráficos.
e) JCreator: software comercial. Se pueden obtener versiones de prueba o versiones
simplificadas gratuitas en la web http://www.jcreator.com. Este IDE está escrito en C++ y
omite herramientas para desarrollos gráficos, lo cual lo hace más rápido y eficiente que
otros IDEs.
9.- Elementos de un programa Java
Comentarios:
Un comentario es un texto que se escribe dentro de un programa con el fin de facilitar la
comprensión del mismo. Los comentarios se utilizan para explicar y documentar el código
fuente.
En Java se pueden utilizar tres tipos de comentarios:
Comentario tradicional estilo C/C++.
Empieza con los caracteres /* y acaba con */.
Pueden ocupar más de una línea y pueden aparecer en cualquier lugar donde pueda
aparear un espacio en blanco. No pueden anidarse.
Ejemplos de comentarios estilo C/C++:
/* Programa Ecuación segundo grado
Calcula las soluciones de una ecuación de segundo grado */
/* Lectura de datos por teclado */
Comentarios de una sola línea.
Comienzan con una doble barra ( // ) y se pueden extender hasta el final de la línea.
No tienen carácter de terminación.
Ejemplos de comentarios de una sola línea:
// Programa Ecuación segundo grado
// Calcula las soluciones de una ecuación de segundo grado
int p; // precio del producto
Comentarios de documentación Javadoc.
Son comentarios especiales para generar documentación del programa.
Comienza con /** y termina con */
Ejemplo de comentario de documentación Javadoc:
/**
*
* @author Enrique
* @version 1.0
*
*/
Variables:
Una variable en Java es un identificador que representa una palabra de memoria que
contiene información. El tipo de información almacenado en una variable sólo puede ser
del tipo con que se declaró esa variable.
Una variable se declara usando la misma sintaxis de C. Por ejemplo la siguiente tabla
indica una declaración, el nombre de la variable introducida y el tipo de información que
almacena la variable:
Declaración identificador tipo
int i; i entero
String s; s referencia a string
int a[]; a referencia a arreglo de enteros
int[] b; b referencia a arreglo de enteros
Java posee dos grandes categorías de tipos para las variables:
Tipos Primitivos referencias a Objetos
int, short, byte, long Strings
char, boolean Arreglos
float, double otros objetos
Las variables de tipos primitivos almacenan directamente un valor que siempre pertenece
al rango de ese tipo. Por ejemplo una variable int almacena un valor entero como 1, 2, 0,
-1, etc.
Esto significa que al asignar una variable entera a otra variable entera, se copia el valor
de la primera en el espacio que ocupa la segunda variable.
Las variables de tipo referencia a objetos en cambio almacenan direcciones y no valores
directamente. Una referencia a un objeto es la dirección de un área en memoria destinada
a representar ese objeto. El área de memoria se solicita con el operador new.
Al asignar una variable de tipo referencia a objeto a otra variable se asigna la dirección y
no el objeto referenciado por esa dirección. Esto significa que ambas variables quedan
referenciando el mismo objeto.
La diferencia entre ambas asignaciones se observa en la siguiente figura:
Esto tiene implicancias mayores ya que si se modifica el objeto referenciado por r,
entonces también se modifica el objeto referenciado por s, puesto que son el mismo
objeto.
En Java una variable no puede almacenar directamente un objeto, como ocurre en C y
C++. Por lo tanto cuando se dice en Java que una variable es un string, lo que se quiere
decir en realidad es que la variable es una referencia a un string.
Operadores:
Los operadores son muy similares a los de C++, ya lo advertimos en su momento.
Operadores Aritméticos: Los habituales
 Suma +.
 Resta - .
 Multiplicación *.
 División /.
 Resto de la División %.
Operadores de Asignación: El principal es '=' pero hay más operadores de asignación
con distintas funciones que explicamos brevemente ahora.
 '+=' : op1 += op2 à op1 = op1 + op2
 '-=' : op1 -= op2 à op1 = op1 - op2
 '*=' : op1 *= op2 à op1 = op1 * op2
 '/=' : op1 /= op2 à op1 = op1 / op2
 '%=' : op1 %= op2 à op1 = op1 % op2
Operadores Unarios: El mas (+) y el menos (-). Para cambiar el signo del operando.
Operador Instanceof: Nos permite saber si un objeto pertenece a una clase o no.
 NombreObjeto instanceof NombreClase
Operadores Incrementales: Son los operadores que nos permiten incrementar las
variables en una unidad. Se pueden usar delante y detrás de la variable dependiendo de
lo que queramos, es decir, si queremos que incremente o viceversa antes de utilizar o lo
contrario.
 '++'
 '--'
Operadores Relacionales: Permiten comparar variables según relación de
igualdad/desigualdad o relación mayor/menor. Devuelven siempre un valor boolean.
 '>': Mayor que
 '<': Menor que
 '==': Iguales
 '¡=': Distintos
 '>=': Mayor o igual que
 '<=': Menor o igual que
Operadores Lógicos: Nos permiten construir expresiones lógicas.
 '&&’: devuelve true si ambos operandos son true.
 '||’: devuelve true si alguno de los operandos son true.
 '!' : Niega el operando que se le pasa.
 '&’: devuelve true si ambos operandos son true, evaluándolos ambos.
 '|’: devuelve true uno de los operandos es true, evaluándolos ambos.
Operador de concatenación con cadena de caracteres '+':
 Por Ejemplo: System.out.println("El total es"+ result +"unidades");
Operadores que actúan a nivel de bits: Son mucho menos utilizados por eso los
explicamos más por encima.
 '>>': desplazamiento a la derecha de los bits del operando
 '<<': desplazamiento a la izquierda de los bits de operando
 '&': operador and a nivel de bit.
 '|': operador or a nivel de bit
Expresiones:
En Java cada expresión tiene un tipo que se determina durante la compilación, es decir
es independiente del valor durante la ejecución. Una expresión puede ser:
 Una constante: 1, 1.0, true, etc.
El tipo de esta expresión es el tipo de la constante. En el ejemplo los tipos son int,
double y boolean respectivamente.
 Una variable: i, s, a
El tipo de esta expresión es el tipo con que se declaró aquella variable. En el
ejemplo los tipos son entero, referencia a string y referencia a arreglo.
 El resultado de una operación: i+1, a[1], etc.
El tipo se determina en función de los tipos de las expresiones que se indican como
argumentos de la operación.
Java tiene prácticamente los mismos operadores de C y C++. Cada operador acepta una,
dos o tres expresiones de diversos tipos. A veces un operador no está definido para
argumentos de ciertos tipos. Por ejemplo la resta entre strings no está definida. Pero la
suma de strings está definida como la concatenación. A continuación veremos los
operadores más frecuentes en Java.
Operadores binarios entre expresiones numéricas:
Símbolo Operación
+ Suma
- Resta
* Multiplicación
/ División
% Resto
Los operandos y el resultado de estos operadores pueden ser:
Dominio Rango
int*int int
long*long long
float*float float
double*double double
 Al operar con byte y short, estos se convierten implícitamente a int.
 Cuando los tipos de los operandos no coinciden, el operando de menor rango se
convierte implícitamente al tipo de mayor rango. El resultado de la operación es
del tipo de mayor rango.
Ejemplos:
int a=1, b=2;
int c= a + b;
short s= 1;
int d= s + c; // s se convierte a int
float f= 1.0 + a; // a se convierte a float
Operadores unarios sobre expresiones numéricas:
Símbolo Operación Argumento
+ exp nada int | long | float | double
- exp cambio de signo int | long | float | double
El resultado de estas operaciones es siempre del mismo tipo del operando.
Si el operando es byte o short entonces se convierte a int, se realiza la operación y el
resultado es un int.
Operadores sobre variables enteras:
Símbolo Operación Argumento
++ var preincremento int | short | byte | long
-- var predecremento int | short | byte | long
var ++ postincremento int | short | byte | long
var -- postdecremento int | short | byte | long
El resultado de estas operaciones es siempre del mismo tipo del operando.
Ejemplos:
int a=1, b=2;
int c= +a;
int d= -(c+1);
b= a++; // b= 1, a=2
a= --b; // a=b= 0
(a+1)++; // error a+1 no es una variable
float f= a;
f++; // error f no es entero
Operadores binarios relacionales:
Símbolo Operación
> mayor
< menor
>= mayor igual
<= menor igual
== igual
!= distinto
Los operandos y el resultado de estos operadores pueden ser:
Dominio Rango
int*int boolean
long*long boolean
float*float boolean
double*double boolean
Operadores entre valores booleanos:
Operación Significado
exp && exp y-lógico
exp || exp o-lógico
! exp negación
Los operandos y el resultado de estos operadores son siempre booleanos.
Los operadores && y || evalúan la expresión del lado derecho sólo si es necesario.
Ejemplos:
int a=1, b=2;
boolean v= ! a<=b && a==5 || b!=4;
boolean w= ((! a<=b) && a==5) || b!=4;
boolean w2= a<=b && a; // error a no es boolean
Conversiones: cast
 Java realiza conversiones implícitas de menor a mayor rango.
 Eventualmente hay pérdida de significacia al convertir enteros a punto flotante.
 Todas las conversiones de mayor a menor rango deben ser explícitas por medio
del operador de cast:
(tipo)expresión
Ejemplos:
int i= 1;
short s= 2;
int j= i+s;
s= a; // error short < int
s= (short)a; // Ok
i= 1.0; // error int < double
i= (int)1.0; // Ok
f= 1.0; // error float < double
f= (float)1.0; // Ok
f= 1.0f; // Ok
boolean v=(boolean)a; // error no existe conversión
Precedencia de Operadores:
. () []
unarios: - + (cast)
* / %
+ -
< > <= >= == !=
!
||
&&
10.- Entrada y Salida
La entrada y salida en java se implementa en el paquete java.io y toto el código
presentado en este capítulo se importa, aunque no se incluya la correspondiente
sentencia import.
La E/S en java se basa en el concepto de flujo, que es una secuencia ordenada de datos
que tienen una fuente (flujos de entrada) o un destino (flujos de salida). Las clases de
E/S aislan a los programadores de los detalles específicos del sistema de funcionamiento
de la máquina, al tiempo que posibilitan el acceso a recursos del sistema por medio de
ficheros o archivos (files).
En este capítulo vamos a ocuparnos de las clases de E/S más sencillas, dejando las otras
más sofisticadas para cuando tengamos necesidad de utilizarlas.
Entrada básica: la clase InputStream
La clase abstracta InputStream declara los métodos para leer datos desde una fuente
concreta y es la clasa base de la mayor parte de los flujos de entrada en java.io. Soporta
los métodos siguientes:
 int read(): lee un sólo byte de datos y los devuelve en el rango [0..255]. Devuelve
-1 cuando se alcanza el final del flujo y no puede seguir leyendo bytes.
 int read (byte [] buf): lee un array de bytes hasta buf.length. Devuelve el número
de bytes leidos o -1 cuando se llega al final del flujo.
 int read (byte [] buf, int off, int len): lee len bytes del flujo (o los que pueda) y los
coloca a partir de la posición off del array.
 long skip(long count): salta hasta count bytes de entrada o hasta el final del flujo
de entrada, devolviendo el número de bytes saltados.
 int available(): devuelve el número de bytes que están disponibles para leerse.
 void close (): cierra el flujo de entrada que abrió el constructor no-arg, liberando
los recursos asociados a ese flujo. No es necesario invocar este método ya que el
flujo se cierra cuando se destruye el objeto aunque es conveniente hacerlo ya que
vuelca el buffer sobre el disco.
El siguiente ejemplo es un programa muy sencillo que hace el eco del la entrada estandar
(el teclado) leyendo los caracteres de 5 en 5 (el return también es un carácter). Finaliza
cuando se cierra el flujo de entrada con un carácter Ctrl-D. El método main debe indicar
que lanzará una excepción InputStream. El método read se aplica sobre el objeto
System.in que es un flujo de entrada; la entrada estandar, el teclado. El constructor
String(byte[] bytes, int hiByte, int offset, int conunt) hace un String nuevo cuyo valor es el
subarray especificado del array bytes comenzando en offset y de count caracteres. En
las conversiones de ASCII8 o ISO-LATIN-1 el hibyte estará a 0.
import java.io.*;
class Eco{
public static void main(String [] args)
throws IOException{
byte [] b= new byte[5];
String cadena;
int l=0;
for(;;){
l=System.in.read(b);
if (l<0) break;
cadena= new String(b,0,0,l);
System.out.print("/"+cadena+"/");
}
}}
Salida básica: la clase OutputStream
La clase abstracta OutputStream es análoga a InputStream sólo que proporciona
métodos para manejar el flujo de salida. Los métodos que incluye son:
 void write(int b): escribe b como byte, que, aunque sea declarado como int es
transformado a byte. Esto es porque habitualmente es el resultado de una
operación previa.
 void write(byte [] buf): escribe un array de bytes.
 void write(byte [] buf, int offset, int count): escribe un array buf de bytes,
empezando en la posición offset y escribiendo count de ellos, deteniendose antes
si encuentra el final del array.
 void flush(): vacia el flujo de modo que los bytes que quedaran por escribir son
escritos.
 void close(): cierra el flujo de salida liberando los recursos asociados a ese flujo.
A menos que se diga lo contrario estos métodos lanzan una excepción IOException si
detectan algún error en el flujo de salida.
Salida con formato: la clase PrintStream
La clase PrintStream proporciona utilidades para dar formato a la salida. Tiene dos
métodos print y println que están sobrecargados para los tipos primitivos, objetos,
cadenas y arrays de caracteres. La diferencia entre ambos métodos está en que println
añade un carácter de nueva línea. Además el método println además puede llamarse sin
argumentos, produciendo una nueva línea.
System.out es una referencia a PrintStream. PrintStream proporciona dos constructores,
ambos con un primer argumento de tipo OutputStream cuya diferencia está en un
segundo argumento booleano que indica si debe vaciar el flujo con cada carácter de
nueva línea.
Entrada y Salida de Tipos Primitivos: las clases DataInputStream y DataOutputStream
Aunque leer y escribir bytes es útil, a menudo es necesario transmitir datos de tipos
primitivos dentro de un flujo. Las clases DataInputStream y DataOutputStream
proporcionan métodos para la lectura y escritura de tipos primitivos de un modo
independiente de la máquina. Así proporcionan los siguientes pares de métodos
lectura/escritura:readBoolean y writeBoolean, readChar y writeChar, readByte y
writeByte, readUnsignedByte y writeUnsignedByte, readShort y writeShort,
readUnsignedShort y writeUnsignedShort, readInt y writeInt, readLong y writeLong,
readFloat y writeFloat, readDouble y writeDouble, readUTF y writeUTF (UTF es Unicode
Transmition Format, que se utiliza para transmitir los caracteres de un String de 16 bits
codificada en 8 bits.)
Además de estos métodos la clase DataInputStream proporciona varios métodos más:
 void readFully (byte [] buf): lee bytes en buf. También existe la versión readFully
(byte []buf, int offset, int count).
 int skipBytes (int n): salta n bytes.
 String readLine (): lee un String hasta que se alcanza una n un r o un par rn. La
secuencia final no es incluida en la cadena. Si se alzanza el final de la entrada se
devuelve el null.
La clase DataOutputStream proporciona también un conjunto de métodos aparte de los
dedicados a escribir los tipos primitivos. Proporciona signaturas equivalentes a los tres
métodos write de la clase OutputStream y además los siguientes métodos:
 void writeBytes(String s): escribe un String como una secuencia de bytes,
perdiendo el byte superior de cada carácter.
 void writeChars(String s): escribe un String como una secuencia de caracteres.
El siguiente ejemplo implementa un acumulador, que se incrementa en las cantidades
que lee del teclado. Se utiliza el método readLine para leer hasta el final de la línea y
almacenarlo en un Strint, que luego es tranformado en un entero utilizando el método
parseInt de la clase Integer.
import java.io.*;
class Acumulador {
public static void main( String[ ] args )
throws IOException
{
DataInputStream input = new DataInputStream( System.in );
String bufferIn;
int valor, total = 0;
System.out.print("n["+total+"] ");
while((bufferIn = input.readLine()) != null){
valor = Integer.parseInt( bufferIn );
total += valor;
System.out.print("n["+total+"] ");
}
System.out.println("n["+total+"]n");
}
}
Entrada y Salida con Ficheros: las clases FileInputStream y FileOutputStream
Gran parte de la entrada y salida de los programas se realiza basándose en ficheros y
para ello java.io aporta dos clases. Una para ficheros de entrada, FileInputStream, y otra
para ficheros de salida, FileOutputStream. La diferencia entre ficheros de entrada y de
salida es fundamental, pues situaciones como intentar leer de un fichero de salida o
viceversa pueden generar en errores. FileOutputStream crea un fichero, salvo que exista
y sea de sólo lectura.
Estas clases aportan tres constructores cada una, dependiendo de la información
aportada para identificar el fichero a abrir:
 Un constructor que toma como argumento un String que es el nombre del fichero
que se va a abrir.
 Un constructor que toma un objeto de tipo File que se refiere al fichero (ver la clase
File).
 Un constructor que toma un objeto de tipo FileDescriptor, que constituye un valor
dependiente del sistema de ficheros y que describe un fichero abierto.
El siguiente programa ejemplo maneja dos ficheros, uno de entrada y otro de salida, de
modo que copia uno en otro. Para leer y escribir en ellos se utilizan los métodos de la
clase InputStream y OutputStream, ya que las clases FileInputStream y FileOutputStream
son extensiones de las de entrada y salida básica.
import java.io.*;
class FileIO{
public static void main(String [] args)
throws FileNotFoundException, IOException{
FileInputStream in = new FileInputStream("entrada.txt");
FileOutputStream out = new FileOutputStream("salida.txt");
int n=0,c;
System.out.print ("nCopiando ...");
while( (c = in.read()) != -1){
out.write(c);
n++;
}
in.close();
out.close();
System.out.print ("nSe han copiado "+n+" caracteresn");
}}
Flujos E/S Estándar
El programador puede utilizar para la E/S los tres flujos del sistema que están disponibles
como campos estáticos de la clase System: System.in, System.out y System.err:
 static InputStream in flujo de entrada estándar para leer datos de tipo carácter.
 static OutputStream out flujo de salida estándar para escribir mensajes.
 static OutputStream err flujo de salida estándar para escribir mensajes de error.
Normalmente la entrada estándar está asociada al teclado, y tanto la salida estándar
como la salida de error estándar están asociadas al monitor, pero esto se puede cambiar,
redirigiendolas a ficheros. Tanto out como err son de tipo PrintStream, por tanto los
mensajes de salida normal, como los de error, son mostrados utilizando los métodos print
de la clase PrintStream.
Por ejemplo, se puede ejecutar el programa Acumulador anteriormente descrito
redirigiendo las entradas y salidas a ficheros de la manera siguiente (versión Unix):
java Acumulador <en.txt >sa.txt 2>er.txt
Siendo el contenido de los ficheros
 sa.txt
 1
 2
 3
 sa.txt

 [0]
 [1]
 [3]
 [6]
 [6]

y estando el fichero er.txt vacio por no haberse producido error alguno.
11.- Estructuras de Control
Las estructuras de control determinan la secuencia de ejecución de las sentencias de un
programa.
Las estructuras de control se dividen en tres categorías:
Secuencial
Condicional o Selectiva
Iterativa o Repetitiva.
Estructura Secuencial
El orden en que se ejecutan por defecto las sentencias de un programa es secuencial.
Esto significa que las sentencias se ejecutan en secuencia, una después de otra, en el
orden en que aparecen escritas dentro del programa.
La estructura secuencial está formada por una sucesión de instrucciones que se ejecutan
en orden una a continuación de la otra.
Cada una de las instrucciones están separadas por el carácter punto y coma (;).
Las instrucciones se suelen agrupar en bloques.
El bloque de sentencias se define por el carácter llave de apertura ({) para marcar el inicio
del mismo, y el carácter llave de cierre (}) para marcar el final.
Ejemplo:
{
instrucción 1;
instrucción 2;
instrucción 3;
}
En Java si el bloque de sentencias está constituido por una única sentencia no es
obligatorio el uso de las llaves de apertura y cierre ({ }), aunque sí recomendable.
Ejemplo de programa Java con estructura secuencial: Programa que lee dos números
por teclado y los muestra por pantalla.
/* Programa que lea dos números por teclado y los muestre por pantalla.
*/
import java.util.*;
public class Main {
public static void main(String[] args){
//declaración de variables
int n1, n2;
Scanner sc = new Scanner(System.in);
//leer el primer número
System.out.println("Introduce un número entero: ");
n1 = sc.nextInt(); //lee un entero por teclado
//leer el segundo número
System.out.println("Introduce otro número entero: ");
n2 = sc.nextInt(); //lee un entero por teclado
//mostrar resultado
System.out.println("Ha introducido los números: " + n1 + " y " + n2);
}
}
Ejemplo de programa Java con estructura secuencial: Programa que lee dos números de
tipo double por teclado y calcula y muestra por pantalla su suma, resta y multiplicación.
/*
* Programa que lee dos números de tipo double por teclado
* y muestra su suma, resta y multiplicación.
*/
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double numero1, numero2;
System.out.println("Introduce el primer número:");
numero1 = sc.nextDouble();
System.out.println("Introduce el segundo número:");
numero2 = sc.nextDouble();
System.out.println("Números introducido: " + numero1 + " " + numero2);
System.out.println
(numero1 + " + " + numero2 + " = " + (numero1+numero2));
System.out.println
(numero1 + " - " + numero2 + " = " + (numero1-numero2));
System.out.println
(numero1 + " * " + numero2 + " = " + numero1*numero2);
}
}
Para modificar el orden de ejecución de las instrucciones de un programa Java se utilizan
las estructuras condicionales y repetitivas.
Estructura Condicional, Alternativa o Selectiva
La estructura condicional determina si se ejecutan unas instrucciones u otras según se
cumpla o no una determinada condición.
En java la estructura condicional se implementa mediante:
- Instrucción if.
- Instrucción switch.
- Operador condicional ? :
1 INSTRUCCION if
Puede ser del tipo:
- Condicional simple: if
- Condicional doble: if ... else ...
- Condicional múltiple: if .. else if ..
La condición debe ser una expresión booleana es decir debe dar como resultado un
valor booleano (true ó false).
Condicional simple: se evalúa la condición y si ésta se cumple se ejecuta una
determinada acción o grupo de acciones. En caso contrario se saltan dicho grupo de
acciones.
if(expresión_booleana){
instrucción 1
instrucción 2
.......
}
Si el bloque de instrucciones tiene una sola instrucción no es necesario escribir las llaves
{ } aunque para evitar confusiones se recomienda escribir las llaves siempre.
Ejemplo de programa Java con estructura condicional: Programa que pide por teclado la
nota obtenida por un alumno y muestra un mensaje si el alumno ha aprobado.
/*
* Programa que pide una nota por teclado y muestra un mensaje si la nota es
* mayor o igual que 5
*/
import java.util.*;
public class Ejemplo0If {
public static void main( String[] args ){
Scanner sc = new Scanner( System.in );
System.out.print("Nota: ");
int nota = sc.nextInt();
if (nota >= 5 ){
System.out.println("Enorabuena!!");
System.out.println("Has aprobado");
}
}
}
Condicional doble: Se evalúa la condición y si ésta se cumple se ejecuta una
determinada instrucción o grupo de instrucciones. Si no se cumple se ejecuta otra
instrucción o grupo de instrucciones.
if(expresión booleana){
instrucciones 1
}
else{
instrucciones 2
}
Ejemplo de programa Java que contiene una estructura condicional doble: Programa
que lee la nota de un alumno y muestra si el alumno ha aprobado o no.
/*
* Programa que pide una nota por teclado y muestra si se ha aprobado o no
*/
import java.util.*;
public class Ejemplo0If {
public static void main( String[] args ){
Scanner sc = new Scanner( System.in );
System.out.print("Nota: ");
int nota = sc.nextInt();
if (nota >= 5 ){
System.out.println("Enorabuena!!");
System.out.println("Has aprobado");
}
else
System.out.println("Lo Siento, has suspendido");
}
}
Otro ejemplo de programa Java que contiene una estructura condicional doble: Calcular
si un número es par. El programa lee un número por teclado y muestra un mensaje
indicando si es par o impar.
/*
* programa que pide un número por teclado y calcula si es par o impar
*/
import java.util.*;
public class EjemploIf {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num;
System.out.println("Introduzca numero: ");
num = sc.nextInt();
if ((num%2)==0)
System.out.println("PAR");
else
System.out.println("IMPAR");
}
}
Condicional múltiple: Se obtiene anidando sentencias if ... else. Permite construir
estructuras de selección más complejas.
if (expresion_booleana1)
instruccion1;
else if (expresion_booleana2)
instruccion2;
else
instruccion3;
Cada else se corresponde con el if más próximo que no haya sido emparejado.
Una vez que se ejecuta un bloque de instrucciones, la ejecución continúa en la
siguiente instrucción que aparezca después de las sentencias if .. else anidadas.
Ejemplo de programa Java que contiene una estructura condicional múltiple: Programa
que lee una hora (número entero) y muestra un mensaje según la hora introducida.
/*
* Programa que muestra un saludo distinto según la hora introducida
*/
import java.util.*;
public class Ejemplo2If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int hora;
System.out.println("Introduzca una hora (un valor entero): ");
hora = sc.nextInt();
if (hora >= 0 && hora < 12)
System.out.println("Buenos días");
else if (hora >= 12 && hora < 21)
System.out.println("Buenas tardes");
else if (hora >= 21 && hora < 24)
System.out.println("Buenas noches");
else
System.out.println("Hora no válida");
}
}
Ejemplo de programa Java que contiene una estructura condicional múltiple: Programa
que lee una nota (número entero entre 0 y 10) y muestra la calificación equivalente en
forma de texto.
/*
* programa que lee una nota y escribe la calificación correspondiente
*/
import java.util.*;
public class Ejemplo3If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double nota;
System.out.println("Introduzca una nota entre 0 y 10: ");
nota = sc.nextDouble();
System.out.println("La calificación del alumno es ");
if(nota < 0 || nota > 10)
System.out.println("Nota no válida");
else if(nota==10)
System.out.println("Matrícula de Honor");
else if (nota >= 9)
System.out.println("Sobresaliente");
else if (nota >= 7)
System.out.println("Notable");
else if (nota >= 6)
System.out.println("Bien");
else if (nota >= 5)
System.out.println("Suficiente");
else
System.out.println("Suspenso");
}
}
Comparar String en Java
Para comparar el contenido de dos Strings en Java se usa el método equals:
if ((cadena1.equals(cadena2))
En caso de que una cadena coincida exactamente con una constante se puede usar ==
String nombre = "Lucas";
if (nombre == "Lucas")
Para comparar Strings en el orden alfabético se usa el método compareTo
if (cadena1.compareTo(cadena2) < 0) // cadena1 antes que cadena2
if (cadena1.compareTo(cadena2) > 0) // cadena1 después que cadena2
if (cadena1.compareTo(cadena2) == 0) // cadena1 igual que cadena2
2 INSTRUCCION switch
Se utiliza para seleccionar una de entre múltiples alternativas.
La forma general de la instrucción switch en Java es la siguiente:
switch (expresión){
case valor 1:
instrucciones;
break;
case valor 2:
instrucciones;
break;
· · ·
default:
instrucciones;
}
La instrucción switch se puede usar con datos de tipo byte, short, char e int. También
con tipos enumerados y con las clases envolventes Character, Byte, Short e Integer. A
partir de Java 7 también pueden usarse datos de tipo String en un switch.
Funcionamiento de la instrucción switch:
- Primero se evalúa la expresión y salta al case cuya constante coincida con el valor de la
expresión.
– Se ejecutan las instrucciones que siguen al case seleccionado hasta que se encuentra un
break o hasta el final del switch. El break produce un salto a la siguiente instrucción a
continuación del switch.
– Si ninguno de estos casos se cumple se ejecuta el bloque default (si existe). No es
obligatorio que exista un bloque default y no tiene porqué ponerse siempre al final,
aunque es lo habitual.
Ejemplo de programa Java que contiene una instrucción switch: Programa que lee por
teclado un mes (número entero) y muestra el nombre del mes.
/*
* Programa que pide un número de mes y muestra el nombre correspondiente
*/
import java.util.*;
public class Ejemplo0Switch {
public static void main(String[] args) {
int mes;
Scanner sc = new Scanner(System.in);
System.out.print("Introduzca un numero de mes: ");
mes = sc.nextInt();
switch (mes)
{
case 1: System.out.println("ENERO");
break;
case 2: System.out.println("FEBRERO");
break;
case 3: System.out.println("MARZO");
break;
case 4: System.out.println("ABRIL");
break;
case 5: System.out.println("MAYO");
break;
case 6: System.out.println("JUNIO");
break;
case 7: System.out.println("JULIO");
break;
case 8: System.out.println("AGOSTO");
break;
case 9: System.out.println("SEPTIEMBRE");
break;
case 10: System.out.println("OCTUBRE");
break;
case 11: System.out.println("NOVIEMBRE");
break;
case 12: System.out.println("DICIEMBRE");
break;
default : System.out.println("Mes no válido");
}
}
}
Ejemplo de programa Java que contiene una una instrucción switch: Programa que lee
dos números enteros por teclado y un operador (de tipo carácter) y muestra el resultado
de la operación.
/*
* Programa que pide dos números y un operador y muestra el resultado
*/
import java.util.*;
import java.io.*;
public class Ejemplo1Switch {
public static void main(String[] args) throws IOException{
int A,B, Resultado = 0 ;
char operador;
boolean calculado = true;
Scanner sc = new Scanner(System.in);
System.out.print("Introduzca un numero entero:");
A = sc.nextInt();
System.out.print("Introduzca otro numero entero:");
B = sc.nextInt();
System.out.print("Introduzca un operador (+,-,*,/):");
operador = (char)System.in.read();
switch (operador) {
case '-' : Resultado = A - B;
break;
case '+' : Resultado = A + B;
break;
case '*' : Resultado = A * B;
break;
case '/' : if(B!=0)
Resultado = A / B;
else{
System.out.println("nNo se puede dividir por cero");
calculado = false;
}
break;
default : System.out.println("nOperador no valido");
calculado = false;
}
if(calculado){
System.out.println("nEl resultado es: " + Resultado);
}
}
}
2.3 OPERADOR CONDICIONAL ? :
Se puede utilizar en sustitución de la sentencia de control if-else.
Los forman los caracteres ? y :
Se utiliza de la forma siguiente:
expresión1 ? expresión2 : expresión3
Si expresión1 es cierta entonces se evalúa expresión2 y éste será el valor de la expresión
condicional. Si expresión1 es falsa, se evalúa expresión3 y éste será el valor de la
expresión condicional.
Ejemplo de programa Java que contiene un operador condicional: Programa que calcula
y muestra si un número que se lee por teclado es par o impar.
/*
* programa que pide un número por teclado y calcula si es par o impar
*/
import java.util.*;
public class Ejemplo1OperadorCondicional {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num;
System.out.println("Introduzca numero: ");
num = sc.nextInt();
System.out.println((num%2)==0 ? "PAR" : "IMPAR");
}
}
Estructura Iterativa O Repetiva
Permiten ejecutar de forma repetida un bloque específico de instrucciones. Las
instrucciones se repiten mientras o hasta que se cumpla una determinada condición. Esta
condición se conoce como condición de salida.
Tipos de estructuras repetitivas:
- ciclo while
- ciclo do – while
- ciclo for
1 Ciclo While
Las instrucciones se repiten mientras la condición sea cierta. La condición se comprueba
al principio del bucle por lo que las acciones se pueden ejecutar 0 ó más veces.
La ejecución de un bucle while sigue los siguientes pasos:
1. Se evalúa la condición.
2. Si el resultado es false las instrucciones no se ejecutan y el programa sigue
ejecutándose por la siguiente instrucción a continuación del while.
3. Si el resultado es true se ejecutan las instrucciones y se vuelve al paso 1
Ejemplo de programa Java que contiene una instrucción while:
Programa que lee números por teclado. La lectura acaba cuando el número introducido sea
negativo. El programa calcula y muestra la suma de los números leídos.
/*
* Programa que lee números hasta que se lee un negativo y muestra la
* suma de los números leídos
*/
import java.util.*;
public class Ejemplo1While {
public static void main(String[] args) {
int suma = 0, num;
Scanner sc = new Scanner(System.in);
System.out.print("Introduzca un número: ");
num = sc.nextInt();
while (num >= 0){
suma = suma + num;
System.out.print("Introduzca un número: ");
num = sc.nextInt();
}
System.out.println("La suma es: " + suma );
}
}
Ejemplo de programa Java que contiene una instrucción while:
Programa que lee un número entero N y muestra N asteriscos.
/*
* programa que lee un número n y muestra n asteriscos
*/
import java.util.*;
public class Ejemplo2While {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n, contador = 0;
System.out.print("Introduce un número: ");
n = sc.nextInt();
while (contador < n){
System.out.println(" * ");
contador++;
}
}
}
Ejemplo de programa Java con una instrucción while:
/*
* programa que muestra una tabla de equivalencias entre
* grados Fahrenheit y grados celsius
*/
public class Ejemplo3While {
public static void main(String[] args) {
final int VALOR_INICIAL = 10; // limite inf. tabla
final int VALOR_FINAL = 100; // limite sup. tabla
final int PASO = 10 ; // incremento
int fahrenheit;
double celsius;
fahrenheit = VALOR_INICIAL;
System.out.printf("Fahrenheit t Celsius n");
while (fahrenheit <= VALOR_FINAL ){
celsius = 5*(fahrenheit - 32)/9.0;
System.out.printf("%7d t %8.3f n", fahrenheit, celsius);
fahrenheit += PASO;
}
}
}
2 Ciclo Do – While
Las instrucciones se ejecutan mientras la condición sea cierta.
La condición se comprueba al final del bucle por lo que el bloque de instrucciones se
ejecutarán al menos una vez. Esta es la diferencia fundamental con la instrucción while.
Las instrucciones de un bucle while es posible que no se ejecuten si la condición
inicialmente es falsa.
La ejecución de un bucle do - while sigue los siguientes pasos:
1. Se ejecutan las instrucciones a partir de do{
2. Se evalúa la condición.
3. Si el resultado es false el programa sigue ejecutándose por la siguiente instrucción a
continuación del while.
4. Si el resultado es true se vuelve al paso 1
Ejemplo de programa Java que contiene una instrucción do while:
Programa que lee un número entero N. El número debe ser menor que 100.
/*
* Programa que obliga al usuario a introducir un número menor que 100
*/
import java.util.*;
public class Ejemplo1DoWhile {
public static void main(String[] args) {
int valor;
Scanner in = new Scanner( System.in );
do {
System.out.print("Escribe un entero < 100: ");
valor = in.nextInt();
}while (valor >= 100);
System.out.println("Ha introducido: " + valor);
}
}
Ejemplo de programa Java con una instrucción do while:
/*
* Programa que lee un número entre 1 y 10 ambos incluidos
*/
import java.util.*;
public class Ejemplo2DoWhile {
public static void main(String[] args) {
int n;
Scanner sc = new Scanner( System.in );
do {
System.out.print("Escribe un número entre 1 y 10: ");
n = sc.nextInt();
}while (n<1 || n >10);
System.out.println("Ha introducido: " + n);
}
}
3 Ciclo For
Hace que una instrucción o bloque de instrucciones se repitan un número determinado
de veces mientras se cumpla la condición.
La estructura general de una instrucción for en Java es la siguiente:
for(inicialización; condición; incremento/decremento){
instrucción 1;
...........
instrucción N;
}
A continuación de la palabra for y entre paréntesis debe haber siempre tres zonas
separadas por punto y coma:
- zona de inicialización.
- zona de condición
- zona de incremento ó decremento.
Si en alguna ocasión no es necesario escribir alguna de ellas se pueden dejar en blanco,
pero los dos punto y coma deben aparecer.
Inicialización es la parte en la que la variable o variables de control del bucle toman su
valor inicial. Puede haber una o más instrucciones en la inicialización, separadas por
comas. La inicialización se realiza solo una vez.
Condición es una expresión booleana que hace que se ejecute la sentencia o bloque de
sentencias mientras que dicha expresión sea cierta. Generalmente en la condición se
compara la variable de control con un valor límite.
Incremento/decremento es una expresión que decrementa o incrementa la variable de
control del bucle.
La ejecución de un bucle for sigue los siguientes pasos:
1. Se inicializa la variable o variables de control (inicialización)
2. Se evalúa la condición.
3. Si la condición es cierta se ejecutan las instrucciones. Si es falsa, finaliza la ejecución
del bucle y continúa el programa en la siguiente instrucción después del for.
4. Se actualiza la variable o variables de control (incremento/decremento)
5. Se vuelve al punto 2.
Ejemplo de programa Java que contiene una instrucción for:
/*
* programa que muestra los números del 1 al 10
*/
public class Ejemplo0For {
public static void main(String[] args) {
int i;
for(i=1; i<=10;i++)
System.out.println(i + " ");
}
}
La instrucción for del ejemplo anterior la podemos interpretar así:
Asigna a i el valor inicial 1, mientras que i sea menor o igual a 10 muestra i + “ “ , a
continuación incrementa el valor de i y comprueba de nuevo la condición.
Ejemplo de programa Java con una instrucción for:
/*
* programa que muestra los números del 10 al 1
*/
public class Ejemplo2For {
public static void main(String[] args) {
int i;
for(i=10; i>0;i--)
System.out.println(i + " ");
}
}
Ejemplo de programa Java con una instrucción for:
/*
* programa que muestra una tabla de equivalencias entre
* grados Fahrenheit y grados celsius
*/
public class Ejemplo1For {
public static void main(String[] args) {
final int VALOR_INICIAL = 10; // limite inf. tabla
final int VALOR_FINAL = 100; // limite sup. tabla
final int PASO = 10 ; // incremento
int fahrenheit;
double celsius;
fahrenheit = VALOR_INICIAL;
System.out.printf("Fahrenheit t Celsius n");
for (fahrenheit = VALOR_INICIAL; fahrenheit <= VALOR_FINAL;
fahrenheit+= PASO) {
celsius = 5*(fahrenheit - 32)/9.0;
System.out.printf("%7d t %8.3f n", fahrenheit, celsius);
}
}
}
En las zonas de inicialización e incremento/decremento puede aparecer más de una
variable. En ese caso deben ir separadas por comas.
Ejemplo:
/*
* programa que muestra el valor de a, b y su suma mientras que la suma de
* ambas es menor de 10. En cada iteración el valor de a se incrementa en
* 1 unidad y el de b en 2
*/
public class Ejemplo3For {
public static void main(String[] args) {
int a, b;
for(a = 1, b = 1; a + b < 10; a++, b+=2){
System.out.println("a = " + a + " b = " + b + " a + b = " + (a+b));
}
}
}
La salida de este programa es:
a = 1 b = 1 a + b = 2
a = 2 b = 3 a + b = 5
a = 3 b = 5 a + b = 8
Aunque la instrucción repetitiva for, al igual que las instrucciones while y do- while, se
puede utilizar para realizar repeticiones cuando no se sabe a priori el número de pasadas
por el bucle, esta instrucción es especialmente indicada para bucles donde se conozca
el número de pasadas.
Como regla práctica podríamos decir que las instrucciones while y do-while se utilizan
generalmente cuando no se conoce a priori el número de pasadas, y la instrucción for se
utiliza generalmente cuando sí se conoce el número de pasadas.
Se ha de tener cuidado con escribir el punto y coma (;) después del paréntesis final del
bucle for. Un bucle for generalmente no lleva punto y coma final.
Por ejemplo el bucle:
int i;
for (i = 1; i <= 10; i++);
{
System.out.println("Elementos de Programación");
}
no visualiza la frase "Elementos de Programación" 10 veces, ni produce un mensaje de
error por parte del compilador.
En realidad lo que sucede es que se visualiza una vez la frase "Elementos de
Programación", ya que aquí la sentencia for es una sentencia vacía al terminar con un
punto y coma (;).
La sentencia for en este caso hace que i empiece en 1 y acabe en 11 y tras esas
iteraciones, se ejecuta la sentencia
System.out.println("Elementos de Programación");
4 Bucles Infinitos En Java
Java permite la posibilidad de construir bucles infinitos, los cuales se ejecutarán
indefinidamente, a no ser que provoquemos su interrupción. Tres ejemplos:
for(;;){
instrucciones
}
for(;true;){
instrucciones
}
while(true){
instrucciones
}
5 Bucles Anidados
Bucles anidados son aquellos que incluyen instrucciones for, while o do-while unas
dentro de otras.
Debemos tener en cuenta que las variables de control que utilicemos deben ser distintas.
Los anidamientos de estructuras tienen que ser correctos, es decir, que una estructura
anidada dentro de otra lo debe estar totalmente.
Ejemplo de programa Java con bucles anidados:
/*
* Programa que dibuja un rectángulo sólido de asteriscos.
* El número de filas y columnas se pide por teclado
*/
import java.util.*;
public class Ejemplo1BuclesAnidados {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int filas, columnas;
//leer número de filas hasta que sea un número > 0
do{
System.out.print("Introduce número de filas: ");
filas = sc.nextInt();
}while(filas<1);
//leer número de columnas hasta que sea un número > 0
do{
System.out.print("Introduce número de columnas: ");
columnas = sc.nextInt();
}while(columnas<1);
for(int i = 1; i<=filas; i++){ //filas
for(int j = 1; j<=columnas; j++){ //columnas
System.out.print(" * ");
}
System.out.println();
}
}
}
La salida de este programa para filas = 6 y columnas = 10 es:
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
Ejemplo de programa Java con bucles anidados:
/*
* Programa que muestra una tabla con las potencias de x (x x2 x3 x4)
* para valores de x desde 1 hasta XMAX
*/
public class JavaApplication22 {
public static void main(String[] args) {
final int XMAX = 10;
int x, n;
//mostrar la cabecera de la tabla
System.out.printf("%10s%10s%10s%10s%n", "x","x^2","x^3","x^4");
for (x = 1; x <= XMAX; x++){ //filas
for (n = 1; n <= 4; n++){ //columnas
System.out.printf("%10.0f", Math.pow(x,n));
}
System.out.println();
}
}
}
El programa muestra por pantalla la siguiente tabla de potencias:
x x^2 x^3 x^4
1 1 1 1
2 4 8 16
3 9 27 81
4 16 64 256
5 25 125 625
6 36 216 1296
7 49 343 2401
8 64 512 4096
9 81 729 6561
10 100 1000 10000
CONCLUSIÓN
La programación orientada a objetos permite la optimización del código generado gracias
a que mediante técnicas de herencia, atributos estáticos entre otros permiten, que el
código sea genérico de manera que sea reutilizable. Mediante las técnicas aprendidas
en el presente curso podemos establecer una solución primitiva de un problema real, tan
solo con relacionarlo con objetos lógicos que serán usados para el desarrollo del
software. Podemos dar a conocer de una forma sencilla los mecanismos que se usan en
este nivel de programación, a personas que deseen una explicación rápida y sencilla de
lo que es la programación orientada a objetos.
Tenemos los conocimientos necesarios como para enfrentar un problema real y
desarrollo en cualquier tipo de lenguaje de programación. Al trabajar con la programación
orientada a objetos sea está desarrollada en otras plataformas de programación,
sabemos las formas de lograr un mejor rendimiento del equipo a controlar y aplicar
soluciones sencillas, de manera que sea fácilmente digeribles para el usuario y/o
destinatario del trabajo final.
La plataforma Java es una plataforma sólo de software que ejecuta sobre la base de
varias plataformas de hardware. Está compuesto por JVM y la interfaz de programación
de aplicaciones (API) Java un amplio conjunto de componentes de software (clases) listos
para usar que facilitan el desarrollo y despliegue de applets y aplicaciones. La API Java
abarca desde objetos básicos a conexión en red, seguridad, generación de XML y
servicios web. Está agrupada en bibliotecas conocidas como paquetes de clases e
interfaces relacionadas. También está probado que JVM es una plataforma robusta para
ejecutar lenguajes que no sean Java.

Más contenido relacionado

La actualidad más candente

ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascalejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascalkurt9123
 
metodologia desarrollo_sistemas_hipermedia_orientada_objetos
metodologia desarrollo_sistemas_hipermedia_orientada_objetosmetodologia desarrollo_sistemas_hipermedia_orientada_objetos
metodologia desarrollo_sistemas_hipermedia_orientada_objetosMayta Coronel
 
Proceso Unificado De Rational
Proceso Unificado De RationalProceso Unificado De Rational
Proceso Unificado De RationalJulio Pari
 
Unified modelling language (UML)
Unified modelling language (UML)Unified modelling language (UML)
Unified modelling language (UML)Hirra Sultan
 
Metodologias de desarrollo
Metodologias de desarrolloMetodologias de desarrollo
Metodologias de desarrolloHermes Romero
 
Design patterns ppt
Design patterns pptDesign patterns ppt
Design patterns pptAman Jain
 
Object Oriented Analysis Design using UML
Object Oriented Analysis Design using UMLObject Oriented Analysis Design using UML
Object Oriented Analysis Design using UMLAjit Nayak
 
Unidad III procedimientos
Unidad III procedimientosUnidad III procedimientos
Unidad III procedimientosaaronastorga4
 
Java Development Kit (jdk)
Java Development Kit (jdk)Java Development Kit (jdk)
Java Development Kit (jdk)Jadavsejal
 
CUESTIONARIO JAVA
CUESTIONARIO JAVACUESTIONARIO JAVA
CUESTIONARIO JAVAjesanchez5
 
Mapa conceptual uml z1-
Mapa conceptual uml  z1-Mapa conceptual uml  z1-
Mapa conceptual uml z1-karlanm07
 
Software Devlopment Life Cycle
Software Devlopment Life CycleSoftware Devlopment Life Cycle
Software Devlopment Life CycleVivek Gupta
 
Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herenciajlmanmons
 
Unidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUrban Skate House
 

La actualidad más candente (20)

ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascalejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
 
metodologia desarrollo_sistemas_hipermedia_orientada_objetos
metodologia desarrollo_sistemas_hipermedia_orientada_objetosmetodologia desarrollo_sistemas_hipermedia_orientada_objetos
metodologia desarrollo_sistemas_hipermedia_orientada_objetos
 
Proceso Unificado De Rational
Proceso Unificado De RationalProceso Unificado De Rational
Proceso Unificado De Rational
 
Unified modelling language (UML)
Unified modelling language (UML)Unified modelling language (UML)
Unified modelling language (UML)
 
Oomd unit1
Oomd unit1Oomd unit1
Oomd unit1
 
Metodologias de desarrollo
Metodologias de desarrolloMetodologias de desarrollo
Metodologias de desarrollo
 
Design patterns ppt
Design patterns pptDesign patterns ppt
Design patterns ppt
 
What is agile model
What is agile modelWhat is agile model
What is agile model
 
Encapsulamiento
EncapsulamientoEncapsulamiento
Encapsulamiento
 
Object Oriented Analysis Design using UML
Object Oriented Analysis Design using UMLObject Oriented Analysis Design using UML
Object Oriented Analysis Design using UML
 
Unidad III procedimientos
Unidad III procedimientosUnidad III procedimientos
Unidad III procedimientos
 
Java Development Kit (jdk)
Java Development Kit (jdk)Java Development Kit (jdk)
Java Development Kit (jdk)
 
CUESTIONARIO JAVA
CUESTIONARIO JAVACUESTIONARIO JAVA
CUESTIONARIO JAVA
 
Mapa conceptual uml z1-
Mapa conceptual uml  z1-Mapa conceptual uml  z1-
Mapa conceptual uml z1-
 
Software Devlopment Life Cycle
Software Devlopment Life CycleSoftware Devlopment Life Cycle
Software Devlopment Life Cycle
 
PAGINACION Y SEGMENTACION DE MEMORIA
PAGINACION Y SEGMENTACION DE MEMORIAPAGINACION Y SEGMENTACION DE MEMORIA
PAGINACION Y SEGMENTACION DE MEMORIA
 
S1-Fundamentos POO
S1-Fundamentos POOS1-Fundamentos POO
S1-Fundamentos POO
 
C# Private assembly
C# Private assemblyC# Private assembly
C# Private assembly
 
Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herencia
 
Unidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datos
 

Similar a Trabajo investigativo sobre la programación orientada a objetos y java

LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ISILVA19_PAMELA
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosalexmoncada21
 
Programacion estructurada en objetos
Programacion estructurada en objetosProgramacion estructurada en objetos
Programacion estructurada en objetosAngel Ordoñez
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosmaikitejeda
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosMarcelo Brocel
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetosAgapito26
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosJonathan Marcillo
 
2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetos2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetosjohnny herrera
 
Orientado a objeto
Orientado a objetoOrientado a objeto
Orientado a objetoUnefa
 
Diseña y construye programas orientados a objetos
Diseña y construye programas orientados a objetosDiseña y construye programas orientados a objetos
Diseña y construye programas orientados a objetosJosue Sarabia
 
Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacionANGIEZAMBRANO57
 
[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con javaEudris Cabrera
 
Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacionfranciscocain
 
Introduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalIntroduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalJose Angel Rodriguez
 
Introducción a la P.O.O en Introducción a la Programación
Introducción a la P.O.O en Introducción a la ProgramaciónIntroducción a la P.O.O en Introducción a la Programación
Introducción a la P.O.O en Introducción a la ProgramaciónFacultad de Ciencias y Sistemas
 

Similar a Trabajo investigativo sobre la programación orientada a objetos y java (20)

LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN I
 
Conceptos poo
Conceptos pooConceptos poo
Conceptos poo
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programacion estructurada en objetos
Programacion estructurada en objetosProgramacion estructurada en objetos
Programacion estructurada en objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetos2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetos
 
Orientado a objeto
Orientado a objetoOrientado a objeto
Orientado a objeto
 
Java
JavaJava
Java
 
Asignación 1 astrid c.
Asignación 1 astrid c.Asignación 1 astrid c.
Asignación 1 astrid c.
 
Diseña y construye programas orientados a objetos
Diseña y construye programas orientados a objetosDiseña y construye programas orientados a objetos
Diseña y construye programas orientados a objetos
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
 
Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacion
 
[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java
 
Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacion
 
Introduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalIntroduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos original
 
Introducción a la P.O.O en Introducción a la Programación
Introducción a la P.O.O en Introducción a la ProgramaciónIntroducción a la P.O.O en Introducción a la Programación
Introducción a la P.O.O en Introducción a la Programación
 

Trabajo investigativo sobre la programación orientada a objetos y java

  • 1. REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL P.P PARA LA EDUCACIÓN UNIVERSITARIA, CIENCIA Y TECNOLOGÍA INSTITUTO UNIVERSITARIO POLITÉCNICO “SANTIAGO MARIÑO” EXTENSIÓN MATURÍN LA PROGRAMACIÓN ORIENTADA A OBJETOS Y EL LENGUAJE DE PROGRAMACIÓN JAVA Docente: Realizado Por: Ing. María Aguilera Julio C Rojas M C.I.V-19.091.776 Gustavo E Cedeño C C.I.V-18.926.649 Materia: Programación No Numérica I Carrera: Ingeniería De Sistemas (47) Maturín, Marzo de 2016
  • 2. INTRODUCCIÓN La programación orientada a objetos es una ciencia, un modelo de programación, con su teoría y su metodología, que conviene conocer y estudiar antes de nada. Dicho esto, lo normal es que toda persona que vaya a desarrollar aplicaciones orientadas a objetos aprenda primero la “ciencia” (o adquiera la forma de pensar) y después el lenguaje, porque “ciencia” sólo hay una y lenguajes muchos. Es muy importante destacar que cuando hacemos referencia a la programación orientada a objetos no estamos hablando de unas cuantas características nuevas añadidas a un lenguaje de programación. Estamos hablando de una nueva forma de pensar acerca del proceso de descomposición de problemas y de desarrollo de soluciones de programación. La programación orientada a objetos surge en la historia como un intento para dominar la complejidad que, de forma innata, posee el software. Tradicionalmente, la forma de enfrentarse a esta complejidad ha sido empleando lo que llamamos programación estructurada, que consiste en descomponer el problema objeto de resolución en subproblemas y más subproblemas hasta llegar a acciones muy simples y fáciles de codificar. Se trata de descomponer el problema en acciones, en verbos. El lenguaje de programación Java es un lenguaje de alto nivel, orientado a objetos. El lenguaje es inusual porque los programas Java son tanto compilados como interpretados. La compilación, que ocurre una vez por programa, traduce el código Java a un lenguaje intermedio llamado Java bytecode. El Bytecode, por su turno, es analizado y ejecutado (interpretado) por Java Virtual Machine (JVM) un traductor entre el idioma, el sistema operativo subyacente y el hardware. Todas las implementaciones del lenguaje de programación deben emular JVM, para permitir que los programas Java ejecuten en cualquier sistema que tenga una versión de JVM. La plataforma Java es una plataforma sólo de software que ejecuta sobre la base de varias plataformas de hardware. Está compuesto por JVM y la interfaz de programación de aplicaciones (API) Java un amplio conjunto de componentes de software (clases) listos para usar que facilitan el desarrollo y despliegue de applets y aplicaciones. La API Java abarca desde objetos básicos a conexión en red, seguridad, generación de XML y servicios web.
  • 3. Está agrupada en bibliotecas conocidas como paquetes de clases e interfaces relacionadas. También está probado que JVM es una plataforma robusta para ejecutar lenguajes que no sean Java.
  • 4. DESARROLLO PROGRAMACIÓN ORIENTADA A OBJETO 1.- ¿Qué es la Orientación a Objeto? Es un paradigma de programación que usa objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basada en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. Su uso se popularizó a principios de la década de 1990. En la actualidad, existe una gran variedad de lenguajes de programación que soportan la orientación a objetos. 2.- ¿Qué es un objeto? Un objeto es una unidad dentro de un programa de computadora que consta de un estado y de un comportamiento, que a su vez constan respectivamente de datos almacenados y de tareas realizables durante el tiempo de ejecución. Un objeto puede ser creado instanciando una clase, como ocurre en la programación orientada a objetos, o mediante escritura directa de código y la replicación otros objetos, como ocurre en la programación basada en prototipos. Estos objetos interactúan unos con otros, en contraposición a la visión tradicional en la cual un programa es una colección de subrutinas (funciones o procedimientos), o simplemente una lista de instrucciones para el computador. Cada objeto es capaz de recibir mensajes, procesar datos y enviar mensajes a otros objetos de manera similar a un servicio.
  • 5. 3.- ¿Qué es una clase? Una clase es una plantilla para la creación de objetos de datos según un modelo predefinido. Las clases se utilizan para representar entidades o conceptos, como los sustantivos en el lenguaje. Cada clase es un modelo que define un conjunto de variables -el estado, y métodos apropiados para operar con dichos datos -el comportamiento. Cada objeto creado a partir de la clase se denomina instancia de la clase. Las clases son un pilar fundamental de la programación orientada a objetos. Permiten abstraer los datos y sus operaciones asociadas al modo de una caja negra. Los lenguajes de programación que soportan clases difieren sutilmente en su soporte para diversas características relacionadas con clases. La mayoría soportan diversas formas de herencia. Muchos lenguajes también soportan características para proporcionar encapsulación, como especificadores de acceso. Una clase también puede tener una representación (metaobjeto) en tiempo de ejecución, que proporciona apoyo en tiempo de ejecución para la manipulación de los metadatos relacionados con la clase. 4.- ¿Qué es un 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ó. Un objeto por sí solo no tiene mucho significado. Ejemplo: el objeto "bicicleta" no tiene mucho sentido si no interactúa con un objeto "persona" que pedalee. La interacción entre objetos se produce mediante mensajes. Los mensajes son llamados a métodos de un objeto en particular. Podemos decir que el objeto persona envía el mensaje "girar a la izquierda" al objeto bicicleta. Los mensajes pueden contener parámetros. Por ejemplo teniendo un método en la clase bicicleta llamado "Girar" que recibe como parámetro la dirección (derecha o izquierda).
  • 6. Un mensaje está compuesto por los siguientes tres elementos: 1. El objeto destino, hacia el cual el mensaje es enviado 2. El nombre del método a llamar 3. Los parámetros solicitados por el método 5.- Mencione y explique los dos principios que rigen la orientación a objeto. El corazón del desarrollo de software de objetos son los conceptos de encapsulación de datos y abstracción Abstracción Denota las características esenciales de un objeto, donde se capturan sus comportamientos. 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. El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar. Encapsulamiento Significa reunir todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión diseño estructurado de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
  • 7. 6.- Mencione y explique las cuatro características de la orientación a objeto. Existe un acuerdo acerca de qué características contempla la "orientación a objetos". Las características siguientes son las más importantes: 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. O, dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++. Herencia Las clases no se encuentran 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. Estos pueden compartir y extender su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple; siendo de alta complejidad técnica por lo cual suele recurrirse a la herencia virtual para evitar la duplicación de datos.
  • 8. 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 específica 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 estado. Esto asegura que otros objetos no puedan cambiar el estado interno de un objeto de manera inesperada, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos. Recolección de basura La recolección de basura (garbage collection) es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse expresamente.
  • 9. FUNDAMENTOS DE PROGRAMACIÓN EN JAVA 1.- Historia de JAVA Java se creó como una herramienta de programación para ser usada en un proyecto de set-top-box en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991. El equipo (Green Team), compuesto por trece personas y dirigido por James Gosling, trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo. El lenguaje se denominó inicialmente Oak (por un roble que había fuera de la oficina de Gosling), luego pasó a denominarse Green tras descubrir que Oak era ya una marca comercial registrada para adaptadores de tarjetas gráficas y finalmente se renombró a Java. Es frecuentada por algunos de los miembros del equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que podría tratarse de las iniciales de sus diseñadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otros abogan por el siguiente acrónimo, Just Another Vague Acronym ("sólo otro acrónimo ambiguo más"). La hipótesis que más fuerza tiene es la de que Java debe su nombre a un tipo de café disponible en la cafetería cercana, de ahí que el icono de java sea una taza de café caliente. Un pequeño signo que da fuerza a esta teoría es que los 4 primeros bytes (el número mágico) de los archivos.class que genera el compilador, son en hexadecimal, 0xCAFEBABE. A pesar de todas estas teorías, el nombre fue sacado al parecer de una lista aleatoria de palabras.3 Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras una sesión maratoniana de tres días entre John Gaga, James Gosling, Patrick Naughton, Wayne Rosing y Eric Schmidt, el equipo reorientó la plataforma hacia la Web. Sintieron que la llegada del navegador web Mosaic, propiciaría que Internet se convirtiese en un medio interactivo, como el que pensaban era la televisión por cable. Naughton creó entonces un prototipo de navegador, WebRunner, que más tarde sería conocido como HotJava.
  • 10. En 1994, se les hizo una demostración de HotJava y la plataforma Java a los ejecutivos de Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al 23 de mayo de 1995, durante las conferencias de SunWorld, a que vieran la luz pública Java y HotJava, el navegador Web. El acontecimiento fue anunciado por John Gage, el Director Científico de Sun Microsystems. El acto estuvo acompañado por una pequeña sorpresa adicional, el anuncio por parte de Marc Andreessen, Vicepresidente Ejecutivo de Netscape, de que Java sería soportado en sus navegadores. El 9 de enero del año siguiente, 1996, Sun fundó el grupo empresarial JavaSoft para que se encargase del desarrollo tecnológico. Dos semanas más tarde la primera versión de Java fue publicada. 2.- ¿Qué es el JDK? Java Development Kit o (JDK), es un software que provee herramientas de desarrollo para la creación de programas en Java. Puede instalarse en una computadora local o en una unidad de red. En la unidad de red se pueden tener las herramientas distribuidas en varias computadoras y trabajar como una sola aplicación. En los sistemas operativos Microsoft Windows sus variables de entorno son:  JAVAPATH: es una ruta completa del directorio donde está instalado JDK.  CLASSPATH: son las bibliotecas o clases de usuario.  PATH: variable donde se agrega la ubicación de JDK. Los programas más importantes que se incluyen son:  appletviewer.exe: es un visor de applets para generar sus vistas previas, ya que un applet carece de método main y no se puede ejecutar con el programa java.  javac.exe: es el compilador de Java.  java.exe: es el master escuela (intérprete) de Java.  javadoc.exe: genera la documentación de las clases Java de un programa.
  • 11. 3.- ¿Qué es el JRE? Java Runtime Environment o JRE es un conjunto de utilidades que permite la ejecución de programas Java. En su forma más simple, el entorno en tiempo de ejecución de Java está conformado por una Máquina Virtual de Java o JVM, un conjunto de bibliotecas Java y otros componentes necesarios para que una aplicación escrita en lenguaje Java pueda ser ejecutada. El JRE actúa como un "intermediario" entre el sistema operativo y Java. La JVM es el programa que ejecuta el código Java previamente compilado (bytecode) mientras que las librerías de clases estándar son las que implementan el API de Java. Ambas JVM y API deben ser consistentes entre sí, de ahí que sean distribuidas de modo conjunto. Un usuario sólo necesita el JRE para ejecutar las aplicaciones desarrolladas en lenguaje Java, mientras que para desarrollar nuevas aplicaciones en dicho lenguaje es necesario un entorno de desarrollo, denominado JDK, que además del JRE (mínimo imprescindible) incluye, entre otros, un compilador para Java. 4.- El compilador de JAVA La función de un compilador es convertir un programa escrito un en lenguaje como Java a un lenguaje que la computadora pueda entender. Los programas en Java se convierten en códigos de bytes. El comando para llamar al compilador es: javac MiPrograma.java Donde el nombre del compilador es javac y MiPrograma.java es el nombre del archivo que contiene el código de nuestro programa. Al compilar el programa, el compilador verifica que éste obedezca las reglas de programación en Java, y si algo sale mal, muestra los mensajes de error apropiados. El compilador crea un archivo con el sufijo .class. Este contiene el código de bytes equivalente a su programa en Java.
  • 12. Pero el archivo .class que produce el compilador no está listo todavía para ejecutarse ya que requiere vincularse con las bibliotecas de clases Java proceso que se realizará cuando el programa se ejecute. 5.- La máquina virtual de JAVA Una máquina virtual Java (en inglés Java Virtual Machine, JVM) es una máquina virtual de proceso nativo, es decir, ejecutable en una plataforma específica, capaz de interpretar y ejecutar instrucciones expresadas en un código binario especial (el bytecode Java), el cual es generado por el compilador del lenguaje Java. El código binario de Java no es un lenguaje de alto nivel, sino un verdadero código máquina de bajo nivel, viable incluso como lenguaje de entrada para un microprocesador físico. Como todas las piezas del rompecabezas Java, fue desarrollado originalmente por Sun. La JVM es una de las piezas fundamentales de la plataforma Java. Básicamente se sitúa en un nivel superior al hardware del sistema sobre el que se pretende ejecutar la aplicación, y este actúa como un puente que entiende tanto el bytecode como el sistema sobre el que se pretende ejecutar. Así, cuando se escribe una aplicación Java, se hace pensando que será ejecutada en una máquina virtual Java en concreto, siendo ésta la que en última instancia convierte de código bytecode a código nativo del dispositivo final. La gran ventaja de la máquina virtual java es aportar portabilidad al lenguaje, de manera que desde Sun Microsystems se han creado diferentes máquinas virtuales java para diferentes arquitecturas, y, así, un programa .class escrito en Windows puede ser interpretado en un entorno Linux. Tan solo es necesario disponer de dicha máquina virtual
  • 13. para dichos entornos. De ahí el famoso axioma que sigue a Java: "escríbelo una vez, ejecútalo en cualquier parte", o "Write once, run anywhere". Pero los intentos de la compañía propietaria de Java y productos derivados de construir microprocesadores que aceptaran el Java bytecode como su lenguaje de máquina fueron más bien infructuosos. La máquina virtual de Java puede estar implementada en software, hardware, una herramienta de desarrollo o un Web browser; lee y ejecuta código precompilado bytecode que es independiente de la plataforma multiplataforma. La JVM provee definiciones para un conjunto de instrucciones, un conjunto de registros, un formato para archivos de clases, la pila, un heap con recolector de basura y un área de memoria. Cualquier implementación de la JVM que sea aprobada por SUN debe ser capaz de ejecutar cualquier clase que cumpla con la especificación. Existen varias versiones, en orden cronológico, de la máquina virtual de Java. En general la definición del Java bytecode no cambia significativamente entre versiones, y si lo hace, los desarrolladores del lenguaje procuran que exista compatibilidad hacia atrás con los productos anteriores. A partir de J2SE 5.0, los cambios en la especificación de la JVM han sido desarrollados bajo el auspicio de la Java Community Process (JCP) y especificada en la JSR 924.1 Desde el año 2006, cambios en la especificación para soportar las modificaciones del formato del fichero de clases (JSR 2022 ) se están llevando a cabo en una versión de mantenimiento en la JSR 924. Las especificaciones para la JVM están publicadas en lo que se conoce como "el libro azul". Así reza el prefacio: Esperamos que esta especificación documente suficientemente la Máquina Virtual de Java para hacer posibles implementaciones desde cero. Sun proporciona tests que verifican que las implementaciones de la Máquina Virtual de Java operen correctamente Kaffe es un ejemplo de una implementación de JVM desde cero. Sun es la propietaria de la marca registrada "Java", que usa para certificar aquellas implementaciones que se ajustan y son totalmente compatibles con sus especificaciones.
  • 14. 6.- Explique la anatomía de un programa en JAVA La anatomía de un programa en JAVA se encuentra compuesto por estas series de pasos que deben realizarse en ese orden que son los siguientes: 1. Como preparar un Programa en Java: Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción El nombre de archivo debe tener el sufijo .java MiPrograma.java Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción Utilizar el comando javac para compilar el programa: javac MiPrograma.java Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción El compilador crea un nuevo archivo (código de bytes): MiPrograma.class Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción Ejecutar el programa iniciando la Máquina Virtual con el comando java: java MiPrograma 2. La estructura de una clase en Java: Estructura de una clase Definición de una clase Código fuente 3. Anatomía de una aplicación Java: Anatomía del programa: HolaMundo public class HolaMundo { public static void main( String[] args ) { System.out.print( "Hola mundo" ); } } El encabezado de la clase, El encabezado del método main, Paréntesis de llave, System.out.print
  • 15. 4. Compilación y ejecución de una aplicación Java: Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción public class HolaMundo { public static void main( String[] args ) { System.out.print( "Hola mundo" ); } } Escribir Proceso Códigos Máquina Código Compila de Bytes Virtual Fuente ción public class HolaMundo { public static void main( String[] args ) { System.out.print( "Hola mundo" ); } } Escribir Proceso Códigos Máquina Código Compilación de Bytes Virtual Fuente 7.- ¿Cuáles son los tipos de programas que pueden hacerse en JAVA? Los programas en Java suelen estar en una de las siguientes categorías:  Applets Los applets son pequeños programas que se incorporan en una página Web y que por lo tanto, necesitan de un Navegador Web compatible con Java para poder ejecutarse. A menudo los applets se descargan junto con una página HTML desde un Servidor Web y se ejecutan en la máquina cliente.  Aplicaciones Las aplicaciones son programas standalone de propósito general que normalmente se ejecutan desde la línea de comandos del sistema operativo. Con Java se puede realizar cualquier programa que normalmente se crearía con algún otro lenguaje de programación.
  • 16.  Servlets Los servlets al contrario de los applets son programas que están pensados para trabajar en el lado del servidor y desarrollar aplicaciones Web que interactúen con los clientes. Los servlets son una alternativa de la programación CGI tradicional. 8.- Entornos de desarrollo integrado (IDE), para JAVA. Hemos generado nuestro primer programa Java usando las herramientas más básicas posibles: el bloc de notas y la ventana consola de DOS. Los programadores utilizan herramientas más sofisticadas ya que facilitan el trabajo enormemente. Dentro de estas herramientas podríamos hablar de entornos de desarrollo (IDEs) o frameworks. A veces ambos términos se confunden. Nosotros nos referiremos a IDE como a un programa que nos permite desarrollar código en un lenguaje y que incorpora habitualmente: a) Un espacio para la escritura de código con cierta ayuda interactiva para generar código y para indicar los errores de sintaxis que se cometan por parte del programador. b) La posibilidad de compilar y ejecutar el código escrito. c) La posibilidad de organizar los proyectos de programación. d) Herramientas auxiliares para programadores para detección de errores o análisis de programas (debuggers). e) Otras opciones como utilidades para pruebas, carga de librerías, etc. Existen diversos IDEs para Java. Vamos a citar algunos de ellos:
  • 17. a) Eclipse: software libre que se puede descargar en http://www.eclipse.org. Es uno de los entornos Java más utilizados a nivel profesional. El paquete básico de Eclipse se puede expandir mediante la instalación de plugins para añadir funcionalidades a medida que se vayan necesitando. b) Netbeans: software libre que se puede descargar en http://www.netbeans.org. Otro de los entornos Java muy utilizados, también expandible mediante plugins. Facilita bastante el diseño gráfico asociado a aplicaciones Java. c) BlueJ: software libre que se puede descargar en http://bluej.org. Es un entorno de desarrollo dirigido al aprendizaje de Java (entorno académico) y sin uso a nivel profesional. Es utilizado en distintas universidades para la enseñanza de Java. Destaca por ser sencillo e incluir algunas funcionalidades dirigidas a que las personas que estén aprendiendo tengan mayor facilidad para comprender aspectos clave de la programación orientada a objetos. d) JBuilder: software comercial. Se pueden obtener versiones de prueba o versiones simplificadas gratuitas en la web http://www.embarcadero.com buscando en la sección de productos y desarrollo de aplicaciones. Permite desarrollos gráficos. e) JCreator: software comercial. Se pueden obtener versiones de prueba o versiones simplificadas gratuitas en la web http://www.jcreator.com. Este IDE está escrito en C++ y omite herramientas para desarrollos gráficos, lo cual lo hace más rápido y eficiente que otros IDEs. 9.- Elementos de un programa Java Comentarios: Un comentario es un texto que se escribe dentro de un programa con el fin de facilitar la comprensión del mismo. Los comentarios se utilizan para explicar y documentar el código fuente. En Java se pueden utilizar tres tipos de comentarios:
  • 18. Comentario tradicional estilo C/C++. Empieza con los caracteres /* y acaba con */. Pueden ocupar más de una línea y pueden aparecer en cualquier lugar donde pueda aparear un espacio en blanco. No pueden anidarse. Ejemplos de comentarios estilo C/C++: /* Programa Ecuación segundo grado Calcula las soluciones de una ecuación de segundo grado */ /* Lectura de datos por teclado */ Comentarios de una sola línea. Comienzan con una doble barra ( // ) y se pueden extender hasta el final de la línea. No tienen carácter de terminación. Ejemplos de comentarios de una sola línea: // Programa Ecuación segundo grado // Calcula las soluciones de una ecuación de segundo grado int p; // precio del producto Comentarios de documentación Javadoc. Son comentarios especiales para generar documentación del programa.
  • 19. Comienza con /** y termina con */ Ejemplo de comentario de documentación Javadoc: /** * * @author Enrique * @version 1.0 * */ Variables: Una variable en Java es un identificador que representa una palabra de memoria que contiene información. El tipo de información almacenado en una variable sólo puede ser del tipo con que se declaró esa variable. Una variable se declara usando la misma sintaxis de C. Por ejemplo la siguiente tabla indica una declaración, el nombre de la variable introducida y el tipo de información que almacena la variable: Declaración identificador tipo int i; i entero String s; s referencia a string int a[]; a referencia a arreglo de enteros int[] b; b referencia a arreglo de enteros Java posee dos grandes categorías de tipos para las variables:
  • 20. Tipos Primitivos referencias a Objetos int, short, byte, long Strings char, boolean Arreglos float, double otros objetos Las variables de tipos primitivos almacenan directamente un valor que siempre pertenece al rango de ese tipo. Por ejemplo una variable int almacena un valor entero como 1, 2, 0, -1, etc. Esto significa que al asignar una variable entera a otra variable entera, se copia el valor de la primera en el espacio que ocupa la segunda variable. Las variables de tipo referencia a objetos en cambio almacenan direcciones y no valores directamente. Una referencia a un objeto es la dirección de un área en memoria destinada a representar ese objeto. El área de memoria se solicita con el operador new. Al asignar una variable de tipo referencia a objeto a otra variable se asigna la dirección y no el objeto referenciado por esa dirección. Esto significa que ambas variables quedan referenciando el mismo objeto. La diferencia entre ambas asignaciones se observa en la siguiente figura:
  • 21. Esto tiene implicancias mayores ya que si se modifica el objeto referenciado por r, entonces también se modifica el objeto referenciado por s, puesto que son el mismo objeto. En Java una variable no puede almacenar directamente un objeto, como ocurre en C y C++. Por lo tanto cuando se dice en Java que una variable es un string, lo que se quiere decir en realidad es que la variable es una referencia a un string. Operadores: Los operadores son muy similares a los de C++, ya lo advertimos en su momento. Operadores Aritméticos: Los habituales  Suma +.  Resta - .  Multiplicación *.  División /.  Resto de la División %. Operadores de Asignación: El principal es '=' pero hay más operadores de asignación con distintas funciones que explicamos brevemente ahora.  '+=' : op1 += op2 à op1 = op1 + op2  '-=' : op1 -= op2 à op1 = op1 - op2  '*=' : op1 *= op2 à op1 = op1 * op2  '/=' : op1 /= op2 à op1 = op1 / op2  '%=' : op1 %= op2 à op1 = op1 % op2 Operadores Unarios: El mas (+) y el menos (-). Para cambiar el signo del operando. Operador Instanceof: Nos permite saber si un objeto pertenece a una clase o no.  NombreObjeto instanceof NombreClase
  • 22. Operadores Incrementales: Son los operadores que nos permiten incrementar las variables en una unidad. Se pueden usar delante y detrás de la variable dependiendo de lo que queramos, es decir, si queremos que incremente o viceversa antes de utilizar o lo contrario.  '++'  '--' Operadores Relacionales: Permiten comparar variables según relación de igualdad/desigualdad o relación mayor/menor. Devuelven siempre un valor boolean.  '>': Mayor que  '<': Menor que  '==': Iguales  '¡=': Distintos  '>=': Mayor o igual que  '<=': Menor o igual que Operadores Lógicos: Nos permiten construir expresiones lógicas.  '&&’: devuelve true si ambos operandos son true.  '||’: devuelve true si alguno de los operandos son true.  '!' : Niega el operando que se le pasa.  '&’: devuelve true si ambos operandos son true, evaluándolos ambos.  '|’: devuelve true uno de los operandos es true, evaluándolos ambos. Operador de concatenación con cadena de caracteres '+':  Por Ejemplo: System.out.println("El total es"+ result +"unidades"); Operadores que actúan a nivel de bits: Son mucho menos utilizados por eso los explicamos más por encima.
  • 23.  '>>': desplazamiento a la derecha de los bits del operando  '<<': desplazamiento a la izquierda de los bits de operando  '&': operador and a nivel de bit.  '|': operador or a nivel de bit Expresiones: En Java cada expresión tiene un tipo que se determina durante la compilación, es decir es independiente del valor durante la ejecución. Una expresión puede ser:  Una constante: 1, 1.0, true, etc. El tipo de esta expresión es el tipo de la constante. En el ejemplo los tipos son int, double y boolean respectivamente.  Una variable: i, s, a El tipo de esta expresión es el tipo con que se declaró aquella variable. En el ejemplo los tipos son entero, referencia a string y referencia a arreglo.  El resultado de una operación: i+1, a[1], etc. El tipo se determina en función de los tipos de las expresiones que se indican como argumentos de la operación. Java tiene prácticamente los mismos operadores de C y C++. Cada operador acepta una, dos o tres expresiones de diversos tipos. A veces un operador no está definido para argumentos de ciertos tipos. Por ejemplo la resta entre strings no está definida. Pero la suma de strings está definida como la concatenación. A continuación veremos los operadores más frecuentes en Java.
  • 24. Operadores binarios entre expresiones numéricas: Símbolo Operación + Suma - Resta * Multiplicación / División % Resto Los operandos y el resultado de estos operadores pueden ser: Dominio Rango int*int int long*long long float*float float double*double double  Al operar con byte y short, estos se convierten implícitamente a int.  Cuando los tipos de los operandos no coinciden, el operando de menor rango se convierte implícitamente al tipo de mayor rango. El resultado de la operación es del tipo de mayor rango. Ejemplos: int a=1, b=2; int c= a + b; short s= 1;
  • 25. int d= s + c; // s se convierte a int float f= 1.0 + a; // a se convierte a float Operadores unarios sobre expresiones numéricas: Símbolo Operación Argumento + exp nada int | long | float | double - exp cambio de signo int | long | float | double El resultado de estas operaciones es siempre del mismo tipo del operando. Si el operando es byte o short entonces se convierte a int, se realiza la operación y el resultado es un int. Operadores sobre variables enteras: Símbolo Operación Argumento ++ var preincremento int | short | byte | long -- var predecremento int | short | byte | long var ++ postincremento int | short | byte | long var -- postdecremento int | short | byte | long El resultado de estas operaciones es siempre del mismo tipo del operando.
  • 26. Ejemplos: int a=1, b=2; int c= +a; int d= -(c+1); b= a++; // b= 1, a=2 a= --b; // a=b= 0 (a+1)++; // error a+1 no es una variable float f= a; f++; // error f no es entero Operadores binarios relacionales: Símbolo Operación > mayor < menor >= mayor igual <= menor igual == igual != distinto
  • 27. Los operandos y el resultado de estos operadores pueden ser: Dominio Rango int*int boolean long*long boolean float*float boolean double*double boolean Operadores entre valores booleanos: Operación Significado exp && exp y-lógico exp || exp o-lógico ! exp negación Los operandos y el resultado de estos operadores son siempre booleanos. Los operadores && y || evalúan la expresión del lado derecho sólo si es necesario. Ejemplos: int a=1, b=2; boolean v= ! a<=b && a==5 || b!=4; boolean w= ((! a<=b) && a==5) || b!=4; boolean w2= a<=b && a; // error a no es boolean
  • 28. Conversiones: cast  Java realiza conversiones implícitas de menor a mayor rango.  Eventualmente hay pérdida de significacia al convertir enteros a punto flotante.  Todas las conversiones de mayor a menor rango deben ser explícitas por medio del operador de cast: (tipo)expresión Ejemplos: int i= 1; short s= 2; int j= i+s; s= a; // error short < int s= (short)a; // Ok i= 1.0; // error int < double i= (int)1.0; // Ok f= 1.0; // error float < double f= (float)1.0; // Ok f= 1.0f; // Ok boolean v=(boolean)a; // error no existe conversión
  • 29. Precedencia de Operadores: . () [] unarios: - + (cast) * / % + - < > <= >= == != ! || && 10.- Entrada y Salida La entrada y salida en java se implementa en el paquete java.io y toto el código presentado en este capítulo se importa, aunque no se incluya la correspondiente sentencia import. La E/S en java se basa en el concepto de flujo, que es una secuencia ordenada de datos que tienen una fuente (flujos de entrada) o un destino (flujos de salida). Las clases de E/S aislan a los programadores de los detalles específicos del sistema de funcionamiento de la máquina, al tiempo que posibilitan el acceso a recursos del sistema por medio de ficheros o archivos (files). En este capítulo vamos a ocuparnos de las clases de E/S más sencillas, dejando las otras más sofisticadas para cuando tengamos necesidad de utilizarlas. Entrada básica: la clase InputStream La clase abstracta InputStream declara los métodos para leer datos desde una fuente concreta y es la clasa base de la mayor parte de los flujos de entrada en java.io. Soporta los métodos siguientes:
  • 30.  int read(): lee un sólo byte de datos y los devuelve en el rango [0..255]. Devuelve -1 cuando se alcanza el final del flujo y no puede seguir leyendo bytes.  int read (byte [] buf): lee un array de bytes hasta buf.length. Devuelve el número de bytes leidos o -1 cuando se llega al final del flujo.  int read (byte [] buf, int off, int len): lee len bytes del flujo (o los que pueda) y los coloca a partir de la posición off del array.  long skip(long count): salta hasta count bytes de entrada o hasta el final del flujo de entrada, devolviendo el número de bytes saltados.  int available(): devuelve el número de bytes que están disponibles para leerse.  void close (): cierra el flujo de entrada que abrió el constructor no-arg, liberando los recursos asociados a ese flujo. No es necesario invocar este método ya que el flujo se cierra cuando se destruye el objeto aunque es conveniente hacerlo ya que vuelca el buffer sobre el disco. El siguiente ejemplo es un programa muy sencillo que hace el eco del la entrada estandar (el teclado) leyendo los caracteres de 5 en 5 (el return también es un carácter). Finaliza cuando se cierra el flujo de entrada con un carácter Ctrl-D. El método main debe indicar que lanzará una excepción InputStream. El método read se aplica sobre el objeto System.in que es un flujo de entrada; la entrada estandar, el teclado. El constructor String(byte[] bytes, int hiByte, int offset, int conunt) hace un String nuevo cuyo valor es el subarray especificado del array bytes comenzando en offset y de count caracteres. En las conversiones de ASCII8 o ISO-LATIN-1 el hibyte estará a 0. import java.io.*; class Eco{ public static void main(String [] args) throws IOException{ byte [] b= new byte[5]; String cadena; int l=0;
  • 31. for(;;){ l=System.in.read(b); if (l<0) break; cadena= new String(b,0,0,l); System.out.print("/"+cadena+"/"); } }} Salida básica: la clase OutputStream La clase abstracta OutputStream es análoga a InputStream sólo que proporciona métodos para manejar el flujo de salida. Los métodos que incluye son:  void write(int b): escribe b como byte, que, aunque sea declarado como int es transformado a byte. Esto es porque habitualmente es el resultado de una operación previa.  void write(byte [] buf): escribe un array de bytes.  void write(byte [] buf, int offset, int count): escribe un array buf de bytes, empezando en la posición offset y escribiendo count de ellos, deteniendose antes si encuentra el final del array.  void flush(): vacia el flujo de modo que los bytes que quedaran por escribir son escritos.  void close(): cierra el flujo de salida liberando los recursos asociados a ese flujo. A menos que se diga lo contrario estos métodos lanzan una excepción IOException si detectan algún error en el flujo de salida. Salida con formato: la clase PrintStream La clase PrintStream proporciona utilidades para dar formato a la salida. Tiene dos métodos print y println que están sobrecargados para los tipos primitivos, objetos, cadenas y arrays de caracteres. La diferencia entre ambos métodos está en que println
  • 32. añade un carácter de nueva línea. Además el método println además puede llamarse sin argumentos, produciendo una nueva línea. System.out es una referencia a PrintStream. PrintStream proporciona dos constructores, ambos con un primer argumento de tipo OutputStream cuya diferencia está en un segundo argumento booleano que indica si debe vaciar el flujo con cada carácter de nueva línea. Entrada y Salida de Tipos Primitivos: las clases DataInputStream y DataOutputStream Aunque leer y escribir bytes es útil, a menudo es necesario transmitir datos de tipos primitivos dentro de un flujo. Las clases DataInputStream y DataOutputStream proporcionan métodos para la lectura y escritura de tipos primitivos de un modo independiente de la máquina. Así proporcionan los siguientes pares de métodos lectura/escritura:readBoolean y writeBoolean, readChar y writeChar, readByte y writeByte, readUnsignedByte y writeUnsignedByte, readShort y writeShort, readUnsignedShort y writeUnsignedShort, readInt y writeInt, readLong y writeLong, readFloat y writeFloat, readDouble y writeDouble, readUTF y writeUTF (UTF es Unicode Transmition Format, que se utiliza para transmitir los caracteres de un String de 16 bits codificada en 8 bits.) Además de estos métodos la clase DataInputStream proporciona varios métodos más:  void readFully (byte [] buf): lee bytes en buf. También existe la versión readFully (byte []buf, int offset, int count).  int skipBytes (int n): salta n bytes.  String readLine (): lee un String hasta que se alcanza una n un r o un par rn. La secuencia final no es incluida en la cadena. Si se alzanza el final de la entrada se devuelve el null. La clase DataOutputStream proporciona también un conjunto de métodos aparte de los dedicados a escribir los tipos primitivos. Proporciona signaturas equivalentes a los tres métodos write de la clase OutputStream y además los siguientes métodos:
  • 33.  void writeBytes(String s): escribe un String como una secuencia de bytes, perdiendo el byte superior de cada carácter.  void writeChars(String s): escribe un String como una secuencia de caracteres. El siguiente ejemplo implementa un acumulador, que se incrementa en las cantidades que lee del teclado. Se utiliza el método readLine para leer hasta el final de la línea y almacenarlo en un Strint, que luego es tranformado en un entero utilizando el método parseInt de la clase Integer. import java.io.*; class Acumulador { public static void main( String[ ] args ) throws IOException { DataInputStream input = new DataInputStream( System.in ); String bufferIn; int valor, total = 0; System.out.print("n["+total+"] "); while((bufferIn = input.readLine()) != null){ valor = Integer.parseInt( bufferIn ); total += valor; System.out.print("n["+total+"] "); } System.out.println("n["+total+"]n"); } } Entrada y Salida con Ficheros: las clases FileInputStream y FileOutputStream Gran parte de la entrada y salida de los programas se realiza basándose en ficheros y para ello java.io aporta dos clases. Una para ficheros de entrada, FileInputStream, y otra para ficheros de salida, FileOutputStream. La diferencia entre ficheros de entrada y de salida es fundamental, pues situaciones como intentar leer de un fichero de salida o
  • 34. viceversa pueden generar en errores. FileOutputStream crea un fichero, salvo que exista y sea de sólo lectura. Estas clases aportan tres constructores cada una, dependiendo de la información aportada para identificar el fichero a abrir:  Un constructor que toma como argumento un String que es el nombre del fichero que se va a abrir.  Un constructor que toma un objeto de tipo File que se refiere al fichero (ver la clase File).  Un constructor que toma un objeto de tipo FileDescriptor, que constituye un valor dependiente del sistema de ficheros y que describe un fichero abierto. El siguiente programa ejemplo maneja dos ficheros, uno de entrada y otro de salida, de modo que copia uno en otro. Para leer y escribir en ellos se utilizan los métodos de la clase InputStream y OutputStream, ya que las clases FileInputStream y FileOutputStream son extensiones de las de entrada y salida básica. import java.io.*; class FileIO{ public static void main(String [] args) throws FileNotFoundException, IOException{ FileInputStream in = new FileInputStream("entrada.txt"); FileOutputStream out = new FileOutputStream("salida.txt"); int n=0,c; System.out.print ("nCopiando ..."); while( (c = in.read()) != -1){ out.write(c); n++; }
  • 35. in.close(); out.close(); System.out.print ("nSe han copiado "+n+" caracteresn"); }} Flujos E/S Estándar El programador puede utilizar para la E/S los tres flujos del sistema que están disponibles como campos estáticos de la clase System: System.in, System.out y System.err:  static InputStream in flujo de entrada estándar para leer datos de tipo carácter.  static OutputStream out flujo de salida estándar para escribir mensajes.  static OutputStream err flujo de salida estándar para escribir mensajes de error. Normalmente la entrada estándar está asociada al teclado, y tanto la salida estándar como la salida de error estándar están asociadas al monitor, pero esto se puede cambiar, redirigiendolas a ficheros. Tanto out como err son de tipo PrintStream, por tanto los mensajes de salida normal, como los de error, son mostrados utilizando los métodos print de la clase PrintStream. Por ejemplo, se puede ejecutar el programa Acumulador anteriormente descrito redirigiendo las entradas y salidas a ficheros de la manera siguiente (versión Unix): java Acumulador <en.txt >sa.txt 2>er.txt Siendo el contenido de los ficheros  sa.txt  1  2  3  sa.txt   [0]
  • 36.  [1]  [3]  [6]  [6]  y estando el fichero er.txt vacio por no haberse producido error alguno. 11.- Estructuras de Control Las estructuras de control determinan la secuencia de ejecución de las sentencias de un programa. Las estructuras de control se dividen en tres categorías: Secuencial Condicional o Selectiva Iterativa o Repetitiva. Estructura Secuencial El orden en que se ejecutan por defecto las sentencias de un programa es secuencial. Esto significa que las sentencias se ejecutan en secuencia, una después de otra, en el orden en que aparecen escritas dentro del programa. La estructura secuencial está formada por una sucesión de instrucciones que se ejecutan en orden una a continuación de la otra. Cada una de las instrucciones están separadas por el carácter punto y coma (;). Las instrucciones se suelen agrupar en bloques. El bloque de sentencias se define por el carácter llave de apertura ({) para marcar el inicio del mismo, y el carácter llave de cierre (}) para marcar el final. Ejemplo: { instrucción 1; instrucción 2; instrucción 3;
  • 37. } En Java si el bloque de sentencias está constituido por una única sentencia no es obligatorio el uso de las llaves de apertura y cierre ({ }), aunque sí recomendable. Ejemplo de programa Java con estructura secuencial: Programa que lee dos números por teclado y los muestra por pantalla. /* Programa que lea dos números por teclado y los muestre por pantalla. */ import java.util.*; public class Main { public static void main(String[] args){ //declaración de variables int n1, n2; Scanner sc = new Scanner(System.in); //leer el primer número System.out.println("Introduce un número entero: "); n1 = sc.nextInt(); //lee un entero por teclado //leer el segundo número System.out.println("Introduce otro número entero: "); n2 = sc.nextInt(); //lee un entero por teclado //mostrar resultado System.out.println("Ha introducido los números: " + n1 + " y " + n2); } } Ejemplo de programa Java con estructura secuencial: Programa que lee dos números de tipo double por teclado y calcula y muestra por pantalla su suma, resta y multiplicación. /* * Programa que lee dos números de tipo double por teclado * y muestra su suma, resta y multiplicación.
  • 38. */ import java.util.*; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); double numero1, numero2; System.out.println("Introduce el primer número:"); numero1 = sc.nextDouble(); System.out.println("Introduce el segundo número:"); numero2 = sc.nextDouble(); System.out.println("Números introducido: " + numero1 + " " + numero2); System.out.println (numero1 + " + " + numero2 + " = " + (numero1+numero2)); System.out.println (numero1 + " - " + numero2 + " = " + (numero1-numero2)); System.out.println (numero1 + " * " + numero2 + " = " + numero1*numero2); } } Para modificar el orden de ejecución de las instrucciones de un programa Java se utilizan las estructuras condicionales y repetitivas. Estructura Condicional, Alternativa o Selectiva La estructura condicional determina si se ejecutan unas instrucciones u otras según se cumpla o no una determinada condición. En java la estructura condicional se implementa mediante: - Instrucción if. - Instrucción switch. - Operador condicional ? :
  • 39. 1 INSTRUCCION if Puede ser del tipo: - Condicional simple: if - Condicional doble: if ... else ... - Condicional múltiple: if .. else if .. La condición debe ser una expresión booleana es decir debe dar como resultado un valor booleano (true ó false). Condicional simple: se evalúa la condición y si ésta se cumple se ejecuta una determinada acción o grupo de acciones. En caso contrario se saltan dicho grupo de acciones. if(expresión_booleana){ instrucción 1 instrucción 2 ....... } Si el bloque de instrucciones tiene una sola instrucción no es necesario escribir las llaves { } aunque para evitar confusiones se recomienda escribir las llaves siempre. Ejemplo de programa Java con estructura condicional: Programa que pide por teclado la nota obtenida por un alumno y muestra un mensaje si el alumno ha aprobado. /* * Programa que pide una nota por teclado y muestra un mensaje si la nota es * mayor o igual que 5 */ import java.util.*; public class Ejemplo0If { public static void main( String[] args ){ Scanner sc = new Scanner( System.in ); System.out.print("Nota: ");
  • 40. int nota = sc.nextInt(); if (nota >= 5 ){ System.out.println("Enorabuena!!"); System.out.println("Has aprobado"); } } } Condicional doble: Se evalúa la condición y si ésta se cumple se ejecuta una determinada instrucción o grupo de instrucciones. Si no se cumple se ejecuta otra instrucción o grupo de instrucciones. if(expresión booleana){ instrucciones 1 } else{ instrucciones 2 } Ejemplo de programa Java que contiene una estructura condicional doble: Programa que lee la nota de un alumno y muestra si el alumno ha aprobado o no. /* * Programa que pide una nota por teclado y muestra si se ha aprobado o no */ import java.util.*; public class Ejemplo0If { public static void main( String[] args ){ Scanner sc = new Scanner( System.in ); System.out.print("Nota: "); int nota = sc.nextInt(); if (nota >= 5 ){
  • 41. System.out.println("Enorabuena!!"); System.out.println("Has aprobado"); } else System.out.println("Lo Siento, has suspendido"); } } Otro ejemplo de programa Java que contiene una estructura condicional doble: Calcular si un número es par. El programa lee un número por teclado y muestra un mensaje indicando si es par o impar. /* * programa que pide un número por teclado y calcula si es par o impar */ import java.util.*; public class EjemploIf { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num; System.out.println("Introduzca numero: "); num = sc.nextInt(); if ((num%2)==0) System.out.println("PAR"); else System.out.println("IMPAR"); } } Condicional múltiple: Se obtiene anidando sentencias if ... else. Permite construir estructuras de selección más complejas. if (expresion_booleana1)
  • 42. instruccion1; else if (expresion_booleana2) instruccion2; else instruccion3; Cada else se corresponde con el if más próximo que no haya sido emparejado. Una vez que se ejecuta un bloque de instrucciones, la ejecución continúa en la siguiente instrucción que aparezca después de las sentencias if .. else anidadas. Ejemplo de programa Java que contiene una estructura condicional múltiple: Programa que lee una hora (número entero) y muestra un mensaje según la hora introducida. /* * Programa que muestra un saludo distinto según la hora introducida */ import java.util.*; public class Ejemplo2If { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int hora; System.out.println("Introduzca una hora (un valor entero): "); hora = sc.nextInt(); if (hora >= 0 && hora < 12) System.out.println("Buenos días"); else if (hora >= 12 && hora < 21) System.out.println("Buenas tardes"); else if (hora >= 21 && hora < 24) System.out.println("Buenas noches"); else System.out.println("Hora no válida"); } }
  • 43. Ejemplo de programa Java que contiene una estructura condicional múltiple: Programa que lee una nota (número entero entre 0 y 10) y muestra la calificación equivalente en forma de texto. /* * programa que lee una nota y escribe la calificación correspondiente */ import java.util.*; public class Ejemplo3If { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double nota; System.out.println("Introduzca una nota entre 0 y 10: "); nota = sc.nextDouble(); System.out.println("La calificación del alumno es "); if(nota < 0 || nota > 10) System.out.println("Nota no válida"); else if(nota==10) System.out.println("Matrícula de Honor"); else if (nota >= 9) System.out.println("Sobresaliente"); else if (nota >= 7) System.out.println("Notable"); else if (nota >= 6) System.out.println("Bien"); else if (nota >= 5) System.out.println("Suficiente"); else System.out.println("Suspenso"); }
  • 44. } Comparar String en Java Para comparar el contenido de dos Strings en Java se usa el método equals: if ((cadena1.equals(cadena2)) En caso de que una cadena coincida exactamente con una constante se puede usar == String nombre = "Lucas"; if (nombre == "Lucas") Para comparar Strings en el orden alfabético se usa el método compareTo if (cadena1.compareTo(cadena2) < 0) // cadena1 antes que cadena2 if (cadena1.compareTo(cadena2) > 0) // cadena1 después que cadena2 if (cadena1.compareTo(cadena2) == 0) // cadena1 igual que cadena2 2 INSTRUCCION switch Se utiliza para seleccionar una de entre múltiples alternativas. La forma general de la instrucción switch en Java es la siguiente: switch (expresión){ case valor 1: instrucciones; break; case valor 2: instrucciones; break; · · · default: instrucciones; } La instrucción switch se puede usar con datos de tipo byte, short, char e int. También con tipos enumerados y con las clases envolventes Character, Byte, Short e Integer. A partir de Java 7 también pueden usarse datos de tipo String en un switch. Funcionamiento de la instrucción switch:
  • 45. - Primero se evalúa la expresión y salta al case cuya constante coincida con el valor de la expresión. – Se ejecutan las instrucciones que siguen al case seleccionado hasta que se encuentra un break o hasta el final del switch. El break produce un salto a la siguiente instrucción a continuación del switch. – Si ninguno de estos casos se cumple se ejecuta el bloque default (si existe). No es obligatorio que exista un bloque default y no tiene porqué ponerse siempre al final, aunque es lo habitual. Ejemplo de programa Java que contiene una instrucción switch: Programa que lee por teclado un mes (número entero) y muestra el nombre del mes. /* * Programa que pide un número de mes y muestra el nombre correspondiente */ import java.util.*; public class Ejemplo0Switch { public static void main(String[] args) { int mes; Scanner sc = new Scanner(System.in); System.out.print("Introduzca un numero de mes: "); mes = sc.nextInt(); switch (mes) { case 1: System.out.println("ENERO"); break; case 2: System.out.println("FEBRERO"); break; case 3: System.out.println("MARZO"); break; case 4: System.out.println("ABRIL"); break; case 5: System.out.println("MAYO");
  • 46. break; case 6: System.out.println("JUNIO"); break; case 7: System.out.println("JULIO"); break; case 8: System.out.println("AGOSTO"); break; case 9: System.out.println("SEPTIEMBRE"); break; case 10: System.out.println("OCTUBRE"); break; case 11: System.out.println("NOVIEMBRE"); break; case 12: System.out.println("DICIEMBRE"); break; default : System.out.println("Mes no válido"); } } } Ejemplo de programa Java que contiene una una instrucción switch: Programa que lee dos números enteros por teclado y un operador (de tipo carácter) y muestra el resultado de la operación. /* * Programa que pide dos números y un operador y muestra el resultado */ import java.util.*; import java.io.*; public class Ejemplo1Switch { public static void main(String[] args) throws IOException{ int A,B, Resultado = 0 ; char operador;
  • 47. boolean calculado = true; Scanner sc = new Scanner(System.in); System.out.print("Introduzca un numero entero:"); A = sc.nextInt(); System.out.print("Introduzca otro numero entero:"); B = sc.nextInt(); System.out.print("Introduzca un operador (+,-,*,/):"); operador = (char)System.in.read(); switch (operador) { case '-' : Resultado = A - B; break; case '+' : Resultado = A + B; break; case '*' : Resultado = A * B; break; case '/' : if(B!=0) Resultado = A / B; else{ System.out.println("nNo se puede dividir por cero"); calculado = false; } break; default : System.out.println("nOperador no valido"); calculado = false; } if(calculado){ System.out.println("nEl resultado es: " + Resultado); } } }
  • 48. 2.3 OPERADOR CONDICIONAL ? : Se puede utilizar en sustitución de la sentencia de control if-else. Los forman los caracteres ? y : Se utiliza de la forma siguiente: expresión1 ? expresión2 : expresión3 Si expresión1 es cierta entonces se evalúa expresión2 y éste será el valor de la expresión condicional. Si expresión1 es falsa, se evalúa expresión3 y éste será el valor de la expresión condicional. Ejemplo de programa Java que contiene un operador condicional: Programa que calcula y muestra si un número que se lee por teclado es par o impar. /* * programa que pide un número por teclado y calcula si es par o impar */ import java.util.*; public class Ejemplo1OperadorCondicional { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num; System.out.println("Introduzca numero: "); num = sc.nextInt(); System.out.println((num%2)==0 ? "PAR" : "IMPAR"); } } Estructura Iterativa O Repetiva Permiten ejecutar de forma repetida un bloque específico de instrucciones. Las instrucciones se repiten mientras o hasta que se cumpla una determinada condición. Esta condición se conoce como condición de salida.
  • 49. Tipos de estructuras repetitivas: - ciclo while - ciclo do – while - ciclo for 1 Ciclo While Las instrucciones se repiten mientras la condición sea cierta. La condición se comprueba al principio del bucle por lo que las acciones se pueden ejecutar 0 ó más veces. La ejecución de un bucle while sigue los siguientes pasos: 1. Se evalúa la condición. 2. Si el resultado es false las instrucciones no se ejecutan y el programa sigue ejecutándose por la siguiente instrucción a continuación del while. 3. Si el resultado es true se ejecutan las instrucciones y se vuelve al paso 1 Ejemplo de programa Java que contiene una instrucción while: Programa que lee números por teclado. La lectura acaba cuando el número introducido sea negativo. El programa calcula y muestra la suma de los números leídos. /* * Programa que lee números hasta que se lee un negativo y muestra la * suma de los números leídos */ import java.util.*; public class Ejemplo1While { public static void main(String[] args) { int suma = 0, num; Scanner sc = new Scanner(System.in); System.out.print("Introduzca un número: "); num = sc.nextInt(); while (num >= 0){ suma = suma + num; System.out.print("Introduzca un número: ");
  • 50. num = sc.nextInt(); } System.out.println("La suma es: " + suma ); } } Ejemplo de programa Java que contiene una instrucción while: Programa que lee un número entero N y muestra N asteriscos. /* * programa que lee un número n y muestra n asteriscos */ import java.util.*; public class Ejemplo2While { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n, contador = 0; System.out.print("Introduce un número: "); n = sc.nextInt(); while (contador < n){ System.out.println(" * "); contador++; } } } Ejemplo de programa Java con una instrucción while: /* * programa que muestra una tabla de equivalencias entre * grados Fahrenheit y grados celsius */ public class Ejemplo3While {
  • 51. public static void main(String[] args) { final int VALOR_INICIAL = 10; // limite inf. tabla final int VALOR_FINAL = 100; // limite sup. tabla final int PASO = 10 ; // incremento int fahrenheit; double celsius; fahrenheit = VALOR_INICIAL; System.out.printf("Fahrenheit t Celsius n"); while (fahrenheit <= VALOR_FINAL ){ celsius = 5*(fahrenheit - 32)/9.0; System.out.printf("%7d t %8.3f n", fahrenheit, celsius); fahrenheit += PASO; } } } 2 Ciclo Do – While Las instrucciones se ejecutan mientras la condición sea cierta. La condición se comprueba al final del bucle por lo que el bloque de instrucciones se ejecutarán al menos una vez. Esta es la diferencia fundamental con la instrucción while. Las instrucciones de un bucle while es posible que no se ejecuten si la condición inicialmente es falsa. La ejecución de un bucle do - while sigue los siguientes pasos: 1. Se ejecutan las instrucciones a partir de do{ 2. Se evalúa la condición. 3. Si el resultado es false el programa sigue ejecutándose por la siguiente instrucción a continuación del while. 4. Si el resultado es true se vuelve al paso 1 Ejemplo de programa Java que contiene una instrucción do while: Programa que lee un número entero N. El número debe ser menor que 100. /*
  • 52. * Programa que obliga al usuario a introducir un número menor que 100 */ import java.util.*; public class Ejemplo1DoWhile { public static void main(String[] args) { int valor; Scanner in = new Scanner( System.in ); do { System.out.print("Escribe un entero < 100: "); valor = in.nextInt(); }while (valor >= 100); System.out.println("Ha introducido: " + valor); } } Ejemplo de programa Java con una instrucción do while: /* * Programa que lee un número entre 1 y 10 ambos incluidos */ import java.util.*; public class Ejemplo2DoWhile { public static void main(String[] args) { int n; Scanner sc = new Scanner( System.in ); do { System.out.print("Escribe un número entre 1 y 10: "); n = sc.nextInt(); }while (n<1 || n >10); System.out.println("Ha introducido: " + n); } }
  • 53. 3 Ciclo For Hace que una instrucción o bloque de instrucciones se repitan un número determinado de veces mientras se cumpla la condición. La estructura general de una instrucción for en Java es la siguiente: for(inicialización; condición; incremento/decremento){ instrucción 1; ........... instrucción N; } A continuación de la palabra for y entre paréntesis debe haber siempre tres zonas separadas por punto y coma: - zona de inicialización. - zona de condición - zona de incremento ó decremento. Si en alguna ocasión no es necesario escribir alguna de ellas se pueden dejar en blanco, pero los dos punto y coma deben aparecer. Inicialización es la parte en la que la variable o variables de control del bucle toman su valor inicial. Puede haber una o más instrucciones en la inicialización, separadas por comas. La inicialización se realiza solo una vez. Condición es una expresión booleana que hace que se ejecute la sentencia o bloque de sentencias mientras que dicha expresión sea cierta. Generalmente en la condición se compara la variable de control con un valor límite. Incremento/decremento es una expresión que decrementa o incrementa la variable de control del bucle. La ejecución de un bucle for sigue los siguientes pasos: 1. Se inicializa la variable o variables de control (inicialización) 2. Se evalúa la condición. 3. Si la condición es cierta se ejecutan las instrucciones. Si es falsa, finaliza la ejecución del bucle y continúa el programa en la siguiente instrucción después del for. 4. Se actualiza la variable o variables de control (incremento/decremento)
  • 54. 5. Se vuelve al punto 2. Ejemplo de programa Java que contiene una instrucción for: /* * programa que muestra los números del 1 al 10 */ public class Ejemplo0For { public static void main(String[] args) { int i; for(i=1; i<=10;i++) System.out.println(i + " "); } } La instrucción for del ejemplo anterior la podemos interpretar así: Asigna a i el valor inicial 1, mientras que i sea menor o igual a 10 muestra i + “ “ , a continuación incrementa el valor de i y comprueba de nuevo la condición. Ejemplo de programa Java con una instrucción for: /* * programa que muestra los números del 10 al 1 */ public class Ejemplo2For { public static void main(String[] args) { int i; for(i=10; i>0;i--) System.out.println(i + " "); } } Ejemplo de programa Java con una instrucción for: /* * programa que muestra una tabla de equivalencias entre * grados Fahrenheit y grados celsius */
  • 55. public class Ejemplo1For { public static void main(String[] args) { final int VALOR_INICIAL = 10; // limite inf. tabla final int VALOR_FINAL = 100; // limite sup. tabla final int PASO = 10 ; // incremento int fahrenheit; double celsius; fahrenheit = VALOR_INICIAL; System.out.printf("Fahrenheit t Celsius n"); for (fahrenheit = VALOR_INICIAL; fahrenheit <= VALOR_FINAL; fahrenheit+= PASO) { celsius = 5*(fahrenheit - 32)/9.0; System.out.printf("%7d t %8.3f n", fahrenheit, celsius); } } } En las zonas de inicialización e incremento/decremento puede aparecer más de una variable. En ese caso deben ir separadas por comas. Ejemplo: /* * programa que muestra el valor de a, b y su suma mientras que la suma de * ambas es menor de 10. En cada iteración el valor de a se incrementa en * 1 unidad y el de b en 2 */ public class Ejemplo3For { public static void main(String[] args) { int a, b; for(a = 1, b = 1; a + b < 10; a++, b+=2){ System.out.println("a = " + a + " b = " + b + " a + b = " + (a+b)); }
  • 56. } } La salida de este programa es: a = 1 b = 1 a + b = 2 a = 2 b = 3 a + b = 5 a = 3 b = 5 a + b = 8 Aunque la instrucción repetitiva for, al igual que las instrucciones while y do- while, se puede utilizar para realizar repeticiones cuando no se sabe a priori el número de pasadas por el bucle, esta instrucción es especialmente indicada para bucles donde se conozca el número de pasadas. Como regla práctica podríamos decir que las instrucciones while y do-while se utilizan generalmente cuando no se conoce a priori el número de pasadas, y la instrucción for se utiliza generalmente cuando sí se conoce el número de pasadas. Se ha de tener cuidado con escribir el punto y coma (;) después del paréntesis final del bucle for. Un bucle for generalmente no lleva punto y coma final. Por ejemplo el bucle: int i; for (i = 1; i <= 10; i++); { System.out.println("Elementos de Programación"); } no visualiza la frase "Elementos de Programación" 10 veces, ni produce un mensaje de error por parte del compilador. En realidad lo que sucede es que se visualiza una vez la frase "Elementos de Programación", ya que aquí la sentencia for es una sentencia vacía al terminar con un punto y coma (;). La sentencia for en este caso hace que i empiece en 1 y acabe en 11 y tras esas iteraciones, se ejecuta la sentencia System.out.println("Elementos de Programación");
  • 57. 4 Bucles Infinitos En Java Java permite la posibilidad de construir bucles infinitos, los cuales se ejecutarán indefinidamente, a no ser que provoquemos su interrupción. Tres ejemplos: for(;;){ instrucciones } for(;true;){ instrucciones } while(true){ instrucciones } 5 Bucles Anidados Bucles anidados son aquellos que incluyen instrucciones for, while o do-while unas dentro de otras. Debemos tener en cuenta que las variables de control que utilicemos deben ser distintas. Los anidamientos de estructuras tienen que ser correctos, es decir, que una estructura anidada dentro de otra lo debe estar totalmente. Ejemplo de programa Java con bucles anidados: /* * Programa que dibuja un rectángulo sólido de asteriscos. * El número de filas y columnas se pide por teclado */ import java.util.*; public class Ejemplo1BuclesAnidados { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int filas, columnas; //leer número de filas hasta que sea un número > 0 do{
  • 58. System.out.print("Introduce número de filas: "); filas = sc.nextInt(); }while(filas<1); //leer número de columnas hasta que sea un número > 0 do{ System.out.print("Introduce número de columnas: "); columnas = sc.nextInt(); }while(columnas<1); for(int i = 1; i<=filas; i++){ //filas for(int j = 1; j<=columnas; j++){ //columnas System.out.print(" * "); } System.out.println(); } } } La salida de este programa para filas = 6 y columnas = 10 es: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Ejemplo de programa Java con bucles anidados: /* * Programa que muestra una tabla con las potencias de x (x x2 x3 x4) * para valores de x desde 1 hasta XMAX */ public class JavaApplication22 { public static void main(String[] args) {
  • 59. final int XMAX = 10; int x, n; //mostrar la cabecera de la tabla System.out.printf("%10s%10s%10s%10s%n", "x","x^2","x^3","x^4"); for (x = 1; x <= XMAX; x++){ //filas for (n = 1; n <= 4; n++){ //columnas System.out.printf("%10.0f", Math.pow(x,n)); } System.out.println(); } } } El programa muestra por pantalla la siguiente tabla de potencias: x x^2 x^3 x^4 1 1 1 1 2 4 8 16 3 9 27 81 4 16 64 256 5 25 125 625 6 36 216 1296 7 49 343 2401 8 64 512 4096 9 81 729 6561 10 100 1000 10000
  • 60. CONCLUSIÓN La programación orientada a objetos permite la optimización del código generado gracias a que mediante técnicas de herencia, atributos estáticos entre otros permiten, que el código sea genérico de manera que sea reutilizable. Mediante las técnicas aprendidas en el presente curso podemos establecer una solución primitiva de un problema real, tan solo con relacionarlo con objetos lógicos que serán usados para el desarrollo del software. Podemos dar a conocer de una forma sencilla los mecanismos que se usan en este nivel de programación, a personas que deseen una explicación rápida y sencilla de lo que es la programación orientada a objetos. Tenemos los conocimientos necesarios como para enfrentar un problema real y desarrollo en cualquier tipo de lenguaje de programación. Al trabajar con la programación orientada a objetos sea está desarrollada en otras plataformas de programación, sabemos las formas de lograr un mejor rendimiento del equipo a controlar y aplicar soluciones sencillas, de manera que sea fácilmente digeribles para el usuario y/o destinatario del trabajo final. La plataforma Java es una plataforma sólo de software que ejecuta sobre la base de varias plataformas de hardware. Está compuesto por JVM y la interfaz de programación de aplicaciones (API) Java un amplio conjunto de componentes de software (clases) listos para usar que facilitan el desarrollo y despliegue de applets y aplicaciones. La API Java abarca desde objetos básicos a conexión en red, seguridad, generación de XML y servicios web. Está agrupada en bibliotecas conocidas como paquetes de clases e interfaces relacionadas. También está probado que JVM es una plataforma robusta para ejecutar lenguajes que no sean Java.