Full Transcript

Programación II Unidad 1 - Introducción a la programación orientada a objetos Tecnicatura Universitaria en Desarrollo Web Facultad de Ciencias de la Administración Universidad Nacional de Entre Ríos Objetivos y...

Programación II Unidad 1 - Introducción a la programación orientada a objetos Tecnicatura Universitaria en Desarrollo Web Facultad de Ciencias de la Administración Universidad Nacional de Entre Ríos Objetivos y contenidos Unidad 1: Introducción a la programación orientada a objetos ▰ Objetivos: ▻ Conocer la evolución de los lenguajes de programación. ▻ Comprender las etapas del proceso de desarrollo de software. ▻ Entender la abstracción como proceso natural mental. ▰ Contenidos: ▻ Evolución de los Lenguajes de Programación. ▻ Etapas en el proceso de desarrollo de sistemas. Calidad del Software. ▻ Modularización. Criterios de buena modularización. Principios en la 2 construcción del software. Programación y Abstracción. Conceptos generales Algoritmo ¿De dónde proviene la palabra algoritmo? ▻ El término algoritmo proviene de la deformación del nombre Al- Khuwarizmi, que fue desde un punto de vista cronológico la primera figura de la matemática árabe en la Edad Media. ▻ De su obra más importante es que se asientan los primeros principios de lo que hoy se conoce como álgebra, palabra que deriva de la primera palabra del título de esta obra: "aljabar wa- al-muqabala“. Definición ▻ Conjunto de pasos o instrucciones que se deben seguir para realizar una determinada tarea. 3 Conceptos generales Algoritmo Reglas a ser cumplidas por estas instrucciones: ▻ Ser un conjunto finito de instrucciones y que se realicen en un tiempo finito. ▻ Debe tener un número finito (0.. N) de datos de entrada y un número finito (0... M) de datos de salida (resultados). ▻ Frente a un mismo conjunto de datos de partida se debe llegar siempre a un mismo conjunto de resultados. Definición (RAE) ▻ Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema. 4 Conceptos generales ▰ Un algoritmo expresado en un determinado lenguaje de programación se denomina programa. ▰ Un programa es la implementación de un algoritmo en un determinado lenguaje de programación siguiendo las reglas establecidas por el lenguaje elegido. ▰ Los lenguajes de programación son herramientas que nos permiten crear programas, normalmente llamados software. ▰ Al igual que el lenguaje natural, consta de una serie de normas (gramática y sintaxis) que permite, por medio de símbolos, generar instrucciones que una computadora interprete. 5 Conceptos generales ▰ Programación se utiliza para designar la creación de programas a pequeña escala, el desarrollo de sistemas complejos se suele denominar Ingeniería de Software. ▰ Programación e Ingeniería de Software son complementarios entre sí. ▰ Para el desarrollo de grandes sistemas informáticos se divide el trabajo en tareas que diversos programadores desarrollarán. Al terminar se unen las piezas como en un puzzle para completar el sistema en sí. Así pues, la programación también se aplica para el desarrollo de grandes sistemas en la ingeniería de software. 6 Conceptos generales 7 Conceptos generales Lenguajes de BAJO NIVEL ▻ Son aquellos cuyas instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de la computadora que lo soporta. Con este término se denominan al Lenguaje Máquina y al Lenguaje Ensamblador. Lenguajes de ALTO NIVEL ▻ Son lenguajes independientes del tipo de procesador en que se ejecutan, y de mayor nivel de abstracción que los lenguajes de bajo nivel. ▻ Los lenguajes de programación de alto nivel, o lenguajes simbólicos, facilitan la tarea de programación, ya que disponen de formas adecuadas que permiten ser leídas y escritas por personas y resultan independientes del modelo de computadora utilizada. 8 Conceptos generales Intérprete ▻ Lee un programa en alto nivel y lo ejecuta, lo que significa que hace lo que el programa dice. Procesa el programa un poco por vez, alternativamente leyendo líneas y realizando cálculos. Compilador ▻ Lee un programa y lo traduce completamente antes que el programa comience a correr. En este caso el programa de alto nivel es llamado código fuente, y el programa traducido es llamado código objeto o ejecutable. Luego de que un programa es compilado, el mismo puede ser ejecutado reiteradamente sin futuras traducciones. 9 Paradigmas Concepto Un paradigma de programación es un estilo de desarrollo de programas. Es decir, un modelo para resolver problemas computacionales. Existen diversas estrategias que permiten ejecutar en una computadora un programa realizado en un lenguaje de programación simbólico. Paradigma de Software Representa un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro sino que cada uno tiene ventajas y desventajas. También hay situaciones donde un paradigma resulta 10 más apropiado que otro. Paradigmas Paradigma imperativo o procedimental La programación imperativa, es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Su esencia es el cálculo iterativo, paso a paso, de valores y su asignación a posiciones de memoria. ALGORITMO + ESTRUCTURA DE DATOS = PROGRAMAS Lenguajes imperativos: Pascal, Fortran, Algol, C, etc. 11 Paradigmas Paradigma orientado a objetos Es un paradigma de programación que define los programas en términos de “clases de objetos”, objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, métodos) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar. OBJETOS + MENSAJES = PROGRAMAS Lenguajes orientados a objetos: Smalltalk, Eiffel, Java, etc. 12 Paradigmas Paradigma lógico El paradigma asume la definición de un conjunto de hechos y conjunto de reglas que permiten la deducción de otros hechos. La programación lógica encuentra su habitat natural en aplicaciones de inteligencia artificial o relacionadas: Sistemas Expertos. Demostración Automática de teoremas. Reconocimiento de lenguaje natural. 13 Paradigmas Paradigma funcional Sus orígenes provienen del Cálculo Lambda (o λ-cálculo), una teoría matemática elaborada por Alonzo Church. Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones. Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración. 14 UNIDAD 1 Ciclo de vida de un Proyecto y Modularidad 15 Ciclo de Vida de un Proyecto Estudio de factibilidad Análisis y especificaciones de requerimientos Diseño y especificación Codificación y Testeo de módulos Integración y Testeo de Sistema Liberación y Mantenimiento 16 Ciclo de Vida de un Proyecto Estudio de factibilidad Delimitación del ámbito del proyecto, estudio de viabilidad, análisis de riesgos, estimación de costos, planificación temporal y asignación de recursos. Análisis y especificaciones de requerimientos Descripción clara y completa de qué es lo que se pretende, incluyendo la presentación de los resultados que se desean obtener y la forma en que se va a utilizar la aplicación. Diseño y especificación Se transforma la arquitectura general de análisis, a una arquitectura particular y detallada del sistema que satisfaga todos los requisitos del sistema, donde las condiciones idealizadas durante el análisis se reemplazan por requisitos del ambiente de implantación particular. Se contesta la pregunta del “cómo” del sistema. 17 Ciclo de Vida de un Proyecto Codificación y Testeo de módulos Adquisición de componentes, creación de los módulos de la aplicación en un lenguaje de programación e integración de los recursos necesarios para que el sistema funcione. Integración y Testeo de Sistema Comprobación del funcionamiento de la aplicación. Pruebas de unidad y de integración, pruebas alfa, pruebas beta, test de aceptación. Verificación Validación Liberación y Mantenimiento Mantenimiento correctivo: Corrección de defectos o errores. Mantenimiento adaptativo: Adaptación de la aplicación a nuevas 18 circunstancias e inclusión de nuevas prestaciones. Ciclo de Vida de un Proyecto 19 Calidad de Software Actualmente las organizaciones que desarrollan software tienen como principal objetivo lograr un alto nivel de calidad del producto o servicio que desarrollan. De acuerdo a la IEEE (Instituto de Ingenieros Eléctricos y Electrónicos): La calidad de un sistema, componente o proceso de desarrollo de software, se obtiene en función del cumplimiento de los requerimientos iniciales especificados por el cliente o usuario final. La Ingeniería de Software busca calidad. 20 Factores que determinan la Calidad de Software Características Operativas Corrección (¿Hace lo que se le pide?) Grado en que una aplicación satisface sus especificaciones y consigue los objetivos encomendados por el cliente. Fiabilidad (¿Lo hace de forma fiable todo el tiempo?) Grado en que se puede esperar que una aplicación lleve a cabo las operaciones especificadas y con la precisión requerida. Eficiencia (¿Qué recursos hardware y software necesito?) Cantidad de recursos hardware y software que necesita una aplicación para realizar las operaciones con los tiempos de respuesta adecuados 21 Factores que determinan la Calidad de Software Características Operativas Integridad (¿Puedo controlar su uso?) Grado con que puede controlarse el acceso al software o a los datos a personal no autorizado. Facilidad de uso (¿Es fácil y cómodo de manejar?) Esfuerzo requerido para aprender el manejo de una aplicación, trabajar con ella, introducir datos y conseguir resultados. 22 Factores que determinan la Calidad de Software Capacidad de soportar los cambios Facilidad de mantenimiento (¿Puedo localizar los fallos?) Esfuerzo requerido para localizar y reparar errores. Flexibilidad (¿Puedo añadir nuevas opciones?) Esfuerzo requerido para modificar una aplicación en funcionamiento. Facilidad de prueba (¿Puedo probar todas las opciones?) Esfuerzo requerido para probar una aplicación de forma que cumpla con lo especificado en los requisitos. 23 Factores que determinan la Calidad de Software Adaptabilidad a nuevos entornos Portabilidad (¿Podré usarlo en otra máquina?) Esfuerzo requerido para transferir la aplicación a otro hardware o sistema operativo. Reusabilidad (¿Podré utilizar alguna parte del software en otra aplicación?) Grado en que partes de una aplicación pueden utilizarse en otras aplicaciones. Interoperabilidad (¿Podrá comunicarse con otras aplicaciones o sistemas informáticos? Esfuerzo necesario para comunicar la aplicación con otras aplicaciones o sistemas informáticos. 24 Factores que determinan la Calidad de Software Todos los factores revisten importancia, existiendo 4 que son fundamentales en todo producto de software: Correctitud Robustez Confiabilidad Extensibilidad Reusabilidad Modularidad 25 Modularidad Conceptos ▰ Cuando un programa comienza a ser largo y complejo no es apropiado tener un único texto con sentencias una tras otra. ▰ El programa se vuelve monolítico y difícil de modificar, además suelen aparecer trozos de código muy similares entre sí repetidos a lo largo de todo el programa. ▰ Para solucionar estos problemas los lenguajes de alto nivel suelen disponer de una herramienta que permite estructurar el programa Principal como compuesto de subprogramas (métodos) que resuelven problemas 26 parciales del problema principal. Modularidad Método Secuencia ordenada de pasos muy precisos que conducen a la solución de un problema, en un tiempo finito Datos de entrada A,B Parámetro de entrada Proceso C=A+B 27 Datos de salida C Parámetro de salida Modularidad Métodos: procedimientos y funciones Los procedimientos y funciones son mecanismos de estructuración que permiten ocultar los detalles de la solución de un problema y resolver una parte de dicho problema en otro lugar del código. ▰ En su concepción más simple, un procedimiento es una construcción que permite dar un nombre a un conjunto de sentencias y declaraciones asociadas que se usan para resolver un subproblema dado. Usando procedimientos la solución es más corta, comprensible y fácilmente modificable. ▰ Las funciones son, al igual que los procedimientos, un conjunto de sentencias que se ejecutan constantemente, la diferencia entre éstas y los procedimientos es que las funciones regresan un valor. 28 Modularidad Uso en el lenguaje Python: Uso en el lenguaje Java: # método sin parámetros o retorno de valores def diHola(): print("Hola!") diHola() # llamada al método, ‘Hola!' se muestra en la consola # método con un parámetro def holaConNombre(name): print("Hola " + name + "!") holaConNombre("Ada") # llamada al método, ‘Hola Ada!' se muestra en la consola # método con múltiples parámetros con una sentencia de retorno def multiplica(val1, val2): return val1 * val2 29 multiplica(3, 5) # muestra 15 en la consola Modularidad Criterios de una buena modularización ✓ Descomposición Modular: permite la descomposición de un problema en subproblemas menos complejos, conectados por una estructura simple, y que pueden resolverse en forma independiente. ✓ Composición Modular: favorece la producción de elementos de software que pueden ser combinados para crear nuevos sistemas, posiblemente en un entorno diferente a aquel en el que se idearon. ✓ Entendimiento Modular: facilita que quien lea un módulo pueda comprenderlo sin necesidad de acudir a otros módulos. ✓ Continuidad Modular: la descomposición es tal que un cambio pequeño en la especificación origina un cambio en un solo módulo, o en un pequeño número de módulos, sin efecto en otros con los que se relaciona. ✓ Protección Modular: el efecto de una condición excepcional producida en tiempo de ejecución sólo afecta al módulo dónde se produce, o sólo se propaga a los módulos vecinos. No hay propagación de errores en cascada. 30 Modularidad Criterios y Factores de Calidad 31 Modularidad Reglas para asegurar la modularidad ✓ Mapeo Directo: la estructura modular debe ser compatible con los elementos generados en el proceso de modelamiento del dominio del problema. ✓ Pocas Interfaces: todo módulo debe comunicarse con el menor número posible de otros módulos. ✓ Interfaces Pequeñas: si dos módulos se comunican deberían intercambiar la menor cantidad de información posible. ✓ Interfaces Explícitas: la forma de comunicación entre dos módulos debe ser obvia a partir de sus códigos. ✓ Ocultamiento de Información: el diseño de todo módulo debe contener un subconjunto de propiedades que son públicas y un subconjunto de propiedades que son privadas. 32 Modularidad Principios de la construcción de software A partir de las reglas (e indirectamente de los criterios) se derivan cinco principios de construcción de software: ✓ Unidad Modular Lingüística ✓ Auto-documentación ✓ Acceso Uniforme ✓ Abierto-Cerrado ✓ Cambio Simple 33 Modularidad Principios de la construcción de software ✓ Unidad Modular Lingüística Los módulos deben corresponderse con unidades sintácticas en el lenguaje utilizado. ✓ Auto-documentación Toda la documentación interna sobre el módulo debería ser parte del propio módulo. ✓ Acceso Uniforme Todo servicio ofrecido por un módulo debería estar disponible a través de una notación uniforme, la cual no revele si están implementadas a través de almacenamiento o a través de un cómputo. 34 Modularidad Principios de la construcción de software ✓ Abierto-Cerrado Los módulos deben ser abiertos y cerrados. Un módulo se dice abierto si está disponible para ser extendido. Por ejemplo, debería ser posible expandir su conjunto de operaciones o adicionar campos a su estructura de datos. Un módulo se dice cerrado si está disponible para ser utilizado por otros módulos. Esto asume que el módulo ha dado una descripción bien definida y estable (su interface en el sentido de ocultamiento de información). ✓ Cambio Simple Siempre que un sistema de software debe soportar un conjunto de alternativas, uno y solo un módulo en el sistema debe conocer esta lista exhaustiva. 35 Modularidad Principios de la construcción de software ✓ Cambio Simple Siempre que un sistema de software debe soportar un conjunto de alternativas, uno y solo un módulo en el sistema debe conocer esta lista exhaustiva. 36 Programación y Abstracción La abstracción como proceso natural mental Un modelo mental es una vista simplificada de partes del mundo que nos ayudan a comprenderlo. 37 Programación y Abstracción La abstracción como proceso natural mental Abstraemos dependiendo de nuestro dominio de interés 38 Programación y Abstracción Abstracción Definición “Un programa no es más que una descripción abstracta de un procedimiento o fenómeno que existe o sucede en el mundo real” (Joyanes Aguilar) “Los humanos hemos desarrollado una técnica excepcionalmente potente para tratar la complejidad: abstraernos de ella. Incapaces de dominar en su totalidad los objetos complejos, se ignora los detalles no esenciales, tratando en su lugar con el modelo ideal del objeto y centrándonos en el estudio de sus aspectos esenciales” (Wulft) 39 Programación y Abstracción La abstracción y los procedimientos en la programación Los procedimientos y funciones fueron unos de los primeros mecanismos de abstracción que se utilizaron ampliamente en la programación. 40 Tipos de Datos Un tipo de datos es un conjunto de valores, y un conjunto de operaciones sobre estos valores. Tipo de Dato = Representación + Operaciones Todos los lenguajes de programación soportan algún tipo de datos. Por ejemplo, Pascal soporta tipos base como enteros, reales, caracteres y tipos compuestos como arrays y registros 41 Abstracción de Datos Es una técnica muy potente que permite diseñar programas más cortos, legibles y flexibles. Su esencia es similar a la utilización de un tipo de dato, cuyo uso se realiza sin tener en cuenta cómo se encuentra representado o implementado. Los tipos de datos son abstracciones y el proceso de construir nuevos tipos se denomina abstracción de datos. 42 Abstracción de Datos Tipos Abstractos de Datos Un Tipo Abstracto de Datos es el conjunto constituido por la estructura de datos y las operaciones asociadas a la misma que permite modelar el comportamiento de una entidad real. TAD = estructura de datos + operaciones Es un tipo de datos que consta de datos (estructuras de datos propias) y operaciones que se pueden realizar sobre esos datos. Es un tipo de dato definido por el programador que se manipula de manera similar a como se lo hace con los tipos de datos definidos por el sistema. 43 Abstracción de Datos Tipos Abstractos de Datos Un Tipo Abstracto de Datos (TAD) es un tipo de datos definido por el usuario si se dan las siguientes condiciones: Existe una construcción del lenguaje que le permite asociar la representación de los datos con las operaciones que lo manipulan. La representación del nuevo tipo de datos está oculta de las unidades de programa que lo utilizan. 44 Abstracción de Datos Tipos Abstractos de Datos Ejemplo: TAD: Vector → Implementación: Arreglos. TAD: Red → Implementación: Grafos. TAD: Matriz → Implementación: Arreglos bidimensionales. Pila (Stack): Es una estructura de datos de tipo LIFO. Es un tipo de lista donde la inserción y eliminación de elementos se realiza solamente por un extremo al que se 45 le denomina tope o cima. Abstracción de Datos Objetos Es un tipo abstracto de datos al que se le añaden importantes características en compartición de código y reutilización 46 47 Bibliografia básica Ghezzi, Carlo, Mehdi Jazayeri, and Dino Mandrioli. “Fundamentals of software engineering”. Prentice- Hall, Inc., 1991. Luis Joyanes Aguilar. “Programación Orientada a Objetos”. Mc.Graw Hill, 1996. Elizabeth Silva. Presentación de Clase “Unidad 1: Introducción”. Cátedra Programación Orientada a Objetos. Facultad de Ciencias de la Administración. UNER. 48

Use Quizgecko on...
Browser
Browser