Arquitectura y Lenguaje Java

Anuncio
Arquitectura y Lenguaje Java
1
Introducción
■
El lenguaje de programación Java así como
su arquitectura se diseñaron para resolver
problemas que se presentan en la
programación moderna.
■
Se inició como parte de un proyecto cuyo
objetivo fue el de desarrollar software
avanzado para dispositivos electrónicos.
2
Introducción
■
Se creó un equipo de trabajo en Sun para
tratar de resolver este problema.
Inicialmente se pretendió utilizar C++ pero
se identificaron numerosos problemas y se
buscó diseñar un nuevo lenguaje.
■
Como resultado, en 1990, el nuevo lenguaje
recibió el nombre de Oak y era pequeño,
confiable, y de arquitectura independiente.
3
Introducción
■
En 1993, mientras el equipo continuaba
trabajando, apareció la Red Mundial (www)
en Internet y tuvo una gran aceptación.
■
Los desarrolladores de Java pensaron que
un lenguaje de arquitectura neutral sería
ideal para programar en internet porque el
programa podría ejecutarse en todos los
tipos de computadoras conectadas a la red.
4
Introducción
■
Java es un lenguaje simple, orientado a
objetos, distribuido, interpretado, robusto,
seguro, de arquitectura neutral, portable, de
alto rendimiento, multi hilos, y dinámico.
5
Simple
Aprenderse fácilmente y que fuera familiar
(C y C++)
■ Omite la sobrecarga de operadores (aunque
sí existe la sobrecarga de métodos) y la
herencia múltiple.
■ Las construcciones como struct no son
válidas.
■
6
Simple
Descarta la instrucción goto, sin embargo,
provee instrucciones etiquetadas de break y
continue.
■ Incorpora la recolección de basura para
manejo automático de memoria.
■ Elimina los apuntadores.
■ Maneja automáticamente la referenciación y
dereferenciación de objetos.
■
7
Orientado a Objetos
■
Permite la definición clara de interfaces y la
reusabilidad de código; así como las ventajas
mencionadas previamente en este curso sobre la
programación orientada a objetos.
■
Java cuenta con un conjunto extenso de clases
guardadas en paquetes.
java.awt, java.io, java.net, java.lang.
8
Distribuido
■
Las aplicaciones de Java pueden acceder a
objetos a través de la red por medio de
URL's con la misma facilidad que si
accediéramos a objetos en nuestro sistema
local de archivos.
9
Interpretado
■
El compilador de Java genera byte-codes, en
lugar de código nativo de la máquina.
■
Para ejecutar un programa en Java se utiliza
el intérprete para ejecutar los byte-codes
compilados, y por ello java es un lenguaje
interpretado.
10
Interpretado
■
Los byte-codes de Java proveen un archivo objeto
de arquitectura neutral que permite que los
programas puedan transportarse a múltiples
plataformas.
■
Un programa en Java puede ejecutarse en
cualquier sistema que cuente con el intérprete de
Java y el sistema de run-time.
Máquina Virtual de Java
11
Anexo A
❍
Figura 1
12
Robusto
■
Java pretende que se escriban programas
confiables.
■
Es un lenguaje fuertemente tipificado que
permite, a tiempo de compilación, verificar
problemas potenciales de asignación de
tipos.
13
Robusto
■
La verificación de tipos es más fuerte que la de
C++ ya que no permite declaraciones implícitas de
métodos.
■
Una de las mejoras de confiabilidad de Java es su
modelo de memoria. Java no permite apuntadores,
lo que elimina la posibilidad de sobreescribir en la
memoria y corromper información valiosa.
14
Robusto
■
La recolección automática de memoria evita
la fragmentación de la misma por la
petición y borrado dinámico.
■
El intérprete de Java realiza verificaciones a
tiempo de ejecución para determinar que los
accesos a arreglos y cadenas de caracteres
se encuentren dentro de los límites.
15
Robusto
■
Otra característica de Java es el manejo de
excepciones. Esto simplifica la tarea de
manejo de errores y recuperación de los
mismos.
16
Seguro
■
La seguridad es una preocupación
primordial ya que se pretende que Java se
utilice en ambientes de red.
■
Mecanismos de seguridad que impidan que
algún programa trate de crear un virus o
invadir el sistema de archivos.
17
Seguro
■
El modelo de alojamiento de memoria de
Java es una de las principales defensas
contra código corrupto. El sistema de runtime realiza la verificación de los bytecodes para asegurarse de que el código que
transportamos por la red no viola la
integridad del medio en el que nos
encontramos.
18
Seguro
■
Java maneja la tecnología de encriptación
para verificar que un applet, que se recibe a
través de la red, tiene su origen en un lugar
autorizado y no ha sido modificado.
■
Java conoce y puede combatir la mayoría de
las técnicas que se han utilizado para
desarrollar software corrupto.
19
Arquitectura Neutral
■
Los programas de Java se compilan en un
formato de arquitectura neutral conocido
como byte-codes.
■
La principal ventaja de esto es que Java
puede ejecutarse en cualquier sistema
mientras que se implemente la Máquina
Virtual de Java.
20
Portable
■
Java garantiza que no existen aspectos de
dependencia
de
implementación
en
la
especificación del lenguaje.
■
El ambiente de Java es portable hacia nuevas
plataformas de hardware y sistemas operativos. El
compilador de Java está escrito en Java mientras
que el sistema de run-time está escrito en ANSI C.
21
Alto Rendimiento
■
Java es un lenguaje interpretado y es por
ello que nunca será tan rápido como un
lenguaje compilado, como C. De hecho
Java es, en promedio, 20 veces más lento
que C.
22
Alto Rendimiento
■
Los diseñadores de Java están trabajando en
compiladores just-in-time que pueden
traducir los byte-codes de Java en código de
máquina para un CPU específico a tiempo
de ejecución.
23
Multihilos
■
En una aplicación como un browser de
Web, es fácil imaginar múltiples tareas
realizándose al mismo tiempo.
■
Java es un lenguaje multihilos que puede
contar con múltiples hilos de ejecución para
manejar diferentes tareas.
24
Multihilos
■
Java hace de la programación multihilos
una tarea más sencilla que en C y C++, al
proporcionar utilerías que permiten iniciar,
ejecutar, detener y verificar hilos. Además,
cuenta con rutinas de sincronización.
25
Dinámico
■
Java se diseñó para adaptarse a un ambiente
cambiante. Las definiciones de la clase runtime de Java hace posible que
dinámicamente se liguen clases en un
sistema en ejecución.
26
Características del lenguaje
■
Estructura y ambiente de un programa
➀
Definición de una o más clases (.class).
Alguna de estas clases debe contar con un método
principal main().
Para ejecutar un programa en Java se debe utilizar
el intérprete, java.
Un applet de Java no es una aplicación (Browser
de Web, appletviewer).
➁
➂
➃
27
Características del lenguaje
// Programa 1
public class echo {
public static void main (String argv[]) {
for (int i=0; i < argv.length; i++)
System.out.print (argv[i] + “ “);
System.out.print (“\n”);
System.exit(0); }
}
28
Características del lenguaje
■
Valor de Salida del programa
Cabe notar que el método main() debe de
regresar un valor void. Por ello, no es
posible regresar un valor de un programa de
Java con una instrucción return.
29
Características del lenguaje
■
Ambiente
El API (application programming interface)
de Java no permite que sean leídas variables
de ambiente del sistema operativo debido a
que son dependientes de la plataforma. Un
programa de Java puede buscar el valor de
una determinada propiedad con el método
System.getProperty().
30
Características del lenguaje
■
Paquetes, Clases y Campos
Java, como un lenguaje diseñado para
considerar
lecturas
de
módulos
dinámicamente dentro de internet, tiene
cuidado para evitar conflictos de espacio.
Por ejemplo, no existen las variables
globales, ni las funciones globales.
31
Variables globales y paquetes
■
Variables globales. En Java, toda variable y
método se declaran dentro de una clase y
forman parte de la misma. También, cada
clase es parte de un paquete.
■
Paquetes, clases y estructura de directorio.
Java cuenta con una organización jerárquica
dividida en niveles.
32
Paquetes
■
Para diseñar un paquete:
package nombre_del_paquete;
Por ejemplo:
package CTI.cem.itesm.graphics;
33
Paquetes
■
En Java, cada clase compilada se guarda en un
archivo separado. El nombre de este archivo debe
ser el mismo que la clase. Este archivo de clase
debe guardarse en un directorio que tiene los
mismos componentes que el nombre del paquete.
angeles.curso.java.HolaMundo
angeles\curso\java\HolaMundo.class.
34
Paquetes
■
Un archivo de código Java debe tener la
extensión .java. Este consiste de una o más
definiciones de clases. Si se define más de
una clase en un archivo .java, sólo una de
ellas debe de declararse public (disponible
fuera del paquete), y debe tener el mismo
nombre que el archivo principal.
35
Anexo B
❍
Figura 2
36
import
■
La instrucción import hace que las clases de
Java sean accesibles a la clase actual
utilizando un nombre abreviado.
import paquete;
import paquete.class;
import paquete.*;
37
Comentarios
■
Java cuenta con tres tipos de comentarios:
/* */
//
/** */
38
Constantes
■
Cualquier variable declarada como final es
una constante en Java. Su valor debe de
especificarse al declararse y no puede
cambiar.
public static final double PI = 3.14159;
39
Anexo B
❍
Figura 3
40
Tipos de datos referenciados
Los tipos de datos no primitivos en Java son
objetos y arreglos (tipos referenciados)
■ Los tipos primitivos se manejan por valor.
■ En C, es posible manejar un valor por
referencia tomando su dirección y
dereferenciar una dirección utilizando los
operadores * y ->. Estos operadores no
existen en Java.
■
41
Tipos de datos referenciados
■
Debido a que los objetos se utilizan por referencia,
dos variables diferentes pueden hacer referencia al
mismo objeto:
Button a,b;
p = new Button();
q = p;
p.setLabel("ok");
String s = q.getLabel();
42
Tipos de datos referenciados
■
Esto no ocurre con los tipos primitivos:
int i = 3;
j = i;
i = 2;
43
Copia de objetos
■
Debido a que los tipos referenciados no se
utilizan por valor, asignar un objeto a otro
en Java no copia el valor del objeto.
Simplemente asigna una referencia al
objeto.
Button a = new Button ("Ok");
Button b = new Button ("Cancelar");
a = b;
44
Copia de objetos
■
Para copiar los datos de un objeto a otro se
puede utilizar el método clone().
Vector b = new Vector;
c = b.clone();
45
Apuntadores
■
Java no maneja apuntadores
➀
Java maneja en forma automática la referenciación
y dereferenciación de objetos.
No permite hacer un cast de objetos o arreglos, a
enteros o viceversa
No permite la aritmética de apuntadores
No permite calcular el tamaño, en bytes, de
cualquier tipo primitivo u objeto
➁
➂
➃
46
null
■
El valor de default de todos los tipos de
variables referenciadas es null, que indica
"ausencia de referencia", es decir, esa
variable no hace referencia a ningún objeto
o arreglo.
47
Recolección de basura
■
Los objetos en Java se crean con la palabra
new. Sin embargo, no existe un delete o
free para liberarse de ellos cuando ya no
son necesarios.
■
Java cuenta con mecanismos de recolección
de basura para detectar automáticamente
objetos que ya no son utilizados y
liberarlos.
48
Arreglos
■
■
■
■
Son manipulados por referencia
Se crean dinámicamente con new
Cuando ya no son referenciados, automáticamente
se eliminan
Existen dos formas para crear arreglos en Java. La
primera es utilizando new e indicando el tamaño
el arreglo.
byte a[ ] = new byte [1024];
button botones[ ] = new Button [10];
49
Arreglos
Cuando se crea un arreglo, no se generan
los objetos que están almacenados en él y es
por ello que no existe un constructor que
llamar y no existe lista de argumentos.
■ La segunda manera de crear un arreglo es
con un inicializador estático:
■
int tabla [ ] = {1, 2, 3, 4, 5};
50
Arreglos multidimensionales
■
Java puede manejar este tipo de arreglos
que son implementados como arreglos de
arreglos.
int arreglo[ ] [ ] = new int [12] [8];
51
Cadenas de caracteres
■
En Java, las cadenas de caracteres no son
arreglos terminados con caracter null como
en C. En cambio, son instancias de la clase
java.lang.String.
■
No es necesario indicar la terminación null
ya que Java verifica los límites de las
cadenas de caracteres automáticamente.
52
Cadenas de caracteres
■
Una de las características principales de los
objetos tipo String es que son incambiables.
Es decir, no existen métodos para cambiar
el contenido de un String.
■
Para poder hacer esto, es necesario definir
un objeto StringBuffer a partir del objeto
String
53
Cadenas de caracteres
■
Algunos de los métodos, que se encuentran
en el java.lang.String:
int i;
boolean b;
String myString = "HolaMundo";
b = myString.equals("holamundo");
54
Cadenas de caracteres
b= myString.equalsIgnoreCase
("holamundo");
i = myString.indexOf( 'l' );
i = myString.lastIndexOf( 'o' );
i = myString.indexOf( "Mu" );
55
Cadenas de caracteres
String subst = myString.substring( i );
subst = subst.concat(subst).concat(subst);
56
Clases
Las clases definen la estructura,
el comportamiento y los mecanismos para
crear instancias de las clases.
■ Las clases son una especialización de las
estructuras de C (struct).
■ Las clases en Java contienen métodos y
atributos.
■
57
Ejemplo
58
Clase Alumno en Java
59
Clase Alumno en Java
60
Acceso a los miembros de la clase
Los campos y métodos de una clase se
pueden acceder desde cualquier parte de la
misma.
■ El acceso, por parte de otras clases, es
dependiente de los modificadores de acceso:
publico, privado, protegido, paquete y
privado protegido
■
61
Objetos
■
Creando objetos. El declarar una variable para
manejar un objeto no crea al objeto en sí; sólo
maneja la referencia al objeto. Para crear un objeto
hay que utilizar la palabra new, seguida de la clase
del objeto (su tipo) y una lista opcional de
argumentos entre paréntesis.
java.awt.Button b = new java.awt.Button();
62
Objetos
■
Accediendo a objetos. La forma de acceder
a los campos de un objeto es igual que en C
cuando se manejan estructuras:
ComplexNumber c = new
ComplexNumber();
c.x = 1.0;
c.y = -1.414;
63
Objetos
■
Para acceder a los métodos en un objeto es
igual que en C++:
ComplexNumber c = new
ComplexNumber(1.0,-1.414);
double magnitude = c.magnitude();
64
super y this
■
En Java encontramos dos variables
asociadas a cada objeto: super y this.
■
this es una
referencia al
objeto que el programa está utilizando en
ese momento.
■
super es una referencia a la clase padre del
objeto this.
65
Aplicaciones y Applets
■
En
Java
es
posible
aplicaciones o applets.
implementar
■
Las primeras se ejecutan en la línea de
comandos como cualquier programa
ejecutable y los segundos se ejecutan en un
browser de Web.
66
Aplicaciones y Applets
67
Aplicación. Hola Mundo
// Programa 2
public class HolaMundo_aplicacion {
public static void main (String args[]) {
System.out.println(" Hola Mundo !!!!");
}
}
$ javac HolaMundo_aplicacion.java
$ java HolaMundo_aplicacion
68
Applets
■
Un applet hereda la clase Applet de Java.
No requiere de un método main().
■
Un applet cuenta con cinco métodos
principales, todos de tipo public void:
1.init( )
2.start( )
3.stop( )
4.destroy( )
5.paint( )
69
Applets
■
Un applet, a diferencia de una aplicación,
debe de ejecutarse en un browser de Web.
Para ello, es necesario generar un archivo
HTML (Hyper Text Markup Language)
donde se mandará llamar el applet
compilado.
70
Applet. Hola Mundo
// Programa 3
import java.applet.*; import java.awt.*;
public class HolaMundo extends Applet {
public void paint(Graphics g) {
setBackground(Color.blue);
g.drawString("Hola Mundo Java!", 25, 25);
}
}
71
HTML. Hola Mundo
<html>
<applet
codebase="http:// www.tec.mx /java / applets"
code = "HolaMundo.class"
width = 200 height = 35>
</applet>
</html>
72
Variables de clase
■
Una variable de clase es aquella que es
compartida por todas las instancias de dicha
clase.
public static float pi = 2.1416;
Existe sólo una copia de esta variable
■ Esta variable existe aún cuando no se hayan
creado instancias de la clase.
■
73
Variables de instancia
■
Una variable de instancia de una clase tiene un
rango de alcance de la clase, que se define desde el
primer { de la definición de la clase hasta el último
} de la misma. Esto significa que todos los
métodos de la clase tienen acceso a esa variable.
■
Existe una copia de esta variable en cada instancia
de la clase.
74
Ejemplo 1. Notación UML
75
Anexo B
❍
Ejemplo 1
76
Anexo A
❍
❍
❍
❍
Programa 4
Programa 5
Programa 6
Programa Addition.java
77
Métodos de clase
Se declaran con la palabra static
■ Se
conocen también como métodos
estáticos
■ Se invocan a través de una clase en lugar de
una instancia
■ Son lo más parecido a las funciones
globales de C.
■ No utilizan this
■
78
Anexo B
❍
❍
❍
❍
Ejemplo 2
Ejemplo 3
Programa 7
Programa 8
79
Herencia
■
■
En Java toda clase herada de manera implícita a la
clase Object predefinida
Para heredar los métodos y variables de una clase
(excepto los privados), es necesario utilizar la
palabra reservada extends.
80
Herencia
Java sólo soporta el concepto de herencia
simple, es decir, sólo hereda directamente
de una superclase.
■ La subclase hereda el comportamiento y la
estructura de la superclase.
■ Se heredan todos los miembros públicos,
protegidos o de paquete.
■ Los constructores no se heredan.
■
81
Encapsulamiento
■
Se utiliza el modificador public para indicar
qué variables o métodos de una clase están
disponibles en cualquier parte.
■
Se utiliza el modificador private para
ocultar variables o métodos de una clase.
82
Encapsulamiento
■
Una variable o método privado de una clase
es visible solamente por los métodos
definidos para esa clase. No son accesibles
por subclases ni son heredados por ellas.
83
Encapsulamiento
■
Una variable o método protected es
accesible dentro de la clase donde están
definidos, dentro de todas las subclases de
la clase, y por las clases que se encuentran
en el mismo paquete que la clase donde se
encuentran.
84
Encapsulamiento
■
La protección default es más estricta que la
protected. Si una variable o método se declara sin
alguna de las llaves de public, private o protected,
sólo es accesible para la clase que la o lo declara,
así como dentro de las clases que forman parte del
mismo paquete. No es accesible para las subclases
(a menos que sean subclases en el mismo
paquete).
85
Encapsulamiento
■
Las subclases heredan los campos private
protected y protected, pero no pueden
acceder a estos campos en instancias de la
superclase.
86
Anexo A y Anexo B
❍
❍
❍
❍
Figura 4
Programa 9
Programa 9-a
Programa 10
87
Ejemplo.
88
Ejemplo. Notación UML
89
Ejemplo. Notación UML
90
Ejemplo. Notación UML
91
Anexo A
■
■
■
Programa 11
Programa 11-a
Programa 11-b
92
Superposición de métodos
Si una clase define un método con la misma
firma que un método de alguna de sus
superclases, se dice que este método está
siendo redefinido (overriding)
■ Se utiliza la palabra super dentro del
método de la subclase para invocar a la
operación original de la superclase.
■
93
Métodos de utilería
No todos los métodos en Java tienen que ser
públicos
■ Algunos métodos se declaran como
privados (private) y sirven como métodos
de utilería para otros métodos de la clase.
■
94
Anexo A
Programa 12
■ Programa 12-a
■
95
Composición
La composición se refiere a la facilidad de
poder tener objetos como variables de
instancia de otras clases
■ Un objeto puede tener objetos de otras
clases como miembros
■
96
Anexo A
Programa 13
■ Programa 13-a
■ Programa 13-b
■
97
Clases abstractas
Una clase abstracta es aquella que no puede
ser instanciada
■ Normalmente no implementa todos los
métodos que declara, sino que delega esta
responsabilidad a sus subclases
■
98
Clases abstractas
Una clase se define como abstracta si se
incluye la palabra reservada abstract
■ Un método abstracto es un método de una
clase abstracta que no contiene código
■ El método abstracto deberá implementarse
en toda aquella clase que concreta que
hereda de la clase abstracta
■ Un método abstracto no puede ser privado
■
99
Clases abstractas
■
Supongamos que se desea implementar clases para
diferentes figuras: rectángulo, cuadrado, elipse,
etc.
■
Lo como un arreglo de figuras que se derivan de
una superclase Shape. Así, Shape encapsulará las
características que son comúnes en todas las
figuras (como área y perímetro).
100
Clases abstractas
■
Sin embargo, la clase genérica Shape no puede
implementar estos métodos ya que varían de una
figura a otra. Para poder manejar esto Java utiliza
los métodos abstractos.
■
Un método abstracto no tiene cuerpo; sólo tiene un
nombre seguido por un punto y coma.
101
Clases abstractas
■
■
■
■
Cualquier clase con un método abstracto es
abstracta automáticamente.
Una clase abstracta no puede instanciarse.
Una subclase de una clase abstracta puede
instanciarse si sobreescribe cada uno de los
métodos abstractos de su superclase.
Si una subclase de una clase abstracta no
implementa todos los métodos abstractos que
hereda, esa subclase es abstracta.
102
Anexo B
❍
❍
Ejemplo 4
Figura 5
103
Anexo A
■
■
■
■
■
■
Programa 14
Programa 14-a
Programa 14-b
Programa 14-c
Programa 14-d
Programa 14-e
104
Descargar