SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Presentación




Introducción a la Orientación a Objetos

     Ing. Mauricio Paletta, Msc
         INGENIERÍA EN INFORMÁTICA
                   Programación II




   UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA

                                Programación II
La Crisis del Software

• 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.
                       Programación II
La Crisis del Software

• “Complejidad 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
La Complejidad del Software

4 factores que influyen en la complejidad:
Complejidad del dominio del problema:
 • 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
La Complejidad del Software


Flexibilidad exigida al software:
 • Eficiencia versus eficacia.
 • Optimización de recursos versus calidad
   en la respuesta.
 • Bueno / bonito / barato.




                         Programación II
La Complejidad del Software


Mantenimiento del software:
 • Correctivo – corregir errores en
   programas (20 %).
 • Adaptativo – cambios en los
   requerimientos (25 %).
 • Perfectivo – tratar de mantener el
   software operativo (55 %).



                         Programación II
Llegada al Caos

A medida que aumentó la complejidad del
software requerido, se redujo las habilidades
para manejar la complejidad.

       CAOS




                         Programación II
Llegada al Caos

Solución de la Ingeniería de Software:
 • 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
Llegada al Caos

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?

                                  Programación II
Características ideales Software (McCall)


   • Mantenibilidad                              • Portabilidad
   • Flexibilidad                                • Reusabilidad
   • Verificabilidad                             • Interoperabilidad
                       Revisión    Transición
                          del          del
                       Producto     Producto


                          Características
                          Operacionales


              • Corrección                  • Integridad
              • Fiabilidad                  • Usabilidad
              • Eficiencia


                                       Programación II
Características ideales Software (McCall)


  Revisión del producto:
    • Mantenibilidad: fácil corregir errores.
    • Flexibilidad: fácil de modificar.
    • Verificabilidad: fácil de probar.




                            Programación II
Características ideales Software (McCall)

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



                            Programación II
Características ideales Software (McCall)

  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.
                           Programación II
Características ideales Software (McCall)

  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.
                            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                 Orientación
        funcional                    a Objetos
Módulos construidos          Módulos construidos
alrededor de las             alrededor de las clases
operaciones
Datos globales o             Clases débilmente
distribuidos entre los       acopladas y sin datos
módulos                      globales
Entrada / Proceso / Salida   Encapsulamiento /
                             Mensajes
Organigramas de flujos de    Diagramas jerárquicos de
datos                        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
Evolución Histórica

       Fase I                 Fase II                  Fase III                  Fase IV
  década de los 70       década de los 80          década de los 90        del 2000 hasta hoy
(época de invención)   (época de confusión)      (época de madurez)          (época actual)
Simulación de          Interfaces WIMP           Énfasis en el análisis   Búsqueda de niveles
sucesos discretos                                y el diseño              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               Bases de datos           UML versión …
                       inteligencia artificial   orientadas a objetos

Smalltalk              Nuevos lenguajes:         Estándares               Software => Objetos
                       Eiffel, C++, …



                                                     Programación II
Evolución Histórica




            Programación II
Evolución Histórica




         Algoritmos y Programación III
                Programación II

Weitere ähnliche Inhalte

Ähnlich wie Orientacion objetos

Introducción a la Tecnología Orientada a Objetos
Introducción a la Tecnología Orientada a ObjetosIntroducción a la Tecnología Orientada a Objetos
Introducción a la Tecnología Orientada a Objetosedwinlemmon
 
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTEPRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTECAMILO
 
Introducción a la Ingeniria del Software
Introducción a la Ingeniria del SoftwareIntroducción a la Ingeniria del Software
Introducción a la Ingeniria del SoftwareEdit Lopez Veloz
 
Presentacion de Software y Estimacion de Coste
Presentacion de Software y Estimacion de CostePresentacion de Software y Estimacion de Coste
Presentacion de Software y Estimacion de CosteCAMILO
 
PROYECTOS DE SOFTWARE Y COSTOS
PROYECTOS DE SOFTWARE Y COSTOSPROYECTOS DE SOFTWARE Y COSTOS
PROYECTOS DE SOFTWARE Y COSTOSCAMILO
 
