You are on page 1of 25

2012A

Universidad de Guadalajara CUCI.


Jos Sandoval Chvez Kleoph Alfaro Castellanos Karime Pulido Hernndez Juan Enrique Macas Rico

[MANUAL DE TALLER DE

PROGRAMACION ORIENTADA A OBJETOS]

[CONTENID O]
MODULO 1: El entono de desarrollo, los tipos de datos bsicos y las funciones 1.1 El entorno de desarrollo JCreator 1.2 Tipos de datos bsicos Prctica 1: Tipos de datos bsicos 1.3 Las funciones y los parmetros 1.4 Parmetros por valor y referencia Prctica 2: Las funciones y el paso de parmetros 1.5 Los arreglos Prctica 3: El uso de los arreglos como listas de elementos MODULO 2: Clases y objetos 2.1 Abstraccin 2.2 Clases y Objetos 2.3 Constructores y destructores

[02]

2.4 Encapsulamiento (public, private y protected) 2.5 Arreglos de objetos Prctica 4: Arreglos de objetos simples 2.6 Comunicacin entre clases

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[03]
MODULO 3: Generalizacin y polimorfismo 3.1 Generalizacin y especializacin de clases 3.2 La clase abstracta Prctica 5: Arreglos de objetos con herencia 3.3 El polimorfismo 3.4 Sobrecarga de mtodos 3.5 Sobre escritura de mtodos 3.6 El mtodo abstracto Prctica 6: Arreglos de objetos polimorfos MODULO 5: Almacenamiento de objetos 5.1 Almacenamiento de tipos de datos primitivos 5.2 Almacenamiento de objetos en arreglos de referencias Prctica 8: Almacenamiento de objetos simples 5.3 Serializacin de objetos para almacenar objetos polimorfos Prctica 9: Almacenamiento de objetos polimorfos MODULO 4: Agregacin, visibilidad y dependencia 4.1 Agregacin y composicin de clases 4.2 Delegacin de tareas entre objetos 4.3 Visibilidad y dependencia Prctica 7: Realizacin de tareas apoyado en la delegacin de tareas

[04]
MODULO 6: Modelado y creacin de prototipos 6.1 Diseo de sistemas utilizando UML 6.2 Las interfaces grficas 6.3 Interfaces grficas que responden a eventos Prctica 10: Agregar interfaz grfica al sistema

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[05]

[MODULO 1]
EL ENTONO DE DESARROLLO, LOS TIPOS DE DATOS BSICOS Y LAS FUNCIONES

[06]
1.1 El entorno de desarrollo JCreator
Jcreator es un entorno de desarrollo integrado (IDE) especfico para la programacin en Java, que engloba en la misma aplicacin: editor, depurador y compilador. Se trata de uno de los programas ms potentes y eficaces que existen, incluso comparado con otros como JDevoloper, JBuilder, Eclipse o Netbeans, ya que est escrito por completo en C++, por lo que consume menos recursos. Algunas de las caractersticas que ofrece son: - Gestor de proyectos y plantillas. - Autocompletado de cdigo. - Editor con resaltado en color de los comandos. - Depurador de fallos (debugger). - Interfaz personalizable. - Asociacin de la aplicacin con los archivos del espacio de trabajo (.jcw), con los archivos de proyecto (.jcp), o con cualquier archivo de extensin .java, .jsp o .xml. Requisitos e informacin adicional: Es necesario instalar la versin ms reciente de JDK para compilar y ejecutar los programas dentro de la aplicacin.

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[07]

1.2 Tipos de datos bsicos


Java maneja 9 tipos de datos simples o bsicos:
Tipo boolean char byte short int long float double Descripcion Tiene dos valores true o false.

[08]

Caracteres Unicode de 16 bits Los caracteres alfa-numricos son los mismos que los ASCII con el bit alto puesto a 0. El intervalo de valores va desde 0 hasta 65535 (valores de 16-bits sin signo). Tamao 8 bits. El intervalo de valores va desde -27 hasta 27 -1 (-128 a 127) Tamao 16 bits. El intervalo de valores va desde -215 hasta 215-1 (-32768 a 32767) Tamao 32 bits. El intervalo de valores va desde -231 hasta 231-1 (-2147483648 a 2147483647) Tamao 64 bits. El intervalo de valores va desde -263 hasta 263-1 (-9223372036854775808 a 9223372036854775807) Tamao 32 bits. Nmeros en coma flotante de simple precisin. Estndar IEEE 754-1985 (de 1.40239846e45f a 3.40282347e+38f) Tamao 64 bits. Nmeros en coma flotante de doble precisin. Estndar IEEE 754-1985. (de 4.94065645841246544e 324d a 1.7976931348623157e+308d.)

