Download Diapositiva 1 - Informática y Sistemas de Computación

Document related concepts

Dylan (lenguaje de programación) wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Axiom wikipedia , lookup

Programación funcional wikipedia , lookup

Transcript
Unidad 1.- Evolución de los paradigmas de programación.
1.1 Programación lineal.
1.2 Programación estructurada.
1.3 Programación orientada a objetos.
1.4 Relación entre la programación orientada a objetos y la programación
estructurada.
1.5 Metodología para la solución de problemas basados en computadora.
Evolución de los paradigmas de programación
Programación lineal.
Los lenguajes de programación lineal (BASIC, COBOL Y FORTRAN)
no tenían facilidad para reutilizar el código existente de programas.
De hecho se duplicaban segmentos de software cada vez más en
muchos programas. Los programas se ejecutaban en secuencias
lógicas, haciendo la lógica difícil de comprender. El control de
programas era difícil y se producían continuos saltos a lo largo del
referido programa. Aún más, los lenguajes lineales no tenían
capacidad de controlar la visibilidad de los elementos llamados
datos.
Programación Modular
El soporte más elemental de la programación Modular llegó con la
aparición de la subrutina. Una subrutina ha creado una secuencia
de instrucciones a las que se les da un nombre independiente; una
vez que se ha definido, la subrutina se puede ejecutar
simplemente incluyendo el nombre del programa siempre que se
requiera. Las subrutinas proporcionan una división natural de las
tareas que diferentes programas utilizan. Aunque las subrutinas
proporcionan el mecanismo básico de la programación
Modular, se necesita mucha disciplina para crear software bien
estructurado. Sin esta disciplina, es fácil escribir programas
compilados y tortuosos difíciles de modificar y comprender, así
como imposible de mantener. Esta ha sido la panorámica durante
muchos años en el desarrollo del software.
Programación Estructurada.
Un concepto importante en campo de la programación
Estructurada: Abstracción, ya que la Abstracción se puede definir
como la capacidad de examinar algo sin preocuparse de los
detalles internos. En un programa estructurado, es suficiente
conocer que un procedimiento sea fiable, para que se pueda
utilizar sin tener que conocer cómo funciona su interior. Esto se
conoce como una Abstracción funcional y es el núcleo de la
programación estructurada. Hoy casi todos los lenguajes de
programación tienen construcciones que facilitan la programación
estructurada.
POO (Programación Orientada a Objetos).
La Programación Orientada a Objetos toma las mejores
ideas de la programación estructurada la combina con
nuevos y poderosos conceptos que animan o alientan
una nueva visión de la tarea de la programación. La
Programación Orientada a Objetos permite descomponer
fácilmente un problema en subgrupos de partes
relacionadas. Entonces, puede traducir estos subgrupos
en unidades auto contenidas llamadas Objetos.
Relación entre la programación orientada a objetos
y la programación estructurada
Una diferencia importante entre la programación estructurada y la
programación orientada a objetos es que la programación estructurada
separa los datos de las funciones, mientras que la programación
orientada a objetos define un conjunto de objetos donde se combina de
forma modular los datos con las funciones.
Relación entre la programación orientada a objetos
y la programación estructurada
Las metodologías de ingeniería de software más utilizadas en la actualidad
están basadas en los modelos estructurados de Yourdon, Constantine,
DeMarco, Page-Jones, Martin, Jackson.
El análisis y diseño estructurado se concentra principalmente en
especificar y descomponer la funcionalidad del sistema total, donde en
general, los cambios a los requisitos cambiarían totalmente la estructura
del sistema.
En ambas metodologías, podemos encontrar componentes similares,
los cuales apoyan los tres aspectos generales del sistema: modelo de
objetos, dinámico y funcional.
La diferencia principal entre las dos metodologías es de estilo y en el
énfasis que se le da a cada modelo. La POO está dominada por el modelo
de objetos, que da el contexto para los modelos dinámico y funcional,
mientras que en la estructurada el modelo funcional domina, el modelo
dinámico es el siguiente en importancia, y el modelo de objeto es el
menos importante.
Relación entre la programación orientada a objetos
y la programación estructurada (continuación)
 La programación estructurada organiza el sistema alrededor de procedimientos.
En contraste, los sistemas orientados a objetos se organizan alrededor del
concepto de objetos.
Si la mayoría de las modificaciones en los requisitos son cambios en la
funcionalidad más que en los objetos, entonces los cambios pueden ser críticos
para sistemas basados en funciones, mientras que las modificaciones en la
funcionalidad son rápidamente acomodados en los sistemas orientados a objetos.
La programación estructurada es útil para problemas donde las funciones son más
importantes y complejas que los datos.
 Un diseño orientado a objetos es generalmente más resistente a cambios y más