Proyecto de Software y Estimacion de Costo
Proyecto de Software y Estimacion de CostoProyecto de Software y Estimacion de Costo
Proyecto de Software y Estimacion de CostoCAMILO
 
presentacion de software y estimacion de doste
presentacion de software y estimacion de dostepresentacion de software y estimacion de doste
presentacion de software y estimacion de dosteCAMILO
 
Proyecto de Software y Coste
Proyecto de Software y CosteProyecto de Software y Coste
Proyecto de Software y CosteCAMILO
 
Arquitectura de Software Capitulo 7.pptx
Arquitectura de Software Capitulo 7.pptxArquitectura de Software Capitulo 7.pptx
Arquitectura de Software Capitulo 7.pptxEverestMedinilla3
 
Unidad 1.1 Que Es La Ing. De Software
Unidad 1.1 Que Es La Ing. De SoftwareUnidad 1.1 Que Es La Ing. De Software
Unidad 1.1 Que Es La Ing. De SoftwareSergio Sanchez
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modularguestb97266b9
 
M.G.E-y-R.L.E.A-Diseño-Arquitectonico.pptx
M.G.E-y-R.L.E.A-Diseño-Arquitectonico.pptxM.G.E-y-R.L.E.A-Diseño-Arquitectonico.pptx
M.G.E-y-R.L.E.A-Diseño-Arquitectonico.pptxHawkMartnez
 
Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015Lucero Mtz
 
ing. de software
ing. de softwareing. de software
ing. de softwareellizabp_22
 

Ähnlich wie Orientacion objetos (20)

Introducción a la Tecnología Orientada a Objetos
Introducción a la Tecnología Orientada a ObjetosIntroducción a la Tecnología Orientada a Objetos
Introducción a la Tecnología Orientada a Objetos
 
Introducción de Ingeniería de Software
Introducción de Ingeniería de SoftwareIntroducción de Ingeniería de Software
Introducción de Ingeniería de Software
 
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTEPRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
 
Introducción a la Ingeniria del Software
Introducción a la Ingeniria del SoftwareIntroducción a la Ingeniria del Software
Introducción a la Ingeniria del Software
 
Presentacion de Software y Estimacion de Coste
Presentacion de Software y Estimacion de CostePresentacion de Software y Estimacion de Coste
Presentacion de Software y Estimacion de Coste
 
PROYECTOS DE SOFTWARE Y COSTOS
PROYECTOS DE SOFTWARE Y COSTOSPROYECTOS DE SOFTWARE Y COSTOS
PROYECTOS DE SOFTWARE Y COSTOS
 
Proyecto de Software y Estimacion de Costo
Proyecto de Software y Estimacion de CostoProyecto de Software y Estimacion de Costo
Proyecto de Software y Estimacion de Costo
 
presentacion de software y estimacion de doste
presentacion de software y estimacion de dostepresentacion de software y estimacion de doste
presentacion de software y estimacion de doste
 
Proyecto de Software y Coste
Proyecto de Software y CosteProyecto de Software y Coste
Proyecto de Software y Coste
 
Arquitectura de Software Capitulo 7.pptx
Arquitectura de Software Capitulo 7.pptxArquitectura de Software Capitulo 7.pptx
Arquitectura de Software Capitulo 7.pptx
 
Unidad 1.1 Que Es La Ing. De Software
Unidad 1.1 Que Es La Ing. De SoftwareUnidad 1.1 Que Es La Ing. De Software
Unidad 1.1 Que Es La Ing. De Software
 
Met2 07 01-introduccion_poo
Met2 07 01-introduccion_pooMet2 07 01-introduccion_poo
Met2 07 01-introduccion_poo
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
 
M.G.E-y-R.L.E.A-Diseño-Arquitectonico.pptx
M.G.E-y-R.L.E.A-Diseño-Arquitectonico.pptxM.G.E-y-R.L.E.A-Diseño-Arquitectonico.pptx
M.G.E-y-R.L.E.A-Diseño-Arquitectonico.pptx
 
Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015
 
