Fundamentos de Programacion POO

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

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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