Está en la página 1de 24

Tema 1: Introduccin a los lenguajes de programacin

El ordenador: - Maquina electrnica dotada de memoria y un procesador, que es el encargado de ejecutar las operaciones: - El proceso de elaboracin de un programa se denomina programacin, y el conjunto de instrucciones que se emplean para construirlo se denomina lenguaje de programacin. Representacin de datos: - Se realiza de forma binaria Lenguajes mquina: - El nico que entiende directamente el ordenador - Compuesto por cadenas binarias que especifican las operaciones. - Se emplea el sistema hexadecimal para simplificar el trabajo de escritura INCONVENIENTES: - Dificultad y lentitud en la codificacin - Poca fiabilidad - Gran dificultad de verificar y poner a punto los programas - Los programas son ejecutables solo por el mismo procesador LA UNICA VENTAJA de programar en lenguaje mquina, es la posibilidad de cargar un programa en memoria sin necesidad de traduccin posterior. Lenguajes de bajo nivel (ensambladores) - Indican al ordenador las operaciones que ha de realizar mediante la utilizacin de cdigos nemotcnicos. - Mas fciles de usar que los maquina, pero dependen de la maquina en cuestin - No puede ser ejecutado directamente por la computadora, necesita ser traducido a lenguaje maquina. - El programa utilizado para realizar esta conversin, se denomina programa ensamblador. INCONVENIENTES: - Dependencia total de la maquina, impide la portabilidad de la aplicacin entre maquinas con diferente procesador. Requiere conocer bien el HD VENTAJAS: - Mayor facilidad de modificacin/codificacin que el maquina, ahorran tiempo y menor atencin a detalles - Respecto a lenguajes de alto nivel, tienen mayor facilidad de ejecucin Lenguajes de alto nivel - Los mas utilizados. Orientados al problema - Permiten una mejor comprensin de los programas. - Los programas son independientes de la maquina, podemos ejecutarlos en cualquier maquina

VENTAJAS: - Tiempo de formacin de los programadores, es corto comparado con los otros lenguajes - La escritura de programas se basa en reglas sintcticas similares al lenguaje humano - Las modificaciones y puestas a punto de los programas son mas fciles - Reduccin del costo de los programas - Portabilidad - Permiten tener una mejor documentacin - Faciles de mantener INCONVENIENTES: - No se aprovechan los recursos internos de la maquina, se explotan mejor en los ensambladores y los maquina - Aumento de la ocupacin de memoria - Tiempo de ejecucin es mucho mayor Paradigmas de programacin - Los paradigmas o modelos de programacin, son un conjunto de mtodos que se aplican en todos los niveles del diseo software. Atienden a enfoques especficos para la construccin de programas. - Cada paradigma tiene sus ventajas e inconvenientes - Un lenguaje de programacin puede soportar varios paradigmas. - Los paradigmas mas utilizados son: el imperativo, funcional, lgico y orientado a objetos Programacin imperativa - Utiliza una serie de instrucciones o sentencias que definen cambios en el estado de un programa - El programador codifica algoritmos - Puede existir tanto a nivel bajo como en alto nivel - Ejemplos: Fortran, Pascal, C, Cobol Programacin funcional - Utiliza la definicin de funciones matemticas y su aplicacin - No existen asignaciones de variables o construcciones estructuradas como la secuencia o la iteracin - El programador codifica funciones y reglas - En el paradigma funcional puro, la repeticin se lleva a cabo mediante la recursin Ejemplos: Lisp, Haskell, Caml, Miranda Programacin lgica - Utiliza la aplicacin de la lgica matemtica para la representacin de los datos y la inferencia de resultados, aplicando a esos datos una serie de reglas que los relacionan - El programador codifica predicados y reglas - Utilizado en el diseo de sistemas expertos - Enfoque orientado a la descripcin del problema, no a como resolverlo. -Ejemplos: Prolog

Programacin orientada a objetos - Se basa en la utilizacin de entidades denominadas objetos y de las interacciones entre objetos para el diseo de una aplicacin - Se busca otorgar una gran independencia a las distintas partes que componen una aplicacin - Cada objeto definido en la aplicacin posee una identidad, y posee datos y algoritmos propios que determinan las operaciones que puede realizar - Ejemplos: Java, C++, C, Eiffel, Smaltalk Interpretes y compiladores - Los programas escritos en lenguaje de alto nivel, necesitan ser traducidos a cdigo maquina para su ejecucin, la traduccin se lleva a cabo por programas traductores de lenguaje, que se dividen en interpretes y compiladores - Un interprete es un traductor que toma un programa fuente, lo traduce y lo ejecuta. No se genera un programa escrito en lenguaje maquina, y a medida que se introducen lneas de cdigo, se van verificando - Un compilador, es un programa que traduce los programas fuentes escritos en un lenguaje de alto nivel a lenguaje maquina. - La velocidad de ejecucin de programas compilados, es superior a la de los interpretados. Plataforma JAVA - API JAVA: API define las funciones que implementa una librera. El API Java, esta formado por los mtodos que proporcionan los interfaces y clases Java. El API es la base para que Java sea un lenguaje multiplataforma. Se compone de : Base Api y Standard Extension API Aplicaciones y applets - Aplicaciones: Similar a una aplicacin de cualquier otro lenguaje. De tipo texto o con componentes visuales. Puede utilizar o no internet. Reside en la maquina donde se ejecuta -Applets: Pequeo programa que necesita un navegador para su ejecucin. Se utiliza en el contexto de paginas HTML. Dentro de una pagina HTML se referencian con la palabra reservada.

