58

Herencia Amparo L´ opez Gaona Septiembre de 2008 Amparo L´ opez Gaona () Herencia Septiembre de 2008 1 / 58 Introducci´on Las clases no existen

17 downloads 314 Views 476KB Size

Recommend Stories


58 ( )
OFICINA ESPAÑOLA DE PATENTES Y MARCAS 19 ESPAÑA Número de publicación: 21 Número de solicitud: 201350007 51 Int. CI.: G01N 33/58 Fecha de pre

58
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

:58:32
56 M AYO 2 0 1 3 RW 056-062 Hipopresivos.indd 56 24/04/2013 19:58:32 METIENDO TRIPA EJERCICIOS HIPOPRESIVOS PARA CORREDORAS QUE LOS EJERCICIOS H

Story Transcript

Herencia Amparo L´ opez Gaona

Septiembre de 2008

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

1 / 58

Introducci´on Las clases no existen en el vac´ıo, normalmente se relacionan unas con otras. Relaci´on de uso. Relaci´on de agregaci´on/contenci´ on. Relaci´on de herencia. Se garantiza que objetos de una clase pueden usar objetos de otra clase respetando una funcionalidad existente. Desde el punto de vista de extensibilidad es deseable poder modificar o adaptar clases existentes a nuevas necesidades, sin violar el encapsulamiento.

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

2 / 58

Ampliaci´on mediante herencia Hacer un programa para el mantenimiento de cuentas bancarias: cuentas de d´ebito, cuentas con pago autom´atico de servicios y cuentas de cr´edito. Con todas se permite retirar dinero, depositar dinero y conocer el saldo de la misma. Las cuentas con pago de servicio adem´as permiten el pago autom´atico del tel´efono y las cuentas de cr´edito permiten comprar a cr´edito y consultar este cr´edito.

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

3 / 58

Ampliaci´on mediante herencia Hacer un programa para el mantenimiento de cuentas bancarias: cuentas de d´ebito, cuentas con pago autom´atico de servicios y cuentas de cr´edito. Con todas se permite retirar dinero, depositar dinero y conocer el saldo de la misma. Las cuentas con pago de servicio adem´as permiten el pago autom´atico del tel´efono y las cuentas de cr´edito permiten comprar a cr´edito y consultar este cr´edito. 1 Encontrar los objetos principales. cuenta bancaria, cuenta de d´ebito, cuenta con pago y cuenta de cr´edito 2 Determinar el comportamiento deseado para cada objeto. Cuenta bancaria: Crear una cuenta. Retirar dinero. Depositar dinero. Consultar saldo.

Amparo L´ opez Gaona ()

CtaPago: Crear una cuenta. Retirar dinero. Depositar dinero. Consultar saldo. Pagar servicio. Herencia

CtaCr´ edito: Crear una cuenta. Retirar dinero. Depositar dinero. Consultar saldo. Consultar cr´edito. Comprar a cr´edito. Septiembre de 2008

3 / 58

... Ampliaci´on mediante herencia Se sabe de la existencia de la clase Cuenta: public class Cuenta { private double saldo; public public public public

Cuenta(double montoInicial) { ... } void retirar(double monto) { ... } void depositar(double monto) { ... } double darSaldo() { ... }

}

Para resolver este problema existen al menos tres posibilidades:

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

5 / 58

... Ampliaci´on mediante herencia Se sabe de la existencia de la clase Cuenta: public class Cuenta { private double saldo; public public public public

Cuenta(double montoInicial) { ... } void retirar(double monto) { ... } void depositar(double monto) { ... } double darSaldo() { ... }

}

Para resolver este problema existen al menos tres posibilidades: 1

Modificar la clase Cuenta agregando los m´etodos requeridos.

2

Copiar el c´odigo de Cuenta en el programa para el pago de servicios y hacer el cambio necesario.

3

Usar el mecanismo de herencia. Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

5 / 58