extensible.
Relación entre la programación orientada a objetos
y la programación estructurada (continuación)
 En la programación estructurada la descomposición de un proceso en
subprocesos es bastante arbitraria. Diferentes personas producirían diferente
descomposiciones. En cambio, en el diseño orientado a objetos, la descomposición
está basada en los objetos del dominio del problema. Por lo tanto los
desarrolladores de diferentes programas en el mismo dominio tienden a descubrir
objetos similares, lo cual incrementa el reuso de componentes de un proyecto a
otro.
El enfoque orientado a objetos integra de mejor forma las bases de datos con
código de programación. En cambio, un enfoque de diseño procedural tiene
grandes problemas al tratar con las bases de datos, ya que es difícil integrar código
de programación organizado alrededor de funciones con base de datos organizadas
alrededor de datos.
Metodología para la solución de problemas
basados en computadora
Programación
Por programación se entiende la serie completa de pasos para resolver
un problema en una computadora.
A menudo la palabra programación ha sido usada como sinónimo de
codificación, es decir el proceso de escribir instrucciones en un lenguaje
informático; sin embargo, antes de codificar una solución es necesario
realizar una enorme cantidad de trabajo.
Metodología para la solución de problemas
basados en computadora
La programación se compone de dos fases:
A Fase de resolución del problema:
B Fase de implementación:
Metodología para la solución de problemas
basados en computadora
A Fase de resolución del problema:
Definición del problema: Un entendimiento claro de qué es lo que se
pretende resolver para crear una solución adecuada.
Desarrollo de la solución: Excepto en los casos de problemas
simples, un programa no está formado por una única tarea, sino que
serán varias tareas interrelacionadas. Es extremadamente importante
especificar en qué consiste cada tarea y cómo se relaciona con las
demás.
Selección de algoritmos: Un algoritmo es un método específico para
resolver un problema. Una vez que se han determinado las tareas y
subtareas, para cada una de ellas se debe especificar qué información
requiere y qué resultados va a producir. Hay que especificar
detalladamente cómo se realiza la tarea.
Prueba: Seguir exactamente los pasos para ver si la solución resuelve
verdaderamente el problema.
Metodología para la solución de problemas
basados en computadora
B Fase de implementación:
Codificación: Para los pasos anteriores no ha sido necesario usar un lenguaje
informático en particular, pero una vez que se ha organizado la solución del
problema y se tienen los detalles paso a paso del algoritmo, se escribe el
programa en el lenguaje informático más conveniente.
Depuración: Muy rara vez un programa corre adecuadamente una vez que ha
sido codificado; es necesario localizar y corregir todos los errores que
inevitablemente se cometen.
Validación: No basta con obtener resultados de un programa, es necesario
garantizar que los resultados que se obtienen son correctos en todos los casos.
Documentación: La documentación de un programa debe contener la definición
del problema, la descripción de los algoritmos y el listado del programa. Se debe
considerar tanto la documentación técnica para que otros programadores puedan
modificar el programa si es necesario, así como la documentación para el usuario
del programa.
Mantenimiento: Los programas escritos y que están en uso, frecuentemente
requieren modificaciones o correcciones.
Ciclo de vida del software
El desarrollo de software es un proceso muy complejo requiriendo de una metodología
eficiente y sistemática. El ciclo de vida de un sistema de computación comienza con la
formulación de un problema, seguido de análisis, diseño, implementación, verificación y
validación del software. A continuación prosigue una fase operacional durante la cual se
mantiene y extiende el sistema. El modelo orientado a objetos presenta un enfoque
evolucionado para la ingeniería de software.
Existen diversas metodologías para el desarrollo de sistemas orientados a objetos, todos
sustentados en principios similares aunque no idénticos.
Planeación
Análisis
Diseño
Implementación
Transición
Mantenimiento
Obsolescencia
 La planeación de la estrategia produce modelos de alto nivel de un
negocio y, con éstos, define un plan para desarrollar un conjunto de
proyectos de sistemas interrelacionados.
 Al análisis del sistema modela un área de sistemas basados en ideas
y conceptos de los expertos de dominio proponiendo cualquier decisión
relacionada con la instrumentación.
El primer paso del análisis es generar la descripción del problema por
medio de interacciones con los usuarios, desarrolladores,
administradores, y expertos en el área del problema.
Durante el análisis :
· Se muestra los aspectos más importantes del sistema sin importar su
implementación final.
· El análisis sirve para comunicarse con los clientes y los expertos en el
área, sin necesidad de tener un conocimiento de la computación.
· El análisis es una representación concisa de lo "que" el sistema va a
hacer pero no "como".
· El analista trabaja con el cliente para clarificar la descripción del
problema, la cual originalmente puede ser incompleta, e incluso tener
inconsistencias.
 El diseño del sistema desarrolla un modelo de