Tema 2: Sintaxis del lenguaje POO Java


Tema 2.1: Sintaxis bsica de Java
Identificadores - Normas obligatorias: - Los identificadores diferencian entre maysculas y minsculas - Deben comenzar con una letra, subrayado (_) y smbolo el dlar ($) - No puede usarse como identificador una palabra reservada - Los caracteres posteriores al primero pueden ser nmeros - No existe longitud mxima - Normas recomendadas: - Los nombres de clases empiezan con maysculas

- La primera letra de las variables y mtodos con minscula - Los nombres compuestos se unen con una letra mayscula en el comienzo de cada palabra. - Se usan nombres largos y significativos. Tipos de datos -LITERALES - Enteros: Representan valores del tipo INT o LOG (por defecto int) o Tres tipos, decimal, octal y hexadecimal - Reales en coma flotante: representan valores del tipo FLOAT o DOUBLE (defecto double) o Representan nmeros decimales con partes fraccionarias - Booleanos: true y false - Caracteres: Representan valores del tipo CHAR o Tabla de caracteres UNICODE o Caracteres no comprimibles:
\\ \f \b \r \f \t \n \ \ \u???? \ddd Barra invertida Salto de pgina Retroceso Retorno de carro Alimentacin de formularios Tabulador horizontal Lnea nueva Comillas simples Comillas dobles Unicode hexadecimal Unicode octal

Operadores - Orden de evaluacin de izquierda a derecha - Excepto en && y ?: se evalan todos los operandos antes de llevar a cabo la operacin - Para cambiar la procedencia, utilizamos parntesis - Para las cadenas, se pueden utilizar los operadores + y += para concatenar Separadores - ()- Parentesis: listas de parmetros en la definicin y llamada a mtodos. Definir precedencia en expresiones, contener expresiones para control de flujo y rodear las conversiones de tipo - {}- Llaves: se utiliza para definir un bloque de cdigo. Tambien para contener los valores iniciales de un array - []- Corchetes: para declarar arrays o matrices. Tambien se utilizan cuando se referencian valores de matriz. - ;- Punto y coma: separa sentencias - , - coma: separa identificadores consecutivos en una declaracin de variables. Tambien se usa para encadenar sentencias dentro de una sentencia for - .- Punto: Para separar nombres de paquete de subpaquetes y clases. Tambien se utiliza para separar una variable o mtodo de una variable de referencia Arrays - Un array es una estructura de programacin que almecena un determinado numero de elementos el mismo tipo. Para disponer y usar un array, dos pasos: - Declarar el array - Reservar el espacio para un numero determinado de elementos mediante new Int nmeros []; int nmeros; nmeros = new int [20]

Sentencias condicionales -IF Se evalua la expresin booleana y si el resultado es true, se ejecuta la sentencia asociada. Si el resultado es false y existe la parte else, se ejecuta la sentencia asociada a esta. Como sentencias 2 podriamos tener otra sentencia if. Un bloque else siempre se asocia al if mas cercano que no tenga else asociado. if (expresin booleana) sentencia o bien if (expresin booleana) { sentencias } else { sentencias2 } EJEMPLO: Ejemplos: if (x > 10) y--;
int a; if(a==0) System.out.println("a = 0"); else if(a==1)

else if (x > 5) y++; else y = 0;


System.out.println("a = 1"); else if(a==2) System.out.println("a = 2"); else System.out.println("a es mayor que 2 o menor que 0"); -Switch

- Sentencias de bucle for

- Sentencias de bucle While

Control general de flujo - Podremos etiquetar sentencias. Etiqueta: sentencia - Break: Permite salir de cualquier bloque. Se suele utilizar para interrumpir un bucle while, do o for, o bien una sentencia switch. Por defecto, sale del bucle mas interno, pero con etiquetas, podemos hacer que salga de cualquier bucle anidado. break [etiqueta];

Continue: salta al final del cuerpo de un bucle while, do o for, evalundose la expresin booleana de control. Suele utilizarse para saltar un elemento del rango del bucle. Puede saltarse al final de cualquier bucle anidado utilzando etiquetas. continue [etiqueta];

Tema 2.2: Sintaxis de OO en Java


Clases - La clase es la unidad fundamental de programacin en Java - La clase defina el inferfaz y la implementacin de los objetos de esa clase - Todo objeto es instancia de alguna clase - La declaracin de una clase tiene la forma bsica:

