Programaci n orientada a ojetos
This presentation is the property of its rightful owner.
Sponsored Links
1 / 158

Programación Orientada a Ojetos PowerPoint PPT Presentation


  • 77 Views
  • Uploaded on
  • Presentation posted in: General

Programación Orientada a Ojetos. M.C. Juan Carlos Olivares Rojas. [email protected] http://antares.itmorelia.edu.mx/~jcolivar Noviembre, 2009. Programación Orientada a Objetos. ¿Cuál es la diferencia entre una estructura y una clase si las dos son ADT (Tipos de Datos Abstractos)?

Download Presentation

Programación Orientada a Ojetos

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Programaci n orientada a ojetos

Programación Orientada a Ojetos

M.C. Juan Carlos Olivares Rojas

[email protected]

http://antares.itmorelia.edu.mx/~jcolivar

Noviembre, 2009


Programaci n orientada a objetos

Programación Orientada a Objetos

¿Cuál es la diferencia entre una estructura y una clase si las dos son ADT (Tipos de Datos Abstractos)?

La encapsulación

La encapsulación permite colocar datos lógicamente relacionados como constantes, variables, funciones en una sola entidad. Ejemplos son los paquetes y clases.


Programaci n orientada a ojetos

POO

La visibilidad y el ocultamiento de la información es sumamente importante.

Este paradigma basa su funcionamiento en la creación de objetos que se dan a través de moldes predeterminados llamado clases.

No es reinventar la rueda, simplemente es estructurar de mejor forma el paradigma imperativo.


Programaci n orientada a ojetos

POO

La reutilización de componentes como son los mecanismos de herencia y polimorfismo hacen que la construcción de código sea más simple.

El primer lenguaje basado en este paradigma fue Smalltalk. Lenguajes como Java son considerado lenguajes orientados a objetos no puros, ya que tienen componentes de programación estructurada.


Programaci n orientada a ojetos

POO

En esta unidad se verán conceptos avanzados del paradigma orientado a objetos así como mejores prácticas de desarrollo.

Se seguirá una dinámica parecida a la de la unidad pasada.


Refactorizaci n

Refactorización

La refactorización es el proceso que consiste en cambiar la estructura interna de un programa sin modificar su comportamiento externo.

La refactorización es parte importante del proceso de reingeniería y puede enfocarse a la reestructuración de códigos


Refactorizaci n1

Refactorización

Las herramientas actuales permiten más que simplemente buscar una cadena de texto y sustituirla por otra.

Al hacer uso de la refactorización permiten una reestructuración más simple y menos propensa a errores.

NetBeans desde su versión 5.0 soporta refactorización.


Refactorizaci n2

Refactorización

Las principales herramientas con las que se cuenta son:

Renombrado para cambiar de manera segura el nombre (si no se aplica a esto, un comando de sustituir todo puede ser perjudicial), mover, copiar, borrar, cambiar parámetros de los métodos, encapsular campos de una clase (crear métodos get/set).


Refactorizaci n3

Refactorización

Se pueden extraer elementos para crear interfaces, se pueden introducir variables, constantes, métodos, atributos.

En algunos casos es más tardado usar la herramienta que realizar la reestructuración de código a mano.

En NetBeans y algunos otros IDEs se cuentan con herramientas para manipular el código fuente.


Refactorizaci n4

Refactorización

Para dar formato (si es que el código no se creo en un IDE), eliminar espacios en blanco innecesarios, identar a la izquierda y a la derecha, subir, bajar líneas, duplicar líneas, completar, insertar código, etc.

Estas herramientas pueden utilizarse para generar patrones repetitivos de código en funciones.


Refactorizaci n5

Refactorización

Para la reestructuración de códigos se pueden seguir convenciones ya definidas las más importantes son la notación húngara y la notación de camello.

La notación húngara fue creada por Charles Simonyi de Microsoft, el cual es húngaro y por eso recibió ese nombre.


Notaci n h ngara

Notación Húngara

Es un método ampliamente usado sobre todo para convención de nombres de variables.

Consiste en tener variables autodocumentadas agregando un prefijo de tres caracteres o menos para indicar su tipo.

Las abreviaturas de los tipos de datos puede variar dependiendo del lenguaje de programación.


Notaci n h ngara1

Notación Húngara


Notaci n h ngara2

Notación húngara

int nTest;

long lTemp;

char *szString = "Prueba";

struct Rect srRect;

int nMiVariableEjemplo;

char szEjemploString;

int NNOMBREINVALIDO;

int nNombre_Incorrecto;


Notaci n h ngara3

Notación Húngara

Las funciones o subrutinas no se les agrega abreviaciones, se recomiendan tengan un nombre descriptivo.

Los nombres de las clases van en mayúsculas.

Se pueden tener nuevos tipos de datos sólo se deben de poner las nuevas nomenclaturas.


Notaci n de camello

Notación de Camello

Es la utilizada por Java y herramientas afines. Su uso está creciendo en popularidad mientras que la notación húngara va en desuso.

Su principal característica consiste en que no separa nombres de identificadores (variables, métodos, objetos) con “_” para palabras compuestas.


Notaci n de camello1

Notación de Camello

Los identificadores tienen la forma de la joroba de un camello. No se indican tipos de datos. Sigue respetando mucho de la Notación C.

Los métodos inician en minúsculas y si hay una palabra compuesta esta inicia con mayúscula dando la apariencia de una joroba.


Notaci n camello

Notación Camello

Las clases inician con mayúscula siguiendo el mismo método.

Los métodos para acceder a atributos de las clases no públicos deben llamarse por convención set y get.


Reutilizaci n

Reutilización

El reuso es una de las técnicas de resolución de problemas que más utilizamos los humanos. De hecho es lo primero que verifica nuestro cerebro.