instrumentación o implementación basado en los modelos
conceptuales desarrollados durante el análisis del sistema.
La etapa de diseño consiste de dos fases:
1) Diseño de sistemas.
2) Diseño de objetos.
Diseño de Sistemas
Durante el diseño de sistemas :
• Se toman decisiones de alto nivel sobre la arquitectura del sistema a
desarrollarse.
• Se diseña el ambiente de implementación, incluyendo decisiones sobre
software y hardware.
• El sistema de divide en subsistemas basados en los modelos de análisis y la
arquitectura propuesta.
• Se identifica la concurrencia en el sistema.
• Los subsistemas se asignan a los procesadores y tareas según la arquitectura
propuesta.
• Se escoge el manejo de almacenamientos de datos.
• Se escogen los mecanismos para coordinar el acceso a recursos globales
• Se escoge la implementación del control del software.
• Se escoge el enfoque para el manejo de condiciones de borde, como errores.
• Se deciden las prioridades durante el diseño, incluyendo
- Rendimiento
- Memoria
- Protocolos de comunicación
- Flexibilidad
- Extensibilidad
Diseño de Objetos
Durante el diseño de objetos :
• Se añaden detalles para la implementación final, basados en el análisis, tales
como:
- Extensión y refinamiento de las estructura de datos
- Descripción final de algoritmos
• Se combinan los tres modelos para determinar con más detalle las
operaciones en las clases.
• Se escoge o diseña los algoritmos para implementar los métodos.
• Se escogen las estructuras de datos.
• Se añaden clases, operaciones, y objetos internos del sistema.
• Se hacen optimizaciones al sistema.
• Se ajusta la herencia creando superclases abstractas para incrementar el
reuso de codigo.
• Se determina la representacion final de los objetos.
• Se empacan las clases y operaciones en módulos.
 La implementación del sistema implica la elaboración y la prueba de programas,
base de datos y redes de acuerdo con el que haya quedado definido durante el
diseño del sistema.
Durante la implementación:
• Se traduce el diseño a un lenguaje de programación particular, bases de datos o
hardware.
• La implementación debe ser relativamente sencilla y directa, ya que todas las
decisiones han sido hechas en las etapas previas.
Implementación con Lenguajes de Programación
• El lenguaje de programación no tiene que ser necesariamente orientado a
objetos.
• El uso de un lenguaje de programación orientado a objetos hace más fácil
la implementación de un diseño orientado a objetos
• La elección del lenguaje influye en el diseño, pero el diseño no debe
depender de los detalles del lenguaje.
• Si se cambia de lenguaje de programación no debe requerirse el re-diseño
del sistema.
Implementación con Base de Datos
• Se pueden utilizar bases de datos orientadas a objetos u otros tipos de
bases de datos.
• Si los aspectos dinámicos y funcionales del sistema son pocos,
comparados con las estructuras del sistema, una base de datos relacional
puede que sea suficiente.
• Una base de datos relacional se puede utilizar para implementar las
estructuras del sistema.
• Una base de datos persistente se puede utilizar para guardar las
estructuras fuera del programa.
 La transición del sistema instala los sistemas implementados.
 El mantenimiento del sistema consiste en realizar los cambios
necesarios para que este continué adaptándose a las necesidades
de los usuarios, con la frecuencia que las necesidades dicten.
 La obsolescencia es la etapa final del ciclo de vida del software y
esta ocurre cuando los cambios que requiere para continuar
adaptándose a las necesidades del cliente son demasiados o ya se a
modificado tantas veces que ya perdió su practicidad. Es entonces
cuando el ciclo vuelve a repetirse.
Las metodologías de desarrollo de sistemas tratan solo las primeras cinco
fases del ciclo de vida del software: planeación, análisis, diseño,
implementación y transición.
Cuando analizamos sistemas, creamos modelos del área de aplicación que
nos interesa.
Un modelo puede incorporar un sistema, centrarse en el área de la empresa o
abarcar toda la empresa.
El modelo representa un aspecto de la realidad y se construye de modo que
nos ayude a comprender a esta.
Con el análisis orientado a objetos, la forma de modelar la realidad difiere del
análisis convencional. Modelamos el mundo en términos de tipos de objetos y
lo que le ocurre a éstos. Los modelos que construimos en el análisis OO
reflejan la realidad de modo más natural que los del análisis tradicional de
sistemas. Mediante las técnicas OO, construimos software que modela mas
fielmente el mundo real. Cuando el mundo real cambia, nuestro software es
más fácil de cambiar, lo que es una ventaja real.