Está en la página 1de 70

TEMA 1: INTRODUCCIN A LA PROGRAMACIN ORIENTADA A OBJETOS

INGENIERA DE LA PROGRAMACIN

Mster en Ingeniera del Software, Mtodos Formales y Sistemas de Informacin

Contenidos
2
1.
2. 3.

4.
5. 6. 7. 8.

Introduccin. El concepto de objeto Paso de mensajes El concepto de clase Herencia simple Herencia mltiple Polimorfismo Meta-clases.

Introduccin

1. Introduccin
4

Varios paradigmas de programacin:

Programacin estructurada: describe por separado el estado del programa (datos) y los procedimientos que cambian dicho estado.

Programacin funcional: enfatiza la utilizacin de funciones que no manejan datos mutables o de estado. Tiene sus races en el clculo lambda Programacin lgica: datos en forma de proposiciones lgicas, y procedimientos basados en la demostracin de teoremas lgicos Programacin orientada a objetos: descomposicin de un problema en clases y objetos. Los objetos encapsulan en una misma entidad el estado y los procedimientos para modificar ese estado.

Paradigma dominante hasta los aos 80-90.

Paradigma dominante desde finales de los aos 90

La crisis del software


5

Trmino acuado en 1968, en la primera conferencia organizada por la OTAN sobre desarrollo de software, de la cual naci formalmente 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.

La crisis del software


6

Historia de la POO
7

Simula-67:
Objeto: entidad de programacin que encapsula datos y procedimientos que los manipulan Conceptos de la programacin orientada a objetos:

objetos y clases encapsulacin y ocultacin de informacin

Smalltak (Alan Kay, Xerox PARC)


Objetos dinmicos (ciclo de vida) Introduce herencia

Historia de la POO
8

Aos 70: encapsulacin, ocultacin de informacin, mdulos (David Parnas)


Smalltalk-80

partir de mediados de los 80, un gran nmero de lenguajes OO


Extensiones

