Fundamentos de Programación Definición de Clases 29.9.2009 José A. Mañas Dpto. de Ingeniería de Sistemas Telemáticos
Views 64 Downloads 7 File size 96KB
Fundamentos de Programación
Definición de Clases
29.9.2009
José A. Mañas Dpto. de Ingeniería de Sistemas Telemáticos http://www.dit.upm.es/~pepe/doc/fprg/
bibliografía capítulo 2 definición de clases David J. Barnes & Michael Kölling Objects First with Java A Practical Introduction using BlueJ, 4th ed Prentice Hall / Pearson Education, 2008 http://www.bluej.org/ Existe versión en español: "Programacion orientada objetos con Java" 29.9.2009
2 / 27
MaquinaBilletes.java Campos Constructor Métodos
public class MaquinaBilletes { private int precio; MaquinaBilletes(int coste) { ... } public int getPrecio() { ... } public void inserta(int cantidad) { ... } }
29.9.2009
3 / 27
campos Guardan el estado del objeto
// El precio de un tiquet. private int precio; // Dinero introducido en esta venta. private int saldo; // Dinero acumulado en la máquina. private int total; 29.9.2009
4 / 27
cambio de estado inserta(20)
29.9.2009
5 / 27
constructores Sirven para crear objetos inicializan el estado
Parecen métodos; pero ... se llaman igual que la clase no devuelven nada MaquinaBilletes(int coste) { precio = coste; saldo = 0; total = 0; } 29.9.2009
6 / 27
construcción de 1 objeto new MaquinaBilletes(12)
29.9.2009
7 / 27
objetos nuevos El constructor debe asignar un valor a cada campo ... si no lo asigna, se pone a ‘cero’ enteros: 0 reales: 0.0 boolean: false otros: null
29.9.2009
8 / 27
asignación ... o como meter un valor en un campo ... precio = coste ;
en el lado izquierdo aparece el nombre del campo en el lado derecho aparece el valor en el lado derecho puede aparecer una expresión saldo = saldo + cantidad; saldo = saldo – precio;
29.9.2009
9 / 27
métodos de acceso familiarmente conocidos como ‘getters’ si hay un campo X de tipo T public T getX() { return x; }
si hay un campo X de tipo boolean public boolean isX() { return x; }
29.9.2009
10 / 27
métodos de modificación familiarmente conocidos como ‘setters’ si hay un campo X de tipo T public void setX(T v) { x = v; }
si hay un campo X de tipo boolean public void setX(boolean v) { x = v; }
29.9.2009
11 / 27
impresión Escribe en pantalla System.out.print(texto); System.out.println(texto);
+ = concatena
public void imprime() { System.out.println("#####################"); System.out.println("# Billete"); System.out.println("# Madrid - VillaBella"); System.out.println("# " + precio + " euros."); System.out.println("#####################"); System.out.println(); total = total + saldo; saldo = 0; 29.9.2009
}
12 / 27
mejoras La clase que hemos visto es un poco pobre no no no no
verifica que el precio sea razonable controla que se inserten cantidades negativas controla que se ha metido suficiente dinero devuelve el cambio
MaquinaBilletes MaquinaBilletes2
29.9.2009
13 / 27
ejecución condicional if (expresión_booleana) { haz_esto ; } if (expresión_booleana) { haz_esto ; } else { haz_lo_otro ; } public void inserta(int cantidad) { if (cantidad > 0) saldo = saldo + cantidad; else System.out.println("solo cantidades positivas"); 29.9.2009 14 / 27 }
ejecución condicional
true
condición
nota= examenJunio(); if (nota < 5.0) { nota= examenSeptiembre(); }
false
bloque
Las llaves son opcionales si sólo hay una sentencia El sangrado no significa nada
29.9.2009
15 / 27
Errores típicos if (condicion) sentencia1; sentencia2; sentencia3;
if (condicion) ; sentencia;
Regla: En caso de duda o ambigüedad, ponga llaves. 29.9.2009
16 / 27
Ejecución condicional
true
condición false
bloque 2
29.9.2009
String saludo; if (hora < 14) { saludo= “buenos días”; } else { saludo= “buenas tardes”; }
bloque 1
17 / 27
Ambigüedad if (a) if (b) S1; else S2;
significa if (a) { if (b) S1; else S2; }
error típico if (a) if (b) S1; else S2; 29.9.2009
18 / 27
variables Son contenedores de valores Gráficamente son cajas con un cierto nombre: fijo de un cierto tipo: fijo con un cierto valor: variable
29.9.2009
19 / 27
variables Tipadas sólo admiten valores de un cierto tipo
El valor puede cambiar mediante sentencias de asignación variable = expresión ;
Programa: serie planificada de sentencias de asignación que llevan a las variables desde el valor inicial (datos del problema) al valor final (solución del problema)
29.9.2009
20 / 27
sentencias de asignación variable = expresión ; Parte izquierda una variable en la que cargamos el valor de la expresión
Parte derecha una expresión cuyo valor se evalúa si aparece una variable, se toma su valor
x = x + 1 ; 29.9.2009
no es una ecuación; es la asignación de un nuevo valor 21 / 27
hay variables ... ... de objeto campos
... de método parámetros variables locales ... de clase static
e invariables
las veremos más adelante
finales constantes
29.9.2009
22 / 27
variables de objeto “Nacen” con la creación del objeto “Se ven” dentro del objeto Se declaran en la class Las pueden usar los métodos del objeto Las pueden usar los demás nombre_del_objeto . campo ... salvo que sean private
Cada objeto tiene las suyas 29.9.2009
23 / 27
campos private Regla todos los campos deben ser private
¿Por qué? para que todos los accesos estén controlados por medio de métodos si un día queremos cambiar los campos (por ejemplo, para acelerar la ejecución) bastará ajustar los métodos
29.9.2009
24 / 27
variables locales Parámetros se declaran en la cabecera “nacen” cuando se invoca el método “se ven” dentro del método desaparecen con el método
Variables locales “nacen” cuando se declaran en el cuerpo “se ven” dentro, desde que se declaran desaparecen con el método
29.9.2009
25 / 27
variables locales Cada vez que se llama al método se repite el ciclo creación modificaciones destrucción class Punto { private double x, y; double distancia (double x2, double y2) { double dx= x2 – getX(); double dy= y2 – getY(); return Math.sqrt(dx*dx + dy*dy); } } 29.9.2009
26 / 27
resumen Conceptos que hemos visto campos constructores inicialización
métodos: getters & setters ejecución condicional variables
asignación variables locales ámbito de visibilidad ámbito de existencia
expresiones expresiones booleanas
System.out.println( texto ); 29.9.2009
27 / 27