Usted está aquí: Inicio web asignaturas

Fichas de asignaturas 2006-07


  CÓDIGO NOMBRE
Asignatura 1713054 PROGRAMACIÓN EN ENTORNOS CLIENTE-SERVIDOR
Titulación 1713 INGENIERÍA EN INFORMÁTICA
Departamento C137 LENGUAJES Y SISTEMAS INFORMATICOS
Curso -  
Duración (A: Anual, 1Q/2Q) 2Q  
Créditos ECTS 4  

Créditos Teóricos 2,5 Créditos Prácticos 2 Tipo Optativa

 

Profesorado
Prof. Coordinador: Antonio J. Tomeu Hardasmal
Prof. de Teoría: Jose M. Rodríguez Corral
Ed. Servicios Generales, 2ª planta.
e-mail: josemaria.rodriguez@uca.es
Prof. de Prácticas: Antonio J. Tomeu Hardasmal
Ed. Servicios Generales, 2ª planta.
e-mail: antonio.tomeu@uca.es
Situación
prerrequisitos
Ninguno.
Contexto dentro de la titulación
La asignatura es optativa y se encuadra en el perfil de segundo ciclo
denominado “Redes, Arquitectura de Computadores y Sistemas Operativos”. A
partir de él, consideramos que el contexto de la asignatura estará formado por
el conjunto de asignaturas restantes que definen el perfil, y dentro de éste,
fundamentalmente por dos: “Administración de Servidores Web” y “Sistemas
Operativos Distribuidos”. Por tanto, durante la presentación de los contenidos
teóricos insistiremos en los posibles nexos de unión que imbrican a los mismos
con aquellos que previsiblemente se analizarán en las asignaturas citadas.
Recomendaciones
Dado que, en virtud de las características específicas de la asignatura
(aprendizaje de nuevas técnicas de programación así como del lenguaje Java),
cada conjunto de nuevos conocimientos y destrezas se apoya en los anteriores,
se le recomienda al alumno

a)La asistencia a clases teóricas y prácticas (que por otra parte es
obligatoria).

b)La lectura preparatoria de los temas concretos del curso, mediante los
documentos que el profesorado indique, con carácter PREVIO a que los temas se
impartan en clase.

c)La realización de ejercicios y guías de prácticas, así como su entrega en
fecha y según los formatos especificados, de acuerdo a las directrices de los
profesores.

d)El uso intensivo del Campus Virtual como herramienta de intercambio de
conocimiento entre alumno y profesor, y entre el grupo de alumnos.

e)Y naturalmente, el estudio y trabajo periódico y continuado sobre los
contenidos del curso.
Competencias
Competencias transversales/genéricas
•  Capacidad de análisis y síntesis
•  Capacidad de organización y planificación
•  Conocimientos de Informática relativos al ámbito de estudio
•  Resolución de problemas
•  Razonamiento crítico
•  Aprendizaje autónomo
•  Creatividad
Competencias específicas
  • Cognitivas(Saber):

    a)Conocer los distintos niveles de programación cliente-servidor
    b)Decidir el nivel adecuando según el problemas de que se trate
    c)Conocer las tecnologías actuales que soportan la programación c/s
    d)Adaptar esas tecnologías a problemas específicos
    e)Diseñar la aplicación que dé soporte a esos problemas
    
  • Procedimentales/Instrumentales(Saber hacer):

    a)Desarrollar programas orientados a objetos bajo lenguaje java
    incluendo compilación, compilación separada, generación automática
    de documentación, y programación estándar.
    b)Desarrollar programas multihebrados, incluyendo cuando sea
    necesario soporte a la exclusión mutua y a la sincronización.
    c)Desarrollar programas clientes y servidores utilizando como
    tecnología de base los sockets de datagrama y los sockets de stream.
    d)Desarrollar programas clientes y servidores utilizando como
    tecnología de base los canales desde una óptica de paso de mensajes.
    e)Desarrollar programas clientes y servidores utilizando como
    tecnología de base Remote Method Invocation, incluyendo
    serialización de objetos y control de las políticas de seguridad.
    f)Desarrollar programas clientes y servidores utilizando como
    tecnología de base CORBA-IDL bajo java, incluyendo soporte BOA y POA.
    g)Conocer los fundamentos básicos de la programación de dispositivos
    móviles bajo J2ME
