Download LenguajeJava IntroducciónaJAVA IntroducciónaJAVA

Document related concepts
no text concepts found
Transcript
Lenguaje Java
Introducción a JAVA
Objetivos de diseño del lenguaje JAVA:
• simple
• orientado a objetos
(a) introducción
(b) plataforma
(c) applet vs. aplicaciones
(d) sintaxis
• para trabajar en red
• robusto
• seguro
• neutral con respecto a la arquitectura
• portable
• interpretado
• de alta performance
• multithreading
• dinámico
Programación Orientada a Objetos – DCIC UNS – 2002
153
Programación Orientada a Objetos – DCIC UNS – 2002
Introducción a JAVA
Historia de los lenguajes de POO:
• Simula. Universidad de Oslo, 1967.
Introduce el concepto de clase.
155
Plataforma JAVA
• El mundo de las computadoras tiene actualmente varias plataformas (HW+SO).
• Smalltalk. Xerox PARC, 1972.
Primer lenguaje con todos los elementos de POO. Ambiente interpretado, sin chequeo
de tipos.
• C++. AT& T Labs, 1986.
Generalización del uso de clases y objetos en la industria del SW.
• Eiffel. ISE, 1986.
Incorpora uniformemente a la POO otros elementos necesarios para un buen desarrollo
de SW tales como genericidad, aserciones, y excepciones.
• JAVA. Sun, 1994.
Lenguaje puro basado en C, para programar sobre Internet.
Programación Orientada a Objetos – DCIC UNS – 2002
154
• La Plataforma JAVA es una nueva plataforma de SW para distribuir y ejecutar
programas altamente interactivos, dinámicos en un sistema de computadoras en red.
• La principal diferencia con las plataformas existentes es que está definida sobre estas
otras plataformas.
• Un programa en el lenguaje JAVA es compilado a una secuencia de bytecodes que
no son especı́ficos de ninguna máquina, sino que son instrucciones para una máquina
virtual.
Programación Orientada a Objetos – DCIC UNS – 2002
156
Plataforma JAVA
Plataforma JAVA
Todas las plataformas JAVA permiten crear y ejecutar dos diferentes tipos de programas:
• Applets: son programas que requieren un browser para correr. Se identifican con el
tag h applet i en el código HTML de las páginas Web. Cuando un usuario accede
la página, ya sea por una red local o por Internet, el applet es automáticamente
descargado del servidor y corre en la máquina cliente. Tienden a ser modulares y
pequeños.
• Aplications: son programas que no requieren un browser, y no tienen embebido ningún
código para ser descargados. Al igual que un applet, requieren una Plataforma JAVA
par correr, pero ésta puede estar directamente en el sistema operativo.
• Cada plataforma tiene su propia implementación de la máquina virtual de JAVA, que
provee una interface estándar y uniforme sobre cualquier HW. “‘Write Once, Run
Anywhere” es el lema.
Programación Orientada a Objetos – DCIC UNS – 2002
157
Plataforma JAVA








Plataforma Java 




