View
234
Download
0
Category
Preview:
Citation preview
7/27/2019 IDP 01 Introduccion a la POO
1/70
Mster en Ingeniera del Software, Mtodos Formalesy Sistemas de Informacin
TEMA 1: INTRODUCCIN A
LA PROGRAMACINORIENTADA A OBJETOS
INGENIERA DE LA PROGRAMACIN
7/27/2019 IDP 01 Introduccion a la POO
2/70
Contenidos
1. Introduccin.2. El concepto de objeto3. Paso de mensajes4. El concepto de clase5. Herencia simple6. Herencia mltiple7. Polimorfismo8. Meta-clases.
2
7/27/2019 IDP 01 Introduccion a la POO
3/70
Introduccin1
7/27/2019 IDP 01 Introduccion a la POO
4/70
1. Introduccin
Varios paradigmas de programacin: Programacin estructurada: describe por separado el
estado del programa (datos) y los procedimientos quecambian dicho estado. Paradigma dominante hasta los aos 80-90.
Programacin funcional: enfatiza la utilizacin defunciones que no manejan datos mutables o de estado.Tiene sus races en el clculo lambda
Programacin lgica: datos en forma de proposicioneslgicas, y procedimientos basados en la demostracin deteoremas lgicos
Programacin orientada a objetos: descomposicin de unproblema en clases y objetos. Los objetos encapsulan enuna misma entidad el estado y los procedimientos paramodificar ese estado. Paradigma dominante desde finales de los aos 90
4
7/27/2019 IDP 01 Introduccion a la POO
5/70
La crisis del software5
Trmino acuado en 1968, en la primeraconferencia organizada por la OTAN sobredesarrollo de software, de la cual naciformalmente la rama de la ingeniera de
software. Los proyectos no terminaban en plazo. Los proyectos no se ajustaban
al presupuesto inicial. Baja calidad del software generado. Software que no cumpla las especificaciones. Cdigo difcil de mantener que dificultaba la
gestin y evolucin del proyecto.
http://www.youtube.com/watch?v=D5hUbYVD25Qhttp://www.youtube.com/watch?v=D5hUbYVD25Q7/27/2019 IDP 01 Introduccion a la POO
6/70
La crisis del software6
7/27/2019 IDP 01 Introduccion a la POO
7/70
Historia de la POO
Simula-67: Objeto: entidad de programacin que encapsula
datos y procedimientos que los manipulan
Conceptos de la programacin orientada aobjetos: objetos y clases encapsulacin y ocultacin de informacin
Smalltak (Alan Kay, Xerox PARC) Objetos dinmicos (ciclo de vida)
Introduce herencia
7
http://es.wikipedia.org/wiki/Dynabookhttp://es.wikipedia.org/wiki/Dynabook7/27/2019 IDP 01 Introduccion a la POO
8/70
Historia de la POO
Aos 70: encapsulacin, ocultacinde informacin, mdulos (DavidParnas)
Smalltalk-80A partir de mediados de los 80, ungran nmero de lenguajes OO Extensiones OO de lenguajes clsicos
(turbo Pascal con objetos, C++, Ada,CLOS, )
Lenguajes genuinamente OO (Eiffel, Java,Perl, PHP, C#, )
8
http://en.wikipedia.org/wiki/David_Parnashttp://en.wikipedia.org/wiki/David_Parnas7/27/2019 IDP 01 Introduccion a la POO
9/70
Conceptos fundamentales
Clase: Definiciones de las propiedades ycomportamiento de un tipo de objeto concreto.
Herencia: Capacidad de una clase para heredaratributos y mtodos de otra clase, de la cual se
dice que es una derivada. Objeto: Instancia o individuo particular de una
clase. Instancias distintas de una misma clasecomparten el comportamiento pero tienen
estado propio. Mtodo: Procedimiento asociado a una clase de
objetos, cuya ejecucin se desencadena tras larecepcin de determinado "mensaje".
9
7/27/2019 IDP 01 Introduccion a la POO
10/70
Principios
Abstraccin: seleccionar las caractersticasrelevantes dentro de un conjunto e identificarcomportamientos comunes para definir
nuevos tipos de entidades en el mundo real(clases e interfaces)
Encapsulamiento/ocultacin de informacin:capacidad de los objetos de ocultar su estado
al exterior, de manera que slo se puedacambiar mediante las operaciones definidaspara ese objeto.
10
7/27/2019 IDP 01 Introduccion a la POO
11/70
Principios
Polimorfismo: misma denominacin paracomportamientos diferentes (diferentesimplementaciones)
Modularidad: propiedad que permitesubdividir una aplicacin en partes mspequeas (llamadas mdulos), cada unade las cuales debe ser tan independientecomo sea posible de la aplicacin en s yde las restantes partes.
11
7/27/2019 IDP 01 Introduccion a la POO
12/70
Por qu triunfa la POO?
la forma de de analizar problemas se acercams a los mecanismos cognitivos humanos ?
fcil transicin de los lenguajes
estructurados a los orientados a objetos? incrementa la productividad y mejora la
fiabilidad de los sistemas software ?es lasolucin a la crisis del software ?
12
7/27/2019 IDP 01 Introduccion a la POO
13/70
Ventajas de la POO13
Reusabilidad. Cuando hemos diseado adecuadamentelas clases, se pueden usar en distintas partes delprograma y en numerosos proyectos.
Mantenimiento. Debido a las sencillez para abstraer elproblema, los programas orientados a objetos son ms
sencillos de leer y comprender, pues nos permitenocultar detalles de implementacin dejando visible sloaquellos detalles ms relevantes.
Flexibilidad. La facilidad de aadir, suprimir o modificarnuevos objetos nos permite hacer modificaciones deuna forma muy sencilla.
Fiabilidad. Al dividir el problema en partes mspequeas podemos probarlas de manera independientey aislar mucho ms fcilmente los posibles errores quepuedan surgir.
7/27/2019 IDP 01 Introduccion a la POO
14/70
Actividad
Buscar informacin sobre la crisis delsoftware
Clasificar la informacin Analizar la informacin Exponer opiniones personales de forma
sintetizada
Discutir con los compaeros
14
7/27/2019 IDP 01 Introduccion a la POO
15/70
Objetos2
7/27/2019 IDP 01 Introduccion a la POO
16/70
Objeto
Entidad de programacin con doscomponentes: Estado: Contiene la informacin que puede
almacenar el objeto y que puede variar conrespecto al tiempo
Comportamiento: Conjunto de acciones quepuede realizar.
Alternativamente, se define un objeto comouna entidad con dos componentes: Parte esttica: datos. Parte dinmica: procedimientos o funciones que
manipulan los datos.
16
7/27/2019 IDP 01 Introduccion a la POO
17/70
Encapsulamiento
Encapsulamiento
INTERFAZ Mtodos Atributos
ESTADOCOMPORTAMIENTO
17
7/27/2019 IDP 01 Introduccion a la POO
18/70
POO vs. Prog. estructurada
modificarSueldo
modificarTrabajo
calcularEdad
crear
nombrefechaNacimientoDNItrabajosueldo
Programaprincipal
modificarSueldomodificarTrabajocalcularEdad
crear
Registro
NombrefechaNacimientoDNItrabajosueldo
FIN Registro
Estadocompartido
18
7/27/2019 IDP 01 Introduccion a la POO
19/70
Modelo de computacin clsico
Estado compartido
Funcin 1
Flujo de control Flujo de datos
Funcin 2 Funcin 3
Funcin 4 Funcin 5
19
7/27/2019 IDP 01 Introduccion a la POO
20/70
Modelo de computacin OO
dibujar
imprimir
actualizar
atributos
#1 insertar
eliminar
atributos
#2
insertar
eliminar
atributos
#3 limpiar
dibujar
atributos
#4
Flujo de control Flujo de da tos
El concepto deaplicacindesaparece
Programa =coleccin deobjetos autnomosque interactanmediante mensajes
20
7/27/2019 IDP 01 Introduccion a la POO
21/70
Paso de mensajes3
7/27/2019 IDP 01 Introduccion a la POO
22/70
Paso de mensajes
Protocolo de comunicacin interobjetual, deobjeto (emisor) a objeto (receptor)
El mensaje contiene una peticin de servicio, ascomo la informacin que el receptor pueda
necesitar para llevar a cabo el servicio El receptor, en respuesta al mensaje, ejecuta un
mtodo, tras lo cual devuelve un resultado alsolicitante
Polimorfismo de inclusin El mtodo que se ejecuta en respuesta al mensaje no
es fijo, diferentes objetos pueden aceptar el mismomensaje y realizar acciones diferentes.
22
7/27/2019 IDP 01 Introduccion a la POO
23/70
Mensajes
Un mensaje incluye Selector (el nombre de una operacin) Lista de argumentos
Para que un objeto pueda responder a un mensaje, stedebe ser parte de su interfaz pblica.
Cuando el receptor recibe el mensaje, ejecuta unmtodo que slo l conoce Puede ser cualquiera, con tal de que haga lo establecido
para el selector del mensaje (semntica, interfaz) El emisor nunca especifica cmo debe llevarse a cabo esa
operacin (implementacin) Al conjunto de mensajes a los que puede responder un
objeto dado se le llama comportamiento del objeto.
23
7/27/2019 IDP 01 Introduccion a la POO
24/70
Mensajes
Informacin contenida en un mensaje Objeto receptor (OBJ) Selector (SEL) Lista de argumentos (ARG)
Lenguaje SintaxisSmalltalk OBJ SEL : ARG
Neon ARG SEL : OBJExpertCommonLisp (OBJ SEL )
Objective-C [OBJ SEL : ARG)
Object Pascal, C++, Java,
C#
OBJ.SEL(ARG)
24
7/27/2019 IDP 01 Introduccion a la POO
25/70
Clases4
7/27/2019 IDP 01 Introduccion a la POO
26/70
Clase
La mayor parte de los sistemas orientados a objetosdistinguen entre la descripcin de un objeto y el objetoen s
Muchos objetos similares pueden ser descritos por unamisma definicin o esquema general (principio de
abstraccin) Una clase es una definicin, plantilla o molde que
permite la creacin de objetos, y contiene ladescripcin de las caractersticas comunes de esosobjetos
Componentes de una clase: Parte esttica: Campos con nombres, atributos Parte dinmica: Procedimientos o Funcinnes, mtodos
26
7/27/2019 IDP 01 Introduccion a la POO
27/70
Clases y TAD
El concepto de clase est fuertementerelacionado con el concepto de tipoabstracto de datos:Un tipo abstracto de datos viene definido por
una serie de operaciones que se puedenefectuar sobre los representantes del tipo.
Una clase es la implementacin de un tipoabstracto de datos
Para un mismo tipo puede haber distintasimplementaciones
27
7/27/2019 IDP 01 Introduccion a la POO
28/70
Clases y TAD
Tipo Pila esCrear, apilar, sacar,
superior;
Fin Tipo
PilaVector
Especificacin (TAD)
PilaLista
Implementaciones(clases)
28
7/27/2019 IDP 01 Introduccion a la POO
29/70
Declaracin de una clase
Nombre de la clase. Operaciones pblicas (interfaz)
Representacin interna de los atributos.
Implementacin de la interfazNombre
Estado (variables)
Comportamiento(mt
odos)
29
7/27/2019 IDP 01 Introduccion a la POO
30/70
Ejemplo en seudocdigo
Clase Artculo
exporta Inicializar, PrecioTotal, PrecioTransporte , Retirar,
Aadir;
atributos { por defecto ocultos}
Referencia: String;
Descripcin: String;
Precio: Real;
Cantidad:Integer;
{ cdigo para los mtodos pblicos y privados }
procedure Inicializar(NR,NS:String;NP:Real;NC:Integer);
Referencia:= NR; Descipcion:=NS; Precio:= NP;
Cantidad:= NC;
fin Inicializar
function PrecioTotal():Real;
Retorna(1.186*Precio)
fin PrecioTotal
function PrecioTransporte():Real;Retorna(0.05*Precio)
fin PrecioTransporte
procedure Retirar(q:Integer):
Cantidad := Cantidad - q
fin retirar
procedure Aadir(q:Integer):
Cantidad := Cantidad + q
fin Aadirfin Articulo
30
7/27/2019 IDP 01 Introduccion a la POO
31/70
Ejemplo en Delphi
Unit Articles;
Interface
Type Article = Object
procedure Inicialitzar(NR,NS:String;NP:Real;NC:Integer);
function PreuTotal:Real;
function PreuTransport:Real;
procedure Retirar(q:Integer);
procedure Afegir(q:Integer);
private { part privada de la classe }
referncia: String;
descripci: String;
preu: Real;
quantitat:Integer;
End; { definici de classe }
Implementation
procedure Article.Inicialitzar(NR,NS:String;NP:Real;NC:Integer);
Referncia:= NR; Descripci:=NS; Preu:= NP; Quantitat:= NC;
End; {Inicialitzar}
...
End. {Unitat de compilaci}
31
7/27/2019 IDP 01 Introduccion a la POO
32/70
Instanciacin
Operacin que permite la creacin deejemplares particulares de las clases,llamados instancias
Todo objeto es una instancia o ejemplarde una clase determinada En la mayor parte de los lenguajes OO, las
clases existen en tiempo de compilacinmientras que los objetos existen entiempo de ejecucin
32
7/27/2019 IDP 01 Introduccion a la POO
33/70
Instancia
Las instancias o ejemplares directos de unaclase tienen el mismo nmero/tipo deatributos y de mtodos
Atributos: Variables de instancia: diferentes instancias
pueden darle diferente valor Variable de clase: el mismo valor para todas las
instancias
Los mtodos son comunes a todas lasinstancias de la misma clase, residen en laclase
33
7/27/2019 IDP 01 Introduccion a la POO
34/70
Herencia simple5
7/27/2019 IDP 01 Introduccion a la POO
35/70
Taxonoma35
7/27/2019 IDP 01 Introduccion a la POO
36/70
Herencia
Mecanismo de reutilizacin de cdigo quepermite a los programadores crear nuevasclases a partir de clases existentes
Es una relacin transitiva entre clases quepermite a una nueva clase utilizar losmtodos y atributos definidos en otraclase como si fuesen propios.
36
7/27/2019 IDP 01 Introduccion a la POO
37/70
Herencia y conjuntos
Una clase define unconjunto de objetos Ej. el conjunto de
todos los mamferos
Una subclaseestablece unsubconjunto deobjetos Ej. Los carnvorosson un subconjunto
de los mamferos
37
7/27/2019 IDP 01 Introduccion a la POO
38/70
Enriquecimiento y sustitucin
Enriquecimiento: la subclase aadeatributos o mtodos no presentes en susuperclase
Sustitucin: la subclase redefine(sobreescribe) un atributo o mtodo de susuperclaseAl sobreescribir, se oculta el mtodo o
atributo de la superclase
38
7/27/2019 IDP 01 Introduccion a la POO
39/70
Ejemplo
Figura
x: integer
y: integer
getArea(): integer
Circulo
radio
getArea(): integer
setArea(integer area)
Rectangulo
base: Integer
altura: Integer
getArea(): integer
setAlto(integer alto)
setAncho(integer ancho)
Cuadrado
setAlto(integer alto)setAncho(integer ancho)
39
7/27/2019 IDP 01 Introduccion a la POO
40/70
Ejemplo
Clase Figura
Superclase
Atributos
x: Integer;
y: Integer
Mtodos pblicos
getArea:Integer
Fin Figura
Clase Circulo
Superclase Figura
Atributos
radio: Integer;
Mtodos pblicos
getArea:Retorna(PI*radio^2)
Fin Circulo
Clase Rectangulo
Superclase Figura
Atributos
base, altura: Integer
Mtodos pblicos
getArea:Retorna(PI*radio^2)
Fin Rectangulo
40
7/27/2019 IDP 01 Introduccion a la POO
41/70
Redefinicin de miembros
Para las variables de instancia: Sin redefinicin. Redefinicin arbitraria.
Redefinicin con restricciones.Definiciones ocultas.
Para los mtodos: Redefinicin arbitraria. Redefinicin con restricciones:
nicamente el cdigo. La interfaz del mtodo.
41
7/27/2019 IDP 01 Introduccion a la POO
42/70
rbol de herencia simple
Figura
Figura Abierta Figura Cerrada
Segmento PoliLinea Poligono Elipse
Triangulo Rectngulo
Cuadrado
42
7/27/2019 IDP 01 Introduccion a la POO
43/70
Ejemplo herencia (Delphi)
unit Unit2;interface
type Figura = class
// atributos
protected
x,y : integer;
publicconstructor crear(nx,ny:integer);
procedure desplazar( incx, incy: integer);
end;
type Cuadrado = class(Figura)
protected
lado: integer;
public
constructor crear(nx,ny,nl:integer);
procedure dibujar;
end;
implementation
43
7/27/2019 IDP 01 Introduccion a la POO
44/70
Ejemplo herencia Delphi
implementation
constructor Figura.crear(nx,ny:integer);
begin x:= nx; y:= ny; end;
procedure Figura.desplazar( incx, incy: integer);
begin x:= x + incx ; y:= y + incy; end;
constructor Cuadrado.crear(nx,ny,nl:integer);
begin
inheritedcrear(nx,ny);
costat:= nl;
end;
procedure Cuadrado.dibujar;
begin
// ...
end;
44
7/27/2019 IDP 01 Introduccion a la POO
45/70
Ejemplo herencia(y 3)
// En otro lugar...var f: Figura;
q: Cuadrado;begin
f:= Figura.crear(10,10);f.desplaar(1,1);q:= Cuadrado.crear(20, 20, 10);q.desplazar(2,2);
q.dibujar;
end;
45
7/27/2019 IDP 01 Introduccion a la POO
46/70
Jerarqua de vehculos
Establece una jerarqua para estas clases,aadiendo las clases que consideresoportuno.
Coche depolica
Camin debomberos
Ambulancia
Helicptero Hidroavin
Coche debomberos
Furgonetade polica
Moto depolica
46
7/27/2019 IDP 01 Introduccion a la POO
47/70
Herencia mltiple6
7/27/2019 IDP 01 Introduccion a la POO
48/70
Herencia mltiple
Algunos lenguajes orientados a objetospermiten que una clase determinadapueda tener ms de una superclase
directa, en este caso se habla de herenciamltiple Si B posee A1,..,Ansuperclases directas
entonces B hereda la unin de las
variables de instancia y de los mtodos deA1,..,An
48
7/27/2019 IDP 01 Introduccion a la POO
49/70
Ejemplo herencia mltiple
Persona
Empleado Estudiante
Vendedor Gerente Ingeniero
Estudiante Trabajador
Gerente Ventas Director Tcnico
Secretaria
49
7/27/2019 IDP 01 Introduccion a la POO
50/70
Conflictos de nombre
Dos o ms superclasesdirectas de una dadaposeen atributos y/omtodos con el mismonombre
Estrategias deresolucin de conflictos: Linearizacin del grafo
de herencia. Renombrado de
variables de instancias y
de mtodos. Cualificacin de
variables de instancia yde mtodos
Persona
Nombre
Edad
Trabajador Estudiante
Antiguedad Curso
Escuela
bonificacin bonificacin
Estudiante
Trabajador
bonificacin
hereda_de
hereda_de
50
7/27/2019 IDP 01 Introduccion a la POO
51/70
Linearizacin
Persona
Trabajador
Estudiante
bonificacin
bonificacin
Estudiante
Trabajador
bonificacin
Persona
Trabajador
Estudiante
bonificacin
bonificacin
Estudiante
Trabajador
bonificacin
51
7/27/2019 IDP 01 Introduccion a la POO
52/70
Renombrado
El compilador trabaja directamente con el grafode herencia, cuando encuentra un conflicto denombre genera una mensaje de error
El programador o usuario es el que debe de
resolver el conflicto de nombres Utilizado en lenguajes como Eiffel; el
renombrado se hace en la clase descendiente.class Estudiante_Trabajador
inherit Empleado
rename bonificacion as bonificacion_empleadoEstudiante
...
end
52
f
7/27/2019 IDP 01 Introduccion a la POO
53/70
Cualificacin
Cuando surge un conflicto de nombres,los atributos o los mtodos se calificancon el nombre de la clase a la que
pertenecen Por ejemplo, en C++:
Estudiante::bonificacion
Empleado::bonificacion
53
7/27/2019 IDP 01 Introduccion a la POO
54/70
Polimorfismo7
l f
7/27/2019 IDP 01 Introduccion a la POO
55/70
Polimorfismo
Un objeto polimrfico es aquel que puedecontener valores de diferente tipo durantela ejecucin de un programa.
Ad hoc UniversalSobrecarga Paramtrico
(Genericidad)Coercin De inclusin ocontrolado porherencia
55
S b
7/27/2019 IDP 01 Introduccion a la POO
56/70
Sobrecarga
Se emplea el mismo smbolo para denotaroperaciones con distinto significado.
function Add( x, y : Integer ) : Integer;
begin
Add := x + y
end;
function Add( s, t : String ) : String;
begin
Add := Concat( s, t )
end;
56
C i
7/27/2019 IDP 01 Introduccion a la POO
57/70
Coercin
Coercin = conversin implcita de tipo:Las operaciones pueden trabajar con tiposmezclados
double d;
long l;
int i;
if (d > i) d = i;
if (i > l) l = i;if (d == l) d *= 2;
57
G i id d
7/27/2019 IDP 01 Introduccion a la POO
58/70
Genericidad
Definicin de clases(o mtodos)paramtricos:admiten uno o ms
tipos comoparmetro.
Clase Pila[T]
Campos
Representacion: Array[T]
NumElementos : Integer;
Mtodos
/* No se muestra elcdigo de los mtodos */
Crear();
Aadir(Item:T);
Desapilar(Var Item: T);...
CimaPila(Var Item:T);
fin
58
A i i i & di i
7/27/2019 IDP 01 Introduccion a la POO
59/70
Asignacin esttica & dinmica
Asignacin esttica: los tipos se asociancon las variables o identificadoresmediante declaraciones explcitas.
Asignacin dinmica: los tipos se enlazancon los valores de las variables en tiempode ejecucin. Las variables no declaran un tipo, solo un
valor. El tipo se decide dinmicamente.
59
A i i i
7/27/2019 IDP 01 Introduccion a la POO
60/70
Asignacin esttica
Con asignacin esttica de tipos, lasvariables tienen 2 tipos, el esttico y eldinmico El tipo esttico se determina en tiempo decompilacin, al inspeccionar la declaracin
de esa variable. El tipo dinmico puede variar en tiempo deejecucin, y queda determinado por el tipo
del valor referenciado en un momentodeterminado. Debe ser un descendiente del tipo esttico
60
Ti i di i
7/27/2019 IDP 01 Introduccion a la POO
61/70
Tipo esttico y dinmico
Lenguajes con asignacin esttica:ActionScript 3, Ada, C, D, Eiffel, F#, Fortran,Go, Haskell, haXe,JADE,Java, ML, Objective-C, OCaml, Pascal, Seed7 and Scala.
Lenguajes con asignacin dinmicaAPL, Erlang, Groovy,JavaScript, Lisp, Lua,MATLAB, GNU Octave, Perl (for user-definedtypes, but not built-in types), PHP, Pick BASIC,
Prolog, Python, R, Ruby, Smalltalk and Tcl Lenguajes hbridos: C#
61
E l tti di i
http://en.wikipedia.org/wiki/ActionScripthttp://en.wikipedia.org/wiki/Ada_(programming_language)http://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/D_(programming_language)http://en.wikipedia.org/wiki/Eiffel_(programming_language)http://en.wikipedia.org/wiki/F_Sharp_(programming_language)http://en.wikipedia.org/wiki/Fortranhttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/OCamlhttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Pascal_(programming_language)http://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Seed7http://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/Scala_(programming_language)http://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/APL_(programming_language)http://en.wikipedia.org/wiki/Erlang_(programming_language)http://en.wikipedia.org/wiki/Groovy_(programming_language)http://en.wikipedia.org/wiki/JavaScripthttp://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/Lua_(programming_language)http://en.wikipedia.org/wiki/MATLABhttp://en.wikipedia.org/wiki/GNU_Octavehttp://en.wikipedia.org/wiki/Perlhttp://en.wikipedia.org/wiki/PHPhttp://en.wikipedia.org/wiki/Pick_operating_systemhttp://en.wikipedia.org/wiki/Prolog_(programming_language)http://en.wikipedia.org/wiki/Python_(programming_language)http://en.wikipedia.org/wiki/R_(programming_language)http://en.wikipedia.org/wiki/Ruby_(programming_language)http://en.wikipedia.org/wiki/Smalltalkhttp://en.wikipedia.org/wiki/Tclhttp://en.wikipedia.org/wiki/C_Sharp_(programming_language)http://en.wikipedia.org/wiki/C_Sharp_(programming_language)http://en.wikipedia.org/wiki/Tclhttp://en.wikipedia.org/wiki/Smalltalkhttp://en.wikipedia.org/wiki/Ruby_(programming_language)http://en.wikipedia.org/wiki/R_(programming_language)http://en.wikipedia.org/wiki/Python_(programming_language)http://en.wikipedia.org/wiki/Prolog_(programming_language)http://en.wikipedia.org/wiki/Pick_operating_systemhttp://en.wikipedia.org/wiki/PHPhttp://en.wikipedia.org/wiki/Perlhttp://en.wikipedia.org/wiki/GNU_Octavehttp://en.wikipedia.org/wiki/MATLABhttp://en.wikipedia.org/wiki/Lua_(programming_language)http://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/JavaScripthttp://en.wikipedia.org/wiki/Groovy_(programming_language)http://en.wikipedia.org/wiki/Erlang_(programming_language)http://en.wikipedia.org/wiki/APL_(programming_language)http://en.wikipedia.org/wiki/Scala_(programming_language)http://en.wikipedia.org/wiki/Seed7http://en.wikipedia.org/wiki/Pascal_(programming_language)http://en.wikipedia.org/wiki/OCamlhttp://en.wikipedia.org/wiki/Objective-Chttp://en.wikipedia.org/wiki/ML_(programming_language)http://en.wikipedia.org/wiki/Java_(programming_language)http://en.wikipedia.org/wiki/JADE_(programming_language)http://en.wikipedia.org/wiki/HaXehttp://en.wikipedia.org/wiki/Haskell_(programming_language)http://en.wikipedia.org/wiki/Go_(programming_language)http://en.wikipedia.org/wiki/Fortranhttp://en.wikipedia.org/wiki/F_Sharp_(programming_language)http://en.wikipedia.org/wiki/Eiffel_(programming_language)http://en.wikipedia.org/wiki/D_(programming_language)http://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/Ada_(programming_language)http://en.wikipedia.org/wiki/ActionScript7/27/2019 IDP 01 Introduccion a la POO
62/70
Enlace esttico y dinmico
Cundo se produce la asociacin entreuna expresin de paso de mensajes y elcdigo que ha de ejecutarse? Enlace esttico (en tiempo de compilacin): siel enlace del mtodo al mensaje se basa en
las caractersticas estticas de la variable. Enlace dinmico (en tiempo de ejecucin): si
el enlace del mtodo al mensaje se basa enel tipo del valor y no en el tipo de ladeclaracin.
62
P li fi d I l i
7/27/2019 IDP 01 Introduccion a la POO
63/70
Polimorfismo de Inclusin
Variables de una clase determinada puedenreferirse a instancias de clasesdescendientes.
Figura[n] a;For i:=1 to N a[i].dibujar()
Cuadrado Crculo Rombo
63
7/27/2019 IDP 01 Introduccion a la POO
64/70
Meta-clases8
M t l
7/27/2019 IDP 01 Introduccion a la POO
65/70
Metaclases
En algunos lenguajes las clases existen entiempo de ejecucin y pueden ser tratadascomo objetos
En esos lenguajes hay dos tipos deobjetos:Objetos clase: objetos que pueden actuar
como plantillas y crear instancias de ellosmismos.
Objetos terminales: objetos que pueden serinstanciados pero que no pueden instanciarotros objetos.
65
M t l
7/27/2019 IDP 01 Introduccion a la POO
66/70
Metaclases
Una meta-clase es una clase cuyas instancias sonclases las metaclases que engendran las clases las clases engendran las instancias terminales
Ventajas de utilizar metaclases: Se pueden utilizar para almacenar informacin
relativa a las instancias (informacin de grupo), en laforma de variables de clase. Los mtodos asociadoscon la clase (mtodos de clase) se emplean paramanipular las variables de clase.
Su utilizacin en la creacin/inicializacin de lasnuevas instancias de la misma. El mensaje newenviado a la clase puede llevar asociado argumentosadicionales para inicializar las variables de instancia.
66
M t l S llt lk 76
7/27/2019 IDP 01 Introduccion a la POO
67/70
Metaclases en Smalltalk-76
Coche
ClassObject
Class classObject class
SubclasseInstancia_de
Metaclass
Metaclassclass
67
Metaclases en Smalltalk 76
7/27/2019 IDP 01 Introduccion a la POO
68/70
Metaclases en Smalltalk-7668
Metaclases en LOOPS
7/27/2019 IDP 01 Introduccion a la POO
69/70
Metaclases en LOOPS
Similar a SmallTalk, con tres niveles deabstraccin: metaclases, clases einstancias terminales
Principal diferencia es que el nmero demetaclases no est limitado, se puedencrear nuevas metaclases explcitamente
69
Metaprogramacin
7/27/2019 IDP 01 Introduccion a la POO
70/70
Metaprogramacin
En grupos de 2, elegid uno de los siguienteslenguajes, y preparar una presentacin sobremetaprogramacin en ese lenguaje, conespecial hincapi en el concepto de meta-
clase. Calcula 10 minutos para hacer la presentacin
Lenguajes a elegir Python Ruby Groovy Other
70
Recommended