Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2
Concepto de sentencia y estructura de control El cuerpo de los métodos de una clase está formado por una serie de unidades elementales: sentencias. La sentencia más sencilla es una expresión. Existen sentencias más complejas: las estructuras de control. Sirven para romper el orden lineal de ejecución de las expresiones.
Conceptos auxiliares Un bloque está formado por un conjunto de sentencias entre llaves (caracteres { }). Dentro de un bloque puede haber declaraciones cuyo ámbito se extiende hasta el final del bloque. Se entiende por ámbito de una variable la parte del código donde existe y puede ser usada. Un bloque también es una sentencia.
Sentencia de control if-else (I) Evalúa una condición y según sea cierta o falsa ejecuta un bloque de sentencias determinado. if (condición) { sentencia-1;... sentencia-n; } else { sentencia-n+1;... sentencia-m; }
Sentencia de control if-else (II) Cierto condición Falso sentencia-1 sentencia-2... sentencia-n sentencia-n+1 sentencia-n+2... sentencia-m
Ejemplo de uso /* Método que calcula el mínimo de dos enteros. */ public static Integer minimo(integer a, Integer b){ Integer r; if(a<=b){ r = a; }else{ r = b; } return r; }
Sentencia de control switch (I) Se utiliza para comparar una variable discreta con una serie de valores diferentes. Se indican los posibles valores que puede tomar la variable y las sentencias que se tienen que ejecutar si la variable coincide con alguno de dichos valores. Es una sentencia muy indicada para comparar una variable de un tipo enumerado con cada uno de sus posibles valores.
Sentencia de control switch (II) Se ejecutan las sentencias del case cuyo valor es igual al de la variable. Si el valor de la variable no coincide con ningún valor, entonces se ejecutan las sentencias definidas en default. Muy importante el uso de break si se quiere seleccionar sólo una opción. switch ( variable ){ case valor1: sentencias; break; case valor2: sentencias; break;... case valorn: sentencias; break; default: sentencias; }
Otras consideraciones Cualquier estructura selectiva (estructura switch) se puede simular con múltiples if-else anidados. Seleccionar switch si la legibilidad de los anidamientos if-else es reducida. En una estructura if-else, la cláusula else es opcional: En ese caso, si la condición es true, se ejecuta la siguiente línea de código del bloque if. Cuando termina el bloque if o si la condición evaluó false, se ejecuta la siguiente línea de código del bloque principal.
Ejercicios En este ejercicio vamos a desarrollar métodos estáticos dentro de una clase de nombre Enteros. La clase Enteros no contará ni con atributos, ni con métodos constructores debido a que es una clase de utilidades. Añada a la clase Enteros los métodos estáticos: public static Boolean estaenintervalocerrado(integer a, Integer b, Integer x) devuelve true si x está en el intervalo cerrado [a,b] public static Boolean estaenintervaloabierto(integer a, Integer b, Integer x) devuelve true si x está en el intervalo abierto (a, b) Añada al método main de TestEnteros el código necesario para probar los métodos, mostrando el resultado por pantalla.
Práctica 3 Estructura y funcionamiento de un programa Java: Repaso Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2
Nociones generales Tipo: conjunto de valores que una entidad puede tomar y las operaciones que podemos hacer con esos valores. Objeto: entidad básica en los LPOO encargada de modelar una parte de la realidad en un sistema informático. Interfaz: contrato sintáctico para un tipo de objeto. Clase: elemento que define los detalles de un tipo objeto (estado interno, propiedades, ) En algunos casos, se usa como contenedor para un conjunto de métodos de utilidades (métodos estáticos). Un programa en Java está formado por un conjunto de declaraciones de tipos enumerados, interfaces y clases.
Modos de un programa Java Modo compilación Permite escribir nuevas clases e interfaces. El entorno detecta si las expresiones que escribimos están bien formadas (compilador). Si el entorno no detecta errores entonces el programa ha compilado bien y está listo para ser ejecutado. Modo ejecución Permite obtener los resultados de un programa que hemos escrito previamente. Debe haber compilado con éxito previamente. En el modo de ejecución pueden aparecer nuevos errores.
Pasos para definir un programa Java 1. Identificar los objetos involucrados para solucionar un problema. 2. Definir las interfaces de cada tipo de objeto. 3. Definir las clases que implementan las interfaces. 4. Definir una clase con un método principal que solucione el problema usando las clases e interfaces previamente definidas.
Definición de una interfaz Establece cuáles son las propiedades de un objeto de un determinado tipo y qué se puede hacer con él. No se preocupa de saber cómo se hace. Formalmente una interfaz (interface) contiene las signaturas de los métodos. public interface Punto { Double getx(); Double gety(); void setx(double x1); void sety(double y1); }
Definición de una clase (I) Una clase es una entidad del lenguaje de programación que permite: Definir los detalles del estado interno de un objeto (mediante los atributos). Definir la manera de calcular las propiedades de los objetos a partir del estado interno. Describir las funcionalidades ofrecidas por los objetos (a través de los métodos).
Definición de una clase (II) public class PuntoImpl implements Punto { private Double x; private Double y; public PuntoImpl (Double x1, Double y1) { x=x1; y=y1;} public PuntoImpl(){ x=0.; y=0.;} public Double getx() { return x; } public Double gety() { return y; } public void setx(double x1) { x=x1; } public void sety(double y1) { y=y1; } public String tostring() { String s="("+getx()+","+ gety()+")"; return s; } }
Ejecutando un programa Java Un programa Java empieza a funcionar por una clase concreta que contenga un método main. package test; public class TestPunto extends Test{ public static void main(string[ ] args) { Punto p= new PuntoImpl(2.0,3.0); mostrar("punto:", p); p.setx(3.0); mostrar("punto:", p); p.sety(2.0); mostrar("punto:", p); } }