Este documento proporciona una introducción a Java como un lenguaje de programación orientado a objetos. Explica conceptos clave como objetos, clases, encapsulamiento, herencia y polimorfismo. También resume brevemente la historia de Java, desde su creación en 1991 hasta su lanzamiento público en 1995.
1. República bolivariana de Venezuela
I.U.P. “Santiago Mariño”
Extensión Maturín
JAVA COMO PROGRAMACION ORIENTADA A OBJETOS
Tutor: Autor:
María Aguilera Ángel Laverde 25.503.860
Sección “GG” D/T Cesar Anteliz 19.781.585
Marzo de 2016
2. INTRODUCCION
Java es un lenguaje de programación de propósito general, concurrente, orientado a objetos que
fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera
posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una
vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once, run
anywhere"), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que
ser recompilado para correr en otra. Java es, a partir de 2012, uno de los lenguajes de
programación más populares en uso, particularmente para aplicaciones de cliente-servidor de
web, con unos 10 millones de usuarios reportado.
3. ¿Qué es la orientación a objetos?
La programación Orientada a Objetos es una metodología que basa la estructura de los programas
en torno a los objetos.
Los lenguajes de POO ofrecen medios y herramientas para describir los objetos manipulados por
un programa. Más que describir cada objeto individualmente, estos lenguajes proveen una
construcción (Clase) que describe a un conjunto de objetos que poseen las mismas propiedades.
¿Qué es un objeto?
Es una entidad (tangible o intangible) que posee características y acciones que realiza por sí solo
o interactuando con otros objetos.
Un objeto es una entidad caracterizada por sus atributos propios y cuyo comportamiento está
determinado por las acciones o funciones que pueden modificarlo, así como también las acciones
que requiere de otros objetos. Un objeto tiene identidad e inteligencia y constituye una unidad
que oculta tanto datos como la descripción de su manipulación. Puede ser definido como una
encapsulación y una abstracción: una encapsulación de atributos y servicios, y una abstracción
del mundo real.
Para el contexto del Enfoque Orientado a Objetos (EOO) un objeto es una entidad que encapsula
datos (atributos) y acciones o funciones que los manejan (métodos). También para el EOO un
objeto se define como una instancia o particularización de una clase.
Los objetos de interés durante el desarrollo de software no sólo son tomados de la vida real
(objetos visibles o tangibles), también pueden ser abstractos. En general son entidades que juegan
un rol bien definido en el dominio del problema. Un libro, una persona, un carro, un polígono,
son apenas algunos ejemplos de objeto.
Cada objeto puede ser considerado como un proveedor de servicios utilizados por otros objetos
que son sus clientes. Cada objeto puede ser a la vez proveedor y cliente. De allí que un programa
pueda ser visto como un conjunto de relaciones entre proveedores clientes. Los servicios
ofrecidos por los objetos son de dos tipos:
1.- Los datos, que llamamos atributos.
4. 2.- Las acciones o funciones, que llamamos métodos.
Características Generales
Un objeto se identifica por un nombre o un identificador único que lo diferencia de los demás.
Ejemplo: el objeto Cuenta de Ahorros número 12345 es diferente al objeto Cuenta de Ahorros
número 25789. En este caso el identificador que los hace únicos es el número de la cuenta.
-)Un objeto posee estados:
El estado de un objeto está determinado por los valores que poseen sus atributos en un momento
dado.
-)Un objeto tiene un conjunto de métodos:
El comportamiento general de los objetos dentro de un sistema se describe o representa mediante
sus operaciones o métodos. Los métodos se utilizarán para obtener o cambiar el estado de los
objetos, así como para proporcionar un medio de comunicación entre objetos.
-)Un objeto tiene un conjunto de atributos:
Los atributos de un objeto contienen valores que determinan el estado del objeto durante su
tiempo de vida. Se implementan con variables, constantes y estructuras de datos (similares a los
campos de un registro).
-)Los objetos soportan encapsulamiento:
La estructura interna de un objeto normalmente está oculta a los usuarios del mismo. Los datos
del objeto están disponibles solo para ser manipulados por los propios métodos del objeto. El
único mecanismo que lo conecta con el mundo exterior es el paso de mensajes.
-)Un objeto tiene un tiempo de vida dentro del programa o sistema que lo crea y utiliza:
Para ser utilizado en un algoritmo el objeto debe ser creado con una instrucción particular (New
o Nuevo) y al finalizar su utilización es destruido con el uso de otra instrucción o de manera
automática.
5. ¿Qué es una clase?
La clase es la unidad de modularidad en el EOO. La tendencia natural del individuo es la de
clasificar los objetos según sus características comunes (clase). Por ejemplo, las personas que
asisten a la universidad se pueden clasificar (haciendo abstracción) en estudiante, docente,
empleado e investigador.
La clase puede definirse como la agrupación o colección de objetos que comparten una estructura
común y un comportamiento común.
Es una plantilla que contiene la descripción general de una colección de objetos. Consta de
atributos y métodos que resumen las características y el comportamiento comunes de un conjunto
de objetos.
Todo objeto (también llamado instancia de una clase), pertenece a alguna clase. Mientras un
objeto es una entidad concreta que existe en el tiempo y en el espacio, una clase representa solo
una abstracción.
Todos aquellos objetos que pertenecen a la misma clase son descritos o comparten el mismo
conjunto de atributos y métodos.
Todos los objetos de una clase tienen el mismo formato y comportamiento, son diferentes
únicamente en los valores que contienen sus atributos. Todos ellos responden a los mismos
mensajes.
Su sintaxis algorítmica es: Clase <Nombre de la Clase>
...
FClase <Nombre de la Clase>;
6. Características Generales
-)Una clase es un nivel de abstracción alto:
La clase permite describir un conjunto de características comunes para los objetos que representa.
Ejemplo: La clase Avión se puede utilizar para definir los atributos (tipo de avión, distancia,
altura, velocidad de crucero, capacidad, país de origen, etc.) y los métodos (calcular posición en
el vuelo, calcular velocidad de vuelo, estimar tiempo de llegada, despegar, aterrizar, volar, etc.)
de los objetos particulares Avión que representa.
-)Un objeto es una instancia de una clase:
Cada objeto concreto dentro de un sistema es miembro de una clase específica ytiene el conjunto
de atributos y métodos especificados en la misma.ƒ
-)Las clases se relacionan entre sí mediante una jerarquía:
Entre las clases se establecen diferentes tipos de relaciones de herencia, en las cuales la clase hija
(subclase) hereda los atributos y métodos de la clase padre (superclase), además de incorporar sus
propios atributos y métodos.
Ejemplos, Superclase: Clase Avión
Subclases de Avión: Clase Avión Comercial, Avión de Combate, Avión de Transporte
-)Los nombres o identificadores de las clases deben colocarse en singular (clase Animal, clase
Carro, clase Alumno).
Principios de la programación orientada a objetos:
Un lenguaje orientado a objetos tiene tres Principios básicos: debe estar basado en objetos,
basado en clases y capaz de tener herencia de clases. Muchos lenguajes cumplen uno o dos de
estos puntos; muchos menos cumplen los tres. La barrera más difícil de sortear es usualmente la
herencia.
7. Características de la programación orientada a objetos:
Existe un acuerdo acerca de qué características contempla la "orientación a objetos". Las
características siguientes son las más importantes:
-)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.
-)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.
8. 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.
-)Modularidad:
Se denomina "modularidad" a la propiedad que permite subdividir una aplicación en partes más
pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea
posible de la aplicación en sí y de las restantes partes. Estos módulos se pueden compilar por
separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes
soportan la modularidad de diversas formas.
-)Principio de ocultación:
Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una
"interfaz" a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El
aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga
derecho a acceder a ellas; solamente los propios métodos internos del objeto pueden acceder a su
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.
9. -)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.
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,
JustAnother 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
10. 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. [1] Dos semanas más tarde la primera versión
de Java fue publicada.
La promesa inicial de Gosling era Write Once, Run Anywhere (Escríbelo una vez, ejecútalo en
cualquier lugar), proporcionando un lenguaje independiente de la plataforma y un entorno de
ejecución (la JVM) ligero y gratuito para las plataformas más populares de forma que los binarios
(bytecode) de las aplicaciones Java pudiesen ejecutarse en cualquier plataforma.
El entorno de ejecución era relativamente seguro y los principales navegadores web pronto
incorporaron la posibilidad de ejecutar applets Java incrustadas en las páginas web.
Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un
enorme incremento en el número de clases y paquetes que componen la biblioteca estándar.4
En el 2005 se calcula en 4,5 millones el número de desarrolladores y 2.500 millones de
dispositivos habilitados con tecnología Java.
¿Qué es 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.
11. Los programas más importantes que se incluyen son:
Javac: es el compilador de JAVA.
Java: es el intérprete de JAVA.
Javadoc: genera la documentación de las clases java de un programa.
Javah: que es un fichero de cabecera para escribir métodos nativos. Entre otro.
¿Qué es JRE?
Java RuntimeEnvironment 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.
El compilador de java:
Un compilador java, es un programa que transforma código fuente escrito en java a un código
neutral a la plataforma conocida como java bytecode (Aunque existen compiladores que
transforman el código fuente java a algún código nativo). El compilador más conocido es el
"javac" que es parte del JDK de Oracle.
La máquina virtual de java:
12. 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.
Anatomía de un programa en Java:
Toda aplicación de consola en Java contiene una clase principal con un método (o función) main,
al igual que en C++, la función main es lo primero que se ejecuta cuando se inicia la aplicación
desde la línea de comandos. De esta forma podemos deducir que cualquier llamado, declaración o
método que no sea llamado de manera directa o indirecta desde el método main nunca se
ejecutará. En Java el método main recibe como argumento un arreglo de String. Este arreglo
contiene los argumentos enviados por la línea de comandos para la invocación del programa.
La estructura básica de un programa desarrollado usando Java es la siguiente:
Línea 1: La primer línea de nuestro código ha declarado una clase llamada "nombre_clase", la
cual es pública (public), esto quiere decir que tendrás acceso a dicha clase, desde cualquier parte
del código sin ningún tipo de complicaciones, ahora, lógicamente tú le podrás poner el nombre
que te guste más, como veras por la margen que tiene el código, dentro de la clase
"nombre_clase" hay otras líneas, las líneas 2, 3, 4 y 5, esto simplemente le da un poco más de
orden a nuestro programa, nuestra línea 1, también tiene una llave abriendo "{", esto quiere decir
13. que todo lo que halla después de esta llave forma parte de la clase "nombre_clase" e indica el
comienzo de las líneas de sentencia de esta, en este caso, esta la declaración de la función main().
Línea 2: La línea numero dos contiene la declaración de la función (o método) main, el cual es
publica y además hay algo especial, es del tipo void (una función puede tomar varios valores,
entero, decimal, cadena de texto, entre otros) el poner void, estamos queriendo decir que la
función main no retornará nada al finalizar, si se le pusiera por ejemplo int (entero) entonces al
final de la función, esta debería retornar algún numero o variable de tipo entero. Nuestra línea
dos, también tiene un argumento para la función main, es lo que está dentro de los paréntesis
"Stringargs[]", esto quiere decir que la función main, debe recibir un argumento el cual es de tipo
String y es además un vector, luego hablare de los tipos de datos, no te preocupes mucho por
esto. Finalmente esta la llave abriendo "{".esto quiere decir que lo que halla después de esta llave
forma parte de las sentencias (lo que nuestro programa realizará durante su ejecución).
Línea 3: La línea tres contiene el bloque de sentencias, es decir, las líneas de código que nuestro
programa seguirá durante su ejecución, es de notar que cada sentencia termina con punto y coma
";" para dar un poco de claridad, se entiende como línea de sentencia, a las líneas de código que
en ellas contienen la declaración de alguna variable, o alguna operación,( suma, resta, división,
etc.) o cualquier acción, como modificar, asignar, o eliminar algo.
Línea 4: La línea número cuatro contiene una llave cerrando "}" eso nos indica que en esta línea
termina la ejecución de alguna función (para identificar esta función que se cierra, sigue la
identificación u seguramente sabrás cual es la que estamos cerrando) pues bien, habrás notado
que la función que esta llave está cerrando es la función main(), esto quiere decir que todo lo que
halla después de esta llave formará parte de la clase "nombre_clase" pero no será ejecutado ni
formará parte de la función main.
Línea 5: La línea cinco, nos indica al igual que la cuatro el final de una función o en este caso de
una clase, esta línea 5 entonces nos indica el final de la clase “nombre_clase”.
Tipos de programas que pueden hacerse en Java:
Actualmente cada vez más la tecnología invade más campos de nuestra vida, estando las personas
cada vez más familiarizados con términos informáticos, entre ellos, como, los lenguajes de
14. programación. Cualquier persona que ha usado alguna vez un ordenador o sistema le resulta
familiar alguno de estos términos relacionados a los tipos de lenguajes de programación: C,
Pascal, Cobol, Visual Basic, Java, Fortran, etc. En la actualidad existen varios tipos de lenguajes
de programación. Todos estos tipos de lenguaje pueden confundir o hacer dudar a cualquier
persona que comienza aprender un lenguaje, quien tras hallar varias posibilidades o posibles
alternativas no sabe cuál de ellos escoger. El motivo de esta gran variedad de lenguajes es que
cada uno ha sido creado para una determinada función, está especialmente diseñado para facilitar
la programación de un determinado tipo de problemas, para garantizar seguridad de las
aplicaciones, para obtener una mayor facilidad de programación, para conseguir un mayor
aprovechamiento de los recursos del ordenador y han sido creados o modificados por diferentes
personas o empresas.
En Java se pueden crear básicamente dos tipos de programas: applets y aplicaciones.
Los applets son programas Java que se transmiten por Internet y que se ejecutan incrustados en
una página Web. Para ejecutar un applet se requiere tener instalada una versión de la JVM. Aquí
se muestra un applet en ejecución. Note que un applet no tiene ventana.
15. Las aplicaciones son programas independientes de un navegador Web; pero que, para ser
ejecutados, también necesitan de una versión de la JVM. En la Figura 1.3 se muestra una
aplicación en ejecución. Note que la aplicación tiene su propia ventana.
Entornos de desarrollo integrado (IDE), para Java:
Un ambiente de desarrollo integrado o entorno de desarrollo interactivo, en inglés
IntegratedDevelopmentEnvironment (IDE), es una aplicación informática que proporciona
servicios integrales para facilitarle al desarrollador o programador el desarrollo de software.
Normalmente, un IDE consiste de un editor de código fuente, herramientas de construcción
automáticas y un depurador. La mayoría de los IDE tienen auto-completado inteligente de código
(IntelliSense). Algunos IDE contienen un compilador, un intérprete, o ambos, tales como
NetBeans y Eclipse; otros no, tales como SharpDevelop y Lazarus.
El límite entre un IDE y otras partes del entorno de desarrollo de software más amplio no está
bien definido. Muchas veces, a los efectos de simplificar la construcción de la interfaz gráfica de
usuario (GUI, por sus siglas en inglés) se integran un sistema controlador de versión y varias
herramientas. Muchos IDE modernos también cuentan con un navegador de clases, un buscador
de objetos y un diagrama de jerarquía de clases, para su uso con el desarrollo de software
orientado a objetos.
El kit de desarrollo (JDK) no incluye ningún editor con el que crear nuestros programas.
Podríamos instalar un "editor genérico", porque tenemos muchos gratuitos y de calidad, como
Notepad++. Aun así, si nuestro equipo es razonablemente moderno, puede ser preferible instalar
un entorno integrado.
16. Elementos de un programa Java:
-)Comentarios:En la programación de computadoras, un comentario es una construcción del lenguaje de
programación destinada a incrustar anotaciones legibles al programador en el código fuente de un
Programa informático. Estas anotaciones son potencialmente significativas para los programadores, pero
usualmente ignorados por los compiladores e intérpretes.Los comentarios son añadidos usualmente con el
propósito de hacer el código fuente más fácil de entender con vistas a su mantenimiento o reutilización. La
sintaxis y reglas para los comentarios varían y usualmente son definidas en la especificación del lenguaje
de programación.
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 gradoCalcula las soluciones de una ecuación de segundo grado */
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 gradoint p; // precio del producto
Comentarios de documentación Javadoc:
17. 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
*
*/
- ) Variable:Las variables son una de las características fundamentales de los lenguajes de
programación, permiten acceder a la memoria para almacenar y recuperar los datos con los que
nuestros programas van a trabajar. Son por tanto el mecanismo que los lenguajes de
programación ponen a nuestra disposición para acceder a la memoria.
Se trata de un mecanismo de lo más sencillo, sólo tenemos que dar un nombre a nuestras
variables, a partir de ese momento el compilador traducirá de forma automática ese nombre en un
acceso a memoria. Por ejemplo:
//Almacenamos un dato en memoria referenciado por el nombre edad
edad = 5;
//Recuperamos el dato almacenado y lo modificamos
edad = edad + 1;
Java es un lenguaje tipado y nos obliga a declarar nuestras variables antes de poder hacer uso de
ellas, con esta declaración le indicamos al compilador el espacio en memoria que debe de
reservar para almacenar la información.
18. - ) 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.
NombreObjetoinstanceofNombreClase
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
relacción mayor/menor. Devuelven siempre un valor boolean.
19. '>': 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 mas
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
Sentencias de Datos de Entrada y Salida en Java:
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
20. 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: 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:
Intread() 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.
Intread(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.
Intread(byte [] buf, int off, intlen) lee len bytes del flujo (o los que pueda) y los coloca a partir de
la posición off del array.
longskip(longcount) salta hasta count bytes de entrada o hasta el final del flujo de entrada,
devolviendo el número de bytes saltados.
Intavailable() devuelve el número de bytes que están disponibles para leerse.
Voidclose() 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 de la entrada estándar (el
teclado) leyendo los caracteres de 5 en 5 (el return también es un carácter).
21. - ) Salida: 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:
Voidwrite(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.
Voidwrite(byte [] buf) escribe un array de bytes.
Voidwrite(byte [] buf, int offset, intcount) escribe un arraybuf de bytes, empezando en la posición
offset y escribiendo count de ellos, deteniendose antes si encuentra el final del array.
Voidflush() vacia el flujo de modo que los bytes que quedaran por escribir son escritos.
Voidclose() 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.
Estructuras de control:
En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución
de las instrucciones de un programa.
Con las estructuras de control se puede:
De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-Then-Else)
De acuerdo al valor de una variable, ejecutar un grupo u otro de sentencias (Select-Case)
Ejecutar un grupo de sentencias mientras se cumpla una condición (Do-While)
22. Ejecutar un grupo de sentencias hasta que se cumpla una condición (Do-Until)
Ejecutar un grupo de sentencias un número determinado de veces (For-Next)
Todas las estructuras de control tienen un único punto de entrada. Las estructuras de control se
puede clasificar en : secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que
permite que la programación se rija por los principios de la programación estructurada.
Los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo
que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje
tiene una sintaxis propia para expresar la estructura.
Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los comandos guardados.
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.
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.
23. 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.
*/
importjava.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
24. //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);
}
}
25. CONCLUCION
El lenguaje Java es una opción conveniente a la hora de trabajar con programación gracias a su
flexibilidad y otros factores, soporta de forma nativa la programación concurrente gracias a la
clase Thread. Dispone de métodos de sincronización y señalización entre hebras gracias a los
cerrojos y a los métodos wait(...), notify() y notifyAll() definidos en la clase Object.
La máquina virtual es la que se encarga de todo esto, soportando la ejecución concurrente de
varios hilos diferentes. Sin embargo, la implementación de los métodos importantes para la
concurrencia no tienen una traducción directa a instrucciones de la máquina virtual, sino que se
implementan mediante métodos nativos que se relacionan directamente con la máquina virtual
para conseguir su objetivo, Dando un tipo de lenguaje orientado a objetos de los mas populares y
utilizados en la actualidad.