Unidad III
Programación Orientada a Objetos (POO)

Introducción

        La programación orientada a objetos es una “filosofía”, un modelo de programación, con su teoría y su metodología, que conviene conocer y estudiar antes de nada. Un lenguaje orientado a objetos es un lenguaje de programación que permite el diseño de aplicaciones orientadas a objetos. Dicho esto, lo normal es que toda persona que vaya a desarrollar aplicaciones orientadas a objetos aprenda primero la “filosofía” (o adquiera la forma de pensar) y después el lenguaje, porque “filosofía” sólo hay una y lenguajes muchos.




     Objetivo
       Aplicar la Programación orientada a Objetos mediante la utilización de las Técnicas de prototipos y desarrollo rápido, así como los elementos establecidos para este tipo de programación.

Contenidos

v  Técnicas de Prototipos y desarrollo rápido: Metodologías.

v  Elementos de la POO: Objetos, atributos, Mensajes, Clases, Instanciación. Ejemplos y Problemas. Características de la POO: Abstracción, Encapsulamiento, Polimorfismo, Herencia.



Material Instrucional

An C. (1999) Análisis y Diseño Orientado a Objetos con UML 1era. Edición. Edit. Prentice Hall.

Boock G. (1996) Análisis Orientado a Objetos. Edit. Addison Wesley.2da. Edición.

Larman C. (1999) Análisis y Diseño Orientado a Objetos con UML. 1era. Edición Edit. Prentice Hall.

Prof .Yusneyi Carballo Programación Orientada a Objetos

Estrategias de Evaluación

1.    Elaborar un informe escrito haciendo referencia de las Técnicas de Prototipos y desarrollo rápido.

2.    Realización de prueba escrita de los temas: Elementos de la POO: Objetos, atributos, Mensajes, Clases, Instanciación. Ejemplos y Problemas. Características de la POO: Abstracción, Encapsulamiento, Polimorfismo, Herencia. 
Unidad IV
Ingeniería del Software
                                                                                      
Introducción

         Hoy en día el software tiene un doble papel. Es un producto, pero simultáneamente es el vehículo para hacer entrega de un producto. Como producto permite el uso del hardware, ya sea, por ejemplo, un ordenador personal o un teléfono móvil celular. Como vehículo utilizado para hacer entrega del producto, actúa como base de control, por ejemplo un sistema operativo, o un sistema gestor de redes. El software hace entrega de lo que se considera como el producto más importante de siglo XXI, la información. El software transforma datos personales para que sean más útiles en un entorno local, gestiona información comercial para mejorar la competitividad, proporciona el acceso a redes a nivel mundial, y ofrece el medio de adquirir información en todas sus formas.
Actualmente se considera la Ingeniería del Software como una nueva área de la ingeniería, y la profesión de ingeniero informático es una de las más demandadas, aunque en España los salarios suelen ser bajos para la cualificación de estos profesionales. La palabra ingeniería tiene una connotación de prestigio que provoca que muchas ramas del conocimiento tiendan a autodenominarse así.



Objetivo

 Aplicar conceptos de Ingeniería de Software enfatizando el proceso de Desarrollo y Tecnología de Software.

Contenidos

v  Proceso de Desarrollo de Software: La Complejidad de los Sistemas de Software. Recursos de Software en sistemas Complejos. Características de los Sistemas de Software. Ingeniería de los Sistemas de Software. Modelos de Ciclos de Vida: Análisis Comparativo. Modelo en Cascada; Elementos, Características. Modelo Incremental; Modelos basados en Prototipos desechables e incremental. Modelo del Sistema Automatizado. Meta. Modelo en Espiral.


v  Tecnología de Software: Conceptos. Métodos de desarrollo de Herramientas de Soporte. Entornos de desarrollo. Componentes reutilizables. Ejemplos. De Tecnologías de Software. Desarrollo Estructurado y Orientado a Objetos.



MODELOS DE DESARROLLO DEL SOTFWARE
Los modelos de desarrollo de software son una representación abstracta de una manera en particular. Realmente no representa cómo se debe desarrollar el software, sino de un enfoque común. Puede ser modificado y adaptado de acuerdo a las necesidades del software en proceso de desarrollo. 1 Hay varios modelos para perfilar el proceso de desarrollo, cada uno de las cuales cuenta con pros y contras. El proyecto debería escoger el más apropiado para sus necesidades. En ocasiones puede que una combinación de varios modelos sea apropiado. Existen tres paradigmas de los modelos de desarrollo de software:
Es uno de los paradigmas más antiguo, se inventó durante la creación del método estructurado. Si se elige un proyecto, el método varia en etapas. Como todo modelo, existen sus pros y contras al usar este paradigma:
Descripción: Cuadro de ventajas y desventajas del uso del Paradigma tradicional.

