Publicado el 14 de Enero del 2017
1.553 visualizaciones desde el 14 de Enero del 2017
466,1 KB
24 paginas
Creado hace 17a (21/04/2008)
Programación Orientada a Objetos:
Lenguajes, Metodología y Herramientas
Master de Computación
PROGRAMACION ORIENTADA A OBJETOS
T
AS
M
J.M. Drake
Notas:
1
LA CRISIS DEL SOFTWARE.
Conjunto de tópicos relacionados con la problemática
asociada al desarrollo de software:
"Construir una aplicación software es una tarea mucho más
compleja de lo que parece al iniciarla"
Aspectos de esta problemática son:
Resposiveness: No satisfacen las espectativas del usuario.
Reliability: Presentan fallos y su depuración es muy difícil.
Cost: El costo es difícil de evaluar y mas alto de lo esperado.
Modificability: Son productos muy rígido y difíciles de mantener.
Timeless: Requieren para su ejecución mas tiempo del previsto.
Transportability: Hay problemas para migrar entre plataforma.
Efficiency: Sólo utilizan una parte de la capacidad de hardware.
OO_08: I.1 Programación Orientada a Objetos. José M.Drake
2
Notas:
Desde 1968 se identifica con la denominación "crisis del software" el conjunto de tópicos
relacionados con la problemática asociada con el desarrollo de software. Aspectos identificados con
esta crisis son:
* Responsiveness: Frecuentemente los sistemas basados en computador no satisfacen las
expectativas que tiene el usuario.
* Reliability: Los programas suelen presentar fallos, y su depuración es muy difícil de garantizar.
* Cost: El costo del software es de evaluación difícil, y es habitual que resulte mas caro de lo que se
preveía.
* Modifiability: Los programas son productos muy rígidos y de difícil modificación. El costo de su
mantenimiento es muy alto.
*Timeless: El desarrollo del software requiere siempre más tiempo que el previsto.
*Transportability: Cuando se traslada un software de un equipo a otro, siempre se presentan
problemas de adaptación.
*Efficiency: Los programas utilizan solo una fracción pequeña de la capacidad del hardware en que
se ejecuta.
El espíritu de la crisis del software se puede resumir en la frase: "Construir una aplicación software
es una tarea mucho más compleja de lo que de antemano parece"
Un pequeño paquete con algún millar de líneas de código es es asequible mentalmente a un
programador,sin embargo, un paquete mediano o grande con cientos de miles de líneas, desborda la
capacidad de cualquier programador. En estos casos se hace crítico la problemática de la crisis del
software.
2
CAUSAS DE LA CRISIS DELSOFTWARE.
Causas profundas de la crisis del software son:
La metodología en cascada que linealiza el proceso de desarrollo.
La metodología de modularización estructurada hace que el software
sea inflexible y difícil de mantener.
Programadores sin formación en ingeniería software.
Las empresas e instituciones tienen inercia a introducir las
innovaciones.
La estructura secuencial de Von Newman no se adapta a los problemas
que se abordan.
OO_08: I.1 Programación Orientada a Objetos. José M.Drake
3
Notas:
Causas profundas que dan lugar a la crisis del software son:
* El paradigma de diseño estructurado de software es de naturaleza lineal, y es difícil
evaluar a nivel de proyecto el efecto posterior de las decisiones que se toman en cada fase
del ciclo de vida de un software.
* El conjunto de programadores que actualmente desarrollan software no tienen una
formación o no aplican la ingeniería software.
* Las empresas y organizaciones que desarrollan software tienen una gran inercia a
introducir novedades de eficacia demostrada.
* La estructura secuencial de Von Newmann y el estilo de programación que induce, no
es el adecuado a los problemas que se abordan.
3
Complejidad del software
El desarrollo de software es una tarea muy compleja.
La complejidad del software es una característica esencial.
La ingeniería software debe abordar la complejidad.
Los componentes de la complejidad del software son:
Complejidad de los problemas que resuelve.
Naturaleza del proceso de desarrollo del software.
Libertad de la representación abstracta de los problemas.
La naturaleza discreta del software.
OO_08: I.1 Programación Orientada a Objetos. José M.Drake
4
Notas:
El análisis, especificación, diseño, codificación, verificación y validación de un programa software que
resuelve un problema de la vida real es una tarea que requiere una considerable capacidad intelectual.
La complejidad del software es una característica inherente a la propia naturaleza del software y no es una
característica accidental consecuencia de la forma en que se desarrolla.
Es mas rentable que la ingeniería software centre su esfuerzo en desarrollar metodologías con capacidad
para abordar su complejidad inherente, que se oriente en buscar procedimientos que traten de reducirla.
La complejidad inherente del software tiene cuatro componentes básicas:
•La propia complejidad de los problemas que se abordan con la aplicación software.
•La naturaleza del proceso de desarrollo del software que se utiliza.
•La libertad que proporciona la formulación abstracta de los problemas concretos que se resuelven.
•La naturaleza discreta del software que proporciona respuestas cualitativamente diferentes por
cambios cuantitativamente pequeños en el código o en los datos.
4
Hardware, algorítmo e ingeniería
Ingeniería
hardware
Ingeniería
algoritmos
Ingeniería
proyectos
Costo del hardware
Costo del software
100%
80%
60%
40%
20%
0%
1950
1960
1970
1980
1990
2000
OO_08: I.1 Programación Orientada a Objetos. José M.Drake
5
Notas:
5
Complejidad de los problemas
Las aplicaciones software actuales resuelven
problemas muy complejos:
Requieren enormes cantidades de componentes.
Hay que dar coherencia a cientos de requerimientos.
La especificación del problema es informal.
Pueden requerir especificaciones no funcionales:
Facilidad de uso
Prestaciones temporales de respuesta.
Costo
Tiempo de vida útil.
Fiabilidad.
....
OO_08: I.1 Programación Orientada a Objetos. José M.Drake
6
Notas:
Los problemas concretos que actualmente se resuelven con aplicaciones software tienen una
complejidad muy alta. Esta complejidad es consecuencia de:
•Requieren ensamblar miles o cientos de miles de componentes. La ingeniería software es la
ingeniería que actualmente aborda los problemas con mayor número de componentes.
•Debe dar coherencia a cientos de requerimientos que frecuentemente compiten entre si y
que incluso pueden presentar aspectos contradictorios.
•La formulación de sus requerimientos suele ser de naturaleza informal. Se utilizan muchas
hojas de texto que describen con detalle el problema, pero habitualmente se desconoce la
solución que se busca.
•A los programas se le requieren muchos requerimientos que son de naturaleza no funcional
y que son difíciles de cuantificar, tales como:
•Facilidad de uso.
•Prestaciones de respuesta de naturaleza temporal.
•Costo.
•Tiempo de vida útil.
•Seguridad de operación o fiabilidad.
•Etc.
6
Complejidad por el proceso de desarrollo.
Una aplicación software requiere manejar cientos de módulos
y un programador puede manejar de forma ágil solo algunos
componentes.
La herramientas de nueva generación generan una falsa
ilusión de simplicidad.
Un proyecto software requiere ser desarrollado por un
equipo, requiere especialmente métodos de ingeniería.
No se ha generalizado estrategias productivas basadas en
ensamblado de componentes.
OO_08: I.1 Programación Orientada a Objetos. José M.Drake
7
Notas:
La metodología que se utiliza para desarrollar una aplicación software frecuentemente no es
adecuada a la complejidad inherente que posee:
• Un proyecto software de mediana complejidad tiene decenas de miles de líneas de
código y cientos de módulos diferentes que se deben concebir, diseñar y acoplar
correctamente para que la aplicación funcione. Esto contrasta con la capacidad mental
de un programador humano que solo es capaz de manejar de forma ágil y segura un
número muy pequeño de componentes.
• La introducción de las metodologías software de últimas generación (lenguajes,
sistemas operativos, generadores de código, etc.) generan la ilusión de simplicidad, pero
la complejidad real continua dentro y bajo cualquier problema el programador queda
impotente.
• Un proyecto software de mediana complejidad requiere la participación de un equipo de
programadores y para que no se convierta en un caos se requiere que se apliquen
sistemáticamente métodos de ingeniería de proyectos.
• En la ingeniería software no se ha generalizado el uso de estrategias de diseño de
sistemas complejos utilizando componentes básicos estandarizados. Cada proyectos se
aborda desde la nada, como si no tuviese nada en común con otros proyectos.
7
Libertad en la representación abstracta.
Dominio del problema
Problema del
mundo real
Solución en el
mundo real
Resultados
del problema
Representación
abstracta del
problema
Interpretación
de los datos
salida
Formulación
informática
Solución en el
computador
Datos de salida
Dominio informático
OO_08: I.1 Programación Orientada a Objetos. José M.Drake
8
Notas:
La complejidad de los problemas que se resuelven es consecuencia del desacoplo entre el lenguaje y
los conceptos del dominio del problema que se resuelve y los del dominio informático.
El cliente que plantea el problema y el ingeniero que lo resuelve mediante una aplicación software,
manejan diferentes interpretaciones del problema:
•Tiene diferente visión de su naturaleza.
•Conciben soluciones diferentes.
•Intercambian entre ellos especificaciones muy complejas.
P
Comentarios de: Programación Orientada a Objetos: Lenguajes, Metodología y Herramientas - Programación Orientada a Objetos (0)
No hay comentarios