El reuso en software nos ayuda a mejorar la producción y calidad del software al “no reinventar la rueda”.


Reuso

Reuso

El reuso nos permite afrontar los grandes proyectos de software sin mayores complicaciones. Desafortunadamente no todo se puede reutilizar.

La reutilización es la propiedad de utilizarconocimiento, procesos, metodologías o componentes de software ya existente para adaptarlo a una nueva necesidad, incrementando significativamente la calidad y productividad del desarrollo.


Reutilizaci n1

Reutilización

La reutilización puede ser composicional,generativa y adapativa.

Es composicional cuando se orienta al reuso del producto. Puede ser de caja blanca (si nos interesa modificar el comportamiento), caja negra (cuando no se puede modificar el comportamiento) y adaptativo cuando es una mezcla de ambos.


Reutilizaci n2

Reutilización

La reutilización por generación se da cuando se utilizan esfuerzos previos del desarrollo de software.

Para que un objeto pueda ser reusable se necesita de un alto nivel de abstracción. Entre mayor es su nivel de abstracción, mayor es su nivel de reuso.


Reuso1

Reuso

Tipos de reuso:

Código reciclado: utilizar parte del código definido en otros proyectos.

Componentes de código: consiste en utilizar módulos, clases, APIs, etc.

Esquemas: DFD, DiagramasUML.


Reuso2

Reuso

Frameworks: Solución integrada para la resolución de problemas en un contexto particular. Se pueden utilizar patrones de diseño. Un ejemplo de Framework es .NET

Las etapas del proceso de reuso son:

Adquisición del requerimiento.


Reuso3

Reuso

  • Búsqueda y Recuperación

    • Recuperación por Palabras Claves

    • Recuperación Basada en la Estructura

    • Recuperación Enumerada

  • Identificación

  • Adecuación


Reingenier a del software

Reingeniería del Software

Sucede que si una aplicación necesita ser modificada constantemente y no tiene una metodología de seguimiento del desarrollo del proyecto, la modificación del software se vuelve sumamente complicada.

El mantenimiento de software en algunos casos puede llegar a ser del 60% del total de costos del proyecto.


Reingenier a del software1

Reingeniería del Software

Aún cuando un software se haya desarrollado con la mejor metodología de software tendrá que ser modificado en un futuro por algún motivo, debido a que lo único constante es el cambio.

Los tipos de mantenimiento de Software son: correctivo, adaptativo, mejoras o mantenimiento de perfeccionamiento, mantenimiento preventivo o reingeniería.


Reingenier a del software2

Reingeniería del Software

El 80% del tiempo del desarrollo del software se ocupa en la adaptación del software a su ambiente externo.

La reingeniería de software es costosa y consumidora de tiempo.

La reingeniería es una actividad de reconstrucción, preferible de realizar antes de que se “derrumbe” la obra.


Reingenier a de software

Reingeniería de Software

Antes de derribar una casa, quizás se necesita corroborar que está mal.

La reingeniería es un proceso que altera los elementos internos de toda obra, no es una sola remodelación de la fallada.

Generalmente se siguen los siguientes pasos para aplicar reingeniería:


Reingenier a de software1

Reingeniería de Software

Análisis de Inventario

Reestructuración de Documentos

INGENIERÍA INVERSA

Reestructuración de Códigos

Reestructuración de Datos

Ingeniería directa


Ingenier a inversa

Ingeniería Inversa

Se aplica para obtener un modelo detallado de análisis, ingeniería de requerimientos, diseño y en algunos casos implementación teniendo una solución, la cual es una actividad consumidora de tiempo.

Tanto la Ingeniería Inversa como la Reingeniería en la mayoría de las licencias de Software se encuentran penadas por la ley.


Javadoc

Javadoc

Es el estándar para crear documentación para los proyectos en Java.

Es una herramienta estándar del JDK de Sun Microsystem. Crea documentación en HTML y casi cualquier IDE lo hace.

Se deben utilizar los comentarios especiales /** …..*/ con algunas palabras clave para determinar la documentación.


Javadoc1

Javadoc

Las palabras clave inician con una arroba.

Se puede incrustar cualquier etiqueta de HTML para hacer más visible la documentación.

@author nombre_desarrollador

@deprecated descripción //indica un método que no se utiliza su uso


Javadoc2

Javadoc

@param nombre descripción

@return descripción //no se debe utilizar con métodos void.

@see referencia //asocia con otro elemento el cual puede ser: #método(); clase#método(); paquete#método(); paquete.clase#método().

@throws clase descripcion

@version versión


Javadoc3

Javadoc

La documentación se crea de la siguiente forma: javadoc archivo.java

En NetBeans se puede encontrar la opción en el menú Build en la opción Generate JavaDocfor …

Se recomienda realizar tanto el código como las clases en inglés.


Javadoc4

Javadoc

/**

* Thrown to indicate that the application has attempted to convert

* a string to one of the numeric types, but that the string does not

* have the appropriate format. *

* @author unascribed

* @version 1.16, 02/02/00

* @see java.lang.Integer#toString()


Javadoc5

Javadoc

* @since JDK1.0

*/

public class NumberFormatException extends IllegalArgumentException {

/**

* Constructs a <code> NumberFormatException </code> with no detail message.

*/

public NumberFormatException () { super(); }


Javadoc6

Javadoc

/**

* Constructs a <code> NumberFormatException </code> with the

* specified detail message.

* @param s the detail message.

*/

public NumberFormatException (String s) { super (s); } }


Ofuscaci n

Ofuscación

La ofuscación es una técnica avanzada de refactorización que permite a un código mantenerle obscuro (es decir no muy legible) con diversos propósitos de optimización.