Si se aplica este paradigma, unos de los principales problemas, es que las etapas realizadas no son autónomas de las siguientes, creando una dependencia estructural y en el acaso de un error atrasaría todo el proyecto. Se tiene que tener pautas bien definidas, y que no se incurra a modificación porque implicaría en que el software no cumpla con su ciclo de vida. Tener en cuenta que el cliente no se vea afectado por la impaciencia.
2. Paradigma Orientado a Objetos: Estos modelos se basan en la Programación orientada a objetos; por lo tanto, se refiere al concepto de clase, el análisis de requisitos y el diseño. El modelo o paradigma orientado a objetos posee dos características principales, las cuales son:
·         Permite la re-utilización de software.
·         Facilita el desarrollo de herramientas informáticas de apoyo al desarrollo, el cual es simple al implementarla en una notación orientada a objetos llamado UML.
3. Paradigma de Desarrollo Ágil: Es un paradigma de las Metodologías De Desarrollo basado en procesos ágiles. Estos intentan evitar los tediosos caminos de las metodologías tradicionales enfocándose en las personas y los resultados. Usa un enfoque basado en el Valor para construir software, colaborando con el cliente e incorporando los cambios continuamente.

Modelo de cascada
El modelo de cascada define las siguientes etapas que deben cumplirse de forma sucesiva:
1.   Especificación de requisitos
2.   Diseño del software
3.   Construcción o Implementación del software
4.   Integración
5.   Pruebas (o validación)
6.   Despliegue (o instalación)
7.   Mantenimiento
Siguiendo el modelo de cascada de forma estricta, sólo cuando se finaliza una fase, comienza la otra. En ocasiones se realiza una revisión antes de iniciar la siguiente fase, lo que permite la posibilidad de cambios (lo que puede incluir un proceso de control formal de cambio). Las revisiones también se utilizan para asegurar que la fase anterior ha sido totalmente finalizada; los criterios para completar una fase se conocen frecuentemente con el término inglés "gate" (puerta). Este modelo desaconseja revisitar y revisar fases que ya se han completado. Esta falta de flexibilidad en un modelo de cascada puro ha sido fuente de crítica de los defensores de modelos más flexibles.

Modelo de espiral
La principal característica del modelo en espiral es la gestión de riesgos de forma periódica en el ciclo de desarrollo. Este modelo fue creado en 1988 por Barry Boehm, combinando algunos aspectos clave de las metodologías del modelo de cascada y del desarrollo rápido de aplicaciones, pero dando énfasis en un área que para muchos no jugó el papel que requiere en otros modelos: un análisis iterativo y concienzudo de los riesgos, especialmente en el caso de sistema complejos de gran escala.
La espiral se visualiza como un proceso que pasa a través de algunas interaciones con el diagrama de los cuatro cuadrantes representativos de las siguientes actividades:
1.   crear planes con el propósito de identificar los objetivos del software, seleccionados para implementar el programa y clarificar las restricciones en el desarrollo del software;
2.   Análisis de riesgos: una evaluación analítica de programas seleccionados, para evaluar como identificar y eliminar el riesgo;
3.   la implementación del proyecto: implementación del desarrollo del software y su pertinente verificación;
Modelo de espiral con énfasis en los riesgos, haciendo hincapié en las condiciones de las opciones y limitaciones para facilitar la reutilización de software, la calidad del software puede ayudar como una meta propia en la integración en el desarrollo del producto. Sin embargo, el modelo en espiral tiene algunas limitaciones, entre las que destacan:
1.   El énfasis se sitúa en el análisis de riesgo, y por lo tanto requiere de clientes que acepten este análisis y actúen en consecuencia. Para ello es necesaria confianza en los desarrolladores así como la predisposición a gastar más para solventar los temas, por lo cual este modelo se utiliza frecuentemente en desarrollo interno de software a gran escala.
2.   Si la implementación del riesgo de análisis afectará de forma esencial los beneficios del proyecto, no debería utilizarse este modelo.
3.   Los desarrolladores de software han de buscar de forma explícita riesgos y analizarlos de forma exhaustiva para que este modelo funcione.
La primera fase es la búsqueda de un plan para conseguir los objetivos con las limitaciones del proyecto para así buscar y eliminar todos los riesgos potenciales por medio de un cuidadoso análisis, y si fuera necesario incluyendo la fabricación de un prototipo. Si es imposible descartar algunos riesgos, el cliente ha de decidir si es conveniente terminar el proyecto o seguir adelante ignorando los riesgos. Por último, se evalúan los resultados y se inicia el diseño de la siguiente fase.

