Programación II (E11)



Documentos relacionados
Tema 1. Introducción a JAVA

TEMA 2. Agenda. Fundamentos de JAVA

Elementos léxicos del lenguaje de programación Java

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

Introducción al lenguaje de programación java

Tema 2. El lenguaje de programación Java (Parte 1)

INTRODUCCIÓN A JAVA. Índice

INF 473 Desarrollo de Aplicaciones en

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Java Inicial (20 horas)

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Introducción a la Programación en Java. Page 1

Tema 3 Elementos básicos de programación

Programación Orientada a Objetos con Java


Modulo 1 El lenguaje Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Curso de Java POO: Programación orientada a objetos

Repaso de las características más importantes de la programación Java y su adaptación a Android

Java en 2 horas. Rodrigo Santamaría

Preliminares. Tipos de variables y Expresiones

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

Curso Introducción JAVA Pág.: 1

Programador en Plataforma Java y XML

Guía de Instalación de la JDK y del Eclipse

Objetivo de aprendizaje del tema

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Se guardan en archivos con extencion c y los cabezales con extension h

8. Sentencia return y métodos

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

19. Packages o paquetes

Introducción a la programación orientada a objetos

Módulo 2. Inicio con Java

Modelo de Objetos Distribuidos

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

UNIDADES DE ALMACENAMIENTO DE DATOS

Prácticas: Introducción a la programación en Java. Informática (1º Ingeniería Civil) Curso 2011/2012

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet DLSI - Universidad de Alicante 1

Módulo 1 El lenguaje Java

Introducción a la Programación 11 O. Humberto Cervantes Maceda

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Seminario de Java. Contenido

2. Estructura de un programa en Java

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

FACULTAD DE INGENIERÍA

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Carmen. Estándares de codificación. Manuel Arias Calleja

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS

Matemática de redes Representación binaria de datos Bits y bytes

JAVA PARA PRINCIPIANTES

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Java Básico. Introducción a Java. Copyright

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

(volver a Tabla de Contenidos)

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD

Estructura de Datos [Tipos de datos concretos y tipos de datos abstractos]

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Computación III. Objetivo de aprendizaje del tema

JAVA 8 Los fundamentos del lenguaje Java (con ejercicios prácticos corregidos)

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

Introducción a la Programación Orientada a Objetos

Curso PHP Módulo 1 R-Luis

Tema 2: La Tecnología Java

Ubicación e historia

Pruebas de unidad con JUnit

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Acronis License Server. Guía del usuario

Prof. Dr. Paul Bustamante

Fundamentos del Lenguaje de Programación Java

FACULTAD DE INGENIERÍA

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Revista Digital Universitaria. 10 de agosto 2004 Volumen 5 Número 7 ISSN:

Programación Orientada a Objetos en Java

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

Novedades en Q-flow 3.02

Procesadores de lenguaje Tema 5 Comprobación de tipos

Qué es Java? Introducción a Java. Lenguajes Orientados a Objetos. Qué es Java? Historia de Java. Objetivos de Java

❷ Aritmética Binaria Entera

Definición de clases: Herencia, polimorfismo, ligadura dinámica


1. Aplicaciones del J2SE SDK1.4.2 de Sun.

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION

MANUAL DE USUARIO. Webservice simple para la exportación rápida de información proveniente de una base de datos. Versión 0,1,1

El lenguaje de programación Java

Transcripción:

Programación II (E11) Unidad I Departamento de Electricidad, Electrónica y Computación Facultad de Ciencias Exactas y Tecnología Universidad Nacional de Tucumán Segundo Cuatrimestre 2015

Introducción [1 3] Presentación Presentación Introducción a la POO Historia de Java Funcionamiento de un programa Java 2

Introducción [2 3] Presentación Características Paquetes Tipos de datos primitivos Declaración e inicialización 3

Introducción [3 3] Presentación Arrays Cadenas Operadores Sentencias de control Despliegue Archivos JAR Herramientas 4