¿Para que se hace ofuscación?

¿No viola esto el principio de claridad en la implantación?


Ofuscaci n1

Ofuscación

La ofuscación se realiza en muchas casos para hacer un código ilegible, también en muchos casos se puede reducir el tamaño del código fuente y del código binario realizado.

Al realizar cualquier tipo de programa se puede aplicar técnicas de reingeniería como la ingeniería inversa para de un código binario tratar de obtener su código fuente.


Ofuscaci n2

Ofuscación

En mucho tipos de aplicaciones como las aplicaciones móviles se ofusca el código objeto generado para obtener un código más pequeño.

Un programa puede ser fácilmente decompilable, por este motivo se ofusca con la premisa de que si esto llegará ocurrir, el que lo hiciera le costaría mucho trabajo entender el programa y modificarlo.


Ofuscaci n3

Ofuscación

En el caso de programas ejecutables (.exe) es mucho más difícil obtener un código en lenguaje de alto nivel, dado que el proceso de decompilación deja sus resultados en ensamblador y por lo tanto es necesario saber como el compilador ensambla cada línea de código. Por este motivo muchas empresas grandes del sector informático realizan sus proyectos en sus propios compiladores.


Ofuscaci n4

Ofuscación

Actualmente la ofuscación se emplea más en la ofuscación de código dinámico, dado que aquí es muy importante tanto el tamaño del código como la legibilidad de este, tal es el caso de HTML.

La ofuscación si bien es cierto viola principios de buena prácticas de Ing. de Software, se realiza con un propósito específico hasta el final del proceso.


Ofuscaci n5

Ofuscación

En algunos casos la ofuscación se logra simplemente refactorizando el nombre de las variables pero en muchos casos esto no sirve.

Para lograr la ofuscación se deberá modificar el flujo del programa de tal forma que menos instrucciones o en algunos casos más instrucciones deben de realizar el mismo programa.


Ofuscaci n6

Ofuscación

En algunos casos resulta que ofuscar el código puede ser que el tamaño del código fuente y del programa aumente, debido a que es común que las variables tengan nombres muy grandes o bien se incluyan instrucciones extras, se descompongan ciclos, se cambien y mapeen estructuras, etc.

Existen concursos de ofuscación de código


Ofuscaci n7

Ofuscación


Sockets java

Sockets Java

Java es un lenguaje multiplataforma que al igual que otros lenguajes de programación tiene APIs para la comunicación de procesos remotos.

La ventaja de utilizar sockets en Java con respecto a su contraparte en C, radica en que Java enmascara la complejidad de los procesos en clases más simples.


Sockets java1

Sockets Java

  • Para utilizar sockets y clases similares se necesita utilizar el paquete java.net.*;

  • Se pueden utilizar clases específicas para conectarse a servicios de red determinados como http, ftp, entre otros.

    //Servidor usando sockets stream

    ServerSocket ss = new ServerSocket(5000, 100);


Servidor stream

Servidor Stream

Socket con = ss.accept();

OutputStream sal = con.getOutputStream();

String s = new String(“ITMorelia\n”);

for(int i=0; i < s.length(); i++)

sal.write((int) s.charAt(i));

Conection.close();


Cliente stream

Cliente stream

Socket c = new Socket(InetAddress.getLocalHost(), 5000);

InputStream entrada = c.getInputStream();

char c;

while((c = (char) entrada.read()) != ‘\n’)

System.out.println(String.valueOf(c));


Servidor datagramas

Servidor datagramas

try {

DatagramSocket sS = new DatagramSocket();

DatagramSocket rS = new DatagramSocket( 5000);

} catch(SocketException SE) {

SE.printStackTrace();

System.exit(1);

}


Servidor datagramas1

Servidor datagramas

byte a = new byte [100];

DatagramPacket rP = new DatagramPacket( a, a.length);

rS.receive(rP);

System.out.println(“Dirección:” + rP.getAddress() + “ Puerto” + rP.getPort + “ longitud:” +rP.getLength());


Servidor datagramas2

Servidor datagramas

byte d[] = rP.getData();

sP = new DatagramPacket(d, d.length, rP.getAddress(), 5001);

sS.send(sendPacket);

InetAddress comp = InetAddress.getByName(“www.itc.edu.mx”);


Sockets java2

Sockets Java

  • Otras excepciones que se pueden capturar:

  • UnknownHostException

  • EOFException

  • ConnectException


Sockets en java

Sockets en Java

  • Se recomienda la utilización en las nuevas versiones de Java de los flujos ObjectInputStream y ObjectOutputStream, los cuales son serializables.

  • El cierre de los flujos debe hacerse en orden inverso de cómo se crearon.

  • Se pueden cambiar algunas opciones de configuración como s.setSoTimeout(5000); //Tiempo de interrupción de lectura.


Sockets java3

Sockets Java

  • También se recomienda el uso de un objeto PrintWriter para manejar de mejor forma la escritura a través de un socket.

    PrintWriter escritor = new PrintWriter(socket.getOutputSream());

    escritor.println(“Mensaje: ” +mensaje);

    escritor.flush();


Sockets java4

Sockets Java

  • También se puede utilizar un objeto Scanner para leer desde un socket.

    Socket s = new Socket(“time-A.timefreq.bldrdoc.gov”, 13);

    InputStream e = s.getInputStream();

    Scanner in = new Scanner(e);

    while(in.hasNextLine()) {

    String l =in.nextLine(); System.out.println(l);

    }


2 1 2 rpc

2.1.2 RPC

  • Las llamadas a procedimientos remotos (RPC) fue el primer intento por obtener un middleware para la construcción de sistemas distribuidos.

  • Su funcionamiento se basa en la arquitectura cliente/servidor siendo totalmente transparente para el usuario.


