orientacion objetos

40
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

Upload: karlalopezbello

Post on 18-Nov-2014

495 views

Category:

Documents


0 download

DESCRIPTION

Orientacion objetos - UNEG - Profesor Mauricio Paletta

TRANSCRIPT

Page 1: Orientacion objetos

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

Page 2: Orientacion 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

Page 3: Orientacion objetos

Programación II

• “Complejidad del Software”.

La Crisis del Software

Page 4: Orientacion objetos

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”

Page 5: Orientacion objetos

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.

Page 6: Orientacion objetos

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?

Page 7: Orientacion objetos

Programación II

La Complejidad del Software

Page 8: Orientacion objetos

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).

Page 9: Orientacion objetos

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).

Page 10: Orientacion objetos

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

Page 11: Orientacion objetos

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

Page 12: Orientacion objetos

Programación II

A medida que aumentó la complejidad del

software requerido, se redujo las habilidades

para manejar la complejidad.

CAOS

Llegada al Caos

Page 13: Orientacion objetos

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.

Page 14: Orientacion objetos

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

Page 15: Orientacion objetos

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

Page 16: Orientacion objetos

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)

Page 17: Orientacion objetos

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)

Page 18: Orientacion objetos

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)

Page 19: Orientacion objetos

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)

Page 20: Orientacion objetos

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.

Page 21: Orientacion objetos

Programación II

3 Puntos para traer orden al Caos

Conceptos relacionados

• Modularidad.

• Programación estructurada.

Page 22: Orientacion objetos

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.

Page 23: Orientacion objetos

Programación II

3 Puntos para traer orden al Caos

Conceptos relacionados

• Tipo abstracto de datos.

• Conceptualización del dominio.

Page 24: Orientacion objetos

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.

Page 25: Orientacion objetos

Programación II

3 Puntos para traer orden al Caos

Conceptos relacionados

• Clasificación /

generalización /

tipo de.

• Composición /

agregación /

parte de.

Page 26: Orientacion objetos

Programación II

Orientación a Objetos

Fórmula conceptual:

Orientación a Objetos = Descomposición +

Abstracción +

Jerarquía

Page 27: Orientacion objetos

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?

Page 28: Orientacion objetos

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.

Page 29: Orientacion objetos

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.

Page 30: Orientacion objetos

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

Page 31: Orientacion objetos

Programación II

Orientación a Objetos

Page 32: Orientacion 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.

Page 33: Orientacion objetos

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.

Page 34: Orientacion objetos

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.

Page 35: Orientacion objetos

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.

Page 36: Orientacion objetos

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)

Page 37: Orientacion objetos

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.

Page 38: Orientacion objetos

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

Page 39: Orientacion objetos

Programación II

Evolución Histórica

Page 40: Orientacion objetos

Programación IIAlgoritmos y Programación III

Evolución Histórica