Prctica 1: Realice un programa que dado un tipo de dato bsico regrese una descripcin del mismo.

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[09]
1.3 Las funciones y los parmetros
En Java una funcin es un mdulo de un programa separado del cuerpo principal, que realiza una tarea especfica y que puede regresar un valor a la parte principal del programa u otra funcin que la invoque. La forma general de una funcin es: tipodatoregresa nom_fun(parametros) { cuerpo de instrucciones; intruccion return; } El tipo especifica el tipo de valor que la funcin regresara utilizando la instruccin return. La lista de parmetros formales es una lista de variables separadas por comas (,) que almacenaran los valores que reciba la funcin, estas variables actan como locales dentro del cuerpo de la funcin. Aunque no se ocupen parmetros los parntesis son requeridos. Si el tipo de dato que regresa una funcin es void no se debe utilizar la sentencia return.

[10]
1.4 Parmetros por valor y referencia
Existe comnmente la creencia errnea de que en Java es posible pasar parmetros por referencia, y no es as. Java siempre pasa los parmetros por valor. Paso por valor significa que cuando un argumento se pasa a una funcin, la funcin recibe una copia del valor original. Por lo tanto, si la funcin modifica el parmetro, slo la copia cambia y el valor original permanece intacto. Paso por referencia significa que cuando un argumento se pasa a una funcin, la funcin recibe la direccin de memoria del valor original, no la copia del valor. Por lo tanto, si la funcin modifica el parmetro, el valor original en el cdigo que llam a la funcin cambia. Prctica 2: Realice un programa que defina funciones que reciban parmetros de tipo bsicos.

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[11]
1.5 Los arreglos
Un tipo arreglo es una lista de datos con un nmero fijo de componentes, todos del mismo tipo denominado tipo base; a los cuales se accede mediante un ndice encerrado entre corchetes. Los arreglos se crean con el operador new seguido del tipo y nmero de elementos. Los elementos de un arreglo se inicializan al valor por defecto del tipo correspondiente (cero para valores numricos, la cadena vaca para Strings, false para boolean, null para referencias). Como otras variables, antes de poder utilizar un arreglo primero se debe declarar. tipo[]nombre_arreglo = new tipo[n]; o tipo nombre_arreglo[] = new tipo[n]; Otra forma de declararlos es la siguiente: UNIDIMENSIONALES : tipo nombre_arreglo[]=new tipo[n]; tipo nombre_arreglo[]={ valores }; BIDIMENSIONALES : tipo nombre_arreglo[][]=new tipo[n][n]; tipo nombre_arreglo[][]={valores};

Prctica 3: Realice un programa que pase como parmetro un arreglo y lo llene con valores

Preguntas & Respuestas 1.- Mencione tres caractersticas el JCreator: ______________________________________________________________________________________________________ ______________________________________________________________________________________________________ 2.- Son tipos de datos bsicos que permiten almacenar valores con punto decimal ______________________________________________________________________________________________________ 3.- Quin puede invocar a una funcin? ______________________________________________________________________________________________________ 4.- Tipo de paso de parmetro de una funcin que altera el valor original de la variable que ingresa ______________________________________________________________________________________________________ 5.- Para poder utilizar un arreglo es necesario: ______________________________________________________________________________________________________

[12]

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[13]

[MODULO 2]
CLASES Y OBJETOS

2.1 Abstracin

[14]

La abstraccin consiste en aislar las caractersticas y comportamientos esenciales de un objeto, tambin puede entenderse como el aislar un elemento de su contexto o del resto de los elementos que lo acompaan. De esta manera denota las caractersticas esenciales que distinguen a un objeto de otros tipos de objetos, definiendo precisas fronteras conceptuales, relativas al observador.

