orientacion objetos
DESCRIPTION
Orientacion objetos - UNEG - Profesor Mauricio PalettaTRANSCRIPT
Programación II
Ing. Mauricio Paletta, Msc
UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA
INGENIERÍA EN INFORMÁTICA
Programación II
Presentación
Introducción a la Orientación a Objetos
Programación II
• Fenómeno ocurrido en la década de los
80’s como consecuencia del auge de la
automatización haciendo uso de
computadoras.
• La mayoría del software se construye a la
medida, en vez de ensamblar componentes
existentes.
• Los programadores no disponen / usan
“componentes” de software reutilizables
empezar desde cero.
La Crisis del Software
Programación II
• “Complejidad del Software”.
La Crisis del Software
Programación II
La Crisis del Software
Brooks: “… es una propiedad esencial, no
accidental”
“… es una característica
inherente, por lo tanto
debemos tratar de
administrar la
complejidad”
Programación II
La Crisis del Software
• No terminar los proyectos a tiempo.
• Consumir más presupuesto del planificado.
• Baja productividad.
• Hacer productos de baja calidad.
• Gran cantidad de personal especializado
dedicado a labores de mantenimiento.
• Usuarios insatisfechos con los sistemas y
con los departamentos o grupos de
desarrollo.
Programación II
La Crisis del Software
• Usuarios se preguntan:
¿Por qué el desarrollo
de software es tan
costoso?
¿Por qué toma tanto
tiempo?
¿Hay alguna perspectiva
de mejora?
Programación II
La Complejidad del Software
Programación II
4 factores que influyen en la complejidad:
Complejidad del dominio del problema:
La Complejidad del Software
• Problemas que involucran elementos de
gran complejidad.
• Existencia de requerimientos
contradictorios.
• Distancia entre el usuario y el
desarrollador (diferentes perspectivas del
problema).
Programación II
La Complejidad del Software
Dificultad de administrar el proceso de
desarrollo:
• Dar la ilusión de simplicidad.
• Manejo de un grupo de trabajo
(problemas de comunicación,
coordinación e integración).
Programación II
Flexibilidad exigida al software:
• Eficiencia versus eficacia.
• Optimización de recursos versus calidad
en la respuesta.
• Bueno / bonito / barato.
La Complejidad del Software
Programación II
Mantenimiento del software:
• Correctivo – corregir errores en
programas (20 %).
• Adaptativo – cambios en los
requerimientos (25 %).
• Perfectivo – tratar de mantener el
software operativo (55 %).
La Complejidad del Software
Programación II
A medida que aumentó la complejidad del
software requerido, se redujo las habilidades
para manejar la complejidad.
CAOS
Llegada al Caos
Programación II
Solución de la Ingeniería de Software:
Llegada al Caos
• Tratar el software como una ingeniería.
• Uso de metodologías estructuradas.
• Mayor participación del usuario.
• Pruebas planificadas
y documentadas.
• Uso de herramientas
automatizadas.
Programación II
Un médico, un ingeniero civil y un profesional de la
computación estaban discutiendo sobre cuál era la
profesión más antigua del mundo:
El médico: En la Biblia dice que Dios creó a Eva de la
costilla de Adán, por lo tanto la mía es la profesión más
antigua.
El ingeniero civil: Pero en el génesis dice que Dios impuso
el orden y sacó a la tierra del CAOS en que se encontraba
en siete días; esta fue la primera y más espectacular
aplicación de ingeniería civil.
El profesional de la computación: Pero, ¿quién creen
ustedes que creó el CAOS?
Llegada al Caos
Programación II
Características ideales Software (McCall)
Características
Operacionales
Revisión
del
Producto
Transición
del
Producto
• Mantenibilidad
• Flexibilidad
• Verificabilidad
• Portabilidad
• Reusabilidad
• Interoperabilidad
• Corrección
• Fiabilidad
• Eficiencia
• Integridad
• Usabilidad
Programación II
Revisión del producto:
• Mantenibilidad: fácil corregir errores.
• Flexibilidad: fácil de modificar.
• Verificabilidad: fácil de probar.
Características ideales Software (McCall)
Programación II
Transición del producto:
• Portabilidad: fácil de transportar entre
ambientes.
• Reusabilidad: grado en que el todo o
alguna de las partes se pueda usar en
otros desarrollos.
• Interoperabilidad: fácil de acoplar.
Características ideales Software (McCall)
Programación II
Características operacionales:
• Corrección: grado de satisfacción de
requerimientos.
• Fiabilidad: grado de funcionamiento
esperado.
• Eficiencia: minimización de recursos.
• Integridad: grado de seguridad.
• Usabilidad: facilidad de aprendizaje y
operación.
Características ideales Software (McCall)
Programación II
Otros aspectos:
• Comprensibilidad: grado de poderse leer y
comprender.
• Robustez: capacidad de funcionar en
condiciones anormales.
• Extensibilidad: facilidad de crecer/ mejorar.
• Modularidad: grado de independencia
funcional de cada uno de los
componentes.
Características ideales Software (McCall)
Programación II
3 Puntos para traer orden al Caos
Descomposición:
• Descomponer el software en partes
pequeñas para ser refinadas de forma
independiente.
• La complejidad del problema se restringe
a la complejidad de cada una de las
partes.
• Es necesario hacer una división
inteligente.
Programación II
3 Puntos para traer orden al Caos
Conceptos relacionados
• Modularidad.
• Programación estructurada.
Programación II
3 Puntos para traer orden al Caos
Abstracción:
• Ignorar los detalles no significativos de
cada elemento y trabajar con modelos
ideales de éstos.
• Brinda enorme poder para manejar la
complejidad.
• Ayuda a vencer las limitaciones de
nuestra memoria intermedia para el
manejo de la información.
Programación II
3 Puntos para traer orden al Caos
Conceptos relacionados
• Tipo abstracto de datos.
• Conceptualización del dominio.
Programación II
3 Puntos para traer orden al Caos
Jerarquía:
• Organizar los elementos en niveles de
categoría.
• Relaciones estructurales y semánticas.
• Incrementa el contenido semántico de las
piezas de información.
• Ayuda a la comprensión del
funcionamiento del sistema.
Programación II
3 Puntos para traer orden al Caos
Conceptos relacionados
• Clasificación /
generalización /
tipo de.
• Composición /
agregación /
parte de.
Programación II
Orientación a Objetos
Fórmula conceptual:
Orientación a Objetos = Descomposición +
Abstracción +
Jerarquía
Programación II
Orientación a Objetos
Descomposición ¿Cómo hacer que el
conjunto de elementos
resuelvan el problema?
Abstracción ¿Cómo identificar los
elementos basado en los
conceptos del problema?
Jerarquía ¿Cómo relacionar los
elementos para reducir la
complejidad de cada uno
de ellos?
Programación II
Orientación a Objetos
• Surge como una respuesta hacia la crisis
del software.
• Es una nueva forma de pensar usando
conceptos del mundo real.
• Significa que el software se organiza
como un conjunto de objetos discretos
cada uno de los cuales incorpora su
estructura de datos y su comportamiento.
Programación II
Orientación a Objetos
• “Ejecutar un programa o sistema, es algo
tan sencillo como crear objetos y disparar
mensajes” (A. Goldberg)
• Término introducido en el léxico con la
llegada del lenguaje de programación
Smalltalk.
• Conceptos a manejar: clase, objeto,
método, mensaje, subclase, superclase,
instancia, herencia, encapsulamiento,
polimorfismo, interfaz.
Programación II
Orientación a Objetos
Descomposición
funcional
Orientación
a Objetos
Módulos construidos
alrededor de las
operaciones
Módulos construidos
alrededor de las clases
Datos globales o
distribuidos entre los
módulos
Clases débilmente
acopladas y sin datos
globales
Entrada / Proceso / Salida Encapsulamiento /
Mensajes
Organigramas de flujos de
datos
Diagramas jerárquicos de
clases
Programación II
Orientación a Objetos
Programación II
Orientación a Objetos
Beneficios:
• Desarrollos más rápidos – basado en la
reusabilidad de elementos.
• Calidad más alta – basado en el uso de
objetos eficientes y eficaces ya existentes.
• Mantenimiento más fácil – basado en el
uso de objetos libres de errores.
Programación II
Orientación a Objetos
• Costos más bajos (programación, diseño
y administración).
• Soporte a sistemas de gran escala.
• Mejores estructuras de información.
• Aumento de la adaptabilidad.
Programación II
Evolución Histórica
1957 Ten Dyke & Kunz usaron técnicas rudimentarias de orientación a
objetos en el diseño del misil Minuteman.
1967 Desarrollo del lenguaje de simulación de sucesos discretos –
Simula, en Noruega, por K. Nygaard. Introdujo los conceptos
básicos de OO. La idea fue definir un lenguaje para construir
modelos de sistemas físicos complejos que pueden contener miles
de componentes. Los módulos están basados en los objetos físicos
presentes en el entorno del problema.
1970 Desarrollo del lenguaje de programación Smalltalk en el Centro de
Investigaciones de Palo Alto (PARC), basado en el trabajo doctoral
de Alan Kay. Visión de un PC pequeño, universal, capaz de tratar
cualquier clase de problema de gestión de información.
1970 Desarrollo de la máquina Flex – Dynabook en PARC, basado en
Smalltalk.
Programación II
Evolución Histórica
1975 Fertilización recíproca entre la OOP y la investigación y el
desarrollo en IA: LISP, FLAVORS, LOOPS y CLOS, KEE y ART
(ideas sobre la representación del conocimiento fundamentadas en
redes y marcos semánticos – importante para el concepto de
herencia).
1976 Desarrollo del lenguaje Alphard por Wulf y compañía.
1977 Desarrollo del lenguaje CLU por Liskov y compañía.
1980 Explosión de interés por las interfaces de usuario: WIMP –
Windows, Icons, Mice and Pointers (Apple); GUI – Graphical User
Interface; Presentation Manager, Microsoft Windows; Sistemas
estandarizados abiertos basados en UNIX.
Programación II
Evolución Histórica
1986 Sistemas de Actores – Ahga, dirigidos normalmente a aplicaciones
en tiempo real y concurrentes.
1986 Desarrollo del lenguaje de programación C++, por Bjarne Stroustup
(AT&T).
1988 Desarrollo del lenguaje de programación Eiffel, por Bertrand Meyer.
1989 Sistemas de pizarra (Englemore y Morgan) para la representación
y manejo del conocimiento.
1989 Desarrollo de herramientas CASE e IPSE.
1990 Interés hacia el análisis y diseño orientado a objetos: Biggerstaff y
Richter, Prieto-Díaz y Freeman, Sommerville, Booch, Rumbaugh
(OMT), Jakobson (OOSE)
Programación II
Evolución Histórica
1990 Interés hacia la definición de estándares. El principal protagonista
es el grupo OMG (UML, OMA, CORBA, MDA, etc.)
1990 Base de datos orientada a objetos
1996 Desarrollo del lenguaje de programación Java, por Sun
Microsystems
2000 Desarrollo del lenguaje de programación C#. Búsqueda de
conceptos de niveles de abstracción más altos que un objeto:
Agente, Cubo, etc. Base de toda plataforma de software:
operativa, desarrollo, gráfica, etc.
Programación II
Fase I
década de los 70
(época de invención)
Fase II
década de los 80
(época de confusión)
Fase III
década de los 90
(época de madurez)
Fase IV
del 2000 hasta hoy
(época actual)
Simulación de
sucesos discretos
Interfaces WIMP Énfasis en el análisis
y el diseño
Búsqueda de niveles
más altos de
abstracción (Agentes,
cubos, etc.)
Simula Xerox y Apple Sistemas abiertos C#
Kay: máquina FLEX Extensiones LISP Aplicaciones Paradigma de todas
las plataformas de
desarrollo
PARC: Dynabook Entornos de
inteligencia artificial
Bases de datos
orientadas a objetos
UML versión …
Smalltalk Nuevos lenguajes:
Eiffel, C++, …
Estándares Software => Objetos
Evolución Histórica
Programación II
Evolución Histórica
Programación IIAlgoritmos y Programación III
Evolución Histórica