TP19-20 Es 2-Introjava

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 18

Universidad Complutense de Madrid

Facultad de Informática
Grado en Ingeniería Informática, Grupo B

Tecnología de la Programación

Introducción a Java

Simon Pickin,
Alberto Díaz, Puri Arenas, Yolanda García
Historia del lenguaje Java

• Finales de los 80:


o Sun Microsystems decide introducirse en el mercado de la electrónica de consumo
o Mercado consta de gran variedad de procesadores en dispositivos pequeños
o cada uno con su entorno de programación y sus API

• 1991:
o James Gosling y su equipo de Sun inician el desarrollo del lenguaje “Oak”
o Simplificación de C++ adaptado a sistemas embebidos y GUI sencilla o sin GUI
o Pensado, en particular, para lo que ahora se llama “smart TV” y PDAs
o Marcado objetivo crece más lento de lo previsto; Oak no se usa hasta…

• 1995:
o Oak reorientado a la World Wide Web y renombrado Java
o Ideal para una red de recursos distribuidos alojados en ordenadores heterogéneos
o Java distribuido gratis e integrado en el navegador Netscape para ejecutar applets

§2 - 2 TP – 2019-20
Características del lenguaje Java

• Orientado a objetos
o Encapsulación, herencia, polimorfismo
o Herencia múltiple solo permitida en interfaces
• Sintaxis familiar
o similar a C++
• Tipado estático (y fuertemente tipado)
o Las variables tiene tipo y el compilador verifica tipos
o Todo valor tiene un tipo bien definido y cualquier conversión implícita
de tipos es segura
• Modelo de objetos más sencillo que C o C++
o No hay manipulación directa de punteros
• Gestión de memoria más sencilla que C o C++
o Recolector de basura automático
§2 - 3 TP – 2019-20
Características de la plataforma Java

• La plataforma software Java se basa en el principio siguiente:


o El resultado de la compilación de un programa debe poder ejecutarse en
distintos ordenadores / dispositivos sin modificación alguna
• Así, se puede distribuir el software como componentes binarios que pueden
ejecutarse directamente en múltiples dispositivos: PCs, teles, móviles,…
• Conocido como el principio WORA (Write Once, Run Anywhere)

• La arquitectura de máquina virtual


o El lenguaje y el compilador son independientes del hardware y del SO
• Clave para obtener WORA
o La máquina virtual (JVM) ejecuta código máquina abstracta (bytecode)
• El compilador Java traduce de código fuente Java a bytecode
• El JVM traduce de bytecode a código máquina (interpretador o compilador JIT)
o En tecnología anterior a Java, el bytecode se conocía como “p-code”

§2 - 4 TP – 2019-20
La arquitectura de la plataforma Java

• El software Java puede ejecutarse en una


amplia variedad de plataformas heterogéneas
gracias a la máquina virtual Java (JVM)
• La JVM traduce instrucciones de bajo nivel
independientes de plataforma (bytecode) en
instrucciones de bajo nivel dependientes de
plataforma (código máquina)
• La implementación de la JVM en sí es
dependiente de plataforma (evidentemente!)
• Integridad: una máquina virtual puede verificar
las instrucciones bytecode antes de traducirlas
• Seguridad: el enfoque máquina virtual facilita el
uso de un sandbox en el que ejecutar código
que no sea de confianza

§2 - 5 TP – 2019-20
La plataforma Java

Java .java
Source

javac

Java .class
Bytecode

java

Programming API Programming API Programming API

JVM JVM JVM

Platform Interface Platform Interface Platform Interface


Web Browser Windows UNIX

§2 - 6 TP – 2019-20
La máquina virtual Java

§2 - 7 TP – 2019-20
La plataforma Java abierta

• La plataforma Java consta de tres elementos


1. El lenguaje Java
2. La máquina virtual Java (JVM)
3. Las bibliotecas muy extensas de Java
• a veces también llamado el API Java

• Es posible usar el 2º y 3º elemento sin usar el 1º


o p.e. Scala y los lenguajes dinámicos Groovy, Clojure, Jruby, Jython,…
• Pueden ser compilados a bytecode y ejecutados sobre la JVM, haciendo
llamadas a las bibliotecas de Java.

§2 - 8 TP – 2019-20
Ediciones de Java

• Java SE (Java Standard Edition)


o JRE (Java Runtime Environment) => un entorno de ejecución Java
• JVM + API estándar (conjunto de bibliotecas)
o JDK (Java Development Kit) => un entorno de desarrollo Java
• JRE y bibliotecas extras de interés para desarrolladores
• javac: compilador; java: lanza el JRE para ejecutar bytecodes
• Muchos utilidades (p.e. jdb depurador, javadoc generador de documentos)

• Otras tecnologías Java:


o Java ME (Java Micro Edition) : Java para pequeños dispositivos, en
particular, móviles (¡que ya no son tan pequeños!)
o Java EE (Java Enterprise Edition): Java para aplicaciones empresariales
distribuidas (n-tier cliente-servidor), especialmente aplicaciones web
o Java FX, Java Card, Java TV, …
§2 - 9 TP – 2019-20
Bibliotecas principales de Java SE

• java.lang: contiene clases básicas tales como String