Introducción a la POO [1 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Programación estructurada: el SW se interpreta como un conjunto de pasos, acciones o procedimientos que se ejecutan en secuencia. Programación Orientada a Objetos (POO): paradigma que basa la construcción de sistemas de SW en módulos obtenidos a partir de los objetos que manipula. 5 Paradigma: modelo, patrón, estilo, estándar. Pascal, C, FORTRAN, Basic (y todas sus variantes) son lenguajes que soportan el paradigma procedural (programación estructurada). Java, SmallTalk, Eiffel son lenguajes de programación que sólo soportan la POO. C++ es un lenguaje híbrido, soporta tanto el paradigma procedural como el orientado a objetos. Los módulos con los que se construye un programa en POO están basados en los datos del problema, y no en las acciones.

Introducción a la POO [2 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Problema: dadas unas figuras (cuadrado, círculo, triángulo), al seleccionar alguna, la misma debe rotar en el sentido de las agujas del reloj 360 y reproducir un archivo.mp3 de sonido, específico a esa figura. 6

Introducción a la POO [3 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Según la programación estructurada: Cuáles son las cosas que debe hacer el programa? Qué funciones se necesitan? void rotar(numfigura) { //hacer que la figura rote 360º void reproducirsonido(numfigura) { //según la figura, reproducir un.mp3 7 Según el paradigma estructurado, como un programa es un conjunto de procedimientos, se deben pensar cuáles son las cosas que debe hacer el programa, lo cual lleva a pensar en qué funciones se necesitan.

Introducción a la POO [4 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Según la POO: Cuáles son las cosas en este programa? Quiénes son los actores principales? Cuadrado Círculo Triángulo Usuario Sonido Evento click 8 Según el paradigma orientado a objetos, se debe pensar por qué cosas está formado el programa, lo cual lleva a pensar en cuáles son los actores principales que participan.

Introducción a la POO [5 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java public class Cuadrado { void rotar() { //código para rotar 360º el cuadrado void reproducirsonido() { //código para reproducir el archivo //.mp3 correspondiente al cuadrado 9

Introducción a la POO [6 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java public class Circulo { void rotar() { //código para rotar 360º el círculo void reproducirsonido() { //código para reproducir el archivo //.mp3 correspondiente al círculo 10

Introducción a la POO [7 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java public class Triangulo { void rotar() { //código para rotar 360º el triángulo void reproducirsonido() { //código para reproducir el archivo //.mp3 correspondiente al triángulo 11

Introducción a la POO [8 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Cambio: además de las 3 figuras anteriores, habrá una cuarta, con forma de ameba, con el mismo comportamiento para la rotación, pero en cuanto al sonido se deberá reproducir un archivo.wav en lugar de un.mp3. 12

Introducción a la POO [9 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Resolución según la programación estructurada: implica modificar código que se encuentra funcionando bien void rotar(numfigura) { //hacer que la figura rote 360º void reproducirsonido(numfigura) { //si la figura no es una ameba, reproducir //un.mp3, sino reproducir el.wav 13

Introducción a la POO [10 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Resolución según la POO: NO implica modificar código que se encuentra funcionando bien (flexibilidad, extensibilidad) 14

Introducción a la POO [11 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java public class Ameba { void rotar() { //código para rotar 360º la ameba void reproducirsonido() { //código para reproducir el archivo //.wav correspondiente a la ameba 15

Introducción a la POO [12 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Cambio: la figura con forma de ameba debe rotar de manera diferente al resto de las figuras. 16

Introducción a la POO [13 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Resolución según programación estructurada: void rotar(numfigura) { //si la figura no es una ameba, //rotar 360, sino rotar según el nuevo //requerimiento 17

Introducción a la POO [14 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Resolución según la POO: public class Ameba { void rotar() { //código para que la ameba rote void reproducirsonido() { //código para reproducir el.wav 18

Introducción a la POO [15 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Desventajas del diseño de la POO: Duplicación de código Solución: Nuevo diseño 19 Si se observa el código de las clases Cuadrado, Triangulo y Circulo, entre las mismas hay duplicidad de código entre los métodos rotar() y reproducirsonido(). Esta duplicidad de código a la larga genera problemas de mantenimiento, ya que si se quiere realizar un cambio se deberá hacerlo en todas las clases. Para solucionar este problema, se hace un nuevo diseño de tal forma que todo lo que sea común se encuentre en un único lado (clase Figura), y lo que sea distinto en el lugar que corresponda.

Introducción a la POO [16 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java public abstract class Figura { void rotar() {... void reproducirsonido() {... public class Cuadrado extends Figura { public class Circulo extends Figura { public class Triangulo extends Figura { 20 La clase Figura tiene todo el comportamiento común a un Cuadrado, un Circulo y un Triangulo, o lo que es lo mismo, las clases Cuadrado, Circulo y Triangulo heredan la estructura y comportamiento definidos en la clase Figura.

Introducción a la POO [17 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java public class Ameba extends Figura { void rotar() { //redefine rotar() de Figura void reproducirsonido() { //redefine reproducirsonido() de Figura 21 Con este nuevo diseño, ahora sólo hay que mantener una copia (la clase Figura).

Introducción a la POO [18 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java En la POO, los datos se denominan objetos, y sus tipos se denominan clases (conceptos fundamentales). 22

Introducción a la POO [19 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Por qué la necesidad de definir un nuevo paradigma? Fracaso de la programación estructurada en la producción y mantenimiento sistemático de sistemas de SW de calidad. En el paradigma estructurado, realizar modificaciones implica mucho esfuerzo. En el paradigma estructurado, ensamblar componentes producidos por otros es difícil y muy propenso a errores. 23

Introducción a la POO [20 20] Introducción a la POO Historia de Java Funcionamiento de un programa Java Actividades de la POO: Encontrar los tipos de objetos relevantes Describirlos Analizar relaciones y coincidencias Ver cómo estructurar el SW en base a estos tipos 24

Historia de Java [1 8] Introducción a la POO Historia de Java Funcionamiento de un programa Java Surge en el año 1991 como iniciativa de un grupo de ingenieros de Sun. Se buscaba obtener código no muy grande. Se buscaba una herramienta independiente del HW. 25 Java surgió en el año 1991 cuando un grupo de ingenieros de Sun diseñaron un nuevo lenguaje de programación destinado a electrodomésticos. La idea era desarrollar un lenguaje, capaz de generar código de poco tamaño debido a la reducida potencia de cálculo y memoria de los equipos. Debido a la variedad de hardware y a los continuos cambios, se debía conseguir una herramienta independiente del mismo: Se desarrolló un código neutro que se ejecutaba sobre una máquina virtual, llamada Java Virtual Machine (JVM).

Historia de Java [2 8] Introducción a la POO Historia de Java Funcionamiento de un programa Java Gran impulso gracias al navegador Netscape Navigator. 26 La JVM interpretaba este código neutro convirtiéndolo al código particular del hardware utilizado. A pesar de los esfuerzos realizados por sus creadores, ninguna empresa de electrodomésticos se interesó por este nuevo lenguaje. Como lenguaje de programación para computadoras, Java se introdujo a finales de 1995, para lo cual resultó clave la incorporación de un intérprete Java en la versión 2.0 del Netscape Navigator, produciendo una verdadera revolución en Internet.

Historia de Java [3 8] Introducción a la POO Historia de Java Funcionamiento de un programa Java Java 1.1: 1997 Java 1.2 (Java 2): 1998 Java 1.3 y 1.4 (Java 2): 2000 y 2002 Java 1.5 (Java 5): 2004 Java 1.6 (Java 6): 2006 Java 1.7 (Java 7): 2011 Java 1.8 (Java 8): 2014 27 Java 1.1 aparece a principios de 1997, mejorando mucho la primera versión (Java 1.0). Java 1.2 (luego rebautizado Java 2), nace a fines de 1998. De la versión 1.1 a la 1.2, los cambios fueron tan grandes que la gente de marketing puso un nombre nuevo (Java 2). A las versiones 1.3 (2000) y 1.4 (2002) se las siguió considerando Java 2. Con la versión 1.5 (2004), los cambios volvieron a ser grandes, por lo que se volvió a considerar un nuevo nombre (Java 5).

Historia de Java [4 8] Introducción a la POO Historia de Java Funcionamiento de un programa Java Java 1.1 500 clases Un poco más rápido que la versión 1.0 Más capacidades que Java 1.0, más amigable, mejor código para la GUI Java 2 (1.2 1.4) 2300 clases Mucho más rápido 3 versiones: J2ME, J2SE, J2EE 28

Historia de Java [5 8] Introducción a la POO Historia de Java Funcionamiento de un programa Java Java 5 3500 clases Más capacidades Muchos cambios al lenguaje facilitando la tarea al programador 29

Historia de Java [6 8] Introducción a la POO Historia de Java Funcionamiento de un programa Java Java 8 Java Mission Control 5.3 Métodos predeterminados Interfaces funcionales Expresiones lambda Manejo de fechas 30 Java Mission Control: herramienta para monitorear una aplicación Java sin agregar la sobrecarga propia de estas herramientas. Es un ejecutable (jmc) dentro del directorio bin de la JDK. Métodos predeterminados: permiten que una interfaz contenga implementaciones de métodos (ver Unidad VI). Interfaz funcional: interfaz que tiene exactamente un método declarado explícitamente como abstracto (ver Unidad VI). Expresiones lambda: también llamadas métodos anónimos, son una forma abreviada de escribir la implementación de un método para su posterior ejecución (ver Unidad VI). Java 8 cuenta con una nueva API (java.time) para el manejo de fechas y horas (ver Unidad V).

Historia de Java [7 8] Introducción a la POO Historia de Java Funcionamiento de un programa Java Java 8 Operaciones en paralelo Anotaciones de tipo 31 En Java 8 se mejoró la concurrencia, lo que puede apreciarse en la clase java.util.arrays, donde se agregaron nuevos métodos que permiten operar sobre un array en paralelo (parallelsort(), parallelprefix(), parallelsetall(), etc). Las anotaciones de tipo son anotaciones que se pueden aplicar a cualquier tipo de datos.

Historia de Java [8 8] Introducción a la POO Historia de Java Funcionamiento de un programa Java de Java: JME (Java Micro Edition) JSE (Java Standard Edition) JEE (Java Enterprise Edition) 32 La tecnología Java está organizada en 3 grupos de productos, cada uno diseñado para satisfacer las necesidades de un tipo de mercado: JME (Java Micro Edition): aplicaciones móviles, celulares, PDAs, sistemas de navegación de automóviles, etc JSE (Java Standard Edition): aplicaciones de escritorio, applets. JEE (Java Enterprise Edition): aplicaciones Web, de comercio electrónico, etc.

Funcionamiento [1 3] Introducción a la POO Historia de Java Funcionamiento de un programa Java Posibilidades al ejecutar un programa en Java: Aplicación de escritorio Applet Servlet 33 Existen distintas posibilidades al ejecutar un programa en Java: Como una aplicación independiente (aplicación de escritorio): similar a programas desarrollados con otros lenguajes. Como un applet (aplicación especial que se ejecuta dentro de un navegador, la cual se descarga desde el servidor y no requiere instalación en la computadora donde se encuentra el mismo). Como un servlet (aplicación que se ejecuta en un servidor).

Funcionamiento [2 3] Introducción a la POO Historia de Java Funcionamiento de un programa Java Pasos para escribir un programa en Java: 1. Crear un archivo fuente 2. Compilar el archivo fuente 3. Ejecutar el archivo bytecode en la JVM 34 1. El archivo fuente es de formato texto, su nombre coincide con el de la clase y tiene la extensión.java. 2. El archivo fuente se compila con el compilador de Java, llamado javac, el cual verifica la existencia de errores no permitiendo la compilación hasta que todo esté correcto. El compilador crea un nuevo archivo, codificado en un lenguaje llamado bytecode de Java, con extensión.class (este bytecode es independiente de la plataforma). 3. Cualquier dispositivo que pueda correr Java podrá interpretar/traducir y ejecutar el archivo.class (en la JVM). Los usuarios no tienen una máquina física de Java sino una virtual (implementada en software), la cual lee y ejecuta el bytecode.

Funcionamiento [3 3] Introducción a la POO Historia de Java Funcionamiento de un programa Java 35

de un programa Java [1 6] Introducción a la POO Historia de Java Funcionamiento de un programa Java Características de un archivo en Java 1. Definición de una sola clase 2. Extensión.java 3. Nombre del archivo fuente debe coincidir con el de la clase. 36 1. Cada archivo fuente, de extensión.java, contiene la definición de una única clase pública, aunque también puede contener la definición de clases privadas. 2. El nombre del archivo fuente debe coincidir (mayúsculas y minúsculas) con el de la clase. Por ejemplo, para la clase Recurso, su archivo fuente deberá ser Recurso.java.

de un programa Java [2 6] Introducción a la POO Historia de Java Funcionamiento de un programa Java Características de una clase en Java 1. Declaración: [modificadores] + class + nombre + { 2. Una o más variables (de instancia o de clase). 3. Uno o más métodos (de instancia o de clase). public class Recurso { //variables de instancia o de clase //métodos de instancia o de clase 37 1. Las variables definidas en una clase constituyen los campos o estructura de la misma. 2. Las funciones definidas en una clase constituyen los métodos de la misma. 3. Por convención, los nombres de las clases comienzan con mayúsculas (Recurso), y los nombres de los campos (nombre) y métodos (mostrar()) van en minúsculas.

de un programa Java [3 6] Introducción a la POO Historia de Java Funcionamiento de un programa Java Características de un método en Java Declaración: [modificadores] + tipo + nombre + ([argumentos]) + { public class Recurso {... public void mostrar() {... 38 public class Recurso { String nombre; void mostrar() { System.out.println(nombre);

de un programa Java [4 6] Métodos con parámetros variables: Introducción a la POO Historia de Java Funcionamiento de un programa Java void metodo1(int... x) void metodo2(char c, int... x) void metodo3(recurso... unrecurso) Pueden llamarse con un vector o con una secuencia de valores Ver método main() 39 Desde Java 5 se puede usar una construcción llamada varargs, mediante la cual se puede pasar un número arbitrario de parámetros a un método o a un constructor (es una alternativa a emplear un array como parámetro). Un método con varargs podrá ser llamado con cualquier número de ese parámetro, incluso ninguno. Pueden haber otros parámetros en un método que posee un parámetro varargs, siempre y cuando sólo uno sea variable y sea el último declarado. Dentro del método, el parámetro variable se trata como un array: void metodo1(int...x) { int largo = x.length; int y = x[0];

de un programa Java [5 6] Funcionamiento: Presentación 1. Creación del archivo fuente: Recurso.java 2. Compilación del archivo fuente: javac Recurso.java 3. Ejecución del archivo bytecode: java Recurso Introducción a la POO Historia de Java Funcionamiento de un programa Java 40 1. Cuando se guardan los cambios a la clase Recurso, se crea el archivo Recurso.java. 2. Para compilar el archivo fuente, se utiliza el compilador de Java, especificándosele el archivo a compilar: javac Recurso.java Si el compilador no encuentra errores, genera el archivo bytecode Recurso.class. Para ejecutar el archivo Recurso.class se ejecuta la JVM especificándole qué clase cargar: java Recurso

de un programa Java [6 6] Funcionamiento: 1. Método main() Presentación Introducción a la POO Historia de Java Funcionamiento de un programa Java public static void main(string[] args) {... 2. Definición de la clase principal 41 1. Cuando la JVM comienza su ejecución, busca la clase que se especifica (clase Recurso siguiendo el ejemplo), y busca dentro de ésta el método main(). Cuando la JVM encuentra el método main(), ejecuta todo lo que esté dentro de sus llaves (toda aplicación Java tiene al menos una clase y al menos un método main()). Siguiendo con el ejemplo, ejecutar el programa implica decirle a la JVM: "cargar la clase Recurso, ejecutar su método main() y continuar la ejecución hasta terminar todo el código del main()". 2. En el caso que la aplicación Java tuviera varias clases, y cada una tuviera un método main() de la forma indicada, se debe indicar cuál de todas estas clases contiene el main() principal.

Características [1 6] Características Paquetes Tipos de datos primitivos Declaración e inicialización Simple Seguro Orientado a objetos Arquitectura neutral 42 El objetivo fue crear un lenguaje fácil de aprender, por lo que se adoptó una sintaxis similar a C/C++ teniendo en cuenta su popularidad. Se eliminaron ciertas características (por ejemplo: preprocesador, sentencia GOTO, que las applets no puedan leer y escribir en el disco rígido, etc). Al ser orientado a objetos, se puede implementar polimorfismo, encapsulamiento, enlace (binding) dinámico. Al ser de arquitectura neutral, las aplicaciones pueden ejecutarse en ambientes de redes heterogéneos, independientemente de la plataforma de hardware y de software.

Características [2 6] Características Paquetes Tipos de datos primitivos Declaración e inicialización Interpretado y dinámico Multihilos 43 Al ser interpretado y dinámico: 1) el compilador genera bytecodes para la JVM; 2) el intérprete, incorporado en la JVM, es el que permite ejecutar el programa; 3) los bytecodes de Java pueden ejecutarse en cualquier plataforma que tenga la JVM implementada. Al ser multihilos, permite que varias tareas se puedan ejecutar simultáneamente. También cuenta con una característica llamada Garbage Collector que monitorea y quita los objetos que ya no tienen una referencia asociada.

Características [3 6] Características Paquetes Tipos de datos primitivos Declaración e inicialización Hay punteros en Java? Sí, pero no de la misma forma que en C/C++ Los punteros se llaman referencias Las referencias no soportan las mismas operaciones que los punteros de C/C++ Las referencias son fuertemente tipadas 44 Con las referencias no se pueden realizar operaciones aritméticas (no se puede obtener ni manipular el valor de una referencia). En C/C++ se puede tener un puntero int*, hacerle un cast a char* y reinterpretar la memoria en esa ubicación. Esta reinterpretación no funciona en Java, es decir, en Java se puede hacer un cast de una referencia a Object a una referencia a String sólo si el objeto al cual se está apuntando es un String (las referencias son fuertemente tipadas). Estas diferencias vuelven a los punteros en C/C++ más potentes que las referencias en Java, pero también hacer que estos punteros resulten mucho más peligrosos (con los punteros se puede tener acceso a cualquier área de memoria, por ejemplo).

Características [4 6] Características Paquetes Tipos de datos primitivos Declaración e inicialización Hay herencia múltiple en Java? Sí, pero no entre clases sino entre interfaces (Módulos IV y VI) 45

Características [5 6] Características Paquetes Tipos de datos primitivos Declaración e inicialización JDK JRE SDK 46 Cada grupo (JME, JSE o JEE) incluye un JDK (Java Development Kit) que permite crear, compilar y ejecutar programas Java en una plataforma en particular. La JDK para JSE incluye: La JRE (Java Runtime Environment), la cual consiste de la JVM y librerías de clase para la plataforma que se elija (la JRE es una implementación de la JVM) Un compilador Java y documentación de la API. Ejemplos de programas Java. utilidades (JAR, debugging, etc) La JDK es un subconjunto de la SDK (Software Development Kit) responsable de escribir y ejecutar aplicaciones Java, mientras que el resto de la SDK contiene software extra (servidores de aplicación, debuggers, documentación, etc)

Características [6 6] Características Paquetes Tipos de datos primitivos Declaración e inicialización JDK En 1995 Sun lanza la versión 1.0 de la JDK (no libre) Actualmente la versión de la JDK es la 1.8, y pertenece a Oracle (no libre) OpenJDK Es la versión libre de la JDK. Su versión actual es la 8 Máquina virtual por defecto en muchas distribuciones GNU/Linux 47 En 1995, Sun lanza la versión 1.0 del JDK de Java. Aunque era posible crear software libre con Java (lenguaje de programación con una especificación abierta), para su ejecución dependía de la JVM, que era software no libre. Richard Stallman llamó a esta situación "la trampa de Java": aunque el programa desarrollado era software libre, este podía encontrar dificultades para distribuirse en entornos de software libre. En agosto del 2006, Sun modificó su licencia de forma que pudiera incluirse el binario de la máquina virtual Java en distribuciones GNU/Linux. En noviembre del 2006, Sun anunció el lanzamiento de las versiones Java SE 6 y SE 7 bajo licencia GPL versión 2. Al proyecto se lo llamó OpenJDK.

Paquetes [1 8] Presentación Características Paquetes Tipos de datos primitivos Declaración e inicialización Paquete: espacio de nombres para organizar las clases e interfaces de forma lógica. Los paquetes se organizan en una jerarquía, a fin de disminuir la probabilidad de conflictos de nombres. 48 Hay muchas posibilidades que los componentes (clases e interfaces) desarrollados por distintas personas tengan los mismos nombres. Uno de los pilares de la Orientación a Objetos (OO) es la escritura de componentes reutilizables, con lo cual si 2 o más personas emplean un mismo nombre para componentes distintos, se producirán conflictos al querer reutilizarlos. Al organizar los componentes en paquetes, se disminuye la probabilidad de colisión de nombres, para lo cual es necesario que tampoco haya conflicto de nombres en los paquetes.

Paquetes [2 8] Presentación Características Paquetes Tipos de datos primitivos Declaración e inicialización Un paquete puede contener: Clases Otros paquetes La API de Java está organizada en paquetes: java.util.arraylist 49 Java proporciona una librería muy grande de clases (implementada como un conjunto de paquetes) que resulta útil para desarrollar aplicaciones propias. Esta librería se conoce con el nombre de API (Application Programming Interface) de Java. Ejemplo: java.util.arraylist: La clase se llama ArrayList ArrayList se encuentra en el paquete util El paquete util se encuentra a su vez en el paquete java. Resumiendo, el nombre de un paquete completa el nombre de una clase. Cuando junto con el nombre de la clase se especifica el nombre del paquete, se dice que el nombre de la clase se encuentra completamente cualificado.

Paquetes [3 8] Presentación Características Paquetes Tipos de datos primitivos Declaración e inicialización 50 Además de las librerías con las que cuenta la JDK, existen otras desarrolladas por terceros. Por ejemplo, Guava es una librería de código abierto desarrollada y mantenida por Google. Esta librería cuenta con muchas utilidades y clases útiles para los desarrolladores.

Paquetes [4 8] Presentación Características Paquetes Tipos de datos primitivos Declaración e inicialización Cómo garantizar la unicidad en los nombres de los paquetes? Convención: en todos los ejemplos desarrollados en las clases teóricas y prácticas se utilizará el siguiente paquete: unt.herrera.prog2 51 Cómo se puede garantizar que el nombre de un paquete es único? Una alternativa para reducir las posibilidades de duplicación de nombres consiste en emplear un nombre de dominio Internet al revés: Para el dominio: herrera.unt.edu.ar Nombre del paquete: ar.edu.unt.herrera Por convención, los nombres de los paquetes van en minúsculas.

Paquetes [5 8] Presentación Características Paquetes Tipos de datos primitivos Declaración e inicialización Declaración: package + nombre; package unt.herrera.prog2; public class Recurso {... 52 Cuando una clase se encuentra dentro de un paquete, en la definición de la misma debe aparecer la sentencia package. La sentencia package debe ser la primera en el código fuente de la clase, y sólo puede haber una por clase. Es decir, una clase sólo puede pertenecer a un único paquete. Cuando una clase se encuentra dentro de un paquete, se debe crear una estructura de directorios que coincida con el nombre del mismo. En el ejemplo, el archivo Recurso.java debe estar dentro del directorio prog2. El directorio prog2 debe estar dentro de herrera. El directorio herrera debe estar dentro de unt.

Paquetes [6 8] Presentación Características Paquetes Tipos de datos primitivos Declaración e inicialización Importación de paquetes: se emplea la cláusula import: import java.util.arraylist; import java.util.*; import java.*; Paquete java.lang 53 Si la clase Recurso (definida en el paquete unt.herrera.prog2) referencia a la clase ArrayList (definida en el paquete java.util), se debe importar el mismo mediante la cláusula import: package unt.herrera.prog2; import java.util.arraylist; public class Recurso {... El único paquete en Java del cual se hace una importación automática es java.lang. Por esta razón, si se quiere referenciar la clase String (para manejar cadenas de caracteres) no hace falta importar este paquete.

Paquetes [7 8] Presentación Características Paquetes Tipos de datos primitivos Declaración e inicialización Paquete por defecto 54 Si cuando se declara una clase no se le especifica un paquete, la misma se guarda en el paquete por defecto, el cual no tiene nombre. Guardar las clases en el paquete por defecto no es aconsejable debido a que las mismas no se pueden importar (al menos por medio de los mecanismos tradicionales), aumentan las posibilidades de colisión de nombres, etc. Si por ejemplo, la clase MiClase, la cual cuenta con un método mostrar() que no devuelve nada se encuentra en el paquete por defecto, para poder usarla desde otra clase que esté en un paquete con nombre, se deberá hacer: Class c = Class.forName("MiClase"); Method m = c.getmethod("mostrar"); m.invoke(c.newinstance());

Paquetes [8 8] Presentación Características Paquetes Tipos de datos primitivos Declaración e inicialización Importaciones estáticas Disponibles desde Java 5 Se pueden usar en todo lugar donde se use una clase o variable estática, o una enumeración Ventajas Disminuyen la cantidad de código Desventajas El código se puede volver difícil de leer Aumenta la posibilidad de conflictos de nombres 55 Sin usar importaciones estáticas: import java.lang.math; public class MiClase { public void metodo() { System.out.println(Math.sqrt(2.0)); System.out.println(Math.tan(60)); Usando importaciones estáticas: import static java.lang.system.out; import static java.lang.math.*; public class MiClase { public void metodo() { out.println(sqrt(2.0)); out.println(tan(60));

Tipos de datos primitivos [1 4] En Java las variables pueden ser: de instancia de clase (Unidad V) locales argumentos Características Paquetes Tipos de datos primitivos Declaración e inicialización Cualquiera de estas 4 posibilidades a su vez puede ser: Una tipo de dato primitivo Una referencia a un objeto 56 public class Recurso { String nombre; //variable de instancia static String error = Nombre mal ; //variable de clase void asignarnombre(string n) { /*n es un argumento */ nombre = n; void mostrar() { String cadena = ; /*cadena es una variable local*/...

Tipos de datos primitivos [2 4] Características Paquetes Tipos de datos primitivos Declaración e inicialización Primitivos: son tipos de datos especiales incorporados al lenguaje (no son objetos): enteros (byte, short, int, long) booleanos (boolean) números de punto flotante (float, double) caracteres (char) Declaración: tipo + nombre + ; int cantidad; 57 Para declarar una variable primitiva, se debe especificar su tipo y su nombre. Por ejemplo, para el caso de una variable primitiva entera: int orden;

Tipos de datos primitivos [3 4] Algunas características: Tamaño Restricciones para el nombre Características Paquetes Tipos de datos primitivos Declaración e inicialización 58 Cada variable primitiva tiene un tamaño: byte: 8 bits (-128 a 127) short: 16 bits (-32768 a 32767) int: 32 bits (-2147483648 a 2147483647) long: 64 bits (-un montón a un montón) float: 32 bits (varía) double: 64 bits (varía) char: 16 bits (0 a 65535) boolean: depende de la JVM (true o false) Los nombres de las variables pueden ser cualquier conjunto de caracteres alfanuméricos, sin algunos caracteres especiales:,. + - * / Los nombres deben comenzar con: una letra, un guión bajo (_) o un signo pesos ($), y no pueden ser iguales a una palabra reservada del lenguaje.

Tipos de datos primitivos [4 4] Características Paquetes Tipos de datos primitivos Declaración e inicialización Observaciones: Operador sizeof() Tamaño de los primitivos en distintas plataformas 59 El tamaño de los primitivos es el mismo entre las distintas plataformas (Linux, Mac, Solaris, Windows). Es decir, un int ocupa en memoria 4 bytes, ya sea que se esté trabajando en Linux, Windows, etc. En Java, no existe el operador sizeof() para ver el tamaño de una variable. Para ver el valor máximo, mínimo, tamaño en bytes y en bits de cada uno de los primitivos, se pueden usar los campos MAX_VALUE, MIN_VALUE, BYTES y SIZE definidos en las referencias correspondientes.

Declaración e inicialización [1 5] Características Paquetes Tipos de datos primitivos Declaración e inicialización Declaración antes de la inicialización. Literal: es la representación de un valor fijo Inicialización junto o separado de la declaración x = 10; //10 es un literal //suponiendo que x ya se declaró int y = 5; //5 es un literal Declaración e inicialización múltiples int x = 1, y = 3; 60 En Java todas las variables deben declararse antes de ser usadas. Para inicializar una variable, se lo puede hacer una vez que la misma está declarada, o en la misma declaración: X = 10; //10 es un literal //suponiendo que x ya se declaró int y = 5; //5 es un literal También se permite la declaración y/o inicialización múltiple: int x = 1, y = 3;

Declaración e inicialización [2 5] Números octales int seis = 006; //6 Características Paquetes Tipos de datos primitivos Declaración e inicialización Números hexadecimales int x = 0x0001; //6 Números flotantes float f = 32.5f; 61 Los números octales se representan por 3 dígitos, comenzando con un 0 (cero): int seis = 006; //6 int siete = 007; //7 Los números hexadecimales se representan por 4 dígitos, comenzando con 0x o 0X: int x = 0x0001; //6 int y = oxcafe; // = 0xcafe Para el caso de los números flotantes, Java cree que cualquier número con un punto flotante es un double, a menos que se use la letra 'f' o 'F' en el momento de la asignación: float f = 32.5f; float d = 32.5; //no compila Para el caso del double, se puede especificar 'd' o 'D'. Para los tipos float y double, también se puede utilizar 'e' o 'E': double d2 = 1.23e2;

Declaración e inicialización [3 5] Caracteres char letra = '\u004e'; //'N' Características Paquetes Tipos de datos primitivos Declaración e inicialización Caracteres de escape: \b, \t, \n, \r, \, \', \\ 62 Los literales del tipo char o String pueden contener cualquier caracter Unicode. Si el editor y el sistema de archivos lo permiten, se pueden usar estos caracteres directamente en el código, y si no, se puede usar el caracter de escape Unicode \u: char letra = '\u004e'; //'N' String c = se\u00f1or ; // señor El caracter \u se puede usar en cualquier parte del programa, y no sólo en literales char o String. Java no cuenta con tipos sin signo, salvo char para representar números enteros entre 0 y 2^16: char e = -29; //cast: (char)-29 char f = 70000; //cast: (char)70000 Java también soporta otros caracteres de escape para char y String: \b, \t, \n, \r, \, \', \\

Declaración e inicialización [4 5] Conversiones (casts) Implícitas Explícitas Características Paquetes Tipos de datos primitivos Declaración e inicialización 63 Al momento de guardar el valor de una variable en otra, hay que observar los tipos de ambas: int x = 24; byte b = x; //no funciona Se produce una conversión implícita cuando un tipo más chico se guarda en uno más grande: byte b = 30; int x = b; //un byte entra en un int Se debe realizar una conversión explícita cuando un tipo más grande se guarda en uno más chico: int x = 24; byte b = (byte)x; Cuando se realiza una conversión explícita, se informa al compilador que se sabe sobre la posibilidad de pérdida de información.

Declaración e inicialización [5 5] Características Paquetes Tipos de datos primitivos Declaración e inicialización Conversiones automáticas en operaciones: byte a = 1; byte b = 2; byte c = a + b; //no funciona 64 Cuando se usan valores primitivos en una expresión con ciertos operadores (*, /, -, + y %), los valores se convierten automáticamente a enteros o un tipo superior en caso de ser necesario, y luego se realiza la operación. Esta conversión puede causar desbordamiento o pérdida de precisión.

Arrays [1 2] Presentación Arrays Cadenas Operadores Sentencias de control Declaración: tipo + [] + nombre + ; int[] numeros; Inicialización numeros = new int[10]; int[] numeros = {1, 2, 3, 4, 5; //otra forma de declarar e inicializar 65 Para declarar un array de enteros: int[] numeros; También se puede emplear la forma (casi no se usa): int numeros[]; Una variable array es un puntero a un objeto array (por medio del puntero se accede al array). Para crear un array de 10 enteros: numeros = new int[10]; Para asignar valores a este array: numeros[0] = 4; numeros[1] = 7; También se puede crear e inicializar un array de la forma: int[] numeros = {1, 2, 3, 4, 5;

Arrays [2 2] Presentación Arrays Cadenas Operadores Sentencias de control Arrays de más de una dimensión: Un array de 2 dimensiones es un array de arrays (un array donde cada elemento es a su vez un array). Un array de 3 dimensiones es un array donde cada elemento es a su vez un array, cuyos elementos son arrays. 66 Para declarar un array de 2 o más dimensiones, se emplean 2 o más pares de [ ]: int[][] num = new int[4][2]; En este caso, la JVM crea un array con 4 elementos. Cada uno de estos elementos es en realidad un puntero a un array con 2 elementos. Para realizar la inicialización junto con la declaración: int[][] num = {{2,3,4, {7,8,9; Como un array de 2 dimensiones es un array cuyos elementos son arrays, sus filas pueden variar de longitud (cada fila puede tener distinta cantidad de columnas): int[][] num = {{2,3,4, {7,8; La clase System tiene un método estático llamado arraycopy() que permite copiar un array en otro.

Cadenas [1 1] Presentación Arrays Cadenas Operadores Sentencias de control Las cadenas NO son primitivos, sino objetos (clase String). Declaración: String + nombre + ; Inicialización 67 Para manejar cadenas Java emplea una clase llamada String, definida en el paquete java.lang. Para declarar una cadena: String apellido; Para asignar un valor a esta cadena: apellido = Perez ; Para concatenar cadenas, se puede usar el operador de concatenación +: String n = Juan + + Carlos ; El operador + es el único operador en Java que se encuentra sobrecargado. En el caso de las cadenas, los literales van entre comillas dobles ( ), mientras que para los primitivos tipo char entre comillas simples (' '). La clase String cuenta con una serie de métodos que permiten manipular cadenas.

Operadores [1 3] Presentación Arrays Cadenas Operadores Sentencias de control Aritméticos: Suma (+), resta (-), producto (*), división (/), resto (%) Asignación: =, +=, -=, *=, /=, %= Unarios: +, - Condicional:? : 68 El operador condicional tiene la forma: expbooleana? accion1 : accion2;

Operadores [2 3] Presentación Arrays Cadenas Operadores Sentencias de control Incrementales: ++expr, expr++, --expr, expr-- Relacionales: >, >=, <, <=, ==,!=, instanceof Lógicos: Y lógico (&&), O lógico ( ), negación (!), Y bit a bit (&), O inclusivo bit a bit ( ), O exclusivo bit a bit (^) 69 El operador instanceof compara un objeto contra un tipo de datos especificado. Se lo usa para saber si un objeto es instancia de una clase, de una subclase o instancia de una clase que implementa una interfaz.

Operadores [3 3] Presentación Arrays Cadenas Operadores Sentencias de control Precedencia 70 Al igual que en la mayoría de los lenguajes: Primero se evalúan los operadores entre paréntesis. Luego se evalúan los operadores de incremento y decremento, de izquierda a derecha. Luego los operadores de multiplicación y división. En caso de existir la misma jerarquía, se evalúan de izquierda a derecha.

Sentencias de control [1 10] Arrays Cadenas Operadores Sentencias de control Sentencia: expresión que termina en punto y coma (;) Comentarios 71 Se pueden incluir varias sentencias en una misma línea, aunque lo habitual es utilizar una línea para cada sentencia. Todo lo que aparece a la derecha de dos barras // en una línea cualquiera del código es un comentario. La segunda forma de incluir comentarios consiste en escribir el texto entre los símbolos /* y */. Este segundo método es válido para comentar más de una línea de código

Sentencias de control [2 10] Arrays Cadenas Operadores Sentencias de control if if (exprbooleana) {... if-else if (exprbooleana) {... else {... 72

Sentencias de control [3 10] if múltiple if (expr1) {... else if (expr2) {... else {... Arrays Cadenas Operadores Sentencias de control 73

Sentencias de control [4 10] switch switch(expr) { case valor1: //sentencias break; case valor2: //sentencias break;... default: //sentencias break; Arrays Cadenas Operadores Sentencias de control 74 Un switch se emplea cuando se quieren verificar condiciones de igualdad, y no por ejemplo si un valor es más grande o más chico que otro. switch trabaja con los primitivos byte, short, char e int, con enumeraciones, con la cadenas y con las clases Character, Byte, Short e Integer.

Sentencias de control [5 10] while while(i < 10) {... i++; Arrays Cadenas Operadores Sentencias de control 75

Sentencias de control [6 10] Arrays Cadenas Operadores Sentencias de control do-while do {... i++; while(i < 10); for for(int i=0; i < 10; i++) {... 76

Sentencias de control [7 10] Arrays Cadenas Operadores Sentencias de control for mejorado for (int i : vector) { System.out.println(i); //suponiendo que vector es un //array de enteros 77 En el caso de los vectores y colecciones, desde Java 5.0 se puede usar una nueva forma para recorrerlos: for (int i : vector) { System.out.println(i); El ejemplo anterior se lee: para cada valor entero en el vector, mostrarlo. Con Java 5.0 se puede seguir usando la notación tradicional, pero la nueva es más simple. Los elementos del vector deben ser compatibles con el tipo de la variable declarada.

Sentencias de control [8 10] Comparación: while do-while for Presentación Arrays Cadenas Operadores Sentencias de control 78 Cuando se quiera iterar indefinidamente y ejecutar las sentencias 0 o más veces: estructura while. Cuando se quiera iterar indefinidamente y ejecutar las sentencias 1 o más veces: estructura dowhile. Cuando se quiera iterar un número predefinido de veces: estructura for.

Sentencias de control [9 10] Sentencias: break continue Presentación Arrays Cadenas Operadores Sentencias de control 79 La sentencia break tiene 2 formas: Sin etiqueta: se usa para terminar un for, while o do-while (en todos los casos siempre el lazo más interno). También se usa con el switch. Con etiqueta: se usa para terminar un for, while o do-while (en todos los casos siempre el lazo más externo). La sentencia continue tiene 2 formas: Sin etiqueta: salta hasta el final del lazo más interno (for, while o do-while) y evalúa la expresión booleana que controla el lazo. Con etiqueta: salta hasta el final del lazo más externo marcado con una etiqueta.

Sentencias de control [10 10] Sentencia return Presentación Arrays Cadenas Operadores Sentencias de control 80 Otra forma de salir de un lazo (y de un método) es utilizar la sentencia return. A diferencia de continue o break, la sentencia return sale también del método. En el caso que el método devuelva algún valor, éste se deberá especificar a continuación del return: return valor; Si el método no devuelve valores (retorna void) se puede omitir la sentencia return, o utilizarla de la forma: return;

Despliegue [1 2] Presentación Despliegue Archivos JAR Herramientas Despliegue de una aplicación: son todas las actividades que hacen que la misma quede disponible para su uso. El despliegue depende de cómo se ejecute la aplicación: Local Remota Combinación 81 La forma de realizar el despliegue de una aplicación Java dependerá de cómo se ejecute la misma: Local: toda la aplicación se ejecuta en la computadora del usuario. Remota: toda la aplicación se ejecuta en un servidor, con el cliente accediendo al sistema empleando tecnología no Java, probablemente un servidor Web. Combinación: una parte de la aplicación se ejecuta en el sistema local del usuario y se conecta a un servidor donde se ejecutan otras partes de la aplicación.

Despliegue [2 2] Presentación Despliegue Archivos JAR Herramientas del directorio de una aplicación Java 82 Después que se termina de escribir una aplicación en Java, el directorio donde se encuentra todo el código estará formado por: Código fuente (archivos.java) Código bytecode (archivos.class) Toda esta mezcla de archivos dificulta el mantenimiento. Lo ideal sería separar los archivos fuente de los archivos bytecode.

Archivos JAR [1 1] Presentación Despliegue Archivos JAR Herramientas Archivo JAR (Java ARchive): archivo basado en el formato pkzip que guarda todas las clases juntas. Comando jar: comando para crear un archivo JAR. Ejecución de una aplicación mediante un archivo JAR. 83 Un archivo JAR, al permitir guardar todas las clases juntas, evita tener que manejarse con todos los archivos.class por separado. Si todos los archivos de la aplicación (archivos.class) se van a guardar en el JAR, para que el usuario pueda ejecutar la aplicación deberá poder ejecutar el JAR. Para hacer ejecutable el JAR, se debe crear un archivo manifiesto dentro del JAR, el cual contiene la información de las clases que contiene el JAR. Este archivo manifiesto le dice a la JVM qué clase tiene el método main().

Herramientas [1 1] Presentación Despliegue Archivos JAR Herramientas JDK Un editor de textos Un IDE: Netbeans (http://netbeans.org/) Eclipse (http://www.eclipse.org/) 84 La JDK contiene, entre otras cosas, la JRE (Java Runtime Environment), el compilador Java (javac), las APIs de Java y un conjunto de utilidades para desarrollar, depurar y ejecutar una aplicación en Java.

Resumen [1 2] Introducción a la POO Historia de Java Funcionamiento de un programa Java Características Paquetes Tipos de datos primitivos Declaración e inicialización Arrays Cadenas 85

Resumen [2 2] Operadores Sentencias de control Despliegue Archivos JAR Herramientas 86

Otro material [1 5] Java8 http://www.techempower.com/blog/2013/03/26/e verything-about-java-8/ Operaciones en paralelo http://www.drdobbs.com/jvm/parallel-arrayoperations-in-java-8/240166287 Anotaciones http://docs.oracle.com/javase/tutorial/java/annot ations/type_annotations.html 87

Otro material [2 5] Parámetros variables http://mundogeek.net/archivos/2009/04/04/varar gs-en-java/ Punteros en Java http://www.javacoffeebreak.com/articles/thinkingi njava/comparingc++andjava.html http://stackoverflow.com/questions/1901051/dopointers-in-java-actually-exist http://programmers.stackexchange.com/questio ns/141834/how-is-a-java-reference-differentfrom-a-c-pointer 88

Otro material [3 5] Punteros en Java http://www.joelonsoftware.com/articles/fog00000 00319.html http://programmers.stackexchange.com/questio ns/105902/do-the-young-minds-need-to-learnthe-pointer-concepts http://www.csun.edu/~hbcsc240/c+ +vsjava_st.htm 89

Otro material [4 5] OpenJDK http://es.wikipedia.org/wiki/openjdk http://stackoverflow.com/questions/1977238/why -should-i-use-the-oracle-jdk-over-the-openjdkor-vice-versa 90

Otro material [5 5] Paquete sin nombre http://stackoverflow.com/questions/283816/howto-access-java-classes-in-the-default-package http://wiki.answers.com/q/what_is_a_default_p ackage_in_java http://www.xyzws.com/javafaq/what-is-thedefault-package/126 91