Programación Orientada a Objetos – DCIC UNS – 2002
159
Plataforma JAVA
JAVA máquina virtual (JVM)
JAVA API’s (application programming interface)
• JAVA 2 Standard Edition (SE): incluye las herramientas esenciales (compilador, máquina
virtual, debugger, API’s más comunes, etc) para el desarrollo, instalación y ejecución
de applets y aplicaciones en el lenguaje JAVA.
Arquitectura de las
Plataformas JAVA
• JAVA 2 Enterprise Edition (EE): provee las herramientas para el diseño, desarrollo,
ensamblaje e instalación de aplicaciones empresarias basadas en componentes. Incluye
un modelo de aplicación multi-capa, modelo de seguridad unificado, y control de
transacciones.
• JAVA 2 Micro Edition (ME): está dirigida al mercado de aplicaciones embebidas en
dispositivos electrónicos pequeños, tales como teléfonos celulares, tarjetas inteligentes,
pagers, etc. Es un subconjunto de JAVA 2 SE.
Programación Orientada a Objetos – DCIC UNS – 2002
158
Programación Orientada a Objetos – DCIC UNS – 2002
160
Plataforma JAVA
• Máquina Virtual JAVA: es una computadora “soft” que puede ser implementada en SW
o HW. La interface de portabilidad y los adaptadores permiten que sea fácilmente portada a nuevos sistemas operativos. Define un formato de archvios binarios (.class)
que incluye todas las instrucciones de la máquina virtual.
• JAVA API’s: forman una interface estándar para applets y aplicaciones, sin importar
el sistema operativo. Constituyen el esqueleto a partir del cual se desarrollan las
aplicaciones.
– JAVA Core API’s: proveen lo básico del lenguaje, I/O, manejo de red, GUI y applets.
Todas las plataformas JAVA se comprometen a incluirlos. Incluye: java.lang,
java.util, java.io, java.net, java.awt y java.applet.
– JAVA Standard Extension API’s: extienden las capacidades de las anteriores. Algunas de estas extensiones eventualmente migraran al JAVA Core, y otras serán
incorporadas. Son “estándar” en el sentido de que constituyen un conjunto publicado, uniforme y abierto de API’s que cualquiera puede implementar. Una vez
definidos, pueden ser aumentados pero no cambiados, para mantener compatibilidad.
Programación Orientada a Objetos – DCIC UNS – 2002
161
Plataforma JAVA
Plataforma JAVA
El lenguaje JAVA
Cuando un programador escribe código fuente en JAVA, este código puede referenciar
API’s en el JAVA Core, JAVA Standard Extensions API’s, o un nueva API definida en el
mismo código fuente. En la ejecución, los tres códigos tienen el mismo status, la diferencia
está en el conjunto de plataformas JAVA que los pueden soportar.
• El lenguaje JAVA es simple, flexible, orientado a objetos (con herencia simple).
• La definición del lenguaje incluye multithreading, tipeo estático, manejo de excepciones, carga dinámica de librerı́as y recolección de basura automática.
• Tiene rutinas numéricas bien definidas (estándar IEEE), sintaxis basada en C/C++,
Programación Orientada a Objetos – DCIC UNS – 2002
163
Applets vs. Aplicaciones
Arquitectura de la Plataforma Java 2 SE, versión 1.4
• las aplicaciones y los applets tienen las mismas capacidades operativas. Sin embargo,
un applet necesita una red para ejecutarse, mientras que una aplicación no.
• las aplicaciones tienen más libertad en los accesos a los recursos del sistema. El acceso
a archivos de una aplicación es normal; pero para un applet sólo está permitido acceder
al sistema de archivos del servidor del cual proviene.
• estas restricciones serán relajadas cuando sea posible marcar a los applets con firmas
digitales, permitiendo al usuario final asegurarse que el applet ha sido transmitido sin
alteraciones de una fuente confiable.
Programación Orientada a Objetos – DCIC UNS – 2002
162
Programación Orientada a Objetos – DCIC UNS – 2002
164
Applets vs. Aplicaciones
• cualquiera sea el tipo de programa de JAVA, para ser ejecutado pasa por proceso
distinto al de los programas en otros lenguajes de compilación.
• los archivos fuentes (Clase.java) son primero compilados en secuencias de bytecodes, instrucciones de la máquina virtual (Clase.class)
• los archivos .class pueden ser trasladados a otras computadoras, para luego ser
interpretados por alguna máquina virtual de JAVA.
Sintaxis
En JAVA todas las entidades deben tener un tipo, que puede ser un tipo simple, predefinido o un tipo compuesto (Clase). Todas las entidades de tipos simples se manejan
implı́citamente con semántica por valor, y todas las entidades de tipos compuestos se
manejan implı́citamente con semántica por referencia.
< defAtributo > ::= [< propiedadesAtrib >]
< tipo >< nombreAtributo >
[< inicializacion >] ;
< inicializacion > ::= = < expresion >
El resultado de la expresión de la inicialización debe corresponder con el tipo del atributo,
y es asignado en todo momento que se crea la entidad correspondiente.
Programación Orientada a Objetos – DCIC UNS – 2002
165
Programación Orientada a Objetos – DCIC UNS – 2002
Sintaxis
167
Sintaxis
Las operaciones que una clase define para sus instancias se clasifican en consultas,
comandos y construtores.
< defClase > ::= < encabClase > { < cuerpoClase > }
< encabClase > ::= [< propiedadesClase >]
class < nombreClase >
[< herencia >][< interfaces >]
< cuerpoClase > ::= {< defAtributo > | < defOperacion >}∗
Los nombres en JAVA corresponden a una secuencia arbitraria de caracteres Unicode,
salvo que coincida con una palabra clave o con otro identificador dentro del mismo ámbito.
Programación Orientada a Objetos – DCIC UNS – 2002
166
< defOperacion > ::= < defConsulta > | < defComando > |
< defConstructor >
< defConsulta > ::= [< propOperacion >] < tipo >
< nombreOp > ( < listaParamForm > )
[< excepciones >]< cuerpoOp >
< defComando > ::= [< propOperacion >] void
< nombreOp > ( < listaParamForm > )
[< excepciones >] < cuerpoOp >
Programación Orientada a Objetos – DCIC UNS – 2002
168
Sintaxis
Para la definición de un constructor, el nombre de la operación debe coincidir con el
nombre de la clase. Los nombres de todas las operaciones (consultas, comandos y constructores) pueden estar sobrecargados, variando de acuerdo a la cantidad y el tipo de los
parámetros.
Sintaxis
JAVA define los siguientes tipos simples:
• para números enteros: byte, short, int, long de acuerdo a la cantidad de bits que
se usan para su representación (de 8 a 64), en dos complemento.
• para números reales: float, double de acuerdo a la cantidad de bits que se usan
para su representación (32 y 64). Cumplen con el estándar IEEE 754.
< defConstr > ::= [< propOperacion >]
< nombreOp > ( < listaParamForm > )
[< excepciones >] < cuerpoOp >
< listaParamForm > ::= < tipo >< nombre >
{ , < tipo >< nombre >}∗
Programación Orientada a Objetos – DCIC UNS – 2002
169
• otros: char para los caracteres Unicode, y boolean para los valores true y false.
Todas las operaciones sobre entidades de tipo simple siempre se entienden con semántica
por valor. Los valores de tipo entero se representan como secuencias de dı́gitos (por
default int); los de tipo real por notación decimal o cientı́fica (por default double); los
caracteres van entre comillas simples.
Programación Orientada a Objetos – DCIC UNS – 2002
Sintaxis
< cuerpoOp > ::= < bloque > | ;
< bloque > ::= { [< sentsBloque >] }
< sentsBloque > ::= < sentDeBloque > {< sentDeBloque >}∗
< sentDeBloque > ::= < defVarLocal > | < sentencia >
< defVarLocal > ::= < tipo >< nombreVar >
[< inicializacion >] ;
Programación Orientada a Objetos – DCIC UNS – 2002
170
171
Sintaxis
< sentencia > ::= < exprIndep > | < condicional > | < ciclo > |
< bloque > | < control > | < excepcion >
< exprIndep > ::= < expresion > ;
< expresion > ::= < termino > [< opBin >< expresion >] ;
< termino > ::= [< opPre >] < termino > [< opPos >] |
( < expresion > ) | < entidad >
< entidad > ::= < nombre > | this | super | null
Programación Orientada a Objetos – DCIC UNS – 2002
172
Sintaxis
Sintaxis
Operadores unarios posfijos (por orden de precedencia):
Las entidades que aparecen en las expresiones deben pertenecer al ámbito en las que se
referencian.
No todas las expresiones pueden figurar como sentencias independientes en JAVA. Las
permitidas son las asignaciones, la invocación de mensajes, la invocación a un constructor
y las operaciones de autodecremento anterior y posterior.
Se enumeran a continuación los operadores más usados, junto con su precedencia.
Observar que la invocación a mensajes y constructores, y el acceso a arreglos también es
una expresión en JAVA.
“[< expresion >]”
acceso a arreglos
“(< listaParAct >)” parámetros actuales de un mensaje
“++” “−−”
aditivos (resultado previo)
Operadores unarios prefijos (por orden de precedencia):
“++” “−−”
aditivos (resultado posterior)
“new” “(< tipo >)”
constructor y “casting”
“!”
negación lógica
“+” “−”
signo
Los objetos a los que se aplican los operadores deben respetar los tipos correspondientes.
Programación Orientada a Objetos – DCIC UNS – 2002
173
Programación Orientada a Objetos – DCIC UNS – 2002
Sintaxis
175
Sintaxis
Operadores binarios (por orden de precedencia):
“.”
envı́o de mensajes o acceso
“∗” “/” “%”
multiplicativos
“+” “−”
aditivos
“>” “<” “>=” “<=”
relacionales
“==” “! =”
identidad
“&&”
AND lógico
“||”
OR lógico
“=” “+ =” “− =” “∗ =” “/ =” “% =”
asignación
Los operadores en el mismo renglón tienen igual precedencia, y se evalúan de izquierda
a derecha, excepto los de asignación que se evalúan de derecha a izquierda.
Programación Orientada a Objetos – DCIC UNS – 2002
174
< condicional > ::= < condicSimple > | < condicMult >
< condicSimple > ::= if (< expresion >)< sentencia >
{ else if (< expresion > )
< sentencia >}∗
[ else < sentencia >]
El problema de los else pendientes se resuelve asociando siempre el else al condicional
más interno.
Programación Orientada a Objetos – DCIC UNS – 2002
176
Sintaxis
< condicMult > ::= switch ( < expresion > ) < bloqueSw >
< bloqueSw > ::= { [< grupoSentSw >] }
< grupoSentSw > ::= < sentEnSwitch > {< sentEnSwitch >}∗
< sentEnSwitch > ::= < etiquetas >< sentsBloque >
< etiqs > ::= < etiqSwitch > {< etiqSwitch >}∗
< etiqSwitch > ::= case < exprConstante > : | default :
Programación Orientada a Objetos – DCIC UNS – 2002
177
Sintaxis
< control > ::= < sentEtiq > | < sentBreak > | < sentCont > |
< retorno > | < sentVacia >
< sentEtiq > ::= < etiqueta > : < sentencia >
< sentBreak > ::= break [< etiqueta >] ;
< sentCont > ::= continue [< etiqueta >] ;
< retorno > ::= return [< expresion >] ;
< sentVacia > ::= ;
Programación Orientada a Objetos – DCIC UNS – 2002
Sintaxis
179
Sintaxis
Arreglos en JAVA
< ciclo > ::= < cicloFor > | < cicloWhile > |
< cicloDo >
< cicloFor > ::= for (< defVarLocal > ;
< expresion > ; < sentencia > )
< sentencia >
< cicloWhile > ::= while (< expresion >)< sentencia >
• los arreglos en JAVA, como todo otro objeto, se manejan a través de una semántica
por referencia, pero su sintaxis es diferente.
• la sintaxis de la declaración de una entidad de tipo arreglo hace mención al tipo de
los componentes:
< tipo > ::= < nombreClase > | < tipo >[] | < simple >
< simple > ::= byte | short | int | long |
float | double | char | boolean
< cicloDo > ::= do < sentencia >
while ( < expresion > );
• declarar una entidad de tipo A[] significa que puede referenciar a arreglos de objetos
de tipo A, no importando la cantidad de elementos.
Programación Orientada a Objetos – DCIC UNS – 2002
178
Programación Orientada a Objetos – DCIC UNS – 2002
180
Sintaxis
Sintaxis
Cadenas en JAVA
• la construcción de un objeto de tipo arreglo se hace indicando la cantidad máxima de
elementos que ese objeto tendrá:
Punto2D[] a;
a = new Punto2D[20];
• las cadenas en JAVA, como todo otro objeto, se manejan a través de una semántica por
referencia. Son objetos instancias de la clase String que una vez creados no cambian
su estado. Para introducir y eliminar caracteres sobre un mismo objeto se debe usar
la clase StringBuffer.
• los literales de tipo cadena se notan entre comillas dobles.
• la entidad a luego puede referenciar a cualquier otro arreglo de tipo A[], aunque tengan
más o menos elementos
Punto2D[] b;
b = new Punto2D[50];
a = b;
//a apunta ahora a un arreglo de 50 elementos
• la concatenación puede notarse con el operador binario +, y tiene la semántica de un
constructor (se crea una nueva cadena resultado de las concatenación de los operandos).
• las consultas más comunes son: lenght():integer para saber su longitud, charAt(i:integer)
:char para extraer un caracter en una posición (empezando en 0), equals(s:String)
:boolean para comparar dos cadenas por valor, y compareTo(s:String):integer que
compara dos cadenas lexicográficamente.
Programación Orientada a Objetos – DCIC UNS – 2002
181
Programación Orientada a Objetos – DCIC UNS – 2002
Sintaxis
183
Sintaxis
Aplicaciones
• la inicialización de un objeto arreglo no significa la inicialización de sus elementos,
salvo que éstos sean valores.
• las aplicaciones en JAVA se distinguen porque la clase raı́z tiene la forma:
class Raiz {
...
public static void main (String[] args)
{. . . }
...
• el acceso y modificación de un elemento de un arreglo se hace siguiente la notación
usual:
a[2] = new Punto2D(3.0, −4.5);
double distancia = a[2].distancia(a[3]);
• el primer elemento de un arreglo siempre tiene ı́ndice 0; por lo tanto, en el ejemplo
anterior se tendrı́an los elementos a[0] . . . a[19].
Programación Orientada a Objetos – DCIC UNS – 2002
182
}
• esta operación main es la que comienza la ejecución del sistema.
Programación Orientada a Objetos – DCIC UNS – 2002
184
Sintaxis
Sintaxis
Applets
• los applets en JAVA se distinguen sintácticamente porque la clase raı́z tiene las siguientes caracterı́sticas:
– la clase raı́z hereda de la clase Applet
• la JVM residente en el browser es la encargada de mandar automáticamente estos
comandos al applet, de acuerdo al estado de la ventana que visualiza la página web
correspondiente.
• el ciclo de vida está determinado entonces por el siguiente diagrama:
– la clase raı́z tiene cuatro comandos: init(), start(), stop() y destroy().
• estos comandos son ejecutados cuando el applet es cargado a través de una página
web, cuando comienza la ejecución, cuando se suspende la ejecución, y cuando termina
la ejecución.
Programación Orientada a Objetos – DCIC UNS – 2002
185
Programación Orientada a Objetos – DCIC UNS – 2002
187
Sintaxis
• los applets en JAVA tienen entonces la siguiente forma:
class Raiz extends Applet {
...
public
public
public
public
...
void
void
void
void
init () {. . . }
start () {. . . }
stop () {. . . }
destroy () {. . . }
}
Programación Orientada a Objetos – DCIC UNS – 2002
186