Publicado el 14 de Enero del 2017
1.207 visualizaciones desde el 14 de Enero del 2017
317,5 KB
11 paginas
Creado hace 13a (31/01/2012)
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Paradigmas de la POO
Los principios propios de la orientación a objetos
son:
– 2.2.1.- Abstracción de Datos
– 2.2.2.- Encapsulamiento
– 2.2.3.- Ocultamiento
– 2.2.4.- Herencia
– 2.2.5.- Polimorfismo
Cualquier lenguaje POO tiene que poseer estos
conceptos.
David Contreras Bárcena - ICAI
57
2.2.- Abstracción
Visión de un problema que extrae la información
esencial para un determinado propósito, omitiendo
los detalles menos significativos.
Puede existir diferentes niveles de abstracción.
Existe dos tipos:
– Funcional
– De datos
Un objeto es una abstracción de la realidad.
David Contreras Bárcena - ICAI
58
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Encapsulamiento
Es un agrupamiento bajo un mismo nombre
de la información y las operaciones que acceden
a ella .
Materializa la abstracción. Los objetos son
encapsulaciones de abstracciones.
Paquete de información y operaciones.
hora
día
numSerie
modelo
David Contreras Bárcena - ICAI
59
2.2.- Ocultamiento de la Información
Principio por el cual solo es accesible el interfaz
del objeto.
Los métodos no son utilizados por su
implementación (contenido), sino por su interfaz
(aspecto).
Concepto complementado con el de
encapsulamiento.
Objetivo final: Restringir el acceso a los métodos.
NOTA: Para más información acerca de ocultamiento consultar el manual de Java. (pág 103)
David Contreras Bárcena - ICAI
60
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Ocultamiento de la Información
En java se consigue gracias a los modificadores
de acceso.
Estos pueden afectar a la clase, a los atributos
y/o métodos.
Modificadores:
– public: Objetos de todas las clases pueden acceder al
método con este modificador.
– protected: Sólo objetos de las clases heredadas y las
del paquete.
– (defecto): Sólo objetos de las clases del paquete.
– private: Sólo objetos de la misma clase.
David Contreras Bárcena - ICAI
61
2.2.- Herencia
La herencia permite crear una clase nueva que
tenga el mismo comportamiento que otra, y
además extienda o adapte ese comportamiento a
unas necesidades específicas.
Permite especializar o refinar una clase, y/o
generalizar conceptos de otras clase ya existentes.
En la especialización, la nueva clase creada
tomará o heredará los atributos y métodos de la
clase padre, los cuales se añadirán a los definidos
por la propia clase.
David Contreras Bárcena - ICAI
62
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Herencia
Dicha fábrica desea
sacar al mercado un
nuevo modelo de reloj
con cronómetro
Definiremos la nueva
clase con las nuevas
características que
introduce al reloj ya
existente
inicicializarCrono
Las instancias que
creemos de la clase
RelojCrono tendrán
como datos y métodos
los de la clase Reloj y
63
los de su clase
Nos piden crear un
modelo informático de
una fábrica de relojes.
Su modelo de reloj es
único: solo muestra la
hora y el día
mostrarMarca
Clase Reloj
marca
--
hora
día
traducirFrecuencia
numSerie
mostrarDía
incrementarDía:
limpiarPantalla
mostrarHora
Para ello, diseñaremos
este nuevo modelo de
reloj apoyándonos en el
concepto de herencia, el
cual nos permite la
reutilización de software
HERENCIA
Clase RelojCrono
cronoHora
cronoMin
cronSeg
mostrarCrono
activarCrono
David Contreras Bárcena - ICAI
2.2.- Herencia
class Reloj
//atributos
static String MARCA; //atributo de clase
String hora; //Tomamos un tipo String para simplificar
String dia; //idem
int numSerie;
//métodos
...
{
}
class RelojCrono extends Reloj
{
}
//atributos
int cronoHora;
int cronoMin;
int cronSeg;
//métodos
...
Únicamente se definen los atributos y
métodos que añaden o refinan el
comportamiento.
Las ocurrencias de la clase RelojCrono
dispondrán de los atributos y métodos
definidos en su clase más los de la clase
padre.
David Contreras Bárcena - ICAI
64
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Herencia Múltiple
Se da este concepto cuando una clase hereda de
varias superclases. La mayoría de los lenguajes no
soportan esta característica.
Clase
MAMIFERO
Clase
HOMBRE
Clase
LOBO
Clase
HOMBRE
LOBO
David Contreras Bárcena - ICAI
65
2.2.- Polimorfismo
Consiste en utilizar un mismo símbolo para fines
distintos.
Respuesta distinta frente a un mensaje
dependiendo de la naturaleza del objeto.
David Contreras Bárcena - ICAI
66
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Polimorfismo
Supongamos que tenemos relojes, uno analógico y otro
digital. Cada reloj tiene un método para adelantar una hora.
No tiene ningún sentido que si los dos hacen lo mismo
(cada uno a su manera), se tenga que llamar con nombres
distintos. Cada vez que invoquemos el método
adelantarHora de cada reloj, cada uno lo hará a su
manera.
Tenemos distintos objetos gráficos (cuadrados,
circunferencias, triángulos,...) y todos tienen un método
pintar. Cuando yo lance un mensaje sobre cada objeto
invocando el método pintar, cada uno se pintará a su
manera.
David Contreras Bárcena - ICAI
67
2.2.- Polimorfismo en la herencia:
Redefinición
Cuando se crea una clase heredada de una
superclase, heredará todos los métodos.
Si la implementación de uno de los métodos no se
ajusta al comportamiento de la nueva clase, se
podrá variar dicha implementación.
Se dice entonces que se está redefiniendo el
método.
Habrá que diferenciar esta idea del concepto de
sobrecarga. Se dice que se está sobrecargando un
método cuando se define otro con el mismo
nombre pero con argumentos diferentes.
68
David Contreras Bárcena - ICAI
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Polimorfismo en la herencia:
Redefinición
Cuando el polimorfismo se produce entre las clases
heredadas, los mensajes son tratados de la siguiente forma:
A
A
pintar()
pintar
B
C
miC es una
ocurrencia
de la clase C
A
pintar()
B
pintar()
C
C
pintar()
pintar
miC.pintar();
miC.pintar();
David Contreras Bárcena - ICAI
69
2.2.- Clases Abstractas
Las clases abstractas son aquellas que se utilizan
en la herencia y sólo las utilizaremos para que
definan el interfaz (qué hacen) y/o la
implementación (cómo lo hacen) de las clases
heredadas.
No se podrá crear ocurrencias de ellas. Se utilizan
para que las características de esta clase estén
disponibles para sus clases heredadas.
Es una forma de generalizar un comportamiento y,
por lo tanto, reutilizar código.
David Contreras Bárcena - ICAI
70
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Paradigmas de la POO - Clases
Abstractas
Supongamos que queremos modelizar todos los
vehículos a motor (coches, motos, lanchas, ...).
VehículosAMotor
¿Existe en la vida real algún
objeto que sea un vehículo a
motor? NO
herencia
Existen coches , motos, etc...
La clase VehiculosAMotor
Coches
Motos
NOTA: Para ver ejemplos en JAVA. (pág 73)
nos servirá para reutilizar sus
métodos y datos, pero no
para crear ocurrencias de
ella.
David Contreras Bárcena - ICAI
Lanchas
71
2.2.- Paradigmas de la POO - Clases
Abstractas - Interfaz
Las clases abstractas nos presentarán el interfaz, es
decir, a qué métodos son capaces de responder las
ocurrencias de sus clases heredadas.
La implementación de ese interfaz podrá estar
definida en la clase abstracta o en la subclase.
Si una clase abstracta sólo define el interfaz, se
dice que es una clase abstracta pura (en Java se
denominan interfaces).
Se permite la herencia múltiple de clases
interfaces.
David Contreras Bárcena - ICAI
72
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Paradigmas de la POO - Clases
Abstractas - Clases y tipos
Se habla que una clase define la clase o el tipo...
– Clase, cuando se defina cómo se implementa el objeto
(estado interno y operaciones).
– Tipo, cuando se haga referencia solamente a su interfaz,
conjunto de peticiones a las que puede responder.
Por lo tanto, la clase define también el tipo de
objeto.
David Contreras Bárcena - ICAI
73
2.2.- Paradigmas de la POO - Clases
Abstractas - Clases y tipos
Se podrá hablar también de herencia de clase y tipo:
– Herencia de Clase: Mecanismo para compartir código y
representación (comportamiento).
– Herencia de Tipo: Un objeto puede ser usado en lugar
de otro, ya que define lo que hace y no cómo lo hace. La
herencia de tipo tiene que llevar asociado el concepto de
polimorfismo en la herencia, ya que si sólo se define lo
que va a hacer, alguna clase tendrá que redefinir dicho
método e implementarlo. Estos métodos deberán ser
definidos como abstractos.
David Contreras Bárcena - ICAI
74
Programación Orientada a Objetos
Conceptos teóricos
2.2.- Paradigmas de la POO - Clases
Abstractas - Clases y tipos
Si nos basamos en la herencia de tipo, vemos que podemos
utilizar objetos en lugar de otros (define lo que va a hacer,
pero no cómo).
Clase Abstracta Pura
Yo podré referirme a la clase
(sólo interfaz)
abstracta, aun cuando desee
VehículosAMotor
referirme a alguno de sus hijos.
La clase abstracta se utiliza en
lugar de las clases heredadas.
Estos conceptos se aclararán
Herencia de tipo
cuando se vea el diseño (DOO).
Coches Motos
Lanchas
NOTA: Para ver ejemplos en JAVA. (p
Comentarios de: Curso de Orientación a Objetos (0)
No hay comentarios