OO de lenguajes clsicos (turbo Pascal con objetos, C++, Ada, CLOS, ) Lenguajes genuinamente OO (Eiffel, Java, Perl, PHP, C#, )

Conceptos fundamentales
9

Clase: Definiciones de las propiedades y comportamiento de un tipo de objeto concreto. Herencia: Capacidad de una clase para heredar atributos 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 clase comparten el comportamiento pero tienen estado propio. Mtodo: Procedimiento asociado a una clase de objetos, cuya ejecucin se desencadena tras la recepcin de determinado "mensaje".

Principios
10

Abstraccin: seleccionar las caractersticas relevantes dentro de un conjunto e identificar comportamientos 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 pueda cambiar mediante las operaciones definidas para ese objeto.

Principios
11

Polimorfismo: misma denominacin para comportamientos diferentes (diferentes implementaciones) Modularidad: propiedad que permite subdividir una aplicacin en partes ms pequeas (llamadas mdulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicacin en s y de las restantes partes.

Por qu triunfa la POO?


12

la forma de de analizar problemas se acerca ms 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 la solucin a la crisis del software ?

Ventajas de la POO
13

Reusabilidad. Cuando hemos diseado adecuadamente las clases, se pueden usar en distintas partes del programa y en numerosos proyectos. Mantenimiento. Debido a las sencillez para abstraer el problema, los programas orientados a objetos son ms sencillos de leer y comprender, pues nos permiten ocultar detalles de implementacin dejando visible slo aquellos detalles ms relevantes. Flexibilidad. La facilidad de aadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla. Fiabilidad. Al dividir el problema en partes ms pequeas podemos probarlas de manera independiente y aislar mucho ms fcilmente los posibles errores que puedan surgir.

Actividad
14

Buscar informacin sobre la crisis del software Clasificar la informacin Analizar la informacin Exponer opiniones personales de forma sintetizada Discutir con los compaeros

Objetos

Objeto
16

Entidad de programacin con dos componentes:

Alternativamente, se define un objeto como una entidad con dos componentes:

Estado: Contiene la informacin que puede almacenar el objeto y que puede variar con respecto al tiempo Comportamiento: Conjunto de acciones que puede realizar.

Parte esttica: datos. Parte dinmica: procedimientos o funciones que manipulan los datos.

Encapsulamiento
17 Encapsulamiento

COMPORTAMIENTO Mtodos

ESTADO Atributos

INTERFAZ

POO vs. Prog. estructurada


18
modificarSueldo modificarTrabajo calcularEdad crear nombre fechaNacimiento DNI trabajo sueldo

Programa principal

modificarSueldo modificarTrabajo calcularEdad crear

Registro Nombre fechaNacimient o DNI trabajo sueldo FIN Registro

Estado compartido

Modelo de computacin clsico


19

Estado compartido

Funcin 1

Funcin 2

Funcin 3

Funcin 4

Funcin 5

Flujo de control

Flujo de datos

Modelo de computacin OO
20

dibujar imprimir actualizar atributos eliminar #1 insertar atributos #2

insertar atributos eliminar

#3

limpiar atributos dibujar

#4

El concepto de aplicacin desaparece Programa = coleccin de objetos autnomos que interactan mediante mensajes

Flujo de control

Flujo de datos

Paso de mensajes

Paso de mensajes
22

Protocolo de comunicacin interobjetual, de objeto (emisor) a objeto (receptor) El mensaje contiene una peticin de servicio, as como 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 al solicitante Polimorfismo de inclusin

El mtodo que se ejecuta en respuesta al mensaje no es fijo, diferentes objetos pueden aceptar el mismo mensaje y realizar acciones diferentes.

Mensajes
23

Un mensaje incluye

Para que un objeto pueda responder a un mensaje, ste debe ser parte de su interfaz pblica. Cuando el receptor recibe el mensaje, ejecuta un mtodo que slo l conoce

Selector (el nombre de una operacin) Lista de argumentos

Al conjunto de mensajes a los que puede responder un objeto dado se le llama comportamiento del objeto.

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)

Mensajes
24

Informacin contenida en un mensaje


Objeto receptor (OBJ) Selector (SEL) Lista de argumentos (ARG)

Lenguaje

Sintaxis

Smalltalk Neon
ExpertCommonLisp Objective-C Object Pascal, C++, Java, C#

OBJ SEL : ARG ARG SEL : OBJ


(OBJ SEL <ARG>) [OBJ SEL : ARG) OBJ.SEL(ARG)

Clases

Clase
26

La mayor parte de los sistemas orientados a objetos distinguen entre la descripcin de un objeto y el objeto en s Muchos objetos similares pueden ser descritos por una misma definicin o esquema general (principio de abstraccin) Una clase es una definicin, plantilla o molde que permite la creacin de objetos, y contiene la descripcin de las caractersticas comunes de esos objetos Componentes de una clase:

Parte esttica: Campos con nombres, atributos Parte dinmica: Procedimientos o Funcinnes, mtodos

Clases y TAD
27

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 implementacin de un tipo abstracto de datos Para un mismo tipo puede haber distintas implementaciones

Clases y TAD
28 Tipo Pila es Crear, apilar, sacar, superior; Fin Tipo

Especificacin (TAD)

Pila Vector

Pila Lista

Implementaciones (clases)

Declaracin de una clase


29

Nombre de la clase. Operaciones pblicas (interfaz) Representacin interna de los atributos. Implementacin de la interfaz
Nombre Estado (variables)

Comportamiento(mt odos)

Ejemplo en seudocdigo
30
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 Aadir fin Articulo

Ejemplo en Delphi
31
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}

Instanciacin
32

Operacin que permite la creacin de ejemplares particulares de las clases, llamados instancias Todo objeto es una instancia o ejemplar de una clase determinada En la mayor parte de los lenguajes OO, las clases existen en tiempo de compilacin mientras que los objetos existen en tiempo de ejecucin

