parte_24.txt
Document Details

Uploaded by AutonomousHeliotrope
Full Transcript
Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 11 • No pueden empezar por un número. • No pueden ser una palabra reservada del lenguaje ni los símbolos de los operadores. • No se admiten espacios en blanco. Java distingue entre mayúsculas y m...
Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 11 • No pueden empezar por un número. • No pueden ser una palabra reservada del lenguaje ni los símbolos de los operadores. • No se admiten espacios en blanco. Java distingue entre mayúsculas y minúsculas en el nombre de las variables. La visibilidad o ámbito de una variable es la parte del programa donde dicha variable puede ser usada. En Java podemos distinguir los siguientes ám bitos: • Local: se declaran dentro de un método y son visibl es únicamente dentro de éste. • Atributos: son las características de una clase y s u ámbito está limitado al objeto pero pueden definirse de manera que su comportamiento re specto al ámbito se vea modificado (ver punto 3.3.5.2). • Parámetros: son las variables que se pasan a un mét odo. Se declaran en la cabecera del método. La visibilidad es el método en el que están definidas. 2.2.3. Operadores Los operadores en Java son muy similares a los de C ++. Pueden clasificarse en los siguientes tipos: • Asignación: permite asignar un valor a una variable (=). x = 34; • Aritméticos: realizan las operaciones habituales de suma (+), resta (-), multiplicación (), división (/) y resto de la división (%). y = x 4; Se pueden utilizar junto con el operador de asignac ión: +=, -=. =, /= y %= x = 4; // x = x * 4; • Unarios: se utilizan para mantener cambiar el signo de una variable: + (mantener) y - (cambiar). y = -x; // y = x * (-1); • instanceof: permite conocer si un objeto es de una clase. b = x instanceof String; Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 12 TEMARIO OPOSICIONES COIICV | TEMA 29 • Condicional ?: funciona igual que en C++. Permite a signar valores condicionalmente. x = 1; y = 2; z = (x>y) ? 10 : 20; // z = 20 • Incrementales: Incrementan (++) o decrementan (–) el valor de la variable a la que preceden o siguen. x++; // x = x + 1; • Relacionales: Se utilizan para realizar comparacion es entre valores de las variables. Mayor que (>), mayor o igual que (>=), menor que (<), men or o igual que (<=), igual (==) y distinto (!=). Se suelen emplear en las sentencias de control (ver punto 3.3.4). if ( x >= 10 ) y = 20; • Lógicos: AND (&&), OR (||), negación (!). if ( a >= 10 && y >= 20) z = 30; • De bit: actúan a nivel de bits. Desplazamiento a la derecha (>>), desplazamiento a la izquierda (<<), desplazamiento a la derecha sin sig no (>>>), AND a nivel de bits (&), OR a nivel de bits (|), XOR a nivel de bits (^), complem ento a nivel de bits (~). x = 12; y = x >> 2; // y = 3; Al igual que los aritméticos se pueden usar junto c on el operador de asignación. x = 12; x >>= 2; // x = 3; La siguiente tabla muestra la precedencia de las op eraciones en Java (de mayor a menor): Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 13 Tabla III: Precedencia de operadores Postfijos [] . () Unarios ++ – - ~ ! Creación o conversión new (tipo) expr Multiplicación y división * / % Suma y resta + - Desplazamiento de bits << >> >>> Relacionales < > <= >= Igualdad y desigualdad == != AND a nivel de bits & XOR a nivel de bits ^ OR a nivel de bits | AND lógico && OR lógico || Condicional ? ? : Asignación = += -= /= %= ^= &= |= >>= <<= >>>= 2.2.4. Sentencias de control Las sentencias en Java deben terminar con un punto y coma (;) y se permite tener varias sentencias en la misma línea. En este aspecto es ig ual que en C++. Las sentencias de control se utilizan para modifica r el flujo lineal de los programas. Se pueden clasificar en dos tipos: bifurcaciones y bucle. 2.2.4.1. Bifurcaciones Permiten ejecutar (o no ejecutar) un conjunto de se ntencias en función del valor de una expresión lógica o relacional. • if … else: Con esta sentencia se selecciona un conj unto de instrucciones a ejecutar. if ( expresión ) { sentencias_A; } else { sentencias_B; } Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 14 TEMARIO OPOSICIONES COIICV | TEMA 29 Si el valor de la expresión se evalúa como verdadero ( true) se ejecuta el conjunto de sentencias_A , si se evalúa como falso ( false) se ejecuta el conjunto de sentencias_B . Este tipo de bifurcaciones pueden anidarse y concat enarse. // Anidamiento if ( expresión_1) { if ( expresión_2 ) { … } } // Concatenación if ( expresión_1 ) { … } else if ( expresión_2 ) { … } else { … } • switch: Es una variante de la bifurcación if … else if … else cuando se utiliza la misma expresión y se compara con distintos valor es. switch ( expresión ) { case valor_1: sentencias_A; break; case valor_2: sentencias_B; break; case valor_3: sentencias_C; break; Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 15 default: sentencias_D; } Cada sentencia case debe corresponderse con un valor concreto, no se p uede comparar con rangos ni expresiones relacionales. Si la expresión no coincide con ningún valor y exis te la sentencia default , se ejecutan las instrucciones correspondientes (en este ejemplo sentencias_D ), si no existe, no se ejecuta ninguna instrucción. La sentencia break hace que se salga del bloque switch. Si no existe para alguna de las sentencias case la ejecución continúa con las sentencias del sigui ente bloque case . 2.2.4.2. Bucles Se utilizan para ejecutar un conjunto de sentencias repetidas veces. • while: Las sentencias del bloque se ejecutan mientr as la expresión se evalúe a verdadero. while ( expresión ) { sentencias; } • for: En un bucle for, se indica el número de iterac iones que las sentencias deben ejecutarse. for ( inicialización; expresión; incremento) { sentencias; } Las sentencias de inicialización se ejecutan al inicio del bucle, antes de cada iteración se evalúa la expresión , si es verdadera se ejecutan las sentencias y si es falsa finaliza la ejecución del bucle. Las sentenci as de incremento se ejecutan después de las sentencias del bucle. • do … while: se asegura que las sentencias del bucle se ejecutan al menos una vez. do { sentencias; Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 16 TEMARIO OPOSICIONES COIICV | TEMA 29 } while ( expresión ); Las sentencias se vuelven a ejecutar mientras la ex presión se evalúe a verdadero. En los bucles también se puede utilizar la sentenci a break para salir de ellos. También se puede utilizar la sentencia continue para interrumpir la ejecución de una iteración, vo lver a evaluar la expresión y si corresponde, ejecutar las sentencias . 2.2.5. Programación orientada a objetos en Java En Java todo son objetos, por eso es fundamental te ner bien asentados los conceptos básicos de Programación Orientada a Objetos. Por ello vamos a hacer un pequeño repaso a los principales conceptos y características de la POO. • Clases y objetos: una clase es un tipo de dato que encapsula tanto las propiedades (atributos) como los métodos (acciones) que se pued en actuar sobre esas propiedades. Un objeto es una instancia concreta de ese tipo de dat o, es una variable. • Encapsulación: es la propiedad que tienen los objet os para ocultar sus atributos y/o métodos. En general, los atributos sólo deberían se r accesibles a través de los métodos. • Herencia: una clase puede ser definida a partir de otra, de manera que “herede” todos (o algunos) de sus atributos y métodos. La nueva clase , a su vez, puede definir nuevos atributos y métodos, y/o redefinir los heredados. • Polimorfismo: con esta característica se permite qu e dentro de una jerarquía de clases, un mismo método se comporte de distinta manera para ca da una de las clases. 2.2.5.1. Conceptos de Clase, Objeto e Interface Una clase es la definición de un tipo de dato donde se agrupan tanto los atributos (variables) que lo definen como los métodos (funciones) que actúan sob re dichos atributos. La definición de una clase se realiza: class NombreDeClase { // Definición de atributos y métodos … } Un objeto es una instancia concreta de una clase, u na variable del tipo de dato “clase”. Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 17 NombreDeClase nombreDeObjeto; Una interface solamente contiene la declaración de los métodos sin su implementación y en su caso de constantes. Son las clases que heredan de l a interface las que están obligadas a implementarlos. Al igual que las clases, en Java, u na interface puede heredar de otra, pero a diferencia de las clases, si que tienen herencia mú ltiple. interface NombreDeInterface { // Declaración de métodos y constantes … } 2.2.5.2. Variables miembro Las variables miembro de una clase son los atributo s o características de dicha clase. Cada objeto de una clase tiene una copia propia de todas las va riables miembro. Las variables miembro pueden ser de tipos primitivos o a su vez pueden ser objet os de otras clases. Las variables miembro pueden declararse con los mod ificadores public, private , protected y package para indicar su nivel de acceso. En la siguiente t abla se especifican los tipos de acceso. Tabla IV: Modificadores de acceso a miembros public Se puede acceder al miembro de la clase desd e cualquier parte del programa. private Sólo es accesible desde la propia clase. protected Se puede acceder desde la propia clase y las clases que heredan de ella. package Se puede acceder desde las clases incluidas en el mismo paquete. Se definen como cualquier variable: class Persona { public String nombre; protected int edad; private char sexo; … } Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 18 TEMARIO OPOSICIONES COIICV | TEMA 29 Las clases pueden tener variables propias de clase que son globales a todos los objetos de esa clase. Se definen con el modificador static y se suelen utilizar para definir constantes globa les para la clase (deben tener también el modificador final para que no se pueda cambiar su valor) o variables que tengan sentido a nivel de clase (por ejemplo un contador de objetos de dicha clase). class Persona { public static final int MAYORIA_EDAD = 18; public static long totalPersonas; public String nombre; protected int edad; private char sexo; … } 2.2.5.3. Métodos Los métodos son funciones definidas dentro de la cl ase y que actúan sobre las variables miembro. Se aplican siempre sobre el objeto que invoca a la función mediante el operador punto ( .). Este objeto es un argumento implícito y se accede a sus variable miembro directamente o con el operador this . class Persona { public boolean esMayorDeEdad() { if ( this.edad >= Persona.MAYORIA_EDAD ) return true; else return false; } } Persona p1 = new Persona(); if ( p1.esMayorDeEdad() ) Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 19 System.out.println(“Puede votar.”); else System.out.println(“No puede votar.”); Java permite que las subclases redefinan los método s heredados, es decir, que el método tendrá el mismo nombre y parámetros que el de la superclas e pero distinta funcionalidad. Del mismo modo que C++, también se permite la sobre carga de métodos, esto es, métodos que tiene el mismo nombre pero distintos parámetros de entrada y distinta funcionalidad. Los métodos pueden declararse con los modificadores public, private y protected para indicar su nivel de acceso. La visibilidad de estos modificadores en la misma que para las variables miembro (ver Tabla IV). Además de los modificadores de acceso, existen los siguientes modificadores en la declaración de métodos: • static : estos métodos se consideran pertenecientes a la c lase y, por tanto, no es necesario instanciar un objeto para utilizarlos. • abstract : este modificador implica que el método sólo tiene definida su declaración, no su implementación. Las clases que hereden estos mét odos están obligadas a implementarlos. Cuando una clase define este tipo d e métodos, la clase también debe definirse como abstract. • final : estos métodos no pueden ser redefinidos por las s ubclases. Unos métodos de especial importancia en la definici ón de clases son los constructores. Estos métodos son los que se ejecutan automáticamente cad a vez que se crea un objeto de la clase (cada vez que se invoca a new ). Realizan la reserva de memoria y la inicializaci ón de variables. Su nombre es el mismo que el de la clase y no tiene va lores de retorno. No pueden ser llamados por otros métodos, sólo por otros constructores o por m étodo static. Si no se define un constructor explícitamente, el compilador “crea” un constructor genérico que inicializa las variables miembro. 2.2.5.4. Paquetes Un paquete ( package ) es una agrupación de clases que normalmente tiene n una relación funcional, p. e. se puede definir un paquete geometría que contengas clases como Círculo , Triángulo , Cuadrado , etc. Para incluir una clase en un paquete, la sentencia del fichero donde se define la clase debe ser package seguida del nombre del paquete. Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 20 TEMARIO OPOSICIONES COIICV | TEMA 29 package es.ciencias.matematicas.geometria; El nombre de los paquetes suelen ser en minúsculas y contener varios segmentos unidos por puntos. Estos segmentos están relacionados con la j erarquía de los paquetes y contienen todas las clases relacionadas en el mismo directorio. CLASSPATH.class En el momento de invocar a una clase, se debería ut ilizar el nombre completo del paquete unido al de la clase. es.ciencias.matematicas.geometria.Circulo Para evitar la dificultad de usara estos nombre “la rgos” se pueden importar todas las clases de un paquete y utilizarlas con su nombre corto. import es.ciencias.matematicas.geometria.*; 2.2.5.5. Herencia Esta es una de las características principales de l a POO ya que permite una fácil reutilización de código. Con la herencia se puede construir una clase (subcl ase) a partir de otra clase existente (superclase) de manera que se heredan todos los atr ibutos y métodos (excepto las definidas con el modificador private ). Los métodos que se heredan pueden ser redefinido s (excepto los definidos con el atributo final ) de manera que se altere su funcionalidad para ada ptarla a la nueva clase y también se permite que los métodos de la superclase puedan ser llamados desde la subclase mediante la sentencia super . Puede decirse que una subclase amplia la funciona lidad de la superclase. class Empleado extends Persona { // De la clase Persona se heredan las variables mie mbro // nombre y edad que no hace falta definir. public long numeroEmpleado; protected String dni; private char sexo; // Vuelvo a definir sexo que no se hereda … } Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 21 Java permite varios niveles de herencia, pero no pe rmite la herencia múltiple (una subclase hereda de varias superclases). Para suplir esta carencia J ava implementa las Interfaces que veremos a continuación. 2.2.5.6. Interfaces Una interface es un conjunto de declaraciones de métodos sin su implementación, y, en su caso, también la definición de constantes. Todas la s clases que implemente una determinada interface están obligadas a implementar los métodos definido s en la misma. Una clase puede implementar (heredar) varias interfaces. interface Dibujable { public void dibujar (); } class Circulo { protected double x, y, r; … } class CirculoDibujable extends Circulo implemts Dib ujable { //Esta clase debe definir obligatoriamente el métod o dibujar() public void dibujar () { … } … } Las interfaces sólo admiten los modificadores public y package . Los métodos definidos en la interface son siempre public y abstract (este de manera implícita). Independientemente de la herencia entre clases, tam bién se permite la herencia entre interfaces, que esta si que puede ser múltiple. Para le herenci a de interfaces se utiliza la sentencia extends . Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 22 TEMARIO OPOSICIONES COIICV | TEMA 29 2.2.5.7. Paquetes java.langa y java.util Son los dos paquetes principales que incluye la API de Java. El primero contiene clases imprescindibles para Java y es importado por defect o. El segundo contiene clases diversas pero también muy útiles a la hora de programar. • java.lang: contiene las clases equivalente a los ti pos primitivos de datos y las clases String , StringBuffer , System y Math, entre otras. También incluye las interfaces Cloneable , Comparable e Iterable . • java.util: contiene clases importantes como ArrayList , Date, Formatter , Hashtable , Objects , Random , Stack , Timer, Vector; también incluye las interfaces Collection , Enumeration , Iterator y List. 2.2.6. Excepciones Java incorpora en el propio lenguaje mecanismo para el tratamiento de errores. Una excepción puede definirse como una anomalía o un funcionamien to no esperado durante la ejecución de un programa (división por cero, fichero no existe, tam año del array excedido, etc.). Las excepciones nos permiten gestionar estos errore s y recuperarnos en caso de un error no grave (p. e. volver a pedir el fichero en caso de que no exista) o finalizar el programa de forma ordenada en caso de un error fatal (p. e. división por cero) . La clase Exception es la que proporciona Java para el tratamiento de errores. El proceso de captura y tratamiento de errores es el siguiente: • Bloque try : en este bloque se incluyen todas las sentencias s usceptibles de producir el error que se quiere tratar. Si este error se produc e, la secuencia de ejecución del programa salta al bloque catch . • Bloque catch : aquí se define que hacer cuando se ha producido u n error en el bloque anterior. Se pueden incluir tantos bloques catch como sean necesarios, uno para cada tipo de error que se quiera tratar. Si en este bloque no se desea tratar el error y se quiere que sea tratado por el método llamador, se debe “relanzar” la excepción con la se ntencia throw. Para poder relanzar excepciones, estas se deben incluir en la definició n del método: void validaNumero(String strNumero) throws NumberFo rmatException { int numero = 0; try { Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019