Download El modelo orientado a objetos

Document related concepts

Scala (lenguaje de programación) wikipedia , lookup

Polimorfismo (informática) wikipedia , lookup

Common Lisp wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Objeto inmutable wikipedia , lookup

Transcript
El modelo orientado a objetos:
Introducción
Humberto Cervantes Maceda
Alfonso Martínez Martínez
1
Abril 2005
Contenido
Historia
El modelo de objetos
La tecnología orientada a
objetos
2
HISTORIA
3
Historia
Finales de los 40’s y pricipio de los 50’s:
Kristen Nygaard y Ole-Johan Dahl se unen a un
proyecto de calculos de absorción por
resonancia, para la construcción del primer
reactor nuclear, para la Oficina de Defensa
Noruega
Nygaard (1926-2002): investigador en ciencias
Dahl (1931-2002): diseñador de lenguajes de
programación e implementación
4
Ole-Johan Dahl
5
Ole-Johan Dahl & Kristen Nygaard
6
Historia
Dentro del campo de la simulación,
encontraron grandes dificultades en
modelar la estructura y actividad de los
sistemas en estudio
En 1960 Nygaard se fue al “Norwegian
Computing Center (NCC)” para hacerle
frente al reto
7
Historia
Posteriormente se unieron Dahl y Bjrn
Myhrhaug
Nygaard observó que varios proyectos
(civiles) presentaban problemas
metodológicos similares a los que ellos
enfrentaban (en el ámbito militar)
8
Simula I
Simula I fue la respuesta a la
problemática en cuestión, relacionada a
la descripción de sistemas
La implementación de Simula I, fue
soportada por una computadora UNIVAC
1107 con ALGOL 60
9
Dahl & Nygaard
10
Simula I: características
Un preprocesador de Algol 60
Una biblioteca de subprogramas;
Un esquema original de asignación
de pila (stack) por proceso
Aún sin el concepto de objeto
11
Conceptos madurados a partir de
Simula I
Construcciones de datos y acciones
agrupados juntos: encapsulamiento y
objeto
Acceso externo a atributos de objetos
(Hoare): seguridad en tiempo de
ejecución con revisión económica en
tiempo de compilación
Reconocimiento de propiedades
comunes: esquema de factorización o
herencia
12
Conceptos madurados a partir de
Simula I
Reconocimiento de comportamiento
abstracto similar entre clases, con
comportamiento concreto completamente
diferente: concepto de asociación
dinámica (dynamic binding)
Técnica de acción entrelazada para la
simulación de concurrencia
Estos conceptos llevaron al conocimiento
de un nuevo lenguaje: Simula 67
13
Simula 67
Lenguaje de propósito general con
capacidad de simulación, aplicando sus
propios conceptos básicos
Ha influenciado el desarrollo de lenguajes
modernos en la programación orientada a
objetos
14
15
Kristen Nygaard & Ole-Johan Dahl: ACM Turing award
2001 and IEEE John von Neumann Medal 2002
Lenguajes descendientes de
Simula 67
Eiffel (Simula 85): diseñado por Bertrand
Meyer. En algún momento, presidente de
la “Association of Simula Users”
Smalltalk: debe su existencia a Alan Kay.
Un visionario cuyas perspectivas fueron
influenciadas profundamente por las
primeras implementaciones de Simula
16
Lenguajes descendientes de
Simula 67
C++: desarrollado por Bjarne Stroustrup,
otro viejo usuario de Simula, quién plasmó
las características de éste en lenguaje ‘C’
Ada: su diseñador en jefe, Jean Ichbiah,
lidereó a un grupo de desarrollo que
implementó un subconjunto de simula
17
El modelo de objetos
18
Principios
Simulación del mundo real: expresión de
elementos del mundo real en la memoria
de la computadora
Atacar la complejidad en el desarrollo de
systemas de software
19
Objetos
El término Objeto fue formalmente utilizado por
primera vez en Simula y se utilizó en sus
programas para simular algunos aspectos de
la realidad
Los objetos representan entidades que, en
terminos generales, se pueden clasificar en:
Cosas tangibles,
Roles,
Incidentes,
Interacciones,
Especificaciones
20
Objetos: definiciones
Un objeto representa elementos identificables,
unidades o entidades, individuales, reales o
abstractas, pero con rol bien definido en el
dominio del problema [Smith and Tockey]
Un objeto es un concepto, abstracción o cosa
con fronteras bien ndefinidas y significado
para el manejo del problema [Rumbaugh]
Un objeto tiene estado, comportamiento e
identidad; la estructura y comportamiento de
objetos similares son expresadas a través de
una clase; los terminos objeto e instancia son
intercambiables [Booch]
21
Objetos: características
Estado: Abarca todas las propiedades del
objeto (normalmente estáticas) y los valores de
sus propiedades (normalmente dinámicas)
Comportamiento: Consiste en la forma de
actuar y reaccionar de un objeto, en términos de
sus cambios de estado y paso de mensajes
Identidad: Son las propiedades de los objetos
que los distinguen de los demás
22
Objetos: características
La implementación de objetos puede ser clasificada
como: basada en descriptores, basada en capacidad y
estática
Basada en descriptores (Smalltalk) permite una
tipificación dinámica poderosa
Basada en capacidad es encontrada frecuentemente en
bases de datos orientadas a objetos y sistemas
operativos (object id's)
La aproximación estática es encontrada en lenguajes
como C++
Una aproximación basada en un "proxy" que contiene
una capa de indirecciones, para manejadore de
Smalltalk, es utilizada para el manejo de objetos
migrantes en forma transparente y distribuida
23
Objetos: relaciones
Enlace o liga: denota un tipo de asociación a
través de la cual un objeto (cliente), utiliza los
servicios de otro (servidor), estableciendo una
comunicación
Agregación: se presenta cuando un objeto
forma parte del estado de otro. De esta forma
se expresa una jerarquía Todo/Partes entre
objetos.
El envío de mensajes entre objetos puede
establecerse cuando a través de su relación un
objeto está al alcance de otro
24
Objetos: ejemplo
25
Objeto producto de una tienda de autoservicio
Estado
Nombre= “Jabón de tocador”
Marca= “Palmolive”
Peso= 100 gr.
Tipo= “normal”
Precio=$4.59
Comportamiento
Cambiar precio
Cambiar marca
Etc.
Identidad
A una instancia de producto se le puede
nombrar j
Clase
Es una especificación de estructura (variables
de instancia), comportamiento (métodos), y
herencia (padres o estructura y
comportamiento recursivos) para objetos
Una clase puede especificar también permisos
de acceso a clientes y clases derivadas,
visibilidad y classes can also specify access
permissions for clients and derived classes,
visibilidad y resolución en búsqueda de
miembros
Una clase es un descriptor/constructor de
objetos
26
Representación en UML
Clase: descripción de un conjunto de
objetos que comparten los mismos
atributos, relaciones y semántica
Nombre
[visibilidad] nombre [multiplicidad]
[: tipo][=valor-inicial] [{propiedades}]
Atributos
[visibilidad] nombre ([lista de parm.])
[: tipo que regresa][{propiedades}]
Operaciones
Nombre Itálico = operación abstracta
27
Nombre: tipo
<<estereotipo>>
Nombre Itálico =
clase abstracta
Visibilidad:
+ Público
# Protegido
- Privado
¿Cómo especificar una clase?
Abstracción: establece las características
esenciales de un objeto que lo distingue de los
demás, ofreciendo fronteras conceptuales bien
definidas desde la perspectiva del observador
Encapsulamiento: es un mecanismo que
permite separar la interfaz de una abstracción,
de su implementación, además de no permitir
el acceso directo a su estructura (atributos)
28
Ejemplo de una clase persona
Se puede describir a una persona en forma
diferente: como empleado de una empresa ó
como estudiante de la UAM.
En ambos casos no tiene sentido describir el
color de sus ojos o la forma de su voca; ¡esta
información no es esencial!
29
Sin embargo, puede definirse un método para
calcular su edad, ocultando el como lo hace.
También no es conveniente que algún cliente
de un objeto de la abstracción de persona
cambie su nombre, por ejemplo, en forma
arbitraria
Especificación de una clase persona
con UML
Persona
# Nombre: string
# FechaNac: date
- ID: string
+ calcularEdad( ): Integer
+ cambiarNombre( )
+ mostrarDatos( )
30
Relaciones entre clases
Dependencia
Generalización
Asociación
Realización
31
Relaciones entre clases
• Conexiones entre clases
Dependencia
Ventana
e>>
Configuración
# tamaño: integer
Realización
Generalización
(herencia)
Consola
32
+ configurar()
+ abrir()
+ cerrar()
+ mover()
+ mostrar()
+ manejarEvento()
CajaDialogo
Evento
Asociación
1
1.. *
Control
Multiplicidad
Relaciones entre clases
• Dependencia: es una relación de uso
en donde los cambios en la
especificación de una clase, pueden
afectar a otra clase que la usa
• Generalización: Es una relación entre
una clase general (superclase) y otra
específica (subclase)
33
Relaciones entre clases
• Asociación: es una relación
estructural que expresa la conexión
reciproca entre objetos de de 2 clases
distintas
• Realización: relación semántica entre
clasificadores en donde un clasificador
especifica un contrato que otro
clasificador garantiza realizar
34
Relación de generalización
Herencia simple: una subclase tiene
exactamente un padre
Herencia múltiple: una subclase hereda
de varios padres, sin traslape de
estructura o comportamiento
Semánticamente la relación se puede
verificar comprobando si la subclase es
un tipo de su padre
35
Relación de generalización
Restricciones estándar:
implentation: el hijo hereda la implementación
del padre pero no la hace pública ni soporta
sus interfases
incomplete: en la generalización no todos los
hijos se han especificado, permitiéndose hijos
adicionales
disjoint: los objetos del padre no pueden tener
mas que uno de los hijos como tipo
Overlapping: los objetos del padre pueden
tener mas de uno de los hijos como tipo
36
Relación de asociación:
propiedades
Navegación:
• Puede ser bidireccional o direccional
Usuario
1
*
contraseña
Visibilidad:
Grupo
*
*
+ usuario
Usuario
1
+ propietario
Visibilidad
37
*
- clave
contraseña
Relación de asociación:
propiedades
Agregación simple:
relación todo/partes en donde una clase
representa el todo y otra una de sus partes
Todo
Organización
1
Agregación
Parte
*
Departamento
38
Relación de asociación:
propiedades
Composición:
es una forma de agregación, con fuerte
pertenencia y tiempo de vida coincidente como
parte del todo.
Todo
Window
1
Parte
Composición
*
Frame
39
Relación de asociación:
propiedades
Clases de asociación:
es una asociación entre dos clases a través de
una tercera clase
Persona
1..*
Empleador
Empresa
Roles
Clase de
asociación
Trabajo
40
*
Empleado
Relación de realización
• Se puede considerar también como una
combinación entre dependencia y
generalización entre una interfaz y una clase
Realización
<<interface>>
Contenedor
Lista
agregarElem()
consultarElem()
eliminarElem()
iterarEnOrden()
41
Arbol
La tecnología orientada a
objetos
42
Lenguajes de programación
Orientados a Objetos
43
Lenguajes de programación
Simula 67, desde su creación, ha
impactado en el desarrollo de lenguajes de
programación orientada a objetos:
Estáticamente tipificados
Dinámicamente tipificados
Ambos
44
Lenguajes estáticamente tipificados
Add 1 To Cobol giving Cobol with Objects
C++
Classic-Ada
Dragoon
Emerald/Jade
Object Pascal
Trellis/Owl
45
Lenguajes dinámicamente tipificados
Actors Languages
C+@
Flavors
Phyton
Self
Smalltalk
46
Lenguajes con tipificación estática y
dinámica
Actor
CLOS
Ada95
Eiffel
BETA
Java
C++ (With RTTI)
Modula-3
Cecil
Objective-C
Sather
47
Tecnología de Objetos en la
Integración Web
48
Integración Web
La Web es un sistema complejo distribuido y
la tecnología de objetos ha sido una parte
importante en el manejo de la complejidad,
desde su creación
La tecnología de objetos ha estado
impactando los desarrollos en Web en áreas
como: scripting, Componentes Multimedia
“Embebidos”, Componentes para servidores
Web y Agentes con código movil
49
Scripting
Para aplicaciones cliente, ha sido una de las
áreas de investigación y experimentación
desde el inicio de la Web
Su uso actual requiere de soporte para
interoperabilidad:
Document Object Model
HTML with scripting markup
50
Componentes Multimedia “Embebidos”
L a Web es un medio natural para la
tecnología de componentes de software a
través de:
Plug-Ins,
Applets de Java ,
Controles ActiveX ,
Partes OpenDoc.
51
Componentes para servidores Web
CGI junto con HTML y “forms”, son una parte importante
de las tecnologías para plataformas utilizadas en
aplicaciones para servicios Web, aunque en algunos
casos su rendimiento es limitado.
Para hacer frente a este problema se están utilizando
diversos mecanismos para interfazar aplicaciones a un
servidor web:
Fast-CGI: modelo de programación CGI con conexiones
de red multiplexadas
ILU Requestor: objetos distribuidos
NSAPI (Netscape Server API): software para servidor de
Netscape.
ISAPI (Internet Server API): Progress y Microsoft
SAPI (Server Application Development Interface )
Apache API
52
Agentes con código movil
El código movil es utilizado para automatizar
el acceso a la información: búsqueda,
“brokering”
Algunas herramientas para estos propósitos
son:
Inferno de Lucent Technologies
Java
Safe-Tcl
Penguin (perl5)
Python
53
Tecnología de objetos
distribuidos
54
Tecnología de objetos distribuidos
J2EE y .Net se han convertido en los estándares
preferidos para programación Web duistribuida
y sistemas orientados a objetos: dentro de
pocos años .Net y J2EE tendrán en el mercado el
40% de los sistemas distribuidos (Gartner
report)
Corba (y posiblemente C++ Web Services)
podrían caer al 20%
55
J2EE
J2EE ha sido adoptado por Sun,
IBM/Websphere, Bea Weblogic entre otros.
Incluye JSP para vistas en HTML dinámico del
lado del servidor, servlets para control, y beans
and EJB lógica de negocio
Trabajos reciemntes se han direccionado hacia
patrones J2EE:
Core Patterns, [Alur 03], [Marinescu 02],
Software open source integrable(Apache Jakarta),
56
Java Data Objects (JDO)
.Net
Plataforma de Microsoft para el soporte de
programación distribuida y servicios Web
Su lenguaje de programación principal es C#
(similar a Java and C++ con extensiones)
También soporta C++, Java, J#, y VB
Su objetivo principal es ofrecer un ambiente de
desarrollo robusto que facilite la creación de
aplicaciones en ambientes distribuidos
.Net es dependiente de plataforma
57
Se está proponiendo una versión open source:
“mono”
CORBA (Common Object Request Broker
Architecture)
Es considerado como un midleware desarrollado
por la OMG (Object Management Group)
Las aplicaciones CORBA están compuestas por
objetos que normalmente expresan alguna cosa
en el mundo real
Uno de sus usos importantes es en servidores
que deben manipular un gran número de
clientes, con una alta confiabilidad
Los servicios CORBA ofrecen una forma
estándar para pasar referencias de objetos en
una red de objetos CORBA
58
Bases de Datos Orientadas a
Objetos
59
Bases de Datos Orientadas a Objectos
Son bases de datos que soportan objetos y
clases
Son diferentes de las bases de datos
relacionales: sub-objetos estructurados, cada
objeto posee identidad, soporte de métodos y
herencia
Es posible ofrecer operaciones relacionales en
una base de datos orientada a objetos
OODBs ofrecen todos los beneficios de
orientación a objetos
Mantienen una fuerte equivalencia en el
desarrollo de aplicaciones orientadas a objetos
60
OODBs: Ejemplos
POSTGRES (Berkeley): es un manejador de base
de datos relacional-extendido
Illustra (Information Technologies Ltd): es un
manejador de base de datos Objeto-Relacional,
que soporta SQL-3, sintaxis relacional estándar
y operaciones en tablas
CLOSQL (University of Lancaster): es un
prototipo de OODB en investigación
Oggetto: base de datos Orientada a Objetos,
organizada en 3 capas de almacenamiento
61
Sistemas Operativos
Orientados a Objetos
62
Sistemas Operativos Orientados a
Objectos
Proporcionan los recursos a través de objetos,
en algunos casos, la arquitectura del sistema se
localiza sobre el hardware
Son sistemas distribuidos casi siempre,
permitiendo el libre intercambio de objetos entre
máquinas
Regularmente su capacidad se basa a partir de
objetos, por lo que los recursos del sistema solo
se pueden accesar si la capacidad de los objetos
está disponible para los programas
63
Sistemas Operativos Orientados a
Objectos: ejemplos
Apertos (Meta-Object-based Mikro-Kernel)
Chorus Micro-kernel (written in C++, COOL)
Choices (research OS, UofI, C++, supports SVR4)
GEOS (GeoWorks', written in Object Assembler, OO
superset of 8086)
Mach (CMU, supports BSD 4.3, really message-based)
NachOS (written in C++, OS teaching/learning OS)
Ouverture Project (ESPRIT funded OMG IDL defines
inter-module interfaces)
Peace (OO family-based parallel OS)
SOS Spring (Sun, written in C++)
PenPoint OS (Go, written in C++)
64
Tecnología de objetos: otras
áreas de aplicación
65
Otras áreas de aplicación
Herramientas CASE (Basados en UML)
Middleware
Ambientes de desarrollo integrados (IDEs
& APIs)
Procesos de desarrollo de software
Componentes y Arquitecturas de software
66