1. República bolivariana de Venezuela
I.U.P. “Santiago Mariño”
Extensión Maturín
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. 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
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
4. 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.
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.
5. ¿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:
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.
6. 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
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
7. 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
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
8. 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.
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.
9. 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.
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:
10. 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:
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
*
11. */
- ) 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.
- ) 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.
12. '+=' : 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.
'>': 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.
13. '&' : 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
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.
14. 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).
- ) 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.
15. 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)
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.
16. 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.
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.
17. 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
//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);
}
}
18. 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.