Desarrollo iterativo e incremental
El desarrollo iterativo recomienda la construcción de secciones reducidas de software que irán ganando en tamaño para facilitar así la detección de problemas de importancia antes de que sea demasiado tarde. Los procesos iterativos pueden ayudar a desvelar metas del diseño en el caso de clientes que no saben cómo definir lo que quieren.

Desarrollo ágil
El desarrollo ágil de software utiliza un desarrollo iterativo como base para abogar por un punto de vista más ligero y más centrado en las personas que en el caso de las soluciones tradicionales. Los procesos ágiles utilizan retroalimentación en lugar de planificación, como principal mecanismo de control. La retroalimentación se canaliza por medio de pruebas periódicas y frecuentes versiones del software.
Hay muchas variantes de los procesos ágiles:
·         En el caso de la programación extrema (XP), las fases se realizan en pasos muy cortos (o "continuos") con respecto al anterior. El primer paso (intencionalmente incompleto) por los pasos puede ocurrir en un día o en una semana, en lugar de los meses o años de cada paso completo en el modelo en cascada. En primer lugar, se crean pruebas automatizadas para proveer metas concretas al desarrollo. Después se programa el código, que será completo cuando todas las pruebas se superan sin errores, y los desarrolladores ya no sabrían como mejorar el conjunto de pruebas necesario. El diseño y la arquitectura emergen a partir de la refactorización del código, y se da después de programar. El diseño lo realizan los propios desarrolladores del código. El sistema, incompleto, pero funcional se despliega para su demostración a los usuarios (al menos uno de los cuales pertenece al equipo de desarrollo). Llegado este punto, los profesionales comienzan a escribir las pruebas para la siguiente parte del sistema de más importancia.

Codificación y corrección
El desarrollo de codificación y corrección (en inglés "Code and fix") es, más que una estrategia predeterminada, el resultado de una falta de experiencia o presión que se ejerce sobre los desarrolladores para cumplir con una fecha de entrega. Sin dedicar tiempo de forma explícita para el diseño, los programadores comienzan de forma inmediata a producir código. Antes o después comienza la fase de pruebas de software (a menudo de forma tardía) y los inevitables errores que se encuentran han de eliminarse antes de poder entregar el software.

Orientado a la Reutilización
La reutilización de software es un proceso donde se recurre al uso de activos de software en las especificaciones de análisis, diseños, implementación y pruebas de una aplicación o sistemas de software.

La reutilización tiene ciertos Indicadores por ejemplo:
1. Entre el 40% y 60% de una aplicación es re-utilizable en otra.
2. Aproximadamente el 60% de una aplicación administrativa es re-utilizable.
3. Aproximadamente el 75% de las funciones son comunes a más de un programa.
4. Solo el 15% del código encontrado en muchos sistemas es único y novedoso a una aplicación especifica.
El rango general de uso recurrente esta entre el 15% y 85%.

La reutilización tiene Principios como la existencia de parecidos en distintos sistemas de un mismo dominio, donde el software puede representarse como una combinación de módulos y los sistemas nuevos se puede caracterizar por diferencias respecto a los antiguos sistemas.
Material Intruccional



Presman. McGraw Hill (1993) Introducción a la Ingeniería de Software.

Yourdon E. (1993) Análisis Estructurado Moderno Edit. Prentice Hall.

Estrategias de Evaluación


1.    Realización de prueba escrita de los temas: Proceso de Desarrollo de Software, Tecnología de Software.
Unidad V
Desarrollo de Sistemas de Tiempo Real. (STR)

Introducción


       Básicamente los sistemas de tiempo real se definen como sistemas informáticos que tienen la capacidad de interactuar rápidamente con su entorno físico, el cual puede realizar funciones de supervisión o control para su mismo beneficio. Todos los sistemas de tiempo real tienen la facultad de ejecutar actividades o tareas en de intervalos de tiempo bien definidos. Todas las tareas son ejecutadas inmediatamente en una forma concurrente, esto es para sincronizar el funcionamiento del sistema con la simultaneidad de acciones que se presentan en el mundo físico. En los sistemas de tiempo real los intervalos de tiempo en que se ejecutan las tareas se definen por un esquema de activación y por un plazo de ejecución. En lo que respecta al esquema de activación puede ser periódico, es decir en intervalos regulares, o también puede ser aperiódico, es decir, en respuesta a sucesos externos que ocurren de forma irregular. La mayoría de los STR son utilizados cuando existen requerimientos de tiempo muy rígidos en las operaciones o en el flujo de datos, generalmente son requeridos como sistemas de control en una aplicación dedicada. La eficiencia de los STR no solo depende de la exactitud de los resultados de cómputo, sino también del momento en que los entrega. La predictibilidad es su característica principal de este tipo de sistemas. Este tipo de sistemas se caracterizan por tener que producir una salida, como respuesta a una entrada, en un tiempo determinado. El intervalo de tiempo que se presenta entre la entrada y la salida debe ser muy pequeño para que la respuesta temporal del sistema sea aceptable.
