Programación B
Programación Orientada a Objetos
Ingeniería en Informática
Universidad FASTA
Ing. Luis Buffoni
Lic. Claudio Gea
Clase 3 – POO: Clases Abstractas – Interfaces
Clases y métodos abstractos
Abstracción de Clases
A menudo existen clases, a las que se denomina
abstractas, que sirven para definir un tipo genérico,
pero de los que no tiene sentido crear objetos de
esa clase
Una clase abstracta NO puede instanciarse
Los objetos son instancias de clases concretas
Figura
Abstracta
ta s
oncr e
C
Triangulo Rectangulo
Universidad FASTA – Programación B 2
Clases y métodos abstractos
Abstracción de Métodos
También pueden declararse métodos
abstractos
Un método abstracto de una clase es un
método incompleto:
Tiene definición pero no tiene cuerpo: no está
implementado
Se espera que las clases concretas que heredan de
esa superclase implementen (sobreescriban) dicho
método
Universidad FASTA – Programación B 3
Clases y métodos abstractos
Abstracción de Métodos
La abstracción de métodos es una técnica muy útil
para definir patrones de comportamiento para
clases derivadas
Permite diseñar plantillas (templates), donde el
comportamiento común de una jerarquía de clases se
define en un conjunto de métodos dentro de la superclase
abstracta, imponiendo un comportamiento común para
todas las subclases pero sin dictar cómo implementarlo
Los métodos abstractos, deben ser implementados en las
subclases, tomando en ellas su comportamiento específico
Universidad FASTA – Programación B 4
Clases y métodos abstractos
Si una clase contiene métodos abstractos, entonces
la clase debe definirse/considerarse como abstracta
No obstante pueden existir clases abstractas sin
métodos abstractos:
Todos los métodos están implementados
Al mismo tiempo, no se desean instancias de esa clase
Si se van a crear instancias de una subclase que
hereda de una superclase abstracta, en la subclase
deben implementarse todos los métodos declarados
como abstractos en la superclase
Universidad FASTA – Programación B 5
Clases y métodos
abstractos en UML
Se expresan en cursiva
Vehiculo
-velocidadMaxima
+frenar()
+getVelocidadMaxima()
Universidad FASTA – Programación B 6
Clases y métodos
abstractos en UML
Figura
+calcularArea(): Float
+calcularPerimetro(): Float
Triangulo Rectangulo
-lado1: Float -base: Float
-lado2: Float -altura: Float
-lado3: Float
+calcularArea(): Float
+calcularArea(): Float +calcularPerimetro(): Float
+calcularPerimetro(): Float
Circulo
-radio: Float
+calcularArea(): Float
+calcularPerimetro(): Float
Universidad FASTA – Programación B 7
Clases y métodos abstractos
Para pensar…
¿Cuántas subclases abstractas se pueden declarar en una jerarquía de clases?
Las que sean necesarias. La
Herencia es fundamental en
los lenguajes OO y es vital que
cualquier clase pueda ser
extendida por otras,
independientemente de la
cantidad de superclases que
esta tuviera
Noobstante, no es muy común
tener 2 o 3 clases sucesivas
abstractas sin una
implementación concreta.
Universidad FASTA – Programación B 8
Clases y métodos abstractos
Para pensar…
Una superclase ¿debe ser abstracta o concreta?
Unasuperclase puede ser
abstracta o concreta.
Una subclase puede
adicionar / modificar
comportamiento heredado de
una superclase
independientemente de que
esta sea abstracta o concreta
Universidad FASTA – Programación B 9
Clases y métodos abstractos
Para pensar…
¿Es necesario implementar todos los métodos abstractos?
Sí,
alguna subclase debe en
algún nivel de la herencia
implementar los métodos
abstractos. Si eso no se hace y el
método abstracto es invocado, se
producirá una excepción o fallo
en tiempo de ejecución
Si
una clase derivada no
implementa algunos de los
métodos abstractos de su
superclase, debe ser
considerada abstracta
Universidad FASTA – Programación B 10
Clases y métodos abstractos
Para pensar…
Un método declarado como abstracto ¿puede ser declarado
privado?
Los modificadores private y abstract no tienen sentido juntos:
Un método abstracto necesita ser sobreescrito por alguna
subclase
Pero si las subclases no tienen acceso a miembros privados de
sus superclases, no lo podrán sobreescribir
Los métodos abstractos debieran ser public o protected
Universidad FASTA – Programación B 11
Clases y métodos abstractos
Para pensar…
¿Se puede declarar un constructor para una clase
abstracta?
Sí, una clase abstracta puede tener constructores, pero estos no
serán utilizados para instanciar objetos de la clase abstracta.
Los constructores en clases abstractas se implementan para ser
llamados por los constructores de las subclases concretas,
utilizando las invocaciones inherited (Delphi) o super (Java).
Universidad FASTA – Programación B 12
Interfaces
Una interfaz (en inglés, interface) es un tipo de clase
especial: NO implementa ninguno de sus métodos
Provee una clase abstracta en extremo: no permite
ninguna implementación de métodos
Ofrece un contrato, una “interfaz de programación
de aplicaciones” (API)
En algunos lenguajes, posibilita implementar el
concepto de herencia múltiple
Una interfaz puede extender de otra interfaz
Universidad FASTA – Programación B 13
Interfaces
Abstracción Pura
Conceptualmente, una interfaz indica…
“Esto es lo que todas las clases que implementen esta interface
están obligadas a proveer”
Una interfaz…
No provee ninguna implementación
Establece la forma de una clase:
Nombres de métodos, Tipos de Parámetros, Retorno
Una interfaz NO forma parte de la jerarquía de clases
Clases dispares pueden implementar una misma interfaz
Universidad FASTA – Programación B 14
Interfaces
Abstracción Pura
¿Para qué se utilizan las interfaces?
Razón de fondo: hacer upcast a más de una clase
superior
ofrecer una solución semejante a Herencia Múltiple
Definir lo que una clase exporta, sin implementarlo
Universidad FASTA – Programación B 15
¿Interface o Clase Abstracta?
¿Qué conviene usar?
Interfaz, si la funcionalidad que se está creando va a
proporcionar comportamiento común a clases no
relacionadas
Las clases abstractas deben utilizarse principalmente para objetos
estrechamente relacionados
Interfaz, si se van a diseñar fragmentos pequeños y concisos
de funcionalidad
Si se diseñarán unidades funcionales grandes, conviene utilizar clases
abstractas
Si se van a definir unos pocos métodos, las interfaces son una buena
solución
Universidad FASTA – Programación B 16
¿Interface o Clase Abstracta?
¿Qué conviene usar?
Clase abstracta, si queremos definir un grupo genérico de
clases y tenemos algunos métodos implementados y/o
variables de instancia que se pueden reutilizar
Al actualizar la clase base, todas las clases heredadas se actualizan
automáticamente con el cambio.
Por el contrario, las interfaces son más difíciles de cambiar una vez
creadas porque obliga a actualizar todas las clases que la implementan
Universidad FASTA – Programación B 17
Interfaces en UML
<<interface>>
Dirigible
+retome = 180
+girar(grados)
Dirigible
Vehiculo Vehiculo
-velocidadMaxima -velocidadMaxima
+frenar() +frenar()
+getVelocidadMaxima() +getVelocidadMaxima()
+girar(grados) +girar(grados)
Notación gráfica
Universidad FASTA – Programación B 18
Interfaces
Implementación de Herencia Múltiple
Vehículo
VehiculoTerrestreConRuedas VehiculoAereo
Lenguajes que NO soportan
Herencia Múltiple
Vehículo
Automovil Camion Avion HidroAvion
VehiculoAereo
VehiculoTerrestreConRuedas
Lenguajes que soportan
Herencia Múltiple
VehiculoRodante
Avion HidroAvion
Automovil Camion
Universidad FASTA – Programación B 19
Distribuyendo responsabilidades
Un problema al que nos enfrentamos todos…
Diseñar software orientado a objetos es difícil… y diseñar software
orientado a objetos reutilizable es más difícil aún Patrones de Diseño
Asignación de responsabilidades = Distribuir el comportamiento
Universidad FASTA – Programación B 20
Ejercicios prácticos
Un restaurant desea gestionar la facturación que surge de su actividad diaria de acuerdo a la siguiente
operatoria de trabajo:
El restaurant dispone de N mesas (numeradas de 1 a N). Se dispone de M mozos, los cuáles atienden las mesas de
manera rotativa cada día (no atienden siempre las mismas mesas)
Cuando una mesa se ocupa, el mozo abre la Orden para esa mesa informando al facturista el número de la mesa y
la cantidad de comensales que se atenderán. Automáticamente se asocia a la Orden la hora de inicio de la atención
A medida que los comensales van pidiendo platos y bebidas del menú, se irán registrando los mismos en la Orden
Cuando se cierra la Orden, se emite un ticket/factura detallado y se sumarizan sus precios para obtener el total a
pagar.
El cliente paga ya sea con Tarjetas de Crédito o con efectivo. En el caso de las TC, registrar qué Tarjeta de Crédito
se usó (VISA, MASTERCARD, etc.), número identificatorio de la tarjeta, fecha de expiración y nombre del titular.
Una vez retirados los comensales, el mozo informa la propina dejada por los comensales y se registra la hora de
finalización de la Orden
El sistema deberá generar informes estadísticos y de facturación por diversos criterios: Mesa, Mozo, Fecha, Día de la
semana, ranking de platos/bebidas más consumidos, cantidad de comensales, medios de pago utilizados, tiempos de
atención promedio, propinas por mozo, etc.
Aplicar los conceptos propios de la Orientación a Objetos vistos hasta el momento:
-Identificar clases con sus atributos y métodos
-Identificar relaciones de Herencia, Clases Abstractas, Interfaces, agregación, composición, cardinalidad
-Identificar Métodos y variables de Clase (miembros estáticos)
-Indicar especificadores de acceso (privado, protegido, público)
-Definir constructores,
Universidad FASTAidentificar métodos sobrecargados,
– Programación B aplicar sobreescritura.
21
Ejercicios prácticos Avenida
Avenida
Se solicita generar las clases necesarias para representar el comportamiento de un Sistema de Control de
Semáforos Centralizado, como el esquematizado en la figura, donde las elipses representan los semáforos, la franja
verde, una Avenida y las franjas grises, las calles transversales.
Un semáforo puede estar en Rojo, Verde o Amarillo. La secuencia de transición posible es: Verde, Amarillo, Rojo,
Verde…
Los semáforos ubicados sobre la avenida deben coordinar una onda verde, es decir que una vez que un semáforo
pasó a encender su luz verde, el semáforo de la intersección siguiente deberá pasar a verde luego de 10” (este valor
debería poder ser modificado por el sistema). Cuando un semáforo sobre la avenida se desea pasar a verde, deberá
notificar al semáforo que controla el tráfico sobre la correspondiente transversal para que el mismo comience su
transición a rojo.
En el sistema que se está diseñando los objetos Avenida deben conocer cuales son todos los semáforos que
poseen. Es importante notar que solamente los semáforos que están sobre una avenida tienen semáforos sucesores
(elipses blancas en el dibujo) y asociados a su calle transversal (elipses negras).
Todos los días el sistemas de semáforo de las avenidas comienza a funcionar a las 6 de la mañana. A partir de las
23 horas todos los semáforos de la avenida y sus transversales permanecen en Amarillo intermitente (en el sistema de
objetos existe un objeto reloj, al cual se le puede enviar el mensaje hora, el cual retorna la hora actual)
Se solicita definir las clases: Avenida y Semáforo
Universidad FASTA – Programación B 22
Ejercicios prácticos
Una empresa de hardware pretende un sistema para gestionar el stock de sus insumos y la
facturación de sus productos y servicios. Se informa que:
Cada factura de venta implica una reducción en el stock de los artículos. Además de equipos
completos, insumos (cartuchos, CD, DVD, etc.) y partes (discos rígidos, monitores, etc.), la empresa
también factura servicios como cursos y soporte técnico, que no afectan al subsistema de stock
La empresa factura a sus clientes en dos modalidades: Contado y Cuenta Corriente. Este último tipo,
implica almacenar información adicional del cliente, vencimiento de los pagos y gestión de los mismos
Respecto a las compras, solamente interesa administrar el stock de partes e insumos, y no la cuestión
monetaria de las mismas. El comprobante que registra el ingreso de mercadería es el informe de
recepción. Los equipos completos incrementan su stock mediante órdenes de producción, que
exceden el alcance de este sistema. También excede el alcance del sistema el decremento del stock
de las partes usadas en el equipo completo.
Cada artículo está identificado por un código único. Además posee una descripción, precio de venta
mayorista y minorista, punto de pedido. Un artículo debe estar activo para poder incluirlo en una venta
Un equipo completo está conformado por el ensamble de partes.
Aplicar los conceptos propios de la Orientación a Objetos vistos hasta el momento:
-Identificar clases con sus atributos y métodos
-Identificar relaciones de Herencia, Clases Abstractas, Interfaces, agregación, composición, cardinalidad
-Identificar Métodos y variables de Clase (miembros estáticos)
-Indicar especificadores de acceso (privado, protegido, público)
-Definir constructores,
Universidad FASTAidentificar métodos sobrecargados,
– Programación B aplicar sobreescritura.
23