Software
SoftwareSoftware
Software
 
UNIDAD_I.ppt
UNIDAD_I.pptUNIDAD_I.ppt
UNIDAD_I.ppt
 
ing. de software
ing. de softwareing. de software
ing. de software
 
Herramientas case
Herramientas caseHerramientas case
Herramientas case
 

Mehr von karlalopezbello

03 -fundamentos_de_la_tecnologia_orientada_a_objetos
03  -fundamentos_de_la_tecnologia_orientada_a_objetos03  -fundamentos_de_la_tecnologia_orientada_a_objetos
03 -fundamentos_de_la_tecnologia_orientada_a_objetoskarlalopezbello
 
Programacion ii modulo3-leccion2
Programacion ii modulo3-leccion2Programacion ii modulo3-leccion2
Programacion ii modulo3-leccion2karlalopezbello
 
Programacion ii modulo3-leccion1
Programacion ii modulo3-leccion1Programacion ii modulo3-leccion1
Programacion ii modulo3-leccion1karlalopezbello
 
Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3karlalopezbello
 
Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2karlalopezbello
 
Programacion ii modulo2-leccion1
Programacion ii modulo2-leccion1Programacion ii modulo2-leccion1
Programacion ii modulo2-leccion1karlalopezbello
 
Programacion ii modulo1-leccion1-
Programacion ii modulo1-leccion1-Programacion ii modulo1-leccion1-
Programacion ii modulo1-leccion1-karlalopezbello
 
Sistemas de comunicacion
Sistemas de comunicacionSistemas de comunicacion
Sistemas de comunicacionkarlalopezbello
 
Introduccion unegvirtual
Introduccion unegvirtualIntroduccion unegvirtual
Introduccion unegvirtualkarlalopezbello
 
Guia para montar_el_aula_1_
Guia para montar_el_aula_1_Guia para montar_el_aula_1_
Guia para montar_el_aula_1_karlalopezbello
 
Configuracion del perfil
Configuracion del perfilConfiguracion del perfil
Configuracion del perfilkarlalopezbello
 
Configuracion del perfil
Configuracion del perfilConfiguracion del perfil
Configuracion del perfilkarlalopezbello
 

Mehr von karlalopezbello (20)

03 -fundamentos_de_la_tecnologia_orientada_a_objetos
03  -fundamentos_de_la_tecnologia_orientada_a_objetos03  -fundamentos_de_la_tecnologia_orientada_a_objetos
03 -fundamentos_de_la_tecnologia_orientada_a_objetos
 
Programacion ii modulo3-leccion2
Programacion ii modulo3-leccion2Programacion ii modulo3-leccion2
Programacion ii modulo3-leccion2
 
Programacion ii modulo3-leccion1
Programacion ii modulo3-leccion1Programacion ii modulo3-leccion1
Programacion ii modulo3-leccion1
 
Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3
 
Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2
 
Programacion ii modulo2-leccion1
Programacion ii modulo2-leccion1Programacion ii modulo2-leccion1
Programacion ii modulo2-leccion1
 
Programacion ii modulo1-leccion1-
Programacion ii modulo1-leccion1-Programacion ii modulo1-leccion1-
Programacion ii modulo1-leccion1-
 
Didactica del chat
Didactica del chatDidactica del chat
Didactica del chat
 
Didactica del foro
Didactica del foroDidactica del foro
Didactica del foro
 
Guia completa de_moodle
Guia completa de_moodleGuia completa de_moodle
Guia completa de_moodle
 
Publicacion de material
Publicacion de materialPublicacion de material
Publicacion de material
 
Sistemas de comunicacion
Sistemas de comunicacionSistemas de comunicacion
Sistemas de comunicacion
 
Actividades en moodle
Actividades en moodleActividades en moodle
Actividades en moodle
 
Plataforma moodle
Plataforma moodlePlataforma moodle
Plataforma moodle
 
Introduccion unegvirtual
Introduccion unegvirtualIntroduccion unegvirtual
Introduccion unegvirtual
 
Guia para montar_el_aula_1_
Guia para montar_el_aula_1_Guia para montar_el_aula_1_
Guia para montar_el_aula_1_
 