Instancia
33

Las instancias o ejemplares directos de una clase tienen el mismo nmero/tipo de atributos 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 las instancias de la misma clase, residen en la clase

Herencia simple

Taxonoma
35

Herencia
36

Mecanismo de reutilizacin de cdigo que permite a los programadores crear nuevas clases a partir de clases existentes Es una relacin transitiva entre clases que permite a una nueva clase utilizar los mtodos y atributos definidos en otra clase como si fuesen propios.

Herencia y conjuntos
37

Una clase define un conjunto de objetos

Ej. el conjunto de todos los mamferos

Una subclase establece un subconjunto de objetos

Ej. Los carnvoros son un subconjunto de los mamferos

Enriquecimiento y sustitucin
38

Enriquecimiento: la subclase aade atributos o mtodos no presentes en su superclase Sustitucin: la subclase redefine (sobreescribe) un atributo o mtodo de su superclase
Al

sobreescribir, se oculta el mtodo o atributo de la superclase

Ejemplo
39
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)

Ejemplo
40
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

Redefinicin de miembros
41

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.

rbol de herencia simple


42
Figura

Figura Abierta

Figura Cerrada

Segmento

PoliLinea

Poligono

Elipse

Triangulo

Rectngulo

Cuadrado

Ejemplo herencia (Delphi)


43
unit Unit2; interface type Figura = class // atributos protected x,y : integer; public constructor 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

Ejemplo herencia Delphi


44
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 inherited crear(nx,ny); costat:= nl; end; procedure Cuadrado.dibujar; begin // ... end;

Ejemplo herencia(y 3)
45

// 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;

Jerarqua de vehculos
46

Establece una jerarqua para estas clases, aadiendo las clases que consideres oportuno.

Camin de bomberos

Coche de polica

Ambulancia

Coche de bomberos

Helicptero

Hidroavin

Furgoneta de polica

Moto de polica

Herencia mltiple

Herencia mltiple
48

Algunos lenguajes orientados a objetos permiten que una clase determinada pueda tener ms de una superclase directa, en este caso se habla de herencia mltiple Si B posee A1,..,An superclases directas entonces B hereda la unin de las variables de instancia y de los mtodos de

A1,..,An

Ejemplo herencia mltiple


49
Persona

Empleado

Estudiante

Estudiante Trabajador

Vendedor

Gerente

Ingeniero

Secretaria

Gerente Ventas

Director Tcnico

Conflictos de nombre
50

Dos o ms superclases directas de una dada poseen atributos y/o mtodos con el mismo nombre Estrategias de resolucin de conflictos:

Persona Nombre Edad

hereda_de Trabajador Antiguedad bonificacin hereda_de Estudiante Curso Escuela bonificacin

Linearizacin del grafo de herencia. Renombrado de variables de instancias y de mtodos. Cualificacin de variables de instancia y de mtodos

Estudiante Trabajador

bonificacin

Linearizacin
51
Persona Persona

Trabajador
bonificacin

Estudiante
bonificacin

Estudiante

Trabajador

bonificacin

bonificacin

Estudiante Trabajador bonificacin

Estudiante Trabajador bonificacin

Renombrado
52

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 Utilizado en lenguajes como Eiffel; el renombrado se hace en la clase descendiente.
class Estudiante_Trabajador inherit Empleado rename bonificacion as bonificacion_empleado Estudiante ... end

Cualificacin
53

Cuando surge un conflicto de nombres, los atributos o los mtodos se califican con el nombre de la clase a la que pertenecen Por ejemplo, en C++:
Estudiante::bonificacion Empleado::bonificacion

Polimorfismo

Polimorfismo
55

Un objeto polimrfico es aquel que puede contener valores de diferente tipo durante la ejecucin de un programa.
Ad hoc Sobrecarga Universal Paramtrico (Genericidad) De inclusin o controlado por herencia