La abstraccin se centra las caractersticas esenciales de un objeto, en relacin de la perspectiva de un observador

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[15]
2.2 Clases y objetos
Una clase corresponde con un molde, patrn o plantilla del cual se replicaran los objetos u instancias, de esta manera una clase se corresponde con un conjunto, tal vez infinito, de objetos. Una clase es una agrupacin de datos (variables o campos) y de funciones (mtodos) que operan sobre esos datos. La definicin de una clase se realiza en la siguiente forma: [public] class Classname { // definicin de variables y mtodos ... }

Donde la palabra public es opcional: si no se pone, la clase tiene la visibilidad por defecto, esto es, slo es visible para las dems clases del package. Todos los mtodos y variables deben ser definidos dentro del bloque {...} de la clase. Un objeto (en ingls, instance) es un ejemplar concreto de una clase. Las clases son como tipos de variables, mientras que los objetos son como variables concretas de un tipo determinado. Classname unObjeto; Classname otroObjeto; A continuacin se enumeran algunas caractersticas importantes de las clases:
1. Todas las variables y funciones de Java deben pertenecer a una clase. No hay variables y funciones globales. 2. Si una clase deriva de otra (extends), hereda todas sus variables y mtodos. 3. Java tiene una jerarqua de clases estndar de la que pueden derivar las clases que crean los usuarios. 4. Una clase slo puede heredar de una nica clase (en Java no hay herencia mltiple). Si al definir una clase no se especifica de qu clase deriva, por defecto la clase deriva de Object. La clase Object es la base de toda la jerarqua de clases de Java. 5. En un fichero se pueden definir varias clases, pero en un fichero no puede haber ms que una clase public. Este fichero se debe llamar como la clase public que contiene con extensin *.java. Con algunas excepciones, lo habitual es escribir una sola clase por fichero. 6. Si una clase contenida en un fichero no es public, no es necesario que el fichero se llame como la clase. 7. Los mtodos de una clase pueden referirse de modo global al objeto de esa clase al que se aplican por medio de la referencia this. 8. Las clases se pueden agrupar en packages, introduciendo una lnea al comienzo del fichero (package packageName;). Esta agrupacin en packages est relacionada con la jerarqua de directorios y ficheros en la que se guardan las clases.

[16]
Cada objeto, es decir cada ejemplar concreto de la clase, tiene su propia copia de las variables miembro. Las variables miembro de una clase (tambin llamadas campos) pueden ser de tipos primitivos (boolean, int, long, double, ) o referencias a objetos de otra clase (composicin). Un aspecto muy importante del correcto funcionamiento de los programas es que no haya datos sin inicializar. Por eso las variables miembro de tipos primitivos se inicializan siempre de modo automtico, incluso antes de llamar al constructor (false para boolean, el carcter nulo para char y cero para los tipos numricos). De todas formas, lo ms adecuado es inicializarlas tambin en el constructor. Las variables miembro pueden tambin inicializarse explcitamente en la declaracin, como las variables locales, por medio de constantes o llamadas a mtodos (esta inicializacin no est permitida en C++). Por ejemplo, long nDatos = 100; Las variables miembro se inicializan en el mismo orden en que aparecen en el cdigo de la clase. Esto es importante porque unas variables pueden apoyarse en otras previamente definidas. Las variables miembro del argumento implcito se acceden directamente o precedidas por la palabra this y el operador punto. Las variables miembro pueden ir precedidas en su declaracin por uno de los modificadores de acceso: public, private, protected y package (que es el valor por defecto y puede omitirse). Junto con los modificadores de acceso de la clase (public y package), determinan qu clases y mtodos van a tener permiso para utilizar la clase y sus mtodos y variables miembro.

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[17]
2.3 Constructores y destrucutores
Todas las clases Java tienen mtodos especiales llamados constructores que se utilizan para inicializar un objeto nuevo de ese tipo. Los constructores tienen el mismo nombre que la clase --el nombre del constructor de la clase Rectangle es Rectangle(), el nombre del constructor de la clase Thread es Thread(), etc... Java soporta la sobrecarga de los nombres de mtodos, por lo que una clase puede tener cualquier nmero de constructores, todos los cuales tienen el mismo nombre. Al igual que otros mtodos sobrecargados, los constructores se diferencian unos de otros en el nmero y tipo de sus argumentos. Un destructor es un mtodo que se invoca automticamente cuando el objeto se destruye. Java no posee destructores, porque tiene recoleccin de basuras. System.gc( );

[18]
2.4 Encapsulamiento (public, prvate y protected)
El encapsulamiento consiste en la ocultacin de informacin. Significa mantener la informacin dentro del objeto y mantenerlo como una caja negra. El encapsulamiento permite a los objetos elegir qu informacin es pblica y qu informacin se oculta al resto de los objetos. Para ello los objetos suelen presentar sus mtodos como interfaces pblicas y sus atributos como datos privados e inaccesibles desde otros objetos. Para permitir que otros objetos consulten o modifiquen los atributos de los objetos, las clases suelen presentar mtodos de acceso. De esta manera el acceso a los datos de los objetos es controlado por el programador, evitando efectos laterales no deseados. Con el encapsulamiento de los datos se consigue que las personas que utilicen un objeto slo tengan que comprender su interfaz, olvidndose de cmo est implementada, y en definitiva, reduciendo la complejidad de utilizacin.

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[19]
En Java se pueden utilizar los especificadores de acceso para proteger tanto las variables como los mtodos de la clase cuando se declaran. El lenguaje Java soporta cuatro niveles de acceso para las variables y mtodos miembros: private, protected, public, y, todava no especificado, acceso de paquete. La siguiente tabla le muestra los niveles de acceso permitidos por cada especificador.

Especificador private protected public package

clase subclase paquete mundo X X X* X X X X X X X

La primera columna indica si la propia clase tiene acceso al miembro definido por el especificador de acceso. La segunda columna indica si las subclases de la clase (sin importar dentro de que paquete se encuentren estas) tienen acceso a los miembros. La tercera columna indica si las clases del mismo paquete que la clase (sin importar su parentesco) tienen acceso a los miembros. La cuarta columna indica si todas las clases tienen acceso a los miembros.

2.5 Arreglos de objetos

[20]

Un array o arreglo es una estructura de datos que nos permite almacenar un conjunto de datos de un mismo tipo. El tamao de los arrays se declara en un primer momento y no puede cambiar en tiempo de ejecucin como puede producirse en otros lenguajes. La declaracin de un array en Java y su inicializacin se realiza de la siguiente manera: tipo_dato nombre_array[]; nombre_array = new tipo_dato[tamao]; La propiedad length de un arreglo nos devuelve el nmero de elementos que posee el array. Hay que tener en cuenta que es una variable de solo lectura, es por ello que no podremos realizar una asignacin a dicha variable. Un arreglo de objetos solo crea referencias de memoria en un segundo paso deben crearse las instancias necesarias. Persona lista[]=new Persona[5]; // se declaran las 5 referencias, cada una se inicializa con null lista[0]= new Persona(LUIS, 27); // la primera referencia null se reemplaza por un objeto.

Prctica 4: Arreglos de objetos simples

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[21]
2.6 Comunicacin entre clases
Es comn que los modelos de clases asocien una clase con otra a nivel diseo, pero de qu manera se realiza este enlace entre las instancias que producen las clases? Generalmente se asocian las clases mediante apuntadores o puentes definidos como atributos en alguna de las clases que participan, solo que deben validarse que estos enlaces contengan referencias validas hacia objetos y no estn vacios en el momento de establecer una comunicacin. Observe el siguiente ejemplo:
class A { String nombre=S/N; B vecino=null; public A(String nom){ nombre=nom; } public void saludamevecino( ){ if (vecino!=null) vecino.saluda(); } } class B { String nombre=S/N; public B(String nom) {nombre=nom;} public void saluda(){System.out.println(Hola mi nombre es +nombre);} } class Comunicacion { public static void main(String args[]){ A a=new A(JAIME); B b=new B(MARIA); a.vecino=b; a.saludamevecino();} }

Este ejemplo muestra una comunicacin simple entre la clase A y la clase B, esta comunicacin puede ampliarse a otras estructuras de datos como arreglos, listas ligadas, grafos, etc.

CLASE A

CLASE B

[22]
Preguntas & Respuestas 1.- Que diferencia a un objeto de una instancia? ______________________________________________________________________________________________________ ______________________________________________________________________________________________________ 2.- Que es un destructor y de qu manera se codifica en java? ______________________________________________________________________________________________________ 3.- Para qu sirve el encapsulamiento? ______________________________________________________________________________________________________ 4.- Un arreglo pasa por dos etapas, cules son? ______________________________________________________________________________________________________ 5.- Cuando dos clases se comunican que debe validarse? ______________________________________________________________________________________________________

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[23]

[MODULO 3]
GENERALIZACIN Y POLIMORFISMO

[24]
3.1 Generalizacin y especializacin de clases
Uno de los motivos por los cuales las clases se relacionan entre ellas es el hecho de poseer propiedades comunes. Las clases con propiedades comunes se organizan en superclases. Una superclase representa una generalizacin de las subclases. De igual modo, una subclase de una clase dada representa una especializacin de la clase superior. La clase derivada es-un tipo de clase de la clase base o superclase.

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

3.2 La clase abstracta

[25]

En el modelado orientado a objetos es til introducir clases a un cierto nivel que puede no existir en la realidad, pero que son construcciones conceptuales tiles. Estas clases abstractas tienen como propiedad fundamental que no se pueden crear instancias de ellas. Por ejemplo nunca crearemos instancias de vehculo sin motor, pero s de bicicleta y patinete. Prctica 5: Realice un programa que utilice dos arreglos cuyas clases estn ligadas por herencia.

3.3 Polimorfismo
El polimorfismo, como su mismo nombre sugiere mltiples formas, se refiere a la posibilidad de acceder a un variado rango de funciones distintas a travs del mismo interfaz. O sea, que, en la prctica, un mismo identificador puede tener distintas formas (distintos cuerpos de funcin, distintos comportamientos) dependiendo, en general, del contexto en el que se halle inserto. El polimorfismo se puede establecer mediante la sobrecarga, sobre-escritura y la ligadura dinmica.

3.4 Sobrecarga
El trmino sobrecarga se refiere al uso del mismo identificador u operador en distintos contextos y con distintos significados.

[26]
Si para cada funcionalidad necesitada fuese necesario escribir un mtodo, el cdigo resultante sera inmanejable, imagnense, por ejemplo que los desarrolladores de java hubiesen creado un mtodo para escribir en pantalla una cadena de texto, otro diferente para escribir un entero, otro para escribir un doble, otro para escribir un carcter, otro para una cadena y un entero y as para todas las combinaciones posibles, seria casi imposible conocer dichos mtodos en totalidad; en cambio sabemos que con System.out.print() o System.out.println() podemos escribir cualquier mensaje en pantalla. Este tipo de codificacin nos es permitido gracias a la sobrecarga, la cual se aplica a mtodos y constructores. La sobrecarga de mtodos conduce a que un mismo nombre pueda representar distintos mtodos con distinto tipo y nmero de parmetros, manejados dentro de la misma clase. En el mbito de la POO, la sobrecarga de mtodos se refiere a la posibilidad de tener dos o ms mtodos con el mismo nombre pero funcionalidad diferente. Es decir, dos o ms mtodos con el mismo nombre realizan acciones diferentes. El compilados usar una u otra dependiendo de los parmetros usados. Esto tambin se aplica a los constructores. De hecho, es la aplicacin ms habitual de la sobrecarga. La forma de diferenciar varios mtodos sobrecargados es a travs de sus parmetros, ya sea por la cantidad, el tipo o el orden de los mismos, veamos un ejemplo: public class Articulo { private float precio; public void setPrecio() { precio = 3.50; } public void setPrecio(float nuevoPrecio) { precio = nuevoPrecio; } public void setPrecio(float costo, int porcentajeGanancia) { precio = costo + (costo * porcentajeGanancia); } }

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[27]
3.5 Sobre escritura de mtodos
La sobre-escritura, se aplica a los mtodos y esta directamente relacionada a la herencia y se refiere a la redefinicin de los mtodos de la clase base en las subclases, por ejemplo, en la relacin de herencia del ejemplo de las figuras aunque la clase base Figura tiene los mtodos calcularArea y calcularPerimetro, las subclases Circulo, Cuadrado, Triangulo y Rectangulo redefinen estos mtodos ya que el clculo del rea y el permetro de cada uno de ellos es diferente. class Figura { protected double area; protected double perimetro; public Figura() { this.area=0; this.perimetro=0; } public double getArea() { return area; } public double getPerimetro() { return perimetro; } public void calcularArea(){} public void calcularPerimetro(){} } public class Circulo extends Figura { private double radio; public Circulo() { super(); } public double getRadio() { return radio; } public void setRadio(double radio) { this.radio = radio; } public void calcularArea() { this.area = Math.PI*Math.pow(this.radio,2.0); } public void calcularPerimetro() { this.perimetro = 2*Math.PI*this.radio; } }

[28]
3.6 El mtodo abstracto
Un mtodo abstracto no lleva cdigo, solo va su declaracin, despus cada clase es responsable de declarar los procedimientos necesarios para dicho objeto. Los mtodos abstractos solo se pueden declarar en clases que han sido declaradas como abstractas. No contiene implementacin, es solo una declaracin. Expresan funcionalidad. (El qu hace?) Prctica 6: Realice un programa que utilice un arreglo polimrfico.

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

Preguntas & Respuestas 1.- Cmo se les llama a las clases hoja en un rbol de herencia? ______________________________________________________________________________________________________ ______________________________________________________________________________________________________ 2.- En qu consiste la sobrecarga? ______________________________________________________________________________________________________ 3.- Cundo existe sobre escritura o reemplazo? ______________________________________________________________________________________________________ 4.-Un constructor se puede sobrecargar? ______________________________________________________________________________________________________ 5.- Qu cdigo contiene un mtodo abstracto? ______________________________________________________________________________________________________

[29]

[30]

[MODULO 4]
AGREGACIN, VISIBILIDAD Y DEPENDENCIA
Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[31]
4.1 Agregacin y composicin de clases
Muchas veces una determinada entidad existe como conjuncin de otras entidades, como un conglomerado de ellas. La orientacin al objeto recoge este tipo de relaciones como dos conceptos; la agregacin y la composicin. En este tipo de relaciones un objeto componente se integra en un objeto compuesto. La diferencia entre agregacin y composicin es que mientras que la composicin se entiende que dura durante toda la vida del objeto componedor, en la agregacin no tiene por qu ser as. Esto se puede implementar como un objeto (objeto compuesto) que cuenta entre sus atributos con otro objeto distinto (objeto componente).

4.2 Delegacin de tareas entre clases


La delegacin es un mecanismo, usado en la programacin orientada a objetos, por medio de la cual una clase delega en otra una determinada funcionalidad. Si el lenguaje no soporta directamente ste mecanismo se puede emular haciendo una composicin de clases donde un objeto delegador (de nivel ms prximo al cliente) contenga en un objeto delegado (ms lejos del cliente), en el que delegue determinada funcionalidad. Esto se implementa aadiendo un miembro de la clase delegada en la clase delegadora e implementando los mtodos pblicos que tenga la clase delegada en la clase delegadora. Dichos mtodos simplemente deben realizar una llamada con los mismos parmetros al mtodo equivalente de la clase delegada.

[32]
4.3 Visibilidad y dependencia
El trmino visibilidad de un objeto se usa para describir una caracterizacin de los nombres asideros por los cuales se tiene acceso a los objetos. Un objeto es visible en cierto contexto si el nombre del objeto es legal y denota al objeto. La visibilidad se relaciona con la conectividad que un identificador establece con un objeto en particular. El concepto de dependencia se usa para relacionar una parte de un sistema con otro. En el caso de la herencia se genera un grado de dependencia fuerte, ya que un objeto hijo depende de la existencia de su nucleo (la super clase).

Prctica 7: Realice un programa que muestre la delegacin de tareas y la dependencia entre al menos dos clases

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[33]
Preguntas & Respuestas 1.- A qu se refiere la frase parte_de en relacin a la agregacin? ______________________________________________________________________________________________________ ______________________________________________________________________________________________________ 2.- Cundo una clase se agrega a otra existe dependencia? ______________________________________________________________________________________________________ 3.- La herencia permite la delegacin de tareas, porque? ______________________________________________________________________________________________________ 4.-Son necesarias las instancias para que la delegacin de tares sea posible? ______________________________________________________________________________________________________ 5.- A que termino refiere el que un objeto pueda ser accesible por alguna parte del sistema? ______________________________________________________________________________________________________

[34]

[MODULO 5]
ALMACENAMIENTO DE OBJETOS

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[35]
5.1 Almacenamiento de tipos de datos primitivos
Existe un paquete llamado java.io el cual contiene una familia de clases que nos permiten leer y escribir informacin en archivos. Dos de estas clases DataInputStream y DataOutputStream permiten la escritura y lectura de tipos de datos bsicos. La clase DataInputStream define diversos mtodos readXXX que son variaciones del mtodo read de la clase base para leer datos de tipo primitivo boolean readBoolean(); byte readByte(); int readUnsignedByte(); short readShort(); int readUnsignedShort(); char readChar(); int readInt(); String readLine(); long readLong(); float readFloat(); double readDouble();

La clase DataOutputStream define diversos mtodos writeXXX que son variaciones del mtodo write de la clase base para escribir datos de tipo primitivo void writeBoolean(boolean v); void writeBytes(String s); void writeChars(String s); void writeInt(int v); void writeFloat(float v); void writeByte(int v); void writeShort(int v); void writeChar(int v); void writeLong(long v); void writeDouble(double v);

[36]

5.2 Almacenamiento de objetos en arreglos de referencias


La creacin de arreglos de objetos es posible solo en dos pasos: Crear el arreglo de referencias y crear a cada uno de los objetos en cada posicin con el operador new. Por ejemplo para crear un arreglo de Persona. Persona Lista[]= new Persona[5]; // este paso crea un arreglo de 5 referencias cuyo valor en cada casillero es null lista[0]= new Persona(JUAN,21); // este paso crea una instancia de Persona y reemplaza el null

Prctica 8: Realice un programa que almacene 5 objetos simples en un arreglo

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[37]
5.3 Serializacin de objetos para almacenar objetos polimorfos
La serializacin de un objeto consiste en generar una secuencia de bytes lista para su almacenamiento o transmisin. Despus, mediante la deserializacin, el estado original del objeto se puede reconstruir. Para que un objeto sea serializable, ha de implementar la interfaz java.io.Serializable (que lo nico que hace es marcar el objeto como serializable, sin que tengamos que implementar ningn mtodo). Para que un objeto sea serializable, todas sus variables de instancia han de ser serializables. Todos los tipos primitivos en Java son serializables por defecto (igual que los arrays y otros muchos tipos estndar). Serializacin import java.io.*; public class ContactoOutput { private FileOutputStream file; private ObjectOutputStream output; public void abrir() throws IOException // Abrir el fichero { file = new FileOutputStream( "clientes.ser" ); output = new ObjectOutputStream(file); } public void cerrar() throws IOException // Cerrar el fichero { if (output!=null) output.close(); } public void escribir (Contacto contacto) throws IOException // Escribir en el fichero { if (output!=null) output.writeObject(contacto); } }

[38]
Deserializacin import java.io.*; public class ContactoInput { private FileInputStream file; private ObjectInputStream input; public void abrir() throws IOException // Abrir el fichero { file = new FileInputStream( "clientes.ser" ); input = new ObjectInputStream(file); } public void cerrar() throws IOException // Cerrar el fichero { if (input!=null) input.close(); } public Contacto leer( ) throws IOException // Escribir en el fichero {Contacto contacto=null; if (input!=null) { try { contacto=(Contacto) input.readObject(); } catch (EOFException eof) { } return contacto; } } Prctica 9: Realice un programa que almacene 5 objetos polimorfos en un archivo

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[39]
Preguntas & Respuestas 1.- Qu es la serializacin? ______________________________________________________________________________________________________ ______________________________________________________________________________________________________ 2.- Por qu es necesario el uso de throws IOException? ______________________________________________________________________________________________________ 3.- Qu mtodo nos permite leer objetos? ______________________________________________________________________________________________________ 4.-Qu mtodo nos permite escribir objetos? ______________________________________________________________________________________________________ 5.- Porque es necesaria la conversin de tipos al leer el objeto del archivo? ______________________________________________________________________________________________________

[40]

[MODULO 6]
MODELADO Y CREACIN DE PROTOTIPOS

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[41]
6.1 Diseo de sistemas utilizando UML
Un modelo representa a un sistema software desde una perspectiva especfica. Al igual que la planta y el alzado de una figura en dibujo tcnico nos muestran la misma figura vista desde distintos ngulos, cada modelo nos permite fijarnos en un aspecto distinto del sistema. Los modelos de UML que se describen son: Diagrama de Clase Una clase se representa mediante una caja subdividida en tres partes: En la superior se muestra el nombre de la clase, en la media los atributos y en la inferior las operaciones. Una clase puede representarse de forma esquemtica, con los atributos y operaciones suprimidos, siendo entonces tan solo un rectngulo con el nombre de la clase. Diagrama de Casos de Uso Un Diagrama de Casos de Uso muestra la relacin entre los actores y los casos de uso del sistema. Representa la funcionalidad que ofrece el sistema en lo que se refiere a su interaccin externa. En el diagrama de casos de uso se representa tambin el sistema como una caja rectangular con el nombre en su interior. Los casos de uso estn en el interior de la caja del sistema, y los actores fuera, y cada actor est unido a los casos de uso en los que participa mediante una lnea.

[42]
Diagrama de Secuencia Un diagrama de Secuencia muestra una interaccin ordenada segn la secuencia temporal de eventos. En particular, muestra los objetos participantes en la interaccin y los mensajes que intercambian ordenados segn su secuencia en el tiempo. El eje vertical representa el tiempo, y en el eje horizontal se colocan los objetos y actores participantes en la interaccin, sin un orden prefijado. Cada objeto o actor tiene una lnea vertical, y los mensajes se representan mediante flechas entre los distintos objetos. El tiempo fluye de arriba abajo. Se pueden colocar etiquetas (como restricciones de tiempo, descripciones de acciones, etc.) bien en el margen izquierdo o bien junto a las transiciones o activaciones a las que se refieren. Diagrama de Colaboracin Un Diagrama de Colaboracin muestra una interaccin organizada basndose en los objetos que toman parte en la interaccin y los enlaces entre los mismos (en cuanto a la interaccin se refiere). A diferencia de los Diagramas de Secuencia, los Diagramas de Colaboracin muestran las relaciones entre los roles de los objetos. La secuencia de los mensajes y los flujos de ejecucin concurrentes deben determinarse explcitamente mediante nmeros de secuencia.

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[43]
Diagrama de Estados Un Diagrama de Estados muestra la secuencia de estados por los que pasa bien un caso de uso, bien un objeto a lo largo de su vida, o bien todo el sistema. En l se indican qu eventos hacen que se pase de un estado a otro y cules son las respuestas y acciones que genera. En cuanto a la representacin, un diagrama de estados es un grafo cuyos nodos son estados y cuyos arcos dirigidos son transiciones etiquetadas con los nombres de los eventos. Un estado se representa como una caja redondeada con el nombre del estado en su interior. Una transicin se representa como una flecha desde el estado origen al estado destino. La caja de un estado puede tener 1 o 2 compartimentos. En el primer compartimento aparece el nombre del estado. El segundo compartimento es opcional, y en l pueden aparecer acciones de entrada, de salida y acciones internas. Una accin de entrada aparece en la forma entrada/accin_asociada donde accin_asociada es el nombre de la accin que se realiza al entrar en ese estado. Cada vez que se entra al estado por medio de una transicin la accin de entrada se ejecuta. Una accin de salida aparece en la forma salida/accin_asociada. Cada vez que se sale del estado por una transicin de salida la accin de salida se ejecuta. Una accin interna es una accin que se ejecuta cuando se recibe un determinado evento en ese estado, pero que no causa una transicin a otro estado. Se indica en la forma nombre_de_evento/accin_asociada.

[44]

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[45]
6.2 Las interfaces graficas
La interfaz grfica de usuario AWT (AWT = Abstract Windowing Toolkit ) permite crear entornos grficos de ventanas, a la manera de Windows con aspecto similar en varias plataformas. Se han utilizado elementos comunes a todas las plataformas: barras deslizantes, botones, mens desplegables, etc... 1. Controles basicos Button Chekboxes Choice List Menu Text Field 2. Otros controles Slider Scrollbar Text Area Canvas Label Panel Scroll Panen

6.3 Interfaces graficas que responden a eventos


Los eventos son una parte del paquete AWT

[46]

Un evento es aparece cuando hay interaccin con el usuario. Ejemplos de eventos: Se pulsa el botn del ratn (Java no se distingue entre botn izquierdo y derecho, por un problema de compatibilidad entre plataformas. En MacIntosh los ratones son de 1 solo botn!!!) Se arrastra con el ratn Se maximiza o minimiza una ventana Se pulsa una tecla etc... Eventos de ratn Ej: PosicionDeClickApplet.java import java.awt.Event; import java.awt.Graphics; public class PosicionDeClickApplet extends java.applet.Applet { int x,y; Point ultimo = null; Point nuevo = null;

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

public void paint(Graphics g) { if ( x*y != 0) { g.drawString("Has hecho CLICK en x = " + x +" , y = " + y,0,10); g.fillOval(x,y,10,10); } } public boolean mouseDown(Event evt, int x,int y) { this.x = x; this.y = y; System.out.println("Has hecho CLICK en x = " + x +" , y = " + y); repaint(); return true; } } Variacin en el ejemplo anterior: cambiar mouseDown() por mouseMove() Si se picha y arrastra no lo detecta: habra que usar mouseDrag() mouseEnter() y mouseExit() Ej: public boolean mouseEnter(Event evt, int x, int y) { setBackground(java.awt.Color.blue); repaint(); return true; }

[47]

public boolean mouseExit(Event evt, int x, int y) { setBackground(java,awt.Color.red); repaint(); return true; }

[48]

Eventos de teclado keyDown(Event evt, int key) keyUp(Event evt, int key) Modificadores: la clase Event tiene 3 mtodos para controlar si se ha pulsado una tecla modificadora junto con el propio evento. Devuelven un booleano Event.shiftDown() Event.metaDown() (?) (un metakey parece ser algo popular en Unix, tpicamente corresponde a Alt, pero se desaconseja en beneficio de Control y Shift) Event.controlDown() Ej: public boolean mouseDown(Event evt, int x, int y) { if (evt.shiftDown()) { tratar el evento shift+click} else { tratar el evento click simple} } El manejador de eventos (AWT Event Handler) Hay muchos ms eventos, relacionados con el AWT

Prctica 10: Realice un programa que contenga una interfaz grfica

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico

[49]
Preguntas & Respuestas 1.- Qu representa un diagrama de clases? ______________________________________________________________________________________________________ ______________________________________________________________________________________________________ 2.- Qu smbolos utiliza el diagrama de casos de uso ? ______________________________________________________________________________________________________ 3.- Cul es la diferencia entre un diagrama de colaboracin y un diagrama de secuencia? ______________________________________________________________________________________________________ 4.-Qu abrevia AWT? ______________________________________________________________________________________________________ 5.- Cuando aparece un evento en un sistema? ______________________________________________________________________________________________________

[COMENTARIOS]
_______________________________________________________________ _______________________________________________________________ _______________________________________________________________ _______________________________________________________________ _______________________________________________________________ _______________________________________________________________ _______________________________________________________________ _______________________________________________________________

Jos Sandoval Chvez, Kleoph Alfaro Castellanos, Karime Pulido Hernndez, Juan Enrique Macas Rico