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)