03/02/031 Estrategias de Comunicación para Implementar un Diseño en Java Artur Boronat Moll Laboratorio de Sistemas de Información Facultad de Informática.

Slides:



Advertisements
Presentaciones similares
UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
Advertisements

FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE (SL-110) CAPÍTULO 13 Ing. Ronald Criollo.
2. Manejo de memoria Manejo de memoria estática
Introducción a C#.
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
Introducción a la programación en JAVA
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
22/11/2005 E.T.S de Ingenieros de Telecomunicación - UPNA.1 Clases y Objetos Silvia Larrayoz Leire Urriza.
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Guía de prácticas Diagramas de UML en ARGO-UML
Modularidad Estructura de datos.
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
Lección 1 Introducción a la POO
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Herencia y Polimorfismo
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
2.3 Cola de números enteros.
2.2 Pila de números enteros
1.2 Sintaxis del lenguaje Java.
2.4 Construcción de un TAD a partir de otro.
UNIVERSIDAD LATINA (UNILA)
Programación Orientada a Objetos en Java
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
HERENCIA.
Arreglos: Vectores en JAVA
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Método en Java.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Java. Objeto Es la instancia de una clase. Cada objeto se crea utilizando la palabra reservada new. Un objeto es conocido como una instancia. Ejemplo.
Realizado por: Bertha Palomeque A. Rodrigo Barzola J. Sensor de Temperatura utilizando el Starter Kit Javelin Stamp.
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Material de apoyo Unidad 2 Estructura de datos
0. Desarrollo de Programas: técnica del refinamiento.
Herencia y Polimorfismo en JAVA
Inicio Java: Algunas utilidades. Inicio Temporización En ingeniería nos encontramos con tareas que deben repetirse de forma periódica. Son tareas temporizadas.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
29/01/031 SISTEMAS ORIENTADOS A OBJETOS PROBLEMÁTICA DE PERSISTENCIA Víctor Anaya Mayte Redolar Laboratorio de Sistemas de Información Facultad de Informática.
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Creación de Aplicaciones
Tema 6: Clases Antonio J. Sierra.
Unidad I Java y C++ : Similitudes y diferencias
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
Colecciones.
Input – Scanner y Cajas de diálogo
1 Streams en Java Agustín J. González ELO Generalidades Un Stream es simplemente una fuente o destino de bytes. Los streams más comunes son los.
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
Archivos y Búsqueda Secuencial
Sockets en Java. Sockets ● Para programar aplicaciones en red en Java se utilizan los Sockets. ● Un socket permite establecer y manejar una conexión entre.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Clase Teórica No. 4 Programación IV
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Estructuras de control Introducción a la programación.
Programación Orientada a Aspectos (POA)
ESTRUCTURA DE DATOS EN JAVA
Patrones Creacionales
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Programación Orientada a Objetos
Entrada / Salida. Java adopta de Unix el concepto de stream Un stream es un flujo de datos (secuencia de bytes) que va de una fuente a un destino. Desde.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Primeros pasos en java. Definición de las librerías import java.applet.Applet; //cuando se crea un applet import java.awt.*; //importa todos los paquetes.
Clases “ Es una Abstracción de un elemento del mundo real ”
TALLER POO JAVA ERNESTO GOMEZ VARGAS. OBJETIVOS REALIZAR UNA APLICACIÓN SENCILLA DE P.O.O FAMILIARIZARSE CON LA HERRAMETA NETBEANS APLICAR EL CONCEPTO.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
Tema 1: Concurrencia con Java
Transcripción de la presentación:

03/02/031 Estrategias de Comunicación para Implementar un Diseño en Java Artur Boronat Moll Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia

03/02/032 Introducción (I) Objetivo: Implementar el diseño de un sistema usando un lenguaje OO (java) Modalidades: acoplamiento normal (por datos) acoplamiento común (vbles globales) cluster de información

03/02/033 Introducción (II) Dos aproximaciones: A partir de un diseño estructurado (procedural) A partir de un diseño OO

03/02/034 COORDINADOR PREPRODUCTORPRECONSUMIDOR PRODUCTOR (obtiene una cadena del usuario) CONSUMIDOR (muestra por pantalla la información introducida) SISTEMA Introducción (III)

03/02/035 APROXIMACIÓN ESTRUCTURADA Acoplamiento normal Acoplamiento común Cluster de información

03/02/036 APROXIMACIÓN ESTRUCTURADA (1.1) Acoplamiento Normal Acoplamiento normal COORDINADOR PREPRODUCTORPRECONSUMIDOR PRODUCTOR (obtiene una cadena del usuario) CONSUMIDOR (muestra por pantalla la información introducida) dato