Objetivos
Considerando la generalización de las redes de comunicaciones, y el auge de
los entornos distribuidos, fundamentalmente en el ámbito de las comunicaciones
móviles, la asignatura debe tener como objetivo principal el dotar al alumno
de los conocimientos teóricos y técnicos necesarios para abordar el desarrollo
de aplicaciones de la naturaleza citada.

Dada la limitación temporal que el número de créditos impone, y la
imposibilidad de garantizar un nivel mínimo de conocimientos a priori sobre el
tema, que sea  común a todos los alumnos que puedan optar por elegir la
asignatura, ésta se diseña como una toma de contacto con el paradigma de la
programación cliente-servidor, que ofrezca al alumno una panorámica
razonablemente amplia sobre el tema, con un nivel de profundidad
necesariamente de grado intermedio. Por tanto, serán objetivos específicos a
cubrir durante el curso los siguientes:

a)Desarrollar programas orientados a objetos bajo lenguaje java
incluyendo compilación, compilación separada, generación automática
de documentación, y programación procedimental estándar.

b)Desarrollar programas multihebrados, incluyendo cuando sea
necesario soporte a la exclusión mutua y a la sincronización.

c)Desarrollar programas clientes y servidores utilizando como
tecnología de base los sockets de datagrama y los sockets de stream.

d)Desarrollar programas clientes y servidores utilizando como
tecnología de base los canales desde una óptica de paso de mensajes.

e)Desarrollar programas clientes y servidores utilizando como
tecnología de base Remote Method Invocation, incluyendo
serialización de objetos, control de las políticas de seguridad, generación
automática de resguardos.

f)Desarrollar programas clientes y servidores utilizando como
tecnología de base CORBA-IDL bajo java, incluyendo soporte BOA y POA.

g)Conocer los fundamentos básicos de la programación de dispositivos
móviles bajo J2ME.
Programa
Programa Teórico

1. Introducción a la Programación Cliente-Servidor (4 horas)
1.1 La era de la tecnología cliente/servidor.
1.2 Conceptos básicos. Características.
1.3 Modelos de dos y tres capas.
1.4 Evolución de la tecnología cliente/servidor.
1.5 Bloques: cliente, servidor y middleware. Canales y plataformas.
1.6 Clientes, servidores y sistemas operativos.

2. Bases Tecnológicas de la Programación Cliente-Servidor (4 horas)
2.1 Introducción.
2.2 Características.
2.2.1 Marshalling de argumentos y resultados.
2.2.1 Tratamiento de excepciones.
2.2.3 Semántica.
2.2.4 Transparencia.
2.2.5 Paquetes de usuario.
2.2.6 Stubs.
2.2.7 Ruta Crítica.
2.3 Definición de interfaz.
2.3.1 Abstracción de datos.
2.3.2 Procesamiento de una definición de interfaz.
2.4 El software de RPC.
2.4.1 Paso de mensajes.
2.4.2 Protocolos de intercambio.
2.4.3 Generación Autómatica de Resguardos.
2.5 RPC en Unix/Linux.
2.5.1 Generalidades.
2.5.2 Generación de Resguardos: rpcgen.
2.5.3 Registro del Servicio.
2.5.4 Ensamblaje de una aplicación completa.