Programaci n orientada a ojetos

RPC

El problema del manejo de procesos distribuidos con sockets radica en que se basa en el flujo de E/S, haciendo los programas más difíciles de estructurar.

En 1984 Birelly y Nelson idearon el modelo de RPC a semejanza del llamado de procedimientos locales (LPC).


Programaci n orientada a ojetos

RPC

El nivel de transparencia en RPC es muy alto ya que el usuario no tiene que ver con detalles de conexión.

La simplicidad de toda esta heterogeneidad en el llamado a un procedimiento remoto es realizado por los stubs (resguardos) tanto en el cliente como en el servidor.


Programaci n orientada a ojetos

RPC

Para la transferencia de datos entre los stubs, se necesita de un proceso de empacar desempacar los parámetros y resultados. Dicho proceso recibe el nombre de marshalling.

Los stubs se comunican con los núcleos de cada proceso logrando una transparencia muy alta.


Programaci n orientada a ojetos

RPC

  • La secuencia de mensajes RPC es la siguiente:

  • El procedimiento cliente llama al stub del cliente de la manera usual.

  • El stub del cliente construye un mensaje y hace un señalamiento al núcleo.

  • El núcleo envía el mensaje al núcleo remoto.


Programaci n orientada a ojetos

RPC

  • El núcleo remoto proporciona el mensaje al stub del servidor.

  • El stub del servidor desempaca los parámetros y llama al servidor.

  • El servidor realiza el trabajo y regresa el resultado al stub.

  • El stub del servidor empaca el resultado en un mensaje y hace un señalamiento al núcleo.


Programaci n orientada a ojetos

RPC

  • El núcleo remoto envía el mensaje al núcleo del cliente.

  • El núcleo del cliente da el mensaje al stub del cliente.

  • El stub desempaca el resultado y lo regresa al cliente.

  • El manejo de los datos se hace a través de XDR (eXternal Data Representation).


Programaci n orientada a ojetos

RPC

Para el envío de datos se utiliza la siguiente forma canónica: Complemento a 2 los enteros, ASCII caracteres, 0 (falso) y 1 verdadero, formato IEEE decimales, todo guardado como little endian.

En la práctica RPC no es lo mismo que un procedimiento local a la hora de revisar los mecanismos de fallas.


Programaci n orientada a ojetos

RPC

  • La semántica de fallas de RPC es la siguiente:

  • El cliente no puede localizar al servidor.

  • Se pierde el mensaje de solicitud del cliente al servidor

  • Se pierde el mensaje de respuestas del servidor al cliente.

  • El servidor falla antes de recibir una solicitud.


Programaci n orientada a ojetos

RPC

  • El cliente falla después de enviar una solicitud.

  • En general existen diversas implementaciones de RPC, siendo las más extendidas sobre TCP/IP, la cual tiene los siguientes puntos a favor:

  • El protocolo ya ha sido diseñado, lo que ahorra trabajo considerable.


Programaci n orientada a ojetos

RPC

Se dispone de muchas implementaciones.

Esta disponible en casi cualquier sistema Unix.

Tanto TCP como UDP están soportados por muchas redes.

Las implementaciones más evolucionadas de RPC incluye la de Sun ONC (Open Network Computing) y DCE (Distributed Computing Environmet).


Programaci n orientada a ojetos

RPC

RPC está desarrollado en C, pero algunas versiones permiten programar en otros lenguajes como Fortran. Las implementaciones más actuales trabajan sobre XML formando los XML-RPC.

Para la conexión entre un cliente y un servidor utilizando RPC se siguen dos pasos: localizar la máquina servidor, y localizar el proceso en esa máquina.


Programaci n orientada a ojetos

RPC

Para encontrar dichos servicios se necesita de un demonio RPC que se encuentre monitoreando todos los procesos remotos, dicho proceso se llama portmap , el cual escucha en el puerto 111.

Muchos servicios de red utilizan RPC para funcionar, entre ellos NFS, el cual es un sistema de archivos distribuidos.


Programaci n orientada a ojetos

RPC

  • Un programa en RPC se crea a través de un lenguaje de definición de interfaces (IDL por sus siglas en Inglés). Tiene la extension .X

    program RAND_PROG {

    version RAND_VER {

    void INICIALIZA_RANDOM(long) =1;

    doble OBTEN_SIG_RANDOM(void) = 2;

    } =1; /*No. de version*/

    } = 0x31111111; /*No. de programa*/


Programaci n orientada a ojetos

RPC

  • rpcgen -c -a rand.x

  • rand_server.c servidor

  • rand_svc.c stub del servidor (no se modifica)

  • rand.h cabeceras

  • rand_clnt.c stub del cliente (no se modifica)

  • rand_client.c cliente

  • rand_xdr.c manejo de estructuras


Programaci n orientada a ojetos

RPC

  • 00000000-1FFFFFFF Definidos por sun

  • 20000000-3FFFFFFF Definidos por el usuario

  • 40000000-5FFFFFFF Transitorios

  • 60000000-FFFFFFFF Reservados para usos futuros

  • rpcinfo -s

  • portmap


Programaci n orientada a ojetos

RPC

const MAX = 100;

typedef int Longitud;

struct argumentos {

float salario;

Longitud tam;

};

  • Sólo se puede recibir y enviar un parámetro.


Programaci n orientada a ojetos

RPC

Existen nuevas propuestas para mejorar el desempeño de RPC como RPC2 que maneja UDP. También se han diseñado mecanismos como MultiRPC para el manejo de RPCs en paralelos. Existen otras alternativas como LRPC (RPC ligeros) que se basan en optimizaciones de la copia de datos y de la planificación de los hilos.