MODIFICADORES DE CLASE Los modificadores de clase son palabras reservadas que se enteponen al nombre de las clases con el fin de definirles un comportamiento correcto. Tipos - Abstract: tiene almenos un mtodo abstracto. No se instancia, se utiliza como clase base para la herencia. - Final: se declara como la clase que termina de una herencia. No se puede heredar - Public: Son accesibles desde otras clases, bien directamente o por herencia. Accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas - -: si no se especifica ningn tipo de modificador, se entiende que cualquier objeto que se encuentre en el mismo paquete que esta clase podr hace uso de ella Atributos y mtodos Una clase en Java puede contener atributos y mtodos. Los atributos pueden ser primitivos como INT, CHARLos mtodos son funciones. Tanto los mtodos como los atributos se definen dentro del bloque de la clase. Java no soporta mtodos o variables globales.

ATRIBUTOS La sintaxis bsica para declarar atributos es: [final][static] acceso tipo lista-de-identificadores Acceso: public |private|protected|Tipo: es cualquier tipo primitivo o clase o array de ellos Final: significa que el valor de ese campo no puede ser modificado Static: significa que todas las instancias comparten la misma variable EJEMPLO: private doubl minimo, mximo; final static int maxInstancias=10; static loat [] valores; -El ocultamiento de informacin tiene varios grados en Java -Todos los atributos y mtodos de una clase son accesibles desde el cdigo de la propia clase. Para controlar el acceso se utilizan modificadores de acceso: - Public: Accesible desde cualquier lugar en que sea accesible la clase - Protected: accesible por las subclases y clases del mismo paquete - Private: solo accesible por la propia clase - -(friendly): accesible por las clases del mismo paquete INICIALIZACION DE LOS ATRIBUTOS: Java asigna un valor por defecto a los atributos que no se inicializan que depende del tipo de estos:

No asigna ningn valor por defecto inicial a las variables locales de mtodos o constructores. Debemos asignar algn valor a una variable local antes de usarla. INICIALIZACION DE ATRIBUTOS Los atributos pueden: - No inicializarse: con lo que tendrn los valores por defecto vistos anteriormente, segn el tipo de campo. - Inicializarse en la declaracin: asignndoles una expresin. No se pueden invocar mtodos que pueden lanzar excepciones. private String miNombre = Juan+Carlos; private int edad = obtenerMiEdad();