3. Programación Cliente-Servidor de Bajo Nivel: sockets y canales. (4 horas)
3.1 Concepto de socket.
3.1.1 Sockets en C.
3.1.1.1 Dominios y Tipos de sockets.
3.1.1.2 Creación y Supresión de sockets: sys/socket.h
3.1.1.3 Desarrollo del lado del servidor.
3.1.1.4 Desarrollo del lado del cliente.
3.1.2 Introducción a los sockets en Java.
3.1.2.1 La clase ServerSocket.
3.1.2.2 La clase Socket.
3.1.2.3 Programación del cliente con sockets.
3.1.2.4 Programación del servidor sockets.
3.2 Canales: CTJ en Java.
3.2.1 Canales en CTJ.
3.2.2.1 Procesos en CTJ. La interfaz Process.
3.2.2.2 La interfaz Channel.
3.2.2.3 Tipos de Canales.
3.2.2.4 Envío de mensajes con canales en CTJ.
3.2.2.5 Programación del lado del cliente.
3.2.2.6 Programación del lado del servidor.

4. Programación Cliente-Servidor de Nivel Intermedio: RMI. (4 horas)
4.1 RMI vs. RPC.
4.2 El nivel de Interface.
4.2.1 La interfaz Remote.
4.2.2 Escritura e Implementación de la Interface.
4.3 Arquitectura de RMI: Stubs y Skeletons.
4.3.1 Necesidad y Utilidad del Nivel de Stubs.
4.4 Generando resguardos.
4.4.1 La herramientas rmic.
4.5 Registro del servicio: rmiregistry.
4.6 Uso del Objeto Remoto.
4.6.1 La clase java.rmi.Naming;
4.6.2 Registro de Objetos Servidores.
4.6.3 Dinamic Binding desde el Cliente.
4.7 Marshalling de objetos: la interfaz Serializable.
4.8 Seguridad.
4.8.1 La clase RMISecurityManager.
4.8.2 La herramienta policytool.


5 Programación Cliente-Servidor de Alto Nivel: CORBA (5 horas)
5.1 Principios de CORBA.
5.2 CORBA vs. a RMI.
5.2.1 Transparencia de localización.
5.2.1 Transparencia de migración.
5.2.3 Transparencia de activación.
5.3 Arquitectura de CORBA
5.3.1 El modelo OMA de OMG.
5.3.2 Concepto de ORB.
5.3.3 Stub, Skeleton, BOA y POA.
5.3.4 Invocación Estática y Dinámica.
5.3.4.1 Peculiaridades del modelo estático.
5.3.4.2 Peculiaridades del modelo dinámico: almacenes.
5.3.5 Metalenguaje de Definición de Interfaces (IDL).
5.3.6 El Protocolo IIOP.
5.4 Tecnología Java/IDL.
5.4.0 Descripción de IDL.
5.4.1 Mapping IDL-Java.
5.4.2 Precompilador idlj: del metalenguaje al lenguaje.
5.4.3 Servicios de Nombres (tnameserv, orbd).
5.4.4 Conceptos Avanzados: factorías de objetos, persistencia.
5.4.5 Desarrollo de una aplicación completa.
5.5. Tipologías de ORB.
5.5.1 VisiBroker.
5.5.2 Orbix.
5.5.3 Sun ORB.

6 Programación Cliente-Servidor para Dispositivos Móviles. (4 horas)
6.1 Programación Java en telefonía móvil y PDA: J2ME.
6.1.1 Arquitectura de J2ME.
6.1.2 Máquina virtuales ligeras: CVM y KVM.
6.1.3 Conceptos de Configuración y Perfil.
6.2 Concepto de MIDLET.
6.2.1 Ciclo de vida de un MIDLET.
6.2.2 API para programación de MIDLETS.
6.3 Configuraciones y Perfiles de interés en telefonía móvil desde J2ME.
6.3.1 CLDC y su API.
6.3.2 MIDP 2.0 y su API.
6.4 Diseño de Programas
6.4.1 El Wireless Tool Kit.
6.4.2 Presentación del código de un MIDLET.
6.4.3 Compilación.
6.4.3.1 Compilación.
6.4.3.2 Preverificación.
6.4.3.3 Empaquetamiento


Programa Práctico

