Title: Introduccin a la Programacin Orientada a Objetos
1Introducción a la Programación Orientada a
Objetos
- Ingeniería de la Programación
- Capítulo 1
2Contenidos
- 1.1 Introducción.
- 1.2. El concepto de objeto.
- 1.5. El envío de mensajes.
- 1.3. Las clases.
- 1.4. La instanciación.
- 1.6. La herencia.
- 1.8. Facetas de la herencia.
- 1.9. La herencia múltiple.
- 1.10. Polimorfismo.
- 1.11. Enlace estático y dinámico.
- 1.12. Metaclases.
3Introducción (I)
- Tradicionalmente, en un programa existen como
entidades separadas los datos y los
procedimientos o funciones que manipulan esos
datos - Algoritmos Estructuras de Datos Programas
- Problemas
- Acoplamiento, variables globales, etc.
4Introducción (II)
- Simula-67
- Objeto entidad de programación que encapsula
datos y procedimientos que los manipulan - Conceptos de la programación orientada a objetos
- objetos y clases
- encapsulación y ocultación de información
- herencia y polimorfismo
5Introducción (III)
- Evolución histórica
- Simula-67
- Años 70 encapsulación, ocultación de
información, módulos (David Parnas) - Smalltalk-80
- A partir de mediados de los 80, un gran número de
lenguajes OO - Extensiones OO de lenguajes clásicos (turbo
Pascal con objetos, C, Ada, CLOS, ) - Lenguajes genuinamente OO (Eiffel, Java, Perl,
PHP, C, )
6Introducción (y IV)
- Por qué ha tenido tanto éxito la POO?
- La forma de percibir y pensar sobre los problemas
se acerca a los mecanismos cognitivos humanos y
es muy parecida a la forma en que se abordan en
otros dominios - Existe la esperanza de que esta técnica sea la
clave para incrementar la productividad y mejorar
la fiabilidad de los sistemas software ( solución
a la crisis del software ) - Existe la esperanza de que la transición de los
lenguajes existentes a los nuevos orientados a
objetos sea fácil
7Objetos
- Entidad de programación con dos componentes
- Estado Contiene la información que puede
almacenar el objeto y que puede variar con
respecto al tiempo - Comportamiento Conjunto de acciones que puede
realizar. - Alternativamente, se define un objeto como una
entidad con dos componentes - Parte estática datos.
- Parte dinámica procedimientos o funciones que
manipulan los datos.
8Objetos
9POO vs. P. tradicional
10Modelo de computación clásico
11Modelo de computación OO
- El concepto de aplicación desaparece
- Programas colecciones de objetos autónomos que
interactúan mediante mensajes
12Paso de mensajes
- Protocolo de comunicación interobjetual
- Un mensaje se envía a un objeto específico,
llamado el receptor - El mensaje contiene una petición de servicio, así
como la información que el receptor pueda
necesitar para llevar a cabo el servicio - El receptor, en respuesta al mensaje, ejecuta un
método, tras lo cual devuelve un resultado al
solicitante - El que se ejecuta en respuesta al mensaje no es
fijo - Diferentes objetos pueden aceptar el mismo
mensaje y realizar acciones diferentes.
13Mensajes
- Para que un objeto pueda responder a un mensaje,
éste debe ser parte de su interfaz pública. - Un mensaje incluye el nombre de una operación y
una lista de argumentos requeridos para la misma.
Al nombre de la operación le llamaremos selector
del mensaje. - Cuando el receptor recibe el mensaje, ejecuta un
método que sólo él conoce (y que puede ser
cualquiera, con tal de que haga lo establecido
el emisor nunca especifica cómo debe llevarse a
cabo esa operación) - Al conjunto de mensajes a los que puede responder
un objeto dado se le llama comportamiento del
objeto.
14Mensajes
- Información contenida en un mensaje
- El objeto receptor (OBJ)
- El nombre del operador o operación (SEL)
- Los argumentos del operador (ARG)
- Ejemplos de Mensajes
- Sintaxis Lenguaje de programación
- OBJ SEL ARG Smalltalk
- OBJ.SEL(ARG) Object Pascal , C
- ARG SEL OBJ Neon
- (OBJ 'SEL ltARGgt) ExpertCommonLisp
- OBJ SEL ARG Objetive-C
15Clases
- La mayor parte de los sistemas orientados a
objetos distinguen entre la descripción de un
objeto y el objeto en sí - Muchos objetos similares pueden ser descritos por
una misma definición o esquema general - Una clase es una definición, plantilla o molde
que permite la creación de objetos, y contiene la
descripción de las características comunes de
esos objetos - Componentes de una clase
- Parte estática Campos con nombres, atributos
- Parte dinámica Procedimientos o funciones,
métodos
16Clases y TAD
- El concepto de clase está fuertemente relacionado
con el concepto de tipo abstracto de datos - Un tipo abstracto de datos viene definido por una
serie de operaciones que se pueden efectuar sobre
los representantes del tipo. - Una clase es la implementación de un tipo
abstracto de datos - Para un mismo tipo puede haber distintas
implementaciones
17Clases y TAD
18Declaración de clases
- Una definición de clase incluye
- El nombre de la clase.
- Las operaciones públicas, interfaz de la misma.
- La representación interna de los atributos.
- La implementación de la interfaz.
Clase Artículo exporta Inicializar, PrecioTotal,
PrecioTransporte , Retirar, Añadir
atributos por defecto ocultos Referencia
String Descripción String Precio
Real CantidadInteger código para los métodos
públicos y privados procedure
Inicializar(NR,NSStringNPRealNCInteger) Ref
erencia NR DescipcionNS Precio
NP Cantidad NC fin Inicializar function
PrecioTotal()Real Retorna(1.186Precio) fin
PrecioTotal function PrecioTransporte()Real Ret
orna(0.05Precio) fin PrecioTransporte procedure
Retirar(qInteger) Cantidad Cantidad - q
fin retirar procedure Añadir(qInteger) Cantidad
Cantidad q fin Añadir fin Articulo
19Declaración de clases
- Unit _Articulos
- Interface
- Type Articulo Object
- procedure Inicializar(NR,NSStringNPRealNCI
nteger) - function PrecioTotalReal
- function PrecioTransporteReal
- procedure Retirar(qInteger)
- procedure Añadir(qInteger)
- private parte privada de la clase
- Referencia String
- Descripción String
- Precio Real
- CantidadInteger
- End definición de clase
- Implementation
- procedure Articulo.Inicializar(NR,NSStringNPRea
lNCInteger) - Referencia NR DescipcionNS Precio NP
Cantidad NC - End Inicializar
- ...
20Instanciación
- Operación que permite la creación de
representantes físicos de las clases, llamados
instancias o ejemplares - Todo objeto es una instancia o ejemplar de una
clase determinada - En la mayor parte de los lenguajes orientados a
objetos, las clases existen en tiempo de
compilación mientras que los objetos existen en
tiempo de ejecución
21Clases y ejemplares
- Todas las instancias de una misma clase tienen el
mismo número de atributos - A los atributos se les suele llamar también
variables de instancia. - Los nombres de las variables residen en la clase,
y los valores en los objetos. - Los métodos son comunes a todas las instancias de
la misma clase - Los métodos residen en la clase
22Variables de clase
- Variables declaradas en una clase cuyo valor
reside en la propia clase. - Compartidas por todas las instancias de esa
clase. - Clase Artículo
- ....
- variables de clase
- CantidadMinima integer
- ...
- fin Artículo
231.6 La Herencia
- Mecanismo de reutilización de código que permite
a los programadores crear nuevas clases a partir
de clases existentes - Es una relación transitiva entre clases que
permite a una nueva clase utilizar los métodos y
atributos definidos en otra clase como si fuesen
propios.
24Representación gráfica
25Herencia
- Enriquecimiento
- Ocultación o sustitución
26Enriquecimiento y Sustitución
- Clase Ropa
- Superclase Artículo
- Atributos
- Talla Integer
- Color char
- Métodos públicos
- Fin Ropa
- Clase ArticulodeLujo
- Superclase Artículo
- Atributos
- Métodos públicos
- PrecioTotal()
- Retorna(Precio1.33)
- Fin ArticulodeLujo
27Árbol de herencia simple
281.7 Facetas de la Herencia
- Qué pueden redefinir las clases descendientes?.
-
- Variables de instancia
-
- Métodos.
-
29Facetas de la herencia
- Para las variables de instancia
- Sin redefinición.
- Redefinición arbitraria.
- Redefinición con restricciones.
- Definiciones ocultas.
30Facetas de la herencia
- Para los métodos
- Redefinición arbitraria.
- Redefinición con restricciones
- Únicamente el código.
- La interfaz del método.
31Ejemplo de herencia (Delphi)
- unit Unit2
- interface
- type Figura class
- // atributos
- protected
- x,y integer
- public
- constructor crear(nx,nyinteger)
- procedure desplazar( incx, incy
integer) - end
- type Cuadrado class(Figura)
- protected
- lado integer
- public
- constructor crear(nx,ny,nlinteger)
- procedure dibujar
- end
- implementation
32Ejemplo Delphi
- // Implementación de los métodos de figura.
- constructor Figura.crear(nx,nyinteger)
- begin x nx y ny end
- procedure Figura.desplazar( incx, incy
integer) - begin x x incx y y incy end
- // Métodos de cuadrado
- constructor Cuadrado.crear(nx,ny,nlinteger)
- begin
- inherited crear(nx,ny)
- lado nl
- end
- procedure Cuadrado.Dibujar
- begin
- // ...
- end
33Ejemplo Delphi (y 3)
- // En otra parte del programa.
- var f figura
- c cuadrado
- begin
- f figura.crear(10,10)
- f.desplazar(1,1)
- c cuadrado.crear(20, 20, 10)
- c.desplazar(2,2)
- c.dibujar
-
- end
34Herencia múltiple
- Algunos lenguajes orientados a objetos permiten
que una clase determinada pueda tener más de una
superclase directa, en este caso se habla de
herencia múltiple - Si B posee A1,..,An superclases directas entonces
B hereda la unión de las variables de instancia y
de los métodos de A1..An
35Herencia múltiple conflictos de nombre
- Aparece un conflicto de nombres en la herencia
múltiple cuando dos o más superclases directas de
una dada poseen atributos y/o métodos con el
mismo nombre - Estrategias de resolución de conflictos
- Linearización del grafo de herencia.
- Renombrado de variables de instancias y de
métodos. - Cualificación de variables de instancia y de
métodos
36Linearización
37Renombrado
- El compilador trabaja directamente con el grafo
de herencia, cuando encuentra un conflicto de
nombre genera una mensaje de error - El programador o usuario es el que debe de
resolver el conflicto de nombres - Esta es la estrategia que utilizan lenguajes como
Eiffel el renombrado se hace en la clase
descendiente. - Class Estudiante_Trabajador
- Inherit Empleado
- Rename bonificacion as
bonificacion_empleado - Estudiante
- ...
- end
38Calificación
- Cuando surge un conflicto de nombres, los
atributos o los métodos se califican con el
nombre de la clase a la que pertenecen - Por ejemplo, en C
- Estudiantebonificacion
- Empleadobonificacion
39Polimorfismo (1)
- En programación un objeto polimórfico es una
entidad (por ejemplo una variable) que puede
contener valores de diferente tipo durante la
ejecución de un programa.
40Tipos de Polimorfismo
41Sobrecarga/ Coerción
- Sobrecarga Se puede emplear el mismo símbolo
para denotar operaciones con distinto
significado. - P. Ej .
- Coerción Las operaciones pueden trabajar con
tipos mezclados.
42Polimorfismo de Inclusión
- Variables de un tipo determinado se pueden
referirse a instancias de clases descendientes.
43Genericidad
- Clase Pila T
- Campos
- Representacion Array T
- NumElementos Integer
- Métodos
- / No se muestra el código de los métodos /
- Crear()
- Añadir(ItemT)
- Desapilar(Var Item T)
- ...
- CimaPila(Var ItemT)
- fin
- Permite la definición de clases paramétricas, que
son aquellas que admiten uno o varios tipos como
parámetro.
44Tipo estático/dinámico
- Lenguajes con asignación estática de tipos los
tipos se asocian con las variables o
identificadores mediante declaraciones
explícitas. - Lenguajes con asignación dinámica de tipos los
tipos se enlazan con los valores.
45Tipo estático/dinámico (2)
- En lenguajes con asignación estática de tipos, el
nombre (variable) de un objeto tiene asignado un
tipo estático y un tipo dinámico. - El tipo estático se determina en tiempo de
compilación, al inspeccionar la declaración de
esa variable. - El tipo dinámico puede variar en tiempo de
ejecución, queda determinado por el tipo del
valor al que apunta esa variable.
46Polimorfismo y asignación estática
- El tipo dinámico de una variable debe ser un
descendiente del tipo estático.
47Enlace estático/dinámico
- Cuándo se produce la asociación entre una
expresión de paso de mensajes y el código que ha
de ejecutarse?
48Enlace (2)
- Enlace estático (en tiempo de compilación) si el
enlace del método al mensaje se basa en las
características estáticas de la variable. - Enlace dinámico (en tiempo de ejecución) si el
enlace del método al mensaje se basa en el tipo
del valor y no en el tipo de la declaración.
49Enlace dinámico y polimorfismo de inclusión
50Metaclases
- En algunos lenguajes las clases existen en tiempo
de ejecución y pueden ser tratadas como objetos - En esos lenguajes hay dos tipos de objetos
- objetos clase objetos que pueden actuar como
plantillas y crear instancias de ellos mismos. - objetos terminales objetos que pueden ser
instanciados pero que no pueden instanciar otros
objetos.
51Metaclases
- Una metaclase es una clase cuyas instancias son
clases - las metaclases que engendran las clases
- las clases engendran las instancias terminales
- Ventajas de utilizar metaclases
- Se pueden utilizar para almacenar información
relativa a las instancias (información de grupo),
en la forma de variables de clase. Los métodos
asociados con la clase (métodos de clase) se
emplean para manipular las variables de clase. - Su utilización en la creación/inicialización de
las nuevas instancias de la misma. El mensaje new
enviado a la clase puede llevar asociado
argumentos adicionales para inicializar las
variables de instancia.
52Metaclases en Smalltalk
53Metaclases en LOOPS
En el modelo del lenguaje LOOPS, los objetos se
reparten en tres categorías, metaclases, clases e
instancias terminales, pero el número de
metaclases no está limitado