Cuando se diseña un sistema de tiempo real se pasa por varias fases:
1.- Se identifican todas las tareas que se tienen que realizar y también se identifican las restricciones temporales que se pretenden cumplir.
2.- Posteriormente se codifican los programas que ejecutarán las tareas
3.- Posteriormente se pasa a medir el tiempo de cómputo de cada tarea y se realiza un análisis de planificabilidad. Este análisis consiste en aplicar unas pruebas al conjunto de tareas de tal forma que si éstas pasan el test entonces se puede garantizar que ninguna tarea perderá su plazo de ejecución. De lo contrario si no pasan el test se tiene que volver a comenzar desde el principio, es decir, comenzar de nuevo, utilizando otro procesador más potente o utilizando otros algoritmos para implementar las tareas.



Objetivo
      Manejar lenguajes de programación Orientado a Objetos, con énfasis en la utilización de técnicas de ingeniería del software.

Contenidos

v  Sistemas de Tiempo Real: Definiciones Básicas, Restricciones. Tecnologías de Software para sistemas de Tiempo Real: Bases de Datos, Sistemas Operativos, Lenguajes, Sistemas CASE para (STR)
v  Calidad del Software: Introducción a la calidad del Software. Métricas. ISO 9000 0.2. Calidad de Proceso. Calidad de Producto.

v  Ingeniería de Software Orientado a Objeto.
v  POO: Conceptos fundamentales. Clases, Objetos, Atributos, Encapsulamiento, Herencia, y Polimorfismos. Ejemplos y Ejercicios. Análisis y Diseño Orientado a Objetos. Pruebas Orientada a Objetos. Patrones Orientados a Objetos.

Material Instruccional



An C. (1999) Análisis y Diseño Orientado a Objetos con UML 1era. Edición. Edit. Prentice Hall.

Boock G. (1996) Análisis Orientado a Objetos. Edit. Addison Wesley.2da. Edición.

Larman C. (1999) Análisis y Diseño Orientado a Objetos con UML. 1era. Edición Edit. Prentice Hall.

Presman. McGraw Hill (1993) Introducción a la Ingeniería de Software.

Yourdon E. (1993) Análisis Estructurado Moderno

Estrategias de Evaluación


1.    Elaborar un proyecto eligiendo un tema en el cual usted se identifique que considere apropiado para el uso de esta valiosa herramienta como lo es Procesamiento de Datos y todo lo que la globaliza vas a aplicar todas las unidades que se evaluó en el transcurso de las 12 semanas del cursos usando el lenguaje de programación de su preferencia.
Cronograma de Actividades
SEMANA
FECHA
HORA
CONTENIDO
EVALUACIÓN
PONDERACIÓN
1
03/10/2016
8:05-10:30
Prueba Diagnostica

2
17/10/2016
8:05-10:30
UNIDAD I
Realización de taller escrito en pareja
10%
3
31/10/2016
8:05-10:30
UNIDAD I
Prueba Escrita individual 
15%
4
14/11/2016
8:05-10:30
UNIDAD II
Evaluación Practica
10%
5
28.
/11/2016
8:05-10:30
UNIDAD II
Evaluación Practica
10%
6
05/12/2016
8:05-10:30
UNIDAD III
Elaborar informe escrito
10%
7
12/12/2016
8:05-10:30
UNIDAD III
Prueba Escrita individual
10%
8
09/01/2017
8:05-10:30
UNIDAD IV
9
16/01/2017
8:05-10:30
UNIDAD IV
Prueba Escrita Individual
15%
10
23/01/2017
8:05-10:30
UNIDAD V


11
30/01/2017
8:05-10:30
UNIDAD V
Elaborar un proyecto usando el lenguaje de programación de su preferencia con referencia a lo visto en clases.

20%
12
06/02/2017
8:05-10:30
UNIDAD V