Se escoge Java como lenguaje de prácticas para concretar el aprendizaje de los
modelos cliente-servidor por su versatilidad, disponibilidad en la jerarquía
estándar de clases (versión J2SE) de todo el soporte necesario para
comunicaciones vía sockets y RMI, por la existencia de un prototipo de
terceras partes (aprobado por Sun) que soporta canales en Java, por la
perfecta integración de la tecnología CORBA/IDL en el propio Java, y por la
existencia de una versión específica del lenguaje para el desarrollo de
aplicaciones en entornos móviles (J2ME), todo ello dentro de una misma
filosofía general.

Práctica 1: Entorno de Programación J2SE (2 horas)
-Edición y compilación con JCreator.
-Edición y compilación en línea de comandos: javac
-Ejecución: java
-Generación de Documentación: javadoc

Práctica 2: Programación Básica en Java (2 horas)
-Tipos básicos
-Estructuras de control
-Entrada y salida

Práctica 3: Programación Orientada a Objetos en Java (2 horas)
-Clases y objetos en java
-Sobrecarga, Herencia y Polimorfismo
-Interfaces y Clases contenedoras

Práctica 4: Programación Avanzada en Java (2 horas)
-Multithreading
-Sincronización y control de hilos
-El papel del multithreading en las aplicaciones distribuidas

Práctica 5: Actividad Académicamente Dirigida con Presencia del Profesor I (2
horas)
-Sockets de Datagrama
-Sockets de Stream
-Programación de Clientes y Servidores con Sockets

Práctica 6: Actividad Académicamente Dirigida con Presencia del Profesor II (2
horas)
-Procesos y Canales en Java: CTJ
-Programación de Clientes y Servidores con CTJ

Práctica 7: Actividad Académicamente Dirigida con Presencia del Profesor III (2
horas)
-RMI en Java
-Escritura de Interface
-Generación de resguardos: rmic
-Escritura de clientes y servidores
-Registrado el servicio: rmiregistry
-Políticas de Seguridad: policytool

Práctica 8: Actividad Académicamente Dirigida con Presencia del Profesor IV (2
horas)
-CORBA con Java-IDL
-Escritura del fichero .dil
-Precompilación: idlj
-Implementación de servidores y clientes:
-El orbd y el servicio de nombres.
-Integrando la aplicación

Práctica 9: Actividad Académicamente Dirigida con Presencia del Profesor V (2
horas)
-Programación J2ME
-Utilizando el Wireless Tool Kit
-Escritura de un ejemplo
-Precompilación, empaquetamiento y ejecución del ejemplo

Práctica 10: Actividad Académicamente Dirigida con Presencia del Profesor VI (2
horas)
-Realización de una aplicación final que integre las diversas tecnologías
analizadas en las actividades anteriores.
Actividades
-Clases de Teoría, utilizando diapositivas y pizarra electrónica.
-Clases de Prácticas, utilizando diapositivas y pizarra electrónica.
-Elaboración de Trabajo Dirigidos en presencia del profesor, mediante el uso del
guión de prácticas.
Metodología
El desarrollo de los contenidos teóricos se llevará a cabo mediante
clases teóricas, con el apoyo de medios (proyector de transparencias o cañón
de proyección) cuando sea necesario.

Los contenidos prácticos irán precedidos de introducciones en la propia aula
de prácticas, donde el profesor dará a los alumnos el soporte de programación
necesario para abordar los casos prácticos con garantías. Los códigos objeto
de análisis serán descargados por el alumnos desde el Campus Virtual,
compilados y probados. Posteriormente, deberán desarrollar, bajo la dirección
del profesor, el código que dé solución a los casos prácticos, bajo ciertas
especificaciones que se harán públicas a lo largo del curso. El instrumento que
se utilizará para todo ello será el guión de prácticas, para la toma de
contacto con conceptos de programación mediante una aproximación basada en
ejemplos, junto con el caso práctico, que se define como una secuencia de
ejercicios graduados en dificultad que el alumno debe resolver y entregar para
poder superar las prácticas de la asignatura.