• java.io & java.nio: contiene clases para gestionar la entrada-salida
mediante flujos de datos
• java.net: contiene clases para gestionar el acceso a la red
• java.util: contiene colecciones, el modelo de eventos, facilidades horarias,
facilidades de internacionalización,…
• java.awt: la Abstract Window Toolkit (AWT) contiene clases para desarrollar
interfaces de usuario gráficas (GUI) y para imprimir gráficos e imágenes; los
widgets del AWT están implementados con código que depende de la
plataforma.
• javax.swing: contiene clases para desarrollar GUI; más flexible y potente que
la AWT; los widgets de swing están implementados en Java.
§2 - 10 TP – 2019-20
El entorno de programación Java

• Un entorno mínimo
o contiene el compilador y la máquina virtual
o se utiliza desde la línea de comandos
• Compilación en un entorno mínimo
o El comando javac, p.ej. javac MiClase.java
• produce ficheros de bytecode con la extensión .class, p.ej. MiClase.class
• Produce un fichero .class para cada clase definida en el código fuente

• Ejecución en un entorno mínimo


o El comando java p.ej. java MiClase
• lanza la máquina virtual Java (JVM) que, a continuación,
• ejecuta el bytecode generado previamente del programa por el compilador

§2 - 11 TP – 2019-20
Estructura de un programa Java

package nombrePaquete;

// Importación de otras clases o paquetes


import java.util.Vector;
import java.util.Date;

// Declaración e implementación de la clase


public class NombreClase
{

}

• Java distingue minúsculas y mayúsculas y por convención


o los nombres de las clases empiezan con mayúscula
o los nombres de los métodos empiezan con minúscula
§2 - 12 TP – 2019-20
Estructura de un programa Java
• Un programa Java consiste en una o más definiciones de clase
o una declara el método public static void main(String[] args)
• Las funciones no pueden definirse fuera de clases
o Solo se permiten métodos, cada uno de los cuales pertenece a una clase
• Un fichero fuente Java tiene la extensión .java y
o es una unidad independiente de compilación
o puede contener múltiples definiciones de clase pero max. una public
o Si tiene una clase public , debe tener el mismo nombre que el fichero
• Esta restricción aumenta la eficiencia de la compilación
• También ayuda a mejorar la legibilidad del código

• El compilador genera un fichero .class para cada clase


o haya o no ficheros de código fuente que contengan múltiples clases

§2 - 13 TP – 2019-20
Ficheros y directorios
• Los ficheros .class de Java son parecidos a los ficheros .o o.obj generados
por la compilación de C o C++
o pero en C y C++,
• las declaraciones de tipos y de funciones se suelen recoger en un fichero .h
• sobre todo si los mismos tipos y funciones se utilizarán en múltiples ficheros fuente
• Este fichero luego se incluye en cualquier fichero fuente que utiliza estos tipos y funciones
o mientras que en Java
• las clases importan cualquier otra clase que utilizan que no esté definida en el mismo fichero
y no esta en java.lang
• via import <nombrePaquete>.<nombreClase> o import <nombrePaquete>.
• Si se quiere declarar una interfaz explícitamente, se puede hacer más limpiamente con la
construcción Java interface

• ¿Cómo encuentra el compilador y el interprete / el compilador JIT el bytecode?


o Para clases importadas no presentes ni en el programa ni en la biblioteca estándar
o el camino de estos ficheros se tiene que colocar en la variable de entorno CLASSPATH
o o proporcionarse en el argumento –classpath (o -cp) a los comandos java, javac
§2 - 14 TP – 2019-20
Ejecución de programas Java

• Formas de ejecución de programas Java


o Como aplicación de línea de comandos (con entrada / salida estándar)
o Como aplicación con interfaz de ventanas (con una GUI)
o Lanzado programas Java desde una página web (ahora obsoleto)

• Lanzar programas Java desde una página web


o Este caso de uso es lo que lanzó el lenguaje Java
o Pero se quedó obsoleto en Java 9 (2017)
• Tanto los applets (más viejo) como Java Web Start (más nuevo)

§2 - 15 TP – 2019-20
Ejemplo 1: primer programa Java

HolaMundo.java
// Este es mi primer progama en Java

public class HolaMundo


{
public static void main(String[] args)
{
System.out.println("Hola Mundo");
}
}

§2 - 16 TP – 2019-20
Ejemplo 1: primer programa Java

• Definimos la clase HolaMundo


o Es una clase public, es decir, accesible desde fuera del paquete
• defecto es “package-private”: accesible desde dentro del paquete solamente

• Tiene un solo método llamado main


o Es un método public y static que no devuelve un valor
o Contiene una sola instrucción que imprime una cadena al terminal
• La cadena de caracteres a imprimir es el argumento del método println
• Este método es un método de la clase PrintStream del paquete java.io
• Esta clase es el tipo del atributo cuyo nombre es out
• Este atributo es un atributo static de la clase System del paquete
java.lang (este paquete se importa por defecto en todo programa Java)
o El valor del atributo out encapsula el flujo de salida estándar

§2 - 17 TP – 2019-20
Ejemplo 1: compilar y ejecutar

• Para compilar desde la línea de comandos


javac -d <a_dir> -cp <a_classpath> myPaquete.HolaMundo.java
o a_dir es el directorio donde los ficheros .class generados se colocarán
o a_classpath contiene el camino hacia cualquier bytecode externo
usado

• Para ejecutar desde la línea de comandos


java -cp <classpath> miPaquete.HolaMundo
o HolaMundo contiene el método main
• es el punto de entrada de la aplicación
o Otras clases también pueden contener un método main
• Puede ser útil para probar clases por separado durante el desarrollo
• Pero la versión final debería contener un solo método main

§2 - 18 TP – 2019-20

También podría gustarte