RPC está definido en el RFC 1831.


Programaci n orientada a ojetos

RMI

La invocación de métodos remotos es la versión orientada a objetos de la filosofía RPC.

Los programas realizados en Java deben heredar de la clase remote.

A la hora de ejecutar se deben indicar las políticas de seguridad. Esto se hace a través del parámetro -D de java


Programaci n orientada a ojetos

RMI

java -Djava.security.policy=politica prg

  • Los archivos de stub se generan con el comando rmic -d . Prg

  • El primer paso consiste en inicializar el rmiregistry (similar al portmapper en RPC)


Programaci n orientada a ojetos

RMI

Al proxy en el lado cliente se le llama stub, mientrás que en el servidor se le llama skeleton.

Se cuenta con la primitiva invoke(objeto, método, param_entrada, param_salida);

Se necesita de un proceso enlazador (binder) que una a un cliente con el objeto remoto.


Programaci n orientada a ojetos

RMI

import java.rmi.*;

import java.util.Vector;

public interface Forma extends Remote {

int dameVersion() throws RemoteException;

GraphicObject dameTodoEstado() throws RemoteException;

}


Programaci n orientada a ojetos

RMI

public interface ListaForma extends Remote {

Forma nuevaForma(GraphicObject g) throws RemoteException;

Vector todasFormas() throws RemoteException;

int dameVersion() throws ReomteException;

}


Programaci n orientada a ojetos

RMI

//Sirviente ListaForm

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

import java.util.Vector;

public class SirvienteListaForma extends UnicastRemoteObject implements ListaForma {

private Vector laLista;

private int version;


Programaci n orientada a ojetos

RMI

public SirvienteListaForma() thorws RemoteException {;}

public Forma nuevaForma(GraphicObject g) thorws RemoteException {

version++;

Forma s = new SirvienteForma(g, version);

laLista.addElement(s);

return s; //implementar los demás métodos

}

}


Programaci n orientada a ojetos

RMI

Para acceder al enlazador (RMIRegistry) se utilizan métodos de la clase Naming, utilizando las siguiente URI:

rmi://nombrecompu:puerto/nombreObjeto

Los clientes deben hacer consultas (lookup) a computadoras concretas. Otros métodos son: rebind(), bind(), unbind() y list().


Programaci n orientada a ojetos

RMI

//Programa servidor

public class ServidorListaForma {

public void main(String args[]){

System.setSecurityManager(new RMISecurityManager());

try {

ListaForma unaListaForma = new SirvienteListaForma();


Programaci n orientada a ojetos

RMI

Naming.rebind(“Lista Forma”, unaListaForma);

System.out.println(“Servidor de ListaForm Listo”);

} catch (Exception e) {

System.out.println(“Error: ” +e.getMessage());

}

}

}


Programaci n orientada a ojetos

RMI

//Cliente

import java.rmi.*;

import java.rmi.server.*;

import java.util.Vector;

public class ClienteListaForma {

public static void main(String args[]) {

System.setSecurityManager(new RMISecurityManager());

ListaForma unaListaForma = null;


Programaci n orientada a ojetos

RMI

try {

unaListaForma = (ListaForma) Naming.lookup(//jcolivares.ListaForma);

Vector sLista = unaListaForma.todasFormas();

} catch(RemoteException e) { System.out.println(e.getMessage()); }

catch (Exception e) { ;}

}

}


Programaci n orientada a ojetos

RMI

  • El marshalling se hace en formato Big-endian.

  • Jerarquía de clases en RMI:

  • Object --> RemoteObject (Remote) --> RemoteStub, RemoteServer (UnicastRemoteObject)