Mtodos public static void main(String args[]) { ... } public long[] getSueldos() { ... } public double potencia(double base, double exponente) { ... } abstract public void hacerAlgo(); -Todo mtodo debe finalizar con una sentencia return (excepto los void) seguida de una expresin del mismo tipo de valor de retorno - Los mtodos estticos solo pueden acceder a miembros estticos - Podemos tener mtodos con el mismo nombre pero diferente numero y/o tipo de argumentos. En ese caso el compilador escoge el mtodo a invocar en funcin del numero y tipo de los argumentos suministrados. Conocido como sobrecarga de mtodos. EJEMPLO: public class Persona { //Atributos private String DNI; private String nombre; private int edad; private String estado; . . . //Constructor public Persona(String p_dni, String p_nombre, int p_edad, String p_estado, ...) { DNI = p_dni; nombre = p_nombre; edad = p_edad; estado = p_estado; } //Mtodos public String getDNI() { return DNI; } public String getNombre() { return nombre; } public int getEdad() { return edad; } public void cumpleaos() { edad += 1; } public String getEstado() { return estado; } public void setEstado(String nuevo) { estado = nuevo; } }

Atributos y mtodos estticos - Si queremos crear una clase en la que el valor de un atributo sea el mismo para todos los objetos instanciados a partir de esa clase, debemos utilizar la palabra clave static. Para manejar este tipo de

atributos necesitamos mtodos estticos.

Creacin de objetos - Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto no se va a utilizar mas, debera liberar el espacio que ocupaba en la memoria de forma que las aplicaciones no la agoten. - En Java, la recoleccin y liberacin de memoria es responsabilidad de un thread llamado automatic garbage collector. Este thread monitoriza el alcance de los objetos y marca los objetos que se han salido del alcance. - Creado por NEW

Herencia - La herencia es el mecanismo por el que se crean nuevos objetos definidos en termino de objetos ya existentes - Para heredar de una clase utilizamos la palabra clave extend: Class Empleado extends Persona { . } La clase empleado hereda todos los atributos y mtodos de persona. A partir de aqu, podemos: - Extender la clase persona aadiendo nuevos mtodos a la clase Empleado. Aumentamos la interfaz. - Anular mtodos de Persona con la propia implementacin de Empleado. - En Java solo es posible extender de una clase (herencia simple)

Ahora, cuando se crea una instancia de MiNuevaClase, el valor de i tambien se inicializa a 10 porque los constructores tambien se heredan. Pero la llamada al mtodo suma_a_i() produce un resultado diferente

Clases abstractas - Cuando se organizan las clases en una jerarqua lo normal es que las clases que representan los conceptos mas abstractos ocupen un lugar mas alto en la misma - Los lenguajes orientados a objetos dan la posibilidad de declarar clases que definen como se utiliza, pero sin tener que implementar los mtodos que posee. - En Java se realiza mediante clases abstractas que poseen mtodos abstractos que implementaran las clases hijas

This y Super THIS - La referencia this se usa para referirse al propio objeto y explcitamente para referirse tanto a las variables de instancia como a los mtodos de un objeto. - Dentro de los mtodos no estticos, podemos utilizar el identificador especial this para referirnos a la instancia que esta recibiendo el mensaje. - Algunos usos habituales son: - Evitar conflictos de nombres con los argumentos de mtodos - Pasar una referencia de ese objeto a otro mtodo SUPER - Super se usa para referirse a mtodos de la clase padre.

- Cuando extendemos una clase, los constructores de la sublase deben invocar algn constructor de la superclase como primera sentencia
public Circulo(double radio) { super(); this.radio = radio; } - Si no se invoca explcitamente un constructor de la superclase con super, debe existir un constructor sin parmetros en la superclase o no debe haber ningn constructor. (el compilador genera uno por defecto)

EJEMPLO de herencia con this y super public class Empleado extends Persona { //Atributos private String categoria; private double sueldo; private Departamento dept; //asociacin //Constructor public Empleado(String p_dni, String p_nombre, int p_edad, String p_estado, String categoria, double sueldo, Departamento dept) { super(p_dni, p_nombre, p_edad, p_estado); //constructor clase padre this.categoria = categoria; this.sueldo = sueldo; this.dept = dept; } //Mtodos public String getCategoria() { return categoria; } public void setCategoria(String nueva) { categoria = nueva; } public double getSueldo() { return sueldo; } public void subeSueldo(int cantidad) { sueldo += cantidad; } public Departamento getDepartamento() { return dept; } public void setDepartamento(Departamento otroDept) { dept = otroDept; } }

Interfaces - Constituyen un mecanismo para separar la interfaz de la implementacin - Un interface contiene mtodos y atributos constantes. Las clases que se implementen en el interface estn obligadas a codificar todos los mtodos definidos en el interface. - Se declaran de forma similar a las clases

- Los atributos de un interfaz son implcitamente public, static y final, y deben ser inicializados en la declaracin - Los mtodos de un interfaz son implcitamente public, abstract y no pueden ser static EJEMPLO public interface VideoClip { int version = 1; //atributo constante void play(); //comienza la reproduccin del video void bucle(); //reproduce el video en un bucle void stop(); //detiene la reproduccin } class DivX implements VideoClip { void play() { <cdigo> } void bucle() { <cdigo> } void stop() { <cdigo> } }

Paquetes - Un package es un mecanismo para organizar clases e interfaces relacionadas. La propia librera estndar de Java esta organizada en forma de paquetes. Ademas todas las clases de un paquete tienen acceso friendly, por defecto unas a otras - La sentencia package, si existe, debe ir al principio del fuchero fuente y debe ser la primera sentencia de este: package identificador*.identificador+; - Por defecto, todas las clases que se encuentren en un mismo directorio pertenecen al mismo paquete - El nombre completo de una clase, es la suma del nombre del paquete mas el nombre de la clase. Asi, para declarar una referencia de la clase Varianza del paquete Matematicas.Estadistica utilizaramos la sentencia: Matematicas.Estadistica.Varianza var; - Para evitar tener que utilizar nombres largos podemos utilizar la sentencia import: import Matematicas.Estadistica.Varianza. o bien: import Matematicas.Estadistica.*;(todas las clases del paquete)

Tema 2.3: Clases bsicas de Java


Clases de envoltura Cada tipo primitivo tiene asociada una clase de envoltura que contiene un valor del tipo correspondiente y un conjunto de mtodos relacionados. Los mtodos se usan para realizar transformaciones entre los tipos de datos y representar valores o hacia el tipo String Las clases de envoltura tienen dos funciones principales o Proporcionar una estructura orientada a objetos de los tipos primitivos con sus principales atributos y mtodos o Poder crear objetos que almacenan los valores de un tipo primitivo para poder ser manipulados por clases que solo pueden manejar referencias Object Todas las clases de envoltura tienen definidos los siguientes mtodos: o Public static Tipo valueOF(String cad): devuelve un nuevo objeto del tipo especificado con el valor de cad o Public String toString: devuelve un objeto String representando el valor del objeto al que se le aplica el mtodo o Public tipo tipoValue(): devuelve el valor del tipo primitivo correspondiente al actual objeto de envoltura o Public boolean equals(Object obj): hace la comparacin entre dos objetos y devuelve true si son iguales, o false en caso contrario o Public int compareTo(Tipo/Object obj): hace la comparacin entre dos objetos y devuelve un valor menor, mayor o igual a 0 resultado de esa comparacin Las clases numricas tienen los atributos MIN_VALUE, MAX_VALUE y TYPE para indicar cual es el menor y el mayor valor que pueden tomar y la clase a la que pertenecen las variables de este tipo (COGER TEMA ENTERO)

Tema 3 Tema 3.1. El desarrollo Software: Evolucion hacia la orientacin a objetos


La crisis del software A finales de los 60 se da la crisis del Sw: El Sw era caro, poco fiable y escaso. Metodologias y tcnicas estructuradas no resolvan el problema. Crecimiento de complejidad de los problemas. MANTENIMIENTO DEL SW Mantenimiento es lo que se da despus de que se ha distribuido un producto de Sw, se le dedicaba aproximadamente el 70% del coste del Sw. El mantenimiento se divide en dos partes: -Parte noble: modificacin , adaptacin a los cambios - Parte no noble: depuracin, quitar errores CONSECUENCIAS Sistemas que no cumplen los requisitos iniciales, entregas fuera de plazo, presupuestos sobrepasados y poca satisfaccin de uso La calidad del Sw Hay dos factores importantes -Factores externos: - Pueden ser detectados por el usuario - Calidad externa es la que realmente preocupa - Factores internos: - Solo los perciben los diseadores e implementadores - Medio de conseguir la calidad externa Objetivo: Con las buenas propiedades internas se satisfacen los factores externos. Se dan las POO, que son un conjunto de tcnicas para obtener calidad interna, como medio de obtencin de calidad externa Correccion: es la capacidad de los productos Sw de realizar con exactitud su tarea, tal y como es definida en la especificacin Robustez: capacidad de los productos Sw de reaccionar adecuadamente ante situaciones excepcionales Extensibilidad: facilidad de adaptacin de los productos Sw a los cambios de especificacin. Reutilizacion: capacidad de un producto Sw de ser utilizado en la construccin de diferentes aplicaciones Compatibilidad: facilidad de combinar unos elementos Sw con otros Eficiencia: capacidad de un sistema Sw de requerir la menor cantidad posible de recursos Hw Portabilidad: facilidad de transferir productos Sw a diferentes plataformas Facilidad de uso: facilidad con la que las personas aprenden a usar los productos Sw Funcionalidad: conjunto de posibilidades ofrecido por un sistema Oportunidad: capacidad de un sistema Sw de ser lanzado cuando los usuarios lo desean, o antes SOLUCION: POO Los SOO ofrecen rendimiento, flexibilidad y funcionalidad para implementaciones. Mediante POO se

expanden las posibilidades de desarrollo de SI debido a la falta de restricciones en los tipos de datos. Estructuras de datos heterogneas. La POO permite la reutilizacin de componentes Sw.

Tema 3.2: Modularidad. Tipos abstractos de datos


Abstraccin Supresion intencionada, u ocultamiento de algunos detalles de un proceso, con el objeto de desatascat de manera mas clara otros aspectos, detalles o estructuras. Capacidad de centrarse en las caracterisiticas esenciales de las distintas partes de un sistema, ignorando sus propiedades accidentales. Permite dividir la informacin en componentes aislados que posteriormente se ensamlban para construir el todo Limitacion de la capacidad humana para operar la complejidad ENCAPSULACION: o Proceso de almacenar en un mismo comparimento los elementos de una abstraccin que constituyen su estructura y su comportamiento.

Tipos de datos Un tipo de dato es un conjunto de valores y un conjunto de operaciones definidas por sus valores. Tipo de dato = representacin + operaciones Ejemplos: - Tipo de datos entero, operaciones de +.- -Tipo de cadena, operaciones de concatenacin, subcadena

TIPOS DE ABSTRACCION DE DATOS Los TADS permiten ampliar los tipos de datos definidos por el lenguaje de programacin Un tipo de dato definido por el programador se denomina TAD Un TAD es un tipo de dato que consta de datos y operaciones que se pueden realizar sobre esos datos Los TADS ocultan la implementacin de las operaciones definidas por el usuario asociadas con el tipo de datos La ocultacin de informacin de un TAD significa que poseen interfaces pblicos, sin embargo, las implementaciones de esos interfaces son privados

Un TAD consta de: - Tipo: tipo (=conjunto de objetos) que se esta especificando - Funciones : signatura (tipo de los argumentos y resultado) - Axiomas: definicin implcita del valor de la funcin - Invariantes: condicin booleana que debe mantenerse con exactitud. Precondiciones y postcondiciones Ejemplo:

Ejemplo TAD Pila TIPO Pila[X] FUNCIONES poner: Pila[X] x XPila[X] vacia: Pila[X]Boolean AXIOMAS Para x: T, s: Pila[T]; item(poner(s,x)) = x vacia(new) not vacia(poner(s,x)) item: Pila[X]X new: Pila[X] PRECONDICIONES item (s:Pila[T]) requiere not vacia(s)

Modularidad Programa modular: formado por un conjunto de modulos Modulo: unidad bsica de descomposicin de un sistema Sw. Los modulos deben ser lo mas independientes posibles Un mtodo de construccin de Sw es modular si ayuda a producir sistemas Sw a partir de elementos autnomos interconectados por una estructura sumple y coherente La programacin modular trata de descomponer un programa en un pequeo numero de abstracciones coherentes que pertenecen al domonio del problema y cuya complejidad interna esta oculta por el interfaz Para obtener unidades modulares el lenguaje debe proporcionar estructuras modulares con las cuales se puedan describir las diferentes unidades. En POO son las clases Un modulo se estructura mediante una interfaz y una implementacin Esta compuesto por un conjunto de operaciones y atributos Propiedad que tiene un sistema que ha sido descompuesto en un conjunto de modulos cohesivos y dbilmente acoplados Alta cohesion: Un modulo con responsabilidades altamente relacionadas y que no hace una gran cantidad de trabajo Bajo acomplamiento: o Los modulos se comunican mediante interfaces bien definidas o Un modulo debe comunicarse con el menor numero de modulos posibles o Si dos modulos se comunican deben intercambiar la menor cantidad de informacin posible o Favorece: Comprension modular Continuidad modular Proteccion modular

Criterios del diseo modular Descomposicion modular Un mtodo de construccin de Sw satisface la descomposicin modular si ayuda a la tarea de descomponer el problema de Sw en un pequeo numero de subprogramas menos complejos, interconectados mediante una estructura sencilla, y suficientemente independientes para permitir que el trabajo futuro pueda proseguir por separado en cada uno de ellos. Proceso iterativo: si tenemos subprogramas complejos hay que seguir descomponiendo

Composicion modular Un mtodo de construccin de Sw satisface la composicin modular si favorece la produccin de elementos Sw que se puedan combinar libremente unos con otros para producir nuevos sistemas, posiblemente en un entorno bastante diferente de aquel en que fueron desarrollados inicialmente Ejemplo: libreras Sw Comprensibilidad Modular Un mtodo de construccin de Sw favorece la comprensibilidad modular si ayuda a producir Sw en el cual un lector humano puede entender cada modulo sin tener que conocer los otros, o, en el peor de los casos, teniendo que examinar solo unos pocos de los restantes modulos. Facilita el proceso de mantenimiento Continuidad modular Un mtodo de construccin de Sw favorece la continuidad modular si en la arquitectura Sw que produce, un pequelo cambio en la especificacin de un problema provoca solo cambios en un solo modulo o en un pequeo numero de modulos. Ligado al objetivo de la extensibilidad. Proteccion modular Un mtodo de construccin de Sw favorece la proteccin modular si produce arquitecturas Sw en las cuales el efecto de una situacin anormal que se produzca dentro de un modulo durante la ejecucin queda confinado a dicho modulo o en el peor caso se propaga solo a unos pocos modulos vecinos Principios del diseo modular o Ocultacion de informacin o Auto- documentacin o Acceso uniforme o Abierto- cerrado o Eleccion nica Ocultacion de la informacin: El diseador de cada modulo debe seleccionar un subconjunto de propiedades de un modulo como informacin oficial para ponerla a disposicin de los autores de modulos clientes. Consiste en ocultar detalles de la implementacin al cdigo cliente Todos los modulos deben seguir el principio de ocultacin de informacin. Una abstraccin de datos puede verse como que tiene dos caras: o Interfaz: parte publica visible a los clientes o Implementacion: parte privada visible dentro del modulo Auto documentacin: El diseo de un modulo debera esforzarse para lograr que toda la informacin relativa al modulo forma parte del propio modulo: Relacionado con los criterios de comprensibilidad y continuidad modular. Herramienta que generan la documentacin a partir de los modulos documentados.

Acceso uniforme: Todos los servicios ofrecidos por un modulo deben estar disponibles mediante una notacin uniforme, que no considere si se han implementado mediante almacenamiento o calculo. Necesitamos constructores sintcticos que nos permitan expresar de la misma manera el acceso a una funcin y a un atributo. Abierto- cerrado: Los dos objetivos son incompatibles con las tcnicas tradicionales: o O esta abierto: no se puede utilizar todava o O se cierra: cualquier cambio provoca cambios en cadena Necesitamos un mecanismo que nos permita: Adaptar un modulo sin afectar a los clientes Que un modulo este cerrado y abierto al mismo tiempo SOLUCION: mecanismo de herencia Principio de eleccin nica: Ejemplo: Sistema bibliotecario Tendremos un modulo que contiene la estructura de datos PUBLICACION:
type PUBLICACION record autor, titulo: STRING; ao_publicacion: INTEGER; case tipo_pub: (libro, revista, acta) of libro: (editorial: STRING); revista: (volumen, numero: STRING); actas: (editorial, lugar: STRING) end

Siempre que un sistema Sw debe manejar una lista de variantes, uno y solo uno de los modulos del sistema debe conocer la lista exhaustiva. Muy relacionado con el P. Abierto- Cerrado. Favorece la extensibilidad. SOLUCION: definir jerarquas de herencia LENGUAJES DE PROGRAMACION La abstraccin es la clave para disear buen Sw. Los lenguajes de programacin de alto nivel permiten al programador abstraerse de la arquitectura de la maquina donde se ejecuta el Sw. Mecanismos para disear programas modulares: Procedimientos o funciones Modulos TADS Clases/ objetos

Reutilizacion Beneficios: o Consumir elementos reutilizables o Oportunidad: mejora la productividad o Disminuye el esfuerzo del mantenimiento o Aumenta la fiabilidad y la eficiencia

Tema 3.3: Conceptos bsicos de OO


Introduccion Qu es la POO? Un mtodo de implementacin en el que los programas se organizan como colecciones cooperativas de objetos, cada una de las cuales representan una instancia de alguna clase, y cuyas clases son todas miembros de una jerarqua de clases unidas mediante relaciones de herencia. Objetos: Son paquetes de Sw independiente formado por un conjunto de datos junto con los procedimientos que operan sobre estos datos. Los objetos pueden ser reales o abstractos. Un objeto es un modulo de Sw. Clases: Una clase es un conjunto de objetos agrupados que muestran la misma estructura. Una clase es un tipo definido que determina la estructura de datos y las operaciones asociadas a este tipo. Una clase se puede ver como una plantilla que describe objetos que van a tener la misma estructura y el mismo comportamiento Un programa OO es una coleccin estructurada de clases Doble naturaleza de las clases: una clase es un modulo y un tipo de dato o Modulo: Mecanismo para organizar el Sw Encapsula componentes de Sw o Tipo: Mecanismo de definicin de nuevos tipos de datos: describe una estructura de datos para representar valores de un dominio y las operaciones aplicables Componentes de una clase: o Atributos: determinan una estructura de almacenamiento para cada objeto de la clase o Operaciones (mtodos): Operaciones aplicables a los objetos Unico modo de acceder a los atributos

Clases e instancias Una clase es un generador de objetos Una instancia es una estructura constituida por los atributos descritos para la clase La creacin d un objeto a partir de una clase se llama instanciacin Muchas instancias de una misma clase pueden existir a la vez en memoria

Instanciacion Es una instancia de una clase, creada en tiempo de ejecucin, formada por atributos El estado de un objeto viene dado por el valor de los atributos. Cambia con el tiempo Los mtodos permiten consultar y modificar el estado del objeto Durante la ejecucin de un programa OO se crearan un conjunto de objetos

Diseo estructurado VS OO DESCOMPOSICION FUNCIONAL Respuesta tradicional a la cuestin de modularizacion Inconvenientes: Se basa en propiedades poco estables que dificultan la extensibilidad No promueve la reutilizacin

Ventajas: Disciplina de pensamiento lgica y bien organizada Tecnica simple y fcil de aplicar Util para pequeos programas Buena para documentar diseos Promueve el desarrollo ordenado de sistemas Adecuada para dominar la complejidad

DESCOMPOSICION MODULAR BASADA EN LOS DATOS Los datos son mas estables que las funciones, lo que favorece la extensibilidad. Orientacion a objetos: el Sw se organiza como una coleccin de objetos que contienen tanto estructura como comportamiento Desarrollo orientado a objetos: una nueva forma de pensar acerca del Sw basndose en abstracciones que existen en el mundo real Con la orientacin a objetos, construimos pequeos modelos Sw de la realidad y simulamos esta. Un sistema OO es un conjunto de objetos que interactan entre si envindose mensajes mediante los cuales se solicitan servicios unos a otros DESARROLLO SW ORIENTADO A OBJETOS: Metodo de desarrollo de Sw que basa la arquitectura del sistema en modulos deducidos de los tipos de objetos que se manipulan.

Tema 3.4: conceptos avanzados de OO


Super- clase / herencia Se establece una estructura jerarquica en la que cada clase hereda atributos y mtodos de las clases que estn por encima de ella. La clase derivada (subclase) puede usar los procedimientos y los atributos de su superclase. Cada subclase puede tener nuevos atributos y mtodos y/o redefinir loe heredados Objetivo: permitir el anlisis por clasificacin Ventajas: granularidad, reutilizacin

Tipos de herencia: Simple: una clase hereda de una nica super clase Multiple: una clase hereda de varias superclases

Relaciones entre objetos Los objetos tienen, a parte de atributos y mtodos y relaciones de herencia, relaciones con otros objetos. Las relaciones mas importantes son: Asociacion: es una conexin entre clases, una conexin semntica entre objetos de las clases implicadas en la relacin. Esto se consigue usando algn objeto de una de las clases como atributo de la clase asociada Agregacion: se da cuando una clase esta estructuralmente compuesta de otras clases. Una clase esta formada por objetos de objetos de otra u otras clases. Para la existencia del objeto compuesto deben existir los dems objetos

CARDINALIDAD: Asociacion y agregacin tienen cardinalidad: numero de instancias de una clase que estn relacionadas con una instancia de la otra clase Encapsulacion y ocultacion de informacin ENCAPSULACION Tecnica que permite localizar y ocultar los detalles de un objeto respecto al usuario. Previene que un objeto sea manipulado por operaciones distintas a las que le son propias, asi como que sus operaciones manipulen datos ajenos a ellas. Encapsulacion = disimulacin de los datos Los datos estn protegidos de los objetos exteriores Los objetos son independientes de la estructura interna de otros objetos Es la propiedad que asegura la informacin de un modulo esta oculta al mundo exterior Es una tcnica de diseo para descomponer sistemas en modulos Permite la constitucin de bibliotecas de objetos genricos reutilizables

OCULTACION DE INFORMACION Principio por el cual los modulos son utilizados por su especificacin, no por su implementacin Los detalles de implementacin estan ocultos y solo es accesible el interfaz Un objeto tiene una interfaz publica que otros objetos pueden usar para comunicarse con el. El objeto puede mantener informacin privada y mtodos que pueden cambiar sin que esto afecte a otros objetos que dependen de el

Cohesion y acoplamiento Buscamos mxima cohesion y minimo acoplamiento Acoplamiento: es una medida de la fuerza de conexin entre dos componentes de un sistema. Cuanto mas conoce un componente de otro, mas fuerte es el acoplamiento entre ellos En un sistema fuertemente acoplado: Disminuye la posibilidad de reutilizar objetos individuales El sistema es mas complejo y por tanto mas difcil de entender y mantener

Cohesion: Es una medida de cuanto estn relacionados lgicamente los componentes encapsulados en un objeto Para un objeto poco cohesionado: Aumenta la probabilidad de sufrir cambios Disminuye la probabilidad de reutilizacin

Comunicacin Los objetos se comunican entre si mediante el envio de mensajes. El propsito de un mensaje es pedir al objeto que lo recibe que active el mtodo que se le indica y que devuelva al objeto original el resultado de esa accin - Una secuencia de instrucciones en un lenguaje clsico es reemplazada por una secuencia de comunicaciones - La sintaxis de una comunicacin es muy simple - Los mensajes que recibe un objeto son los nicos conductos que conectan el objeto con el mundo exterior - Los datos de un objeto estn disponibles para ser manipulados solo por los mtodos del propio objeto. - Cuando se ejecuta un POO ocurren tres cosas: o Los objetos se crean a medida que se necesitan o Los mensajes se mueven de un objeto a otro, a medida que el programa procesa la informacin o Cuando los objetos no se necesitan, se borran y se libera la memoria Unificacin de la sintaxis funciones: restar ( a, b ) : restar a de b o restar b de a ? expresiones (notacin postfija, prefija, infija): ab-,-ab,a-b mensaje: a restar: b, a b Simplificacin de la sintaxis "El gato come al ratn" Qu es lo ms natural ? Comer (gato, ratn) - gato.come(ratn) -

Polimorfismo Significa tener o asumir distintas formas. En el contexto de POO se refiere a la capacidad de los diferentes objetos para responder de distinta forma a la misma operacin Permite enviar el mismo mensaje a objetos diferentes y que cada uno responda en la forma apropiada segn el tipo de objeto que sea, ejecutando su mtodo El polimorfismo esta asociado a la ligadura dinmica (dynamic binding). La asociacin de un mtodo con su nombre no se determina hasta el momento de su ejecucin. El polimorfismo es la aplicacin particular de la herencia de comportamiento. Una misma operacin podr interpretarse de diversas maneras segn la posicin en la que se encuentre dentro de la jerarqua. Usualmente requiere del empleo de clases abtractas: o A veces es til aislar en clases conceptos incompletos aunque coherentes y cohesivos o Los atributos y los mtodos de estas clases estn disponibles para ser especializados via herencia. o Una clase abstracta no puede tener instancias Ventajas: o Da uniformidad a la sintaxis o Disminuye la cantidad del cdigo a escribir o Facilita el tratamiento de colecciones heterogneas

Analisis y diseo de OO Desarrollo de Sw OO Encontrar objetos relevantes Describir los tipos de objetos Encontrar las operaciones para los tipos de objetos, y relaciones entre objetos Utilizar los tipos de objetos y las relaciones para estructurar el Sw

Tema 3.5. Ejemplo de POO en Java


Diseo de clases 1. Descripcion del problema: nos describe el sistema que debemos modelar. Es imposible ofrecer una solucin satisfactoria sin un total conocimiento del problema 2. Encontrar los objetos principales: Buscar los elementos mas importantes del modelo. Recomendacin: hacer una lista de todos los nombres que aparecen en la descripcin del problema y elegir aquellos que nos parezcan mas importantes 3. Determinar el comportamiento deseado para cada uno de los objetos principales. Esto producir el conjunto de mtodos necesarios en las clases a las que estos objetos pertenecen 4. Determinar la interfaz. Establecemos el prototipo de cada mtodo: sus argumentos y tipo de retorno. Recomendacin: escribir un cdigo de ejemplo que utilice el objeto y que muestre como deberan ocurrir las invocaciones de una forma natural

5. Definir los atributos e implementar los mtodos. 6. Determinar las relaciones con otras clases TEMA 3.5 IMPRIMIR ENTERO

Tema 4. Tratamiento de errores: excepciones


IMPRIMIR ENTERO