El alumno dispondrá de cronogramas de teoría y prácticas orientativos, donde
se recogerá, al menos, la siguiente información:

a) Fecha prevista para impartir cada tópico concreto del programa.
b) Material de lectura mínimo recomendado para preparar la clase.
c) Conjunto de lecturas y ejercicios para consolidar el tópico de que se trate
d) Fechas de interés: entrega de asignaciones, exámenes, etc.
Distribución de horas de trabajo del alumno/a

Nº de Horas (indicar total): 100

  • Clases Teóricas: 25  
  • Clases Prácticas: 8  
  • Exposiciones y Seminarios:  
  • Tutorías Especializadas (presenciales o virtuales):
    • Colectivas:  
    • Individules: 2  
  • Realización de Actividades Académicas Dirigidas:
    • Con presencia del profesorado: 12  
    • Sin presencia del profesorado:  
  • Otro Trabajo Personal Autónomo:
    • Horas de estudio: 45  
    • Preparación de Trabajo Personal: 6  
    • ...
      El apartado
      Preparación de
      Trabajo Personal
      incluirá:
      
      a)Elaboración de
      una memoria de
      teoría: 6 horas
      
       
  • Realización de Exámenes:
    • Examen escrito: 2  
    • Exámenes orales (control del Trabajo Personal):  
Técnicas Docentes
Sesiones académicas teóricas:   Exposición y debate:No   Tutorías especializadas:  
Sesiones académicas Prácticas:   Visitas y excursiones:No   Controles de lecturas obligatorias:No  
Otros (especificar):
a) Autoevaluación de progesos mediante test de contenidos.
b) Actividades Académicas con Presencia del Profesor.
 
Criterios y Sistemas de Evaluación
Por defecto, y siempre que el número de alumnos lo permita, se seguirá
el método de evaluación continua, tal y como lo establece el Reglamento de
Régimen Académico y Evaluación del Alumnado de la Universidad de Cádiz, de
acuerdo a los criterios siguientes:

1)Asistencia y participación activa del alumno en clase. (PA)
2)Superación de todos los trabajos dirigidos.
3)Confección y entrega de una memoria de teoría. (MT)

Las entregas de trabajos dirigidos tendrán lugar en la fecha y hora límite
determinada por el profesor, y comunicada oportunamente a los alumnos por e-
mail o a través de la página web de la asignatura, siempre con la antelación
que el Reglamento de Régimen Académico y Evaluación del Alumnado establece. Se
admitirá un retraso en la entrega de hasta 24 horas, pero minorando la
calificación que se obtenga en un 20%, salvo que el retraso sea justificable
documentalmente. La omisión de entregas sin justificar determinará la
exclusión del modelo de evaluación continua y el paso al modelo ordinario.

En otro caso, bien por elección del alumno, bien por exclusión del modelo de
evaluación continua, los alumnos tienen a su disposición el modelo de
evaluación ordinaria, con prueba final según establecen los Estatutos de la
Universidad de Cádiz.

a)Dicho examen final constará en un test o relación de preguntas
cortas sobre contenidos, con una duración máxima de 2:30 horas.
b)La superación de las prácticas será requisito indispensable
para poder aprobar la asignatura.
c)La calificación final de prácticas será de APTO o NO APTO.
d)Superar la asignatura exigirá obtener APTO en prácticas y una
calificación igual  o superior a cinco puntos en el examen final o como
resultado de la evaluación continua.
e)Aquellos alumnos que no superen dos o más casos prácticos
durante el desarrollo normal del curso deberán concurrir a un examen final de
prácticas. El resultado del mismo será igualmente de APTO o NO APTO.
f)En su caso, el examen práctico consistirá en el análisis,
diseño, codificación y depuración de programas que den solución a los casos
prácticos que a tal objeto se propongan. El producto resultante será remitido
al profesor por correo electrónico.
g)La calificación final de la asignatura bajo evaluación
ordinaria vendrá determinada por la calificación del examen teórico, siempre
que se haya obtenido APTO en las prácticas mediante la superación de todos los
casos prácticos o mediante examen final de prácticas.
h)La calificación final de la asignatura bajo evaluación
continua se obtendrá mediante la media ponderada de todos los aspectos que
contribuyan a la misma, de acuerdo a la siguiente ecuación, y siempre que MT y
PA sean iguales o superiores a cinco puntos.