Configuracion del perfil
Configuracion del perfilConfiguracion del perfil
Configuracion del perfil
 
Configuracion del perfil
Configuracion del perfilConfiguracion del perfil
Configuracion del perfil
 
Transparencias7
Transparencias7Transparencias7
Transparencias7
 
Transparencias5
Transparencias5Transparencias5
Transparencias5
 

Orientacion objetos

  • 1. Presentación Introducción a la Orientación a Objetos Ing. Mauricio Paletta, Msc INGENIERÍA EN INFORMÁTICA Programación II UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA Programación II
  • 2. La Crisis del Software • 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. Programación II
  • 3. La Crisis del Software • “Complejidad del Software”. Programación II
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. La Complejidad del Software Programación II
  • 8. La Complejidad del Software 4 factores que influyen en la complejidad: Complejidad del dominio del problema: • 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
  • 9. 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
  • 10. La Complejidad del Software Flexibilidad exigida al software: • Eficiencia versus eficacia. • Optimización de recursos versus calidad en la respuesta. • Bueno / bonito / barato. Programación II
  • 11. La Complejidad del Software Mantenimiento del software: • Correctivo – corregir errores en programas (20 %). • Adaptativo – cambios en los requerimientos (25 %). • Perfectivo – tratar de mantener el software operativo (55 %). Programación II
  • 12. Llegada al Caos A medida que aumentó la complejidad del software requerido, se redujo las habilidades para manejar la complejidad. CAOS Programación II
  • 13. Llegada al Caos Solución de la Ingeniería de Software: • 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
  • 14. Llegada al Caos 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? Programación II
  • 15. Características ideales Software (McCall) • Mantenibilidad • Portabilidad • Flexibilidad • Reusabilidad • Verificabilidad • Interoperabilidad Revisión Transición del del Producto Producto Características Operacionales • Corrección • Integridad • Fiabilidad • Usabilidad • Eficiencia Programación II
  • 16. Características ideales Software (McCall) Revisión del producto: • Mantenibilidad: fácil corregir errores. • Flexibilidad: fácil de modificar. • Verificabilidad: fácil de probar. Programación II
  • 17. Características ideales Software (McCall) 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. Programación II
  • 18. Características ideales Software (McCall) 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. Programación II
  • 19. Características ideales Software (McCall) 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. Programación II
  • 20. 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
  • 21. 3 Puntos para traer orden al Caos Conceptos relacionados • Modularidad. • Programación estructurada. Programación II
  • 22. 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
  • 23. 3 Puntos para traer orden al Caos Conceptos relacionados • Tipo abstracto de datos. • Conceptualización del dominio. Programación II
  • 24. 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
  • 25. 3 Puntos para traer orden al Caos Conceptos relacionados • Clasificación / generalización / tipo de. • Composición / agregación / parte de. Programación II
  • 26. Orientación a Objetos Fórmula conceptual: Orientación a Objetos = Descomposición + Abstracción + Jerarquía Programación II
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. Orientación a Objetos Descomposición Orientación funcional a Objetos Módulos construidos Módulos construidos alrededor de las alrededor de las clases operaciones Datos globales o Clases débilmente distribuidos entre los acopladas y sin datos módulos globales Entrada / Proceso / Salida Encapsulamiento / Mensajes Organigramas de flujos de Diagramas jerárquicos de datos clases Programación II
  • 31. Orientación a Objetos Programación II
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. 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
  • 38. Evolución Histórica Fase I Fase II Fase III Fase IV década de los 70 década de los 80 década de los 90 del 2000 hasta hoy (época de invención) (época de confusión) (época de madurez) (época actual) Simulación de Interfaces WIMP Énfasis en el análisis Búsqueda de niveles sucesos discretos y el diseño 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 Bases de datos UML versión … inteligencia artificial orientadas a objetos Smalltalk Nuevos lenguajes: Estándares Software => Objetos Eiffel, C++, … Programación II
  • 39. Evolución Histórica Programación II
  • 40. Evolución Histórica Algoritmos y Programación III Programación II