Coercin

Sobrecarga
56

Se emplea el mismo smbolo para denotar operaciones 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;

Coercin
57

Coercin = conversin implcita de tipo: Las operaciones pueden trabajar con tipos mezclados
double d; long l; int i; if (d > i) d = i; if (i > l) l = i; if (d == l) d *= 2;

Genericidad
58

Definicin de clases (o mtodos) paramtricos: admiten uno o ms tipos como parmetro.

Clase Pila[T] Campos Representacion: Array[T] NumElementos : Integer; Mtodos /* No se muestra el cdigo de los mtodos */ Crear(); Aadir(Item:T); Desapilar(Var Item: T); ... CimaPila(Var Item:T); fin

Asignacin esttica & dinmica


59

Asignacin esttica: los tipos se asocian con las variables o identificadores mediante declaraciones explcitas. Asignacin dinmica: los tipos se enlazan con los valores de las variables en tiempo de ejecucin.
Las

variables no declaran un tipo, solo un valor. El tipo se decide dinmicamente.

Asignacin esttica
60

Con asignacin esttica de tipos, las variables tienen 2 tipos, el esttico y el dinmico
El

tipo esttico se determina en tiempo de compilacin, al inspeccionar la declaracin de esa variable. El tipo dinmico puede variar en tiempo de ejecucin, y queda determinado por el tipo del valor referenciado en un momento determinado.
Debe

ser un descendiente del tipo esttico

Tipo esttico y dinmico


61

Lenguajes con asignacin esttica:


ActionScript 3, Ada, C, D, Eiffel, F#, Fortran, Go, Haskell, haXe, JADE, Java, ML, ObjectiveC, OCaml, Pascal, Seed7 and Scala.

Lenguajes con asignacin dinmica


APL, Erlang, Groovy, JavaScript, Lisp, Lua, MATLAB, GNU Octave, Perl (for user-defined types, but not built-in types), PHP, Pick BASIC, Prolog, Python, R, Ruby, Smalltalk and Tcl

Lenguajes hbridos: C#

Enlace esttico y dinmico


62

Cundo se produce la asociacin entre una expresin de paso de mensajes y el cdigo que ha de ejecutarse?
Enlace

esttico (en tiempo de compilacin): si el 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 en el tipo del valor y no en el tipo de la declaracin.

Polimorfismo de Inclusin
63

Variables de una clase determinada pueden referirse a instancias de clases descendientes.


Figura[n] a; For i:=1 to N a[i].dibujar() Cuadrado Crculo Rombo

Meta-clases

Metaclases
65

En algunos lenguajes las clases existen en tiempo de ejecucin 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.

Metaclases
66

Una meta-clase es una clase cuyas instancias son clases

Ventajas de utilizar metaclases:

las metaclases que engendran las clases las clases engendran las instancias terminales

Se pueden utilizar para almacenar informacin relativa a las instancias (informacin de grupo), en la forma de variables de clase. Los mtodos asociados con la clase (mtodos de clase) se emplean para manipular las variables de clase. Su utilizacin en la creacin/inicializacin 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.

Metaclases en Smalltalk-76
67
Metaclass class

Metaclass

Object class

Class class

Object

Class
Subclasse Instancia_de

Coche

Metaclases en Smalltalk-76
68

Metaclases en LOOPS
69

Similar a SmallTalk, con tres niveles de abstraccin: metaclases, clases e instancias terminales Principal diferencia es que el nmero de metaclases no est limitado, se pueden crear nuevas metaclases explcitamente

Metaprogramacin
70

En grupos de 2, elegid uno de los siguientes lenguajes, y preparar una presentacin sobre metaprogramacin en ese lenguaje, con especial hincapi en el concepto de metaclase.

Calcula 10 minutos para hacer la presentacin

Lenguajes a elegir
Python Ruby Groovy Other

También podría gustarte