Nota Final=(0.6xMT)+(0.4xPA)

i)El resultado de la misma podrá ser modificado en función de
otros criterios de evaluación continua  que se hubieren considerado, a
criterio del profesor.
j)A todas las convocatorias se acude con la asignatura completa. No se
guardarán partes superadas de la asignatura entre convocatorias diferentes.
Recursos Bibliográficos
[Arn01] Arnold, K., Gosling, J. & Holmes, D. El Lenguaje de Programación Java.
Addison-Wesley, 2001.

[Col94] Coulouris, G., Dollimore, J. and Kindberg, T. Distributed  Systems.
Concept and Design. 2nd ed., Addison-Wesley, 1994.

[Eck00] Eckel, B. Piensa en Java. Prentice Hall, 2002.

[Fro04] Froufe, A & Jorge, P. Java 2 Micro Edition: Manual del Usuario y
Tutorial. Ra-Ma, 2004.

[Hil00] Hilderink, G., Broenink, J., Bakkers, A. & Schaller, N. Communicating
Threads for Java. Draft, disponible en formato electrónico en:

http://www.ce.utwente.nl/javapp/downloads/CTJ_A4.pdf

[Lea01] Lea, Doug. Programación Concurrente en Java. Addison-Wesley, 2001.

[Mul93] Mullender, S (ed.) Distributed Systems, Second Edition. Addison-
Wesley, 1993.

[Orf02] Orfali, R., Harkey, D. & Edwards, J. Cliente/Servidor y Objetos. Guía
de Supervivencia. Oxford University Press, 2002.

[Orf98] Orfali, R. & Harkey, D. Client/Server Programming with Java and Corba
John Wiley and Sons, Inc. 1998.

[Pri03] Prieto, Manuel J. Curso de J2ME. Disponible en formato electrónico.
2003.

[Rif92] Rifflet, J.M. Comunicaciones en Unix. McGraw-Hill, 1992.

[Rob96] Robbins, K. & Robbins, S. Practical Unix Programming: A Guide to
Concurrency, Communication and Multithreading. Prentice Hall, 1996.

[Sch97] Schmidt, D. & Vinoski, S. Object Interconnections. SIGS C++ Report
Magazine, 1997.

[SunA] Sun mycrosystems. Java IDL Documentation. Sun Mycrosystems. Disponible
en http://java.sun.com/j2se/1.1.1/docs/guide/idl/index.html

[SunB] Sun mycrosystems. Permissions in the Java 2 SDK. Sun Mycrosystems.
Disponible en
http://java.sun.com/j2se/1.4.1/docs/guide/security/permissions.html

[SunC] Sun mycrosystems. Policy Tool. Sun Mycrosystems. Disponible en
http://java.sun.com/products/jdk/1.2/docs/tooldocs/win32/policytool.html

[SunD] Sun mycrosystems. Java Remote Method Invocation Specification. Sun
Mycrosystems.

[Sun03] Sun mycrosystems. Wireless Tool Kit, Version 2.1. Java 2 Platfom Micro
Edition. Sun Mycrosystems, 2003. Disponible en http://java.sun.com

[Tan93] Tanenbaum, A.S. Sistemas Operativos Modernos. Prentice-Hall, 1993.

[Vin97] Vinoski, S. CORBA: Integrating Diverse Applications Within Distributed
Heterogeneus Environments. IEEE Communications Magazine, Vol. 35, No 2,
February 1997.

[Wan00] Wang, P.  Java. International Thompson Editores, 2000.

El presente documento es propiedad de la Universidad de Cádiz y forma parte de su Sistema de Gestión de Calidad Docente.