Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INGENIERA DE LA PROGRAMACIN
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
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.
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.
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:
Historia de la POO
8
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.
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
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
Programa principal
Estado compartido
Estado compartido
Funcin 1
Funcin 2
Funcin 3
Funcin 4
Funcin 5
Flujo de control
Flujo de datos
Modelo de computacin OO
20
#3
#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
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
Lenguaje
Sintaxis
Smalltalk Neon
ExpertCommonLisp Objective-C Object Pascal, C++, Java, C#
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)
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);
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
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
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
Figura Abierta
Figura Cerrada
Segmento
PoliLinea
Poligono
Elipse
Triangulo
Rectngulo
Cuadrado
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
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:
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
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
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
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: 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
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
Lenguajes hbridos: C#
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
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
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.
Lenguajes a elegir
Python Ruby Groovy Other