IDP 01 Introduccion a la POO

download IDP 01 Introduccion a la POO

of 70

Transcript of IDP 01 Introduccion a la POO

  • 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=D5hUbYVD25Q
  • 7/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/Dynabook
  • 7/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_Parnas
  • 7/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/ActionScript
  • 7/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