03/02/037 APROXIMACIÓN ESTRUCTURADA (1.2) Acoplamiento Normal import java.lang.System; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; public class DProcParam { /* Diseño procedural: acoplamiento normal (por datos) */ public static String preProductor() throws IOException { // Llama al módulo de creación del dato return productor(); }...

03/02/038 APROXIMACIÓN ESTRUCTURADA (1.3) Acoplamiento Normal... public static String productor() throws IOException { // Lee un dato introducido por el usuario BufferedReader keyboardInput; // Se pide al usuario que introduzca una cadena System.out.print("Escribe una cadena: "); System.out.flush(); // Se lee el dato introducido keyboardInput = new BufferedReader(new InputStreamReader(System.in)); return keyboardInput.readLine(); }...

03/02/039 APROXIMACIÓN ESTRUCTURADA (1.4) Acoplamiento Normal... public static void preConsumidor( String dato ) { // Llama al módulo que muestra el dato consumidor( dato ); } public static void consumidor( String dato ) { // Muestra el dato por pantalla System.out.println( "La cadena introducida es: " + dato ); }...

03/02/0310 APROXIMACIÓN ESTRUCTURADA (1.5) Acoplamiento Normal... public static void main( String args[] ) throws IOException { // Actua de módulo coordinador String dato = preProductor(); preConsumidor( dato ); }

03/02/0311 APROXIMACIÓN ESTRUCTURADA (1.6) Acoplamiento Normal Inconvenientes: Flujo de datos vagabundos Observación: si se quisiera devolver más de un parámetro del mismo tipo: devolver vector de elementos de diferente tipo: diferentes métodos de obtención estáticos

03/02/0312 Aprox. Estructurada (2.1) Acoplamiento comun Acoplamiento común (vbles globales) COORDINADOR PREPRODUCTORPRECONSUMIDOR PRODUCTOR (obtiene una cadena del usuario) CONSUMIDOR (muestra por pantalla la información introducida) dato

03/02/0313 Aprox. Estructurada (2.2) Acoplamiento comun public class DProcGlobal { /* Diseño procedural: acoplamiento común o por variables globales */ public static String dato; public static void preProductor() throws IOException { // Llama al módulo de creación del dato productor(); }...

03/02/0314 Aprox. Estructurada (2.1) Acoplamiento comun... public static void productor() throws IOException { // Lee un dato introducido por el usuario // Se pide al usuario que introduzca una cadena System.out.print("Escribe una cadena: "); System.out.flush(); // Se lee el dato introducido BufferedReader keyboardInput = new BufferedReader (new InputStreamReader(System.in)); dato = keyboardInput.readLine(); }...

03/02/0315 Aprox. Estructurada (2.4) Acoplamiento comun... public static void preConsumidor() { // Llama al módulo que muestra el dato consumidor(); } public static void consumidor() { // Muestra el dato por pantalla System.out.println( "La cadena introducida es: " + dato ); }...

03/02/0316 Aprox. Estructurada (2.5) Acoplamiento comun... public static void main( String args[] ) throws IOException { // Actua de módulo coordinador preProductor(); preConsumidor(); }

03/02/0317 Aprox. Estructurada (2.6) Acoplamiento comun Ventajas: Se elimina el flujo de datos vagabundos Inconvenientes: Acoplamiento global prescindible

03/02/0318 Aproximación Estructurada (3.2) Cluster de información Cluster (cúmulo) de información COORDINADOR PREPRODUCTORPRECONSUMIDOR PRODUCTORCONSUMIDOR dato Inicializar Dato Obtener Dato dato

03/02/0319 Aproximación Estructurada (3.2) Cluster de información public class DProcCluster { /* Diseño procedural: cúmulo (cluster) de información */ public static void preProductor() throws IOException { // Llama al módulo de creación del dato productor(); }...

03/02/0320 Aproximación Estructurada (3.3) Cluster de información... public static void productor() throws IOException { // Lee un dato introducido por el usuario String dato_local; // Se pide al usuario que introduzca una cadena System.out.print("Escribe una cadena: "); System.out.flush(); // Se lee el dato introducido BufferedReader keyboardInput = new BufferedReader (new InputStreamReader(System.in)); dato_local = keyboardInput.readLine(); //almacenamos el dato en el cluster ProcCluster.setDato( dato_local ); }...

03/02/0321 Aproximación Estructurada (3.4) Cluster de información... public static void preConsumidor() { // Llama al módulo que muestra el dato consumidor(); } public static void consumidor() { // Muestra la información por pantalla System.out.println( "La cadena introducida es: " + ProcCluster.getDato() ); }...

03/02/0322 Aproximación Estructurada (3.5) Cluster de información... public static void main( String args[] ) throws IOException { // Actua de módulo coordinador preProductor(); preConsumidor(); } } //fin clase DProcCluster...

03/02/0323 Aproximación Estructurada (3.6) Cluster de información... class ProcCluster { private static String dato; public static void setDato( String nuevoDato ) { dato = nuevoDato; } public static String getDato() { return dato; } } // fin clase ProcCluster

03/02/0324 Aproximación Estructurada (3.7) Cluster de información Ventajas No hay flujos de datos vagabundos Buen acoplamiento

03/02/0325 APROXIMACIÓN ORIENTADA A OBJETOS (1.1) Acoplamiento normal Acoplamiento común Cluster de información

03/02/0326 APROXIMACIÓN ORIENTADA A OBJETOS (1.1) Acoplamiento normal Diagrama de clases PRODUCTOR - dato + preProducir( ): String - producir( ) CONSUMIDOR - dato + preConsumir (dato: String) - consumir( ) COORDINADOR + coordinar( )

03/02/0327 APROXIMACIÓN ORIENTADA A OBJETOS (1.2) Acoplamiento normal Interacción entre objetos preProducir producir PRODUCTOR preConsumir consumir CONSUMIDOR coordinar COORDINADOR dato

03/02/0328 APROXIMACIÓN ORIENTADA A OBJETOS (1.3) Acoplamiento normal Diagrama de secuencia

03/02/0329 APROXIMACIÓN ORIENTADA A OBJETOS (1.4) Acoplamiento normal public class DOOParam { /* Diseño OO: acoplamiento normal (por datos) - Tercera aproximación: métodos no estáticos en las clases Productor y Consumidor, y con atributos - Clase coordinador */ public static void main( String args[] ) throws IOException { Coordinador c = new Coordinador(); c.coordinar(); } } //fin clase DOOParam

03/02/0330 APROXIMACIÓN ORIENTADA A OBJETOS (1.5) Acoplamiento normal class Coordinador { // Clase raíz encargada de coordinar el productor y el // consumidor private Productor p; private Consumidor c; public Coordinador() { p = new Productor( this ); c = new Consumidor( this ); }...

03/02/0331 APROXIMACIÓN ORIENTADA A OBJETOS (1.6) Acoplamiento normal... public void coordinar() throws IOException { // Actua de módulo coordinador String dato; dato = p.preProducir(); c.preConsumir( dato ); } } // fin clase Coordinador

03/02/0332 APROXIMACIÓN ORIENTADA A OBJETOS (1.7) Acoplamiento normal class Productor { // Clase encargada de leer información del usuario private Coordinador coo; private String dato; public Productor( Coordinador nuevoCoo) { coo = nuevoCoo; } public String preProducir() throws IOException { // Llama al módulo de creación del dato producir(); return dato; }...

03/02/0333 APROXIMACIÓN ORIENTADA A OBJETOS (1.8) Acoplamiento normal... private void producir() throws IOException { // Lee un dato introducido por el usuario BufferedReader keyboardInput; // Se pide al usuario que introduzca una cadena System.out.print("Escribe una cadena: "); System.out.flush(); // Se lee el dato introducido keyboardInput = new BufferedReader (new InputStreamReader (System.in)); dato = keyboardInput.readLine(); } } //fin clase Productor

03/02/0334 APROXIMACIÓN ORIENTADA A OBJETOS (1.9) Acoplamiento normal class Consumidor { //Clase encargada de mostrar la información introducida por pantalla private Coordinador coo; private String dato; public Consumidor(Coordinador nuevoCoo) { coo = nuevoCoo; }...

03/02/0335 APROXIMACIÓN ORIENTADA A OBJETOS (1.10) Acoplamiento normal... public void preConsumir(String dato) { // Llama al módulo que muestra el dato this.dato = dato; consumir(); } private void consumir() { // Muestra el dato por pantalla System.out.println( "La cadena introducida es: " + this.dato ); } } // fin clase Consumidor

03/02/0336 APROXIMACIÓN ORIENTADA A OBJETOS (1.11) Acoplamiento normal Ventaja: No hay flujo de datos vagabundos Observación: más de un parámetro del mismo tipo: devolver vector (en el return) diferente tipo: pasar como parámetro la referencia al objeto (teniendo en cuenta que modificamos su estado) si los atributos del objeto no tienen valor aún, crear una nueva instancia (desde un método estático - productor), llenarla con los datos y devolver su referencia (en el return)

03/02/0337 APROXIMACIÓN ORIENTADA A OBJETOS (2.1) Acoplamiento comun Diagrama de clases PRODUCTOR + preProducir( ) - producir( ) CONSUMIDOR + preConsumir ( ) - consumir( ) COORDINADOR + coordinar( ) dato

03/02/0338 APROXIMACIÓN ORIENTADA A OBJETOS (2.2) Acoplamiento comun Interacción entre objetos dato preProducir producir PRODUCTOR preConsumir consumir CONSUMIDOR coordinar COORDINADOR

03/02/0339 APROXIMACIÓN ORIENTADA A OBJETOS (2.3) Acoplamiento comun Diagrama de secuencia

03/02/0340 APROXIMACIÓN ORIENTADA A OBJETOS (2.4) Acoplamiento comun class CoordinadorGlobal { private ProductorGlobal p; private ConsumidorGlobal c; public String dato; public CoordinadorGlobal() { p = new ProductorGlobal( this ); c = new ConsumidorGlobal( this ); } public void coordinar() throws IOException { p.preProducir(); c.preConsumir(); } } // fin clase CoordinadorGlobal

03/02/0341 APROXIMACIÓN ORIENTADA A OBJETOS (2.5) Acoplamiento comun class ProductorGlobal { // Clase encargada de leer información del usuario private CoordinadorGlobal coo; public ProductorGlobal( CoordinadorGlobal nuevoCoo) { coo = nuevoCoo; } public void preProducir() throws IOException { // Llama al módulo de creación del dato producir(); }...

03/02/0342 APROXIMACIÓN ORIENTADA A OBJETOS (2.6) Acoplamiento comun... private void producir() throws IOException { // Se pide al usuario que introduzca una cadena System.out.print("Escribe una cadena: "); System.out.flush(); // Se lee el dato introducido BufferedReader keyboardInput = new BufferedReader (new InputStreamReader(System.in)); coo.dato = keyboardInput.readLine(); } } //fin clase ProductorGlobal

03/02/0343 APROXIMACIÓN ORIENTADA A OBJETOS (2.7) Acoplamiento comun class ConsumidorGlobal { //Clase encargada de mostrar la información introducida por pantalla private CoordinadorGlobal coo; public ConsumidorGlobal(CoordinadorGlobal nuevoCoo) { coo = nuevoCoo; }...

03/02/0344 APROXIMACIÓN ORIENTADA A OBJETOS (2.8) Acoplamiento comun... public void preConsumir () { // Llama al módulo que muestra el dato consumir(); } private void consumir() { // Muestra el dato por pantalla System.out.println( "La cadena introducida es: " + coo.dato ); } } // fin clase ConsumidorGlobal

03/02/0345 Aproximación OO (3.1) Cluster de información Diagrama de clases 11 PRODUCTOR + preProducir( ) - producir( ) CONSUMIDOR + preConsumir ( ) - consumir( ) COORDINADOR + coordinar( ) 11 CLUSTER + setDato(String dato) + getDato: String - dato

03/02/0346 Aproximación OO (3.2) Cluster de información Interacción entre objetos preProducir producir PRODUCTOR preConsumir consumir CONSUMIDOR coordinar COORDINADOR dato setDato getDato CLUSTER

03/02/0347 Aproximación OO (3.3) Cluster de información Diagrama de secuencia

03/02/0348 Aproximación OO (3.4) Cluster de información class ProductorCluster { // Clase encargada de leer información del usuario private CoordinadorCluster coo; public ProductorCluster( CoordinadorCluster nuevoCoo) { coo = nuevoCoo; } public void preProducir() throws IOException { // Llama al módulo de creación del dato producir(); }...

03/02/0349 Aproximación OO (3.5) Cluster de información... private void producir() throws IOException { // Se pide al usuario que introduzca una cadena System.out.print("Escribe una cadena: "); System.out.flush(); // Se lee el dato introducido BufferedReader keyboardInput = new BufferedReader (new InputStreamReader(System.in)); //Guardamos la información en el cluster OOCluster.setDato( keyboardInput.readLine() ); } } // fin clase ProductorCluster

03/02/0350 Aproximación OO (3.6) Cluster de información class ConsumidorCluster { //Clase encargada de mostrar la información introducida //por pantalla private CoordinadorCluster coo; public ConsumidorCluster(CoordinadorCluster nuevoCoo) { coo = nuevoCoo; }...

03/02/0351 Aproximación OO (3.7) Cluster de información... public void preConsumir() { // Llama al módulo que muestra el dato consumir(); } private void consumir() { // Muestra el dato por pantalla System.out.println( "La cadena introducida es: " + OOCluster.getDato() ); } } // fin clase ConsumidorCluster

03/02/0352 Aproximación OO (3.8) Cluster de información class OOCluster { private static String dato; public static void setDato( String nuevoDato ) { dato = nuevoDato; } public static String getDato() { return dato; } } // fin clase ProcCluster

03/02/0353 Conclusiones Java (como otros lenguajes) permite diferentes enfoques de programación (OO y/o procedural) Es importante evaluar las alternativas de comunicación mediante el diseño (previo a la codificación)