Download Programación III
Document related concepts
no text concepts found
Transcript
Programación III Introducción Qué se espera de un sistema? Calidad del Software. • Confiabilidad: 1) correcto (cumpla con las especificac.) 2) robusto (reacción en situaciones extremas) • Extensibilidad: adaptación a los cambios • Reutilización: capacidad de re-emplear el código • Compatibilidad: interoperable con otros productos, uso de estándar, ej formato de arch. • Facilidad de uso: amigable Calidad del Software (cont) • Portabilidad: distintas plataformas • Eficiencia: mín cantidad de recursos de hard, tiempo de proceso, etc • Funcionalidad: cumplir los requerimientos • Oportunidad: llegar al mercado en el momento justo • Costo: desarrollo, operación y mantenimiento Desarrollar Software Transformación entre el problema a resolver y el modelo de la solución 1) Modelar el problema en vez de la solución y que la máquina se ocupe de la traducción. Enfoque de Lisp, Prolog, RPG, Stress, APL, orientados a det. tipo de problemas, fuera de su ámbito son difíciles de manejar 2) Procesamiento del lenguaje natural, rama de la Inteligencia artificial, aún inmaduro 3) OO, crear objetos que representen elementos tanto del espacio de la solución como del espacio del problema. Paradigmas y técnicas (cont) 1) Programación estructurada surge 60, empleo de secuencia, selección e interacción, elimina el goto. Ej Fortran, Algol, C y Pascal 2) Programación modular - Abstracción de procesos • división del problema en un conjunto de módulos o subprogramas autónomos • diseño descendente, un refinamiento de lo general a lo particular top-down. Paradigmas y técnicas (cont) • Diseño ascendente, bottom-up, acciones de uso frecuente agrupadas en bibliotecas, no modificables • ej Lenguajes Fortran 77, Algol 80, C Pascal - Abstracción de datos • Implementación de tipos definidos por el programador, datos + las operaciones definidas sobre los mismos. Ocultamiento de la info • Impedir que el usuario del TAD haga uso indebido empleando aspectos de la implementación. • Separar el qué del cómo. • El cliente sólo debe poder emplear la interfase • Interfase contrato partes cliente y servidor • Cliente info para usar el módulo correctamente • Proveedor info para que comprenda el uso que se hara de ese módulo • Precondiciones, postcondiciones e invariantes Beneficios del encapsulamiento • Permite cambios en la implementación ej pasar de una estructura de pila a lista • Impide violación de las restricciones sobre los datos internos ej datos vínculados entre sí, arco de un grafo. POO • Nace con lenguajes como Simula, Smalltalk, hace 20 años. • Aspectos nuevos: - Uso de la POO en aplicaciones comerciales - Aparición de metodologías avanzadas de desarrollo OO Ventajas de OO • Conceptos comunes a lo largo del ciclo de vida • Reducción de la brecha entre el ámbito del problema y el de la solución • Centrada en los datos en vez de en los procesos, siendo los primeros más estables • Aumento del nivel de complejidad de los sistemas, los objetos se pueden construir a partir de otros pre-existentes, uso de bibliotecas Ventajas de POO (cont) • Herencia y polimorfismo, permite la reutilización y extensión del código, ya probado en otro contexto. • Uso de prototipos, se deja la implementación para el final. • Programación en ambientes de interfaz de usuario gráfica y programación guiada por eventos. • En éstos ambientes se manipulan más objetos que procesos y la ejecución deja de ser secuencial para estar manejada por el usuario. Características de POO • Todo es un objeto • Un programa es un conjunto de objetos que interactúan a través de mensajes • Composición, cada objeto se crea contruyendo un agregado de otros objetos • Cada Objeto tiene un tipo, clase, que le dice que mensajes puede aceptar • Todos los objetos de la misma clase admiten los mismos mensajes Características de POO (cont) • Es no procedimental, está basado en datos • La OO tiende a económizar en el desarrollo en todas sus etapas, fomentando al re utilización de componentes pre-fabricados y probados. • Se basa en abstracción, encapsulamiento (ocultación de información), herencia y polimorfismo Lenguajes Puros Vs Híbridos • Puros: Smalltalk, Eifel • Híbridos: Java, C++ Son derivados de lenguajes anteriores mantienen algunas características no OO • Java sólo mantiene datos primitivos • C++ mantiene otras como característifas como fc fuera de clases, punteros, etc JAVA • El desarrollo fue realizado en Sun Microsystem por el grupo de Gosling. Comenzaron basándose en C y C++ pero luego debieron modificar el enfoque. • Lenguaje independiente de la plataforma y del SO para dispositivos empotrados • Comenzaron a desarrollarlo bajo el nombre de Oak en 1991 • En el 95 fue rebautizado a Java y rápidamente se convirtió en el lenguaje más popular para desarrollos web. Características de JAVA • Leng programación + entorno ejecución • Interpretado: se compila en bytes codes que son interpretados por la máquina virtual JVM • Posee una extensa biblioteca de clases estándares incorporada. • Permite el desarrollo de aplicaciones, como otros lenguajes C, C++, etc y de applets, aplicación diseñada para ser tranferida por la WEB y ejecutada en cualq navegador (java), permitiendo contenido dinámico • Se basa en: abstracción, encapsulamiento, herencia y polimorfismo Abstracción • Las personas normalmente gestionan la complejidad empleando la abstracción • Es el proceso de capturar lo fundamental ignorando los detalles. • Descomponer un sistema complejo en sus partes fundamentales y describir esas partes en un lenguaje sencillo y preciso • Un método poderoso es hacerlo es mediante clasificación jerárquica. Abstracción (cont) • Aplicando la abstracción al diseño de estructuras de datos, se generan los TAD tipos abstractos de datos (tipos programados) • TAD: modelo engloba estructura de dato, las operaciones soportadas y los parametros. • Qué hace pero no cómo. • En Java los Tad son las clases. • Las clases permiten encapsulamiento Encapsulamiento • Ocultar los detalles de la implementación, el interior de la clase está oculto, sólo se pueden ver la interfases externas por los otros objetos. • Permite modificar la implementación, siempre y cuando mantenga la interfaz. • La clase define la estructura y el comportamiento (datos + código) • Cada miembro de la clase puede ser privado o público. La interfaz pública representa lo que los usuarios de la clase pueden acceder. Herencia • Proceso mediante el cual un objeto adquiere las propiedades de otro objeto. • Ej pastor aleman, es un perro, que además es un mamifero, que es un animal, etc • Sólo se necesita definir las cualidades que lo hacen único dentro de la clase • En objeto puede ser una instancia más específica de un caso más general. • Las subclases heredan todos los atributos y métodos de la superclase, clase padre, ascendente. Herencia (cont) • Todas las clases que se definen en Java heredan de otra existente explicita o implícitamente. La superclase es Object • En java no está implementada la herencia múltiple, que permite heredar de más de un padre, se reemplaza con interfases. Polimorfismo • Permite que una interfaz sea utilizada como una clase de acción general. La acción específica se determina de acuerdo a la situación. • Permite enviar el mismo mensaje a objetos de diferente clase, cada uno de ellos responde a ese mismo mensaje de forma diferente, de acuerdo a como ha sido implementado. • Anulación (overriding) un método se define en una clase y en las clases derivadas, las instancias van a responder distinta Polimorfismo (cont) • Sobrecarga: métodos con el mismo nombre empleado sobre tipo de datos distintos • En Java sólo el operador + con cadenas de caracteres y otros datos primitivos (int, double). • Cuando una clase tiene múltiples métodos de igual nombre y distinta signatura (nombre, tipo y nro de argumentos)