  • El puerto por el cual escucha el RMI es el 1099 (rmi://localhost:1099/Objeto)


Programaci n orientada a ojetos

RMI

  • Ejemplo de archivo de política de seguridad:

    grant {

    permission java.net.SocketPermission

    “*:1024-65535”, “connect”;

    permission java.io.FilePermission

    “directorio”, “read”;

    permission java.security.AllPermission;

    };


Corba

CORBA

Common Object Request Broker Architecture

Es un middleware para la construcción de sistemas distribuidos utilizando el paradigma de programación orientada a objetos.

Una de las principales ventajas de CORBA es que cada uno de los componentes de CORBA se pueden implementar en una gran variedad de lenguajes.


Corba1

CORBA

//Ejemplo de IDL en CORBA

struct Persona {

string nombre;

long año;

};

interface ListaPersonas {

void añadePersona(in Persona p);

long damePersona(in string nombre, out Persona p);

};


Corba2

CORBA

  • CORBA maneja un modelo asíncrono de comunicación, aunque también se puede manejar un esquema de polling.

  • CORBA utiliza muchas tecnologías estandarizadas como IOR (Interoperable Object Reference), IIOP(Internet Inter ORB Protocol), ORB (Object Request Broker Architecture), entre otras.


Corba3

CORBA

  • CORBA es una arquitectura genérica, de tal forma que otras tecnologías de objetos como RMI se pueden ejecutar a través de IIOP.

  • CORBA está basado en una arquitectura de cuatro capas con proxys en el lado cliente y servidor.


Corba4

CORBA

  • Para realizar objetos remotos en Java se utiliza el Java IDL, el cual está incluido en las diferentes versiones de JDK.

  • Las interfaces de los objetos remotos se hacen a través del IDL de CORBA.

    interface Produto {

    string getDescripcion();

    }


Corba5

CORBA

  • El compilador de IDL a Java se llama idlj o idltojava en versiones antiguas:

  • idlj Producto.idl

  • public interface Producto extends org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity


Corba6

CORBA

  • Los parámetros de los métodos pueden ser in, out, inout. Los parámetros in son por valor, out referencia, inout referencia con valor inicial.

  • En Java no existen las referencias por lo que se simulan (clases holder).

  • IDL no soporta sobrecarga de métodos.


Corba7

CORBA

  • La palabra clave atrribute de IDL hace referencia a métodos set y get

    module Aplicación {

    interface producto {

    attribute string isbn;

    };

    interface Almacen { …};

    };


Corba8

CORBA

  • Al ejecutar idlj Producto.idl se crean:

  • Producto.java //definición interfaz

  • ProductoHolder.java //clase contenedor parametros out

  • ProductHelper.java // Clase auxiliar

  • _ProductStub.java //Stub con el ORB


Corba9

CORBA

El mismo ILDL se puede compilar en C++ haciendo uso de la herramienta omniORB, el cual se ejecuta: omniidl –bcxx Producto.idl

El cual genera:

Producto.hh: Producto, Producto_Helper, y POA_Producto

ProductoSK.cc implementación


Corba10

CORBA

  • Para ejecutar el servicio de nombres se corre el programa tnameserv (depreciado) o el orbd con el parámetro –ORBInitialPort 2809

    import org.omg. CosNaming.*;

    import org.omg.CORBA.*;

    public class EntCliente {

    public static void main(String args[]) {

    try {


Corba11

CORBA

ORB orb = ORB.init(args, null);

org.omg.CORBA.Object n = orb.resolve_initial_references(“NameService”);

NamingContext contexto = NamingContextHelper.narrow(n);

NameComponent[] ruta = { new NameComponent(“principal”, “Context”), new NameComponent(“Objeto”, “Object”)};


Corba12

CORBA

org.omg.CORBA.Object obj = contexto.resolve(ruta);

Obj o = ObjHelper.narrow(obj);

System.out.println(o.getenv(“PATH”));

} catch (Exception e) {

e.printStackTrace();

}

}

}


Corba13

CORBA

  • Para implementar servidor CORBA en java se debe ejecutar idlj –fall archivo.idl

    import org.omg.CosNaming.*;

    import org.omg.CORBA.*;

    import org.omg.PortableServer.*;

    public class SysPropImpl extends SysPropPOA {

    public String getProperty(String clave) {


Corba14

CORBA

return System.getProperty(clave);

}

}

public class ServidorPropSis {

public static void main(String args[]) {

try {

ORB orb = ORB.init(args, null);

POA poaraiz = (POA) orb.resolve_initial_references(“RootPOA”);


Corba15

CORBA

poaraiz.the_POAManager().activate();

SysPropImpl impl = new SysPropImpl();

org.omg.CORBA.Object ref = poa.raiz.servant_to_reference(impl);

org.omg.CORBA.Object objContDenom = orb.resolve_initial_references(“NameService”);

NamingContext contexto = NamingContextHelper.narrow(objContDenom);


Corba16

CORBA

NameComponent[] ruta = { new NameComponent(“SysProp”, “Object”)};

Contexto.rebind(ruta, ref);

orb.run();

} catch (Exception e) {

e.printStackTrace(System.out);

}

}

}


Modelo de servicios web

Modelo de servicios Web

XML

Dispositivos

móviles

Clientes

ricos

Browsers

estándar

Otros

servicios

Servicios Web

Formularios Web

Lógica aplicación

Servicios SO


Servicios web

Servicios Web

Los servicios Web van de la mano de las tecnologías XML.

XML nos sirve para estandarizar el marshalling de los datos.

Utilizar la Web nos permite tener un puerto no bloqueando por Firewall


Servicios web1

Servicios Web

Son la invocación de código remoto utilizando protocolos estandarizados.

En conclusión, realizan la misma función que los sockets, RPC, RMI, Corba y demás tecnologías distribuidas.

Se puede ver a los servicios Web como una analogía de un procedimiento almacenado en una base de datos.


Qu son los servicios web

¿Qué son los Servicios Web?

  • "A Web service is a software system designed to support interoperablemachine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP-messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards."


Definici n de sw

Definición de SW

  • La aplicación que actúa como cliente debe conocer:

    • La URL del servidor remoto que ofrece el servicio,

    • El nombre del servicio que se solicita, y

    • Los parámetros que se deben enviar junto con la llamada al servicio.

  • Estos datos se enviarán mediante HTTP


Definici n de sw1

Definición de SW

  • El servidor que ofrece el servicio web leerá los parámetros que se le han enviado, llamará a un componente o programa encargado de implementar el servicio, y los resultados que se obtengan de su ejecución serán devueltos al servidor que solicitó la ejecución del servicio.


Servicios web2

Servicios Web

Un servicio Web no es un XML RPC como tal, se diferencia en la forma en que trabajan.

Los servicios Web forman la base de la arquitectura orientada a servicios (SOA)

Los servicio Web utilizan generalmente el método POST de HTTP para enviar los datos de la invocación del servicio.


Soa arquitectura orientada a servicios

SOA (Arquitectura Orientada a Servicios)

Proveedor de Servicios

Servicio

Conectar

Publicar

Solicitante de Servicio

Registro de Servicios

Encontrar

Descripción

Cliente


Servicios web3

Servicios Web

Los datos viajan envueltos en un protocolo llamado SOAP (Simple Object Access Protcol) que hace el marshalling de los datos.

Una de las principales características que tienen los servicios Web radica en su ubicuidad, ya que pueden ser accedidos desde cualquier sitio, utilizando inclusive cualquier otro protocolo de transporte SMTP, FTP, etc.


Programaci n orientada a ojetos

SOAP

  • Indica cómo se deben codificar los mensajes que circularán entre las dos aplicaciones.

  • SOAP define dos modelos de mensajes:

    • Un mensaje de solicitud.

    • Un mensaje de respuesta.


Mensaje de solicitud

Mensaje de solicitud

<?xml version="1.0" encoding="UTF-8" ?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Header>

</SOAP-ENV:Header>

<SOAP-ENV:Body>

<catalogo:buscaIsbn xmlns:catalogo="http://catalogo.org/cat">

<catalogo:isbn>

84-4553-3334-2X

</catalogo:isbn>

</catalogo:buscaIsbn>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>


Mensaje de respuesta

Mensaje de respuesta

<?xml version="1.0" encoding="UTF-8" ?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Header>

</SOAP-ENV:Header>

<SOAP-ENV:Body>

<catalogo:buscaIsbnResponse xmlns:catalogo="http://catalogo.org/cat">

<catalogo:titulo>

Catalogar materiales especiales

</catalogo:titulo>

<catalogo:autor>Marta de Juanes</catalogo:autor>

</catalogo:buscaIsbnResponse>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>


Servicios web4

Servicios Web

  • Los servicios Web necesitan ser descritos (saber que parámetros reciben, devuelven) para poderlos utilizar en diversos clientes. Esta descripción se realiza a través de WSDL (Web Service Definition Language).

  • Generalmente esas descripciones los clientes las conocen o bien, puede descubrirlas haciendo uso de UDDI (Universal Description, Discovery and Integration).


Servicios web5

Servicios Web

  • La UDDI no es otra cosa que un repositorio en donde se almacenan servicios Web que pueden ser invocados por diversos clientes.

  • Muchas empresas ofrecen servicios Web como amazon, google, http://www.xmethods.com


Por qu utilizar servicios web

¿Por qué utilizar Servicios Web?

  • Múltiples tecnologías para hacer lo mismo:

    • No interoperables entre sí.

    • Ligados a una plataforma.

DCOM

CORBA

Java RMI

Protocolo

RPC

IIOP

IIOP or JRMP

Formato del mensaje

NDR

CDR

Java Ser. Format

Descripción

IDL

OMG IDL

Java

Descubrimiento

Windows Registry

Naming Service

RMI Registry or JNDI


Pila de protocolos de sw

Pila de protocolos de SW

  • Redefinición de toda la pila de comunicaciones

    • Basado en tecnologías estándares

Servicio web

Protocolo

HTTP

Formato del mensaje

SOAP

Descripción

WSDL

Descubrimiento

UDDI


Ventajas de los servicios web

Ventajas de los Servicios Web

  • Basados en estándares.

    • Fácil integración.

  • Desarrollo de actividades modularizadas.

  • Independencia de plataforma.

  • Puede ser usado tanto en clientes ligeros como pesados (clientes heterogéneos).


Desventajas de los servicios web

Desventajas de los Servicios Web

  • Es que no son seguros...

  • Es que no tienen estado...

  • Es que no son transaccionales...

  • “Los servicios Web no hacen más que reinventar la rueda, pero esta vez usando XML”.


Protocolos servicios web

Protocolos Servicios Web

Publicar, buscar servicios: UDDI

Descripción de servicios:WSDL

Interacción de servicios:SOAP

Formato de datos universal:XML

Comunicaciones ubicuas: Internet


Creando servicios web

Creando Servicios Web

  • Los servicios Web XML se exponen en el Framework .NET como archivos con una extensión .asmx.

  • Los servicios se pueden consumir a través de páginas Web, clientes ligeros en una PC o clientes inteligentes en dispositivos móviles.


Hola mundo

Hola mundo!!!

<%@ WebService Language="C#“ class="Helloweb" %>

using System.Web.Services;

[WebService (Namespace="http://sybex.com/webservices")]

public class Helloweb: WebService{

[WebMethod]

public string HelloWebService() {

return "Holla Mundo!";

}


Otro servicio web

Otro servicio Web

<%@ WebService Language="C#" class="Fibonacci" %>

using System.Web.Services;

public class Fibonacci : WebService{

[WebMethod]

public int GetSeqNumber(int fibIndex){

if (fibIndex < 2)

return fibIndex;

int[] FibArray = {0,1};

for (int i = 1; i< fibIndex; i++){

FibArray[1] = FibArray[0] + FibArray[1];

FibArray[0] = FibArray[1] - FibArray[0];

}

return FibArray[1];

}

}


Cliente del servicio

Cliente del servicio

using System;

class ClienteFecha

{

public static void Main()

{

ServicioFecha s = new ServicioFecha();

Console.WriteLine(“Fecha actual: {0}”, s.Fecha(false));

Console.WriteLine(“Fecha actual detallada: {0}”, s.Fecha(true));

}

}


Cliente de servicio web windows c net

Cliente de servicio Web Windows C# .NET


Agregar referencia web

Agregar referencia Web


Cliente de servicio web en una pocket pc

Cliente de servicio Web en una Pocket PC


P gina web del servicio helloworld

Página Web del Servicio HelloWorld


Respuesta del servicio web par

Respuesta del servicio Web par


P gina web del servicio 1

Página Web del Servicio 1


Wsdl del servicio web 1

WSDL del servicio Web 1


Ejecuci n del servicio web suma

Ejecución del servicio Web suma


Ejecuci n del servicio web par

Ejecución del servicio Web par


Crear proxy del servicio web

Crear proxy del servicio Web


Servicios web6

Servicios Web

Ejemplo de archivo WSDL de amazon

<operation name=“AuthorSearchRequest”/>

<input message=“typens:AuthorSearchRequest”/>

<output message=“typens:AuthorSearchResponse”>

</operation> ….


Servicios web7

Servicios Web

Los tipos de datos se definen en otra parte

<xsd:complexType name=“AuthorRequest”>

<xsd:all>

<xsd:element name=“autor” type=“xsd:string”/>

<xsd:element name=“sort” type=“xsd:string” minOccurs=“0”/>

</xsd:all>

</xsd:complexType>


Servicios web8

Servicios Web

  • Cuando se traduce a Java queda:

    public class AuthorRequest {

    public AuthorRequest(String author, String page, String mode, String tag, String sort, String locale, String word, String price) {…}

    public String getAuthor() {…}

    public String getPage() {…} ….

    }


Servicios web9

Servicios Web

Para ejecutar el servicio se utiliza:

AmazonSearchPort puerto = (AmazonSearchPort) (new AmazonSearchService_Impl().getAmazonSearchPort());

AuthorRequest solicitud = new AuthorRequest(name, “1”, books, “”, “lite”, “”, token, “”, “”, “”);

ProductInfo res= puerto.autorSearchRequest(solicitud);


Servicios web10

Servicios Web

  • Se ocupa en las versiones viejas el JWSDP (Java Web Service Developer Pack)

  • Se necesita un archivo config.xml

    <?xml version=“1.0” encoding=“UTF-8”?>

    <configuration xmlns=http://java.sun.com/xml/ns/jax-rpc/ri/config>


Servicios web11

Servicios Web

<wsdl location=“http://soap.amazon.com/schemas3/AmazonWebServices.wsdl” packageName=“com.amazon” />

</configuration>

wscompile –import config.xml

wscompile –gen –keep config.xml


Referencias

Referencias

Liberty, Jesse, Horvarth, David (200). Aprendiendo C++ para Linux en 21 Días. México, Prentice Hall.

Márquez, Francisco (1994). Unix Programación Avanzada. Estados Unidos, Addison-Wesley.


Referencias1

Referencias

  • Colouris, George, Dollimore, Jean, Kindberg, Tim (2001). Sistemas Distribuidos Conceptos y Diseño. 3a. Edición. España, Pearson Addison-Wesley.

  • Horstmann, Cay, Cornell, Gary (2006). Core Java 2 Volumen II Carácterísticas Avanzadas. España, Perason Prentice Hall.


Referencias2

Referencias

  • Deitel, Harvey, Deitel, Paul (2004). Java Como Programar. Quinta Edición. México, Pearson Prentice Hall.

  • Márquez, Francisco (2004). UNIX Programación Avanzada. Tercera edición, México, Alfaomega Ra-Ma.


Referencias3

Referencias

  • Froufe, Agustín, Jorge, Patricia (2004). J2ME Java 2 Micro Edition Manual de usuario y tutorial. México, Alfaomega.

  • Firtman, Maximiliano (2004). Programación de celulares con Java. Argentina, MP Ediciones.

  • Ruíz, Diego (2005). C# La guía total del programador. Argentina, MP Ediciones.


Referencias4

Referencias

  • Tanenbaum, Andrew (2002). Redes de computadoras. Cuarta edición. México, Pearson.

  • Wigley, Andy, Wheelwright, Stephen (2003). Microsoft .NET Compact Framework. Estados Unidos, Microsoft Press.

  • Ferreira, R. (2009), Material del Curso de Sistemas Distribuidos I, Instituto Tecnológico de Morelia, México.


Referencias5

Referencias

  • Makofsky, Steve (2004). Pocket PC Network Programming. Estados Unidos, Addison-Wesley.

  • Wall, Kurt (2000). Programación en Linux. Perú, Prentice Hall.

  • Gregory, Kate (1999). Microsoft Visual C++ 6. España, Prentice-Hall Que.


Referencias6

Referencias

Tanenbaum, Andrew (1996). Sistemas Operativos Distribuidos. México, Prentice Hall.

Tanenbaum, Andrew, Van Steen, Maarten (2006). Distributed Systems Principles and Paradigms. Estados Unidos, Pearson Prentice Hall.

Morales, F. (2009), Material del Curso de Sistemas Distribuidos II, ITM, México.


Referencias7

Referencias

Vázquez, Adolfo (2002). XML. México, Alfaomega Ra-Ma.

R. Pressman, “Ingeniería del Software”, 5ª. Edición, McGraw-Hiil, España, 2002.

R. Johnsonbaug, Matemáticas Discretas, 4a. Edición, Prentice Hall, México, 1999, ISBN: 970-17-0253-0.


Referencias8

Referencias

R. Orfali, et al., “Cliente/servidor y objetos. Guía de supervivencia”, tercera edición, Oxford University Press, México, 2002, ISBN: 970-613-597-9.

W. Inmor, “Developing Client/Sever Applications”, Wiley, Estados Unidos, 2003, ISBN: 0-471-56906-2.


Referencias9

Referencias

D. Dewire, “Client/Server Computing”, McGraw-Hill, Estados Unidos, 1993, ISBN: 0-07-016732-X.

W. Marion, “Client/Server Strategies”, McGraw-Hill, Estados Unidos, 1994, ISBN: 0-07-040539-5.


Referencias10

Referencias

P. Renaud, “Introduction to Client/Server Systems”, Wiley, Estados Unidos, 1993, ISBN: 0-471-57773-1.

P. Kimmel, “Manual de UML. Guía de aprendizaje”, McGraw-Hill, México, 2006, ISBN: 0-07-226182-X.


Referencias11

Referencias

J. Senn, “Análisis y Diseño de Sistemas de Información”, 2da. Edición, McGraw-Hill, México, 1992, ISBN: 968-422-991-7.

A. Tanenbaum, et al., “Sistemas Operativos. Diseño e implementación”, 2da. Edición, Prentice Hall, México, 1998, ISBN: 970-17-0165-8.


Preguntas dudas y comentarios

¿Preguntas, dudas y comentarios?


  • Login