... Ampliaci´on mediante herencia La herencia permite definir una nueva clase Cn a partir de una clase existente C . En la clase Cn se definen s´ olo los atributos y los m´etodos que difieren de los existentes en la clase C y autom´aticamente se incluyen los m´etodos y atributos de C . La clase Cn se denomina subclase o clase derivada y la clase C se conoce como superclase, clase base o clase padre. public class CuentaConServicios extends Cuenta { /** M’etodo para pagar el tel’efono ... * @param numTel - N’umero telef’onico a donde se har’a el pago * @param monto - Cantidad que debe pagarse */ public void pagarTelefono(String numTel, double monto) { retirar(monto); ... // C’odigo para pagar el tel’efono saldo += 100.00; } Herencia Septiembre de 2008 7 / 58 } Amparo L´opez Gaona ()

... Ampliaci´on mediante herencia Un objeto de la clase derivada tiene todos los componentes de la clase base de la cual hereda m´as los definidos en esta misma clase, como se muestra en la siguiente tabla. Clase: Estructura: Comportamiento:

Amparo L´ opez Gaona ()

Cuenta saldo numCuenta retirar depositar darSaldo

Herencia

CuentaConServicios saldo numCuenta retirar depositar darSaldo pagarTel´efono

Septiembre de 2008

8 / 58

Control de acceso Inv´alido modificar la variable saldo de la clase Cuenta. Si se quiere tener elementos privados para todas las clases excepto para las clases derivadas, es necesario que se declaren utilizando la palabra reservada protected.

Clase A

private

Clase B

public

Clase A1

Clase A2 protected

public class Cuenta { protected double saldo; ... } //depositar(100.00); Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

10 / 58

Constructores El constructor de la clase base proporciona el estado inicial para la parte heredada. Se llama cuando se crea el objeto de la clase derivada. El constructor de la clase derivada maneja la parte agregada por ´esta. El constructor de una clase derivada incluye la llamada (super) a uno de los constructores de la clase base que se ejecutar´a antes que el cuerpo del constructor de la clase derivada. public CuentaConServicios (double montoInicial) { super(montoInicial); }

En este caso el constructor de la subclase no a˜ nade nada al constructor de la superclase, pero puede hacerlo. En una jerarqu´ıa de herencia, la creaci´ on de un objeto de una clase derivada puede causar una serie de llamadas a constructores en la jerarqu´ıa. Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

12 / 58

... Constructores class Base { private int x, y; public Base(int a) { x = a; y = 1000;} public Base(int a, int b) { x = a; y = b;}; public void pintaB() {System.out.println(x+ " " + y);} } class Derivada extends Base{ private int z; public Derivada (int n) { z = n;} public void pintaD() {System.out.println(z);} } public class UsoHer{ public static void main(String x[]) { Base unB = new Base(1,2); Derivada unD = new Derivada(4); unB.pintaB(); unD.pintaD(); }} Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

14 / 58

Uso de clases derivadas

public class UsaCuenta { public static void main(String[] pps) { ... // Declaraciones necesarias // Solicita y valida capital inicial cuenta=new CuentaConServicios(capital); // Crea la cuenta do { ... //Muestra menu de opciones y pide seleccionar alguna switch(opcion) { case ’1’: //Retiro System.out.println("?‘Cuanto dinero quieres retirar?"); capital=io.readDouble(); cuenta.retirar(capital); break; case ’2’: //Deposito System.out.println("?‘Que cantidad deseas depositar?"); capital=io.readDouble(); cuenta.depositar(capital); break; case ’3’: // Saldo System.out.println("Tu saldo es de:$" + cuenta.obtenerSaldo()); break; case ’4’: // $Pago de telefono System.out.println("?‘Cuanto dinero vas a pagar?"); capital=io.readDouble(); cuenta.pagarTelefono(capital); System.out.println("Telefono pagado, gracias"); break; case ’9’: //Fin del programa System.out.println("*** Hasta pronto. ***"); otra = false; break; default: Amparo L´ opez Gaona () Herencia \unhbox \voidb@x \bgroupSeptiembre de 2008 16 \setbo / 58 System.out.println("Opci\penalty \@M \hskip \z@skip \let \unhbox \voidb@x

Especializaci´on mediante herencia Clase: Estructura:

Cuenta saldo numCuenta

Comportamiento:

retirar depositar darSaldo

Amparo L´ opez Gaona ()

Herencia

CuentaDeCr´ edito saldo numCuenta l´ımite deuda retirar depositar darSaldo comprar obtenerValorDeuda

Septiembre de 2008

17 / 58

Especializaci´on mediante herencia public class CuentaDeCredito extends Cuenta { private double limite; // Limite de credito private double deuda; // Monto de la deuda public CuentaDeCredito (double credito) {

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

19 / 58

Especializaci´on mediante herencia public class CuentaDeCredito extends Cuenta { private double limite; // Limite de credito private double deuda; // Monto de la deuda public CuentaDeCredito (double credito) { super (credito); limite = credito; deuda = 0; } public double obtenerValorDeuda() { return deuda; } public boolean comprar(double monto) { if (monto > 0.0 && monto < saldo ) { deuda += monto; retirar (monto); // saldo -= monto; return true; Amparo L´ opez Gaona () Herencia Septiembre de 2008 } else {

19 / 58

Especializaci´on mediante herencia public void retirar (double monto) {

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

21 / 58

Especializaci´on mediante herencia public void retirar (double monto) { if (monto >0.0 && monto 0) { saldo += monto; }}

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

39 / 58

Manejo de errores public void depositar(double monto) { if (monto > 0) { saldo += monto; }}

public void depositar(double monto) { if (monto > 0) { saldo += monto; } else { System.out.println("No es posible depositar "+ monto + " pesos." }}

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

39 / 58

Manejo de errores public void depositar(double monto) { if (monto > 0) { saldo += monto; }}

public void depositar(double monto) { if (monto > 0) { saldo += monto; } else { System.out.println("No es posible depositar "+ monto + " pesos." }} public boolean depositar(double monto) { if (monto > 0) { saldo += monto; return true; } System.out.println("No es posible depositar "+ monto + " pesos.") return false; Herencia Septiembre de 2008 39 / 58 } Amparo L´opez Gaona ()

... Manejo de errores Una excepci´ on (exceptional event) es un evento que ocurre en cualquier momento de ejecuci´ on de un programa y que modifica el flujo normal de este. Son objetos de la clase Exception que almacenan informaci´on que se regresa en caso de que ocurra una anormalidad. Una excepci´on es “disparada” o activada para indicar que ocurri´o una falla durante la ejecuci´ on de un m´etodo. La excepci´on se propaga hasta encontrar un m´etodo que la “atrape” en el cual se indica qu´e se debe hacer en circunstancias an´omalas. Por ejemplo, imprimir un mensaje de error y no hacer nada m´as, terminar el programa (con o sin mensaje de error), realizar la tarea de cualquier forma, pedir la correcci´ on de manera interactiva, etc´etera.

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

40 / 58

Jerarqu´ıa de excepciones La clase Exception del paquete java.lang es descendiente de la clase Object. Object

Throwable

Exception ClassNotFoundException IllegalAccessException NoSuchMethodException NoSuchFieldException RuntimeException IllegalArgumentException IndexOutOfBoundsException ArithmeticException ArrayStoreException ClassCastException NegativeArraySizeException NullPointerException IllegalStateException Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

41 / 58

Estados de una excepci´on Las excepciones pasan por un conjunto de estados: Disparo de una excepci´ on: Se crea un objeto Exception y el control pasa al sistema de ejecuci´ on. Principales ventajas de esta forma de tratar con errores o casos excepcionales es que para el usuario resulta imposible ignorarlos. Atrapado una excepci´ on: Encontrar un m´etodo que responda a la excepci´on. Finalizar: Si no se encuentra m´etodo se termina la ejecuci´on del programa. En caso contrario se recupera de la excepci´on.

Amparo L´ opez Gaona ()

Herencia

Septiembre de 2008

42 / 58

Disparo de excepciones Disparar una excepci´on es la forma m´as efectiva para indicar que no es posible atender la petici´on del objeto que env´ıa el mensaje. public void depositar(double monto) throws Exception { if (monto < 0) { throw Exception("Deposito incorrecto"); } saldo += monto; }

public double retirar(double monto) throws Exception { if (monto

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.