La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.

Presentaciones similares


Presentación del tema: ":: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación."— Transcripción de la presentación:

1 :: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación

2 Clases Abstractas Programación I Las clases abstractas se utilizan como superclases en situaciones de herencia, por eso son llamadas superclases abstractas. La finalidad de una clase abstracta es proveer una superclase apropiada de la cual otras clases puedan heredar una interfaz o una implementación.

3 Clases Abstractas Programación I Hacemos abstracta una clase declarándola con la palabra reservada abstract Para que una clase sea declarada abstracta debe contener al menos un método sin implementación relativa a la clase, esto es, un método sin código. Éstos son llamados métodos abstractos. La implementación de éstos métodos se realiza en las subclases.

4 Clases Abstractas Programación I Las clases abstractas pueden tener atributos, métodos concretos y constructores, además de métodos abstractos. Es recomendable declarar los atributos y métodos de estas clases protected o private en vez de public porque sólo podrán ser accedidos o invocados por las subclases de la clase abstracta.

5 Clases Abstractas Programación I public abstract class figura { protected double x; protected double y; public figura(double i, double j) { x = i; y = j; } public abstract void mostrar_area(); } public class triangulo extends figura { public void mostrar_area() { System.out.println(“Area de triangulo=”+(x*y*0.5)); } } public class rectangulo extends figura { public void mostrar_area() { System.out.println(“Area de rectangulo=”+(x*y)); } }

6 Clases Abstractas Programación I No todos los métodos de una clase abstracta tienen que estar sin implementación, pero con que solamente exista un método abstracto, la clase debe declararse abstracta. public abstract class Figura { public Figura() { } public double area() { return 0.0; } public double volumen() { return 0.0; } public abstract String devolverNombre(); }

7 Clases Abstractas Programación I Las clases abstractas tienen una característica importante: No se permite instanciar objetos de una clase abstracta. Figura x = new Figura(); //Error La única forma de utilizar una clase abstracta es creando clases hijas que hereden de ella y éstas se encarguen de implementar sus métodos abstractos.

8 Clases Abstractas Programación I Las subclases de una clase abstracta deben: No se pueden definir constructores abstractos o métodos estáticos abstractos. Sobreescribir todos los métodos abstractos de la superclase, o bien Ser declaradas como clases abstractas

9 Clases Abstractas Programación I Como ejemplo de este concepto plantearemos el siguiente ejercicio: Un banco requiere un sistema que permita llevar el control de las cuentas abiertas a los clientes. Existen dos tipos de cuenta que pueden ser: Cuenta corriente o Cuenta de ahorros. El sistema debe contar con las siguientes opciones: 1. Crear Cuenta 2. Consultar Cuenta 3. Realizar Transacción 4. Salir Este ejercicio es una modificación del ejercicio de Banco visto como práctica

10 Clases Abstractas Programación I Este diagrama resuelve los requerimientos del banco pero no establece distinción entre una Cuenta Corriente y una Cuenta de Ahorros. Suponga que el banco tiene un nuevo requerimiento, en el cual exige que cada cuenta lleve el registro de sus transacciones y que además en la Cuenta Corriente solo se permitan las transacciones Depósito y Cobro de Cheque y en la de ahorros se permita únicamente Depósito y Retiro El siguiente diagrama resuelve el problema pero sigue teniendo fallas En primer lugar, el método realizarTransaccion debe hacer un condicional para poder aplicar las restricciones dependiendo del tipo de cuenta. Lo siguiente, es que el método getMonto debe hacer un condicional, ya que para Retiro o Cobro de cheque el monto es negativo y para Deposito el monto es positivo. La situación se agrava si se agregan nuevos tipos de cuenta y/o de transacciones. Lo cual implicaría modificar gran parte del código del sistema. Usando herencia y polimorfismo se logra un modelo más flexible a las modificaciones. Este método en cursiva indica que es abstracto, lo que significa que será implementado en las clases hijas. El nombre de la clase en cursiva indica que es abstracta. Como cada clase “concreta” implementa el método abstracto heredado de la clase base, aplicará sólo las restricciones correspondientes a los objetos de su clase, flexibilizando así el modelo. Se llama clase “concreta” a aquellas clases que no son abstractas Si se agrega un nuevo tipo de Cuenta y/o Transacción, habrá que modificar muy pocas partes del sistema

11 Ejercicio 17 Programación I 1.Abra en BlueJ el proyecto Banco. 2.Cree un objeto de tipo cuenta de ahorros y otro de tipo Cuenta Corriente. 3.Agregue transacciones de depósito y retiro a ambas cuentas. Observe el resultado. 4.¿Cuáles son las clases concretas del proyecto? 5.¿Qué métodos abstractos tiene la clase Transacción? 6.¿Qué métodos reescribe la clase Cuenta Corriente? 7.Cree un objeto de tipo transacción. ¿Cuál es el resultado?

12 Ejercicio 17 Programación I 8.Elimine la palabra “abstract” de la definición de la clase Transacción, compile. ¿Porqué cree que se produce ese error? Deshaga los cambios realizados en la clase. 9.Elimine la palabra “abstract” de la definición del método getMonto(), compile. ¿Por qué se produce ese error? Deshaga los cambios realizado en la clase. 10.Invoque el método “main” en la clase Principal y realice varias pruebas en el programa.

13 Clases Abstractas Programación I El concepto de clase abstracta está ligado completamente al concepto de polimorfismo, de tal forma que si su programa no necesita polimorfismo tampoco necesitará una clase abstracta. Una clase abstracta permite definir acciones comunes para un conjunto de clases, pero las reacciones finales de las clases a cada una de las acciones es diferente. Cuando una clase se define abstracta, no es posible crear instancias de ella, pero puede guardar referencias a los hijos. Un ejemplo de ello es que en todas las Cuentas se realizan Transacciones, pero las restricciones de esas transacciones dependen del tipo de cuenta.

14 Clases Abstractas Programación I Los métodos que cambian el comportamiento en las clases hijas deben ser declarados como abstractos, y en la mayor parte de los casos no llevan código. La clase abstracta puede tener métodos que no sean abstractos, es decir, su comportamiento es el mismo para las clases heredadas. Una clase abstracta puede tener constructores, que serán llamados desde los constructores de las clases hijas

15 Ejercicio 18 Programación I 1.Examine el código de las clase del proyecto Banco. 2.El banco desea agregar un tipo de cuenta que registre los pagos de cuotas efectuados por los clientes que tienen préstamo. Cada vez que un cliente desea solicitar un préstamo, el operador del sistema abre una cuenta para el préstamo cuyo saldo inicial es el monto del mismo. Cuando el cliente desea cancelar una cuota, se registra una nueva transacción en la cuenta del préstamo de tipo "pago de cuota". La cuenta de préstamo solo acepta este tipo de transacción. Modifique el programa Banco para agregar esta nueva característica al mismo.

16 :: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Finalización


Descargar ppt ":: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación."

Presentaciones similares


Anuncios Google