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