Fichas de asignaturas 2008-09
CÓDIGO | NOMBRE | |
Asignatura | 1713054 | PROGRAMACIÓN EN ENTORNOS CLIENTE-SERVIDOR |
Descriptor | CLIENT/SERVER PROGRAMMING | |
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 |
Para el curso | 2007-08: | Créditos superados frente a presentados | 100.0% | Créditos superados frente a matriculados | 78.3% |
- Análisis y síntesis de contenidos técnicos - Lectura comprensiva y escritura comprensible - Determinación del ámbito de la solución de un problema - Elección del nivel de abstracción de solución de un problema - Capacidad de planificación temporal de tareas - Elaboración de juicios críticos sobre contenidos - Capacidad de elaborar documentación técnicamente correcta
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
Actitudinales:
-Autoaprendizaje e independencia de criterio. -Conciencia crítica sobre el trabajo propio bien hecho. -Conciencia de la necesidad del esfuerzo y el trabajo personal como medio de lograr los objetivos fijados. -Conciencia de la necesidad de cumplir en tiempo y forma con plazos prefijados, normas de redacción y entrega de productos, etc. -Conciencia de la necesidad de cumplir con las obligaciones en materia de asistencia a clase, trabajo personal, rendimiento y espíritu universitario que la legislación universitaria actualmente en vigor establece para el alumnado.
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 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 (3 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 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) 1.1 Edición y compilación con JCreator. 1.2 Edición y compilación en línea de comandos: javac 1.3 Ejecución: java 1.4 Generación de Documentación en línea: javadoc Práctica 2: Programación Básica en Java (2 horas) 2.1 Tipos básicos 2.2 Estructuras de control 2.3 Entrada y salida Práctica 3: Programación Orientada a Objetos en Java (2 horas) 3.1 Clases y objetos en java 3.2 Sobrecarga, Herencia y Polimorfismo 3.3 Interfaces y Clases contenedoras Práctica 4: Programación Avanzada en Java (2 horas) 4.1 Multithreading 4.2 Sincronización y control de hilos 4.3 Java y las Bases de Datos: JDBC. 4.4 Multithreading y Bases de Datos en las aplicaciones distribuidas Práctica 5: Actividad Académicamente Dirigida con Presencia del Profesor I (2 horas) 5.1 Sockets de Datagrama 5.2 Sockets de Stream 5.3 Programación de Clientes y Servidores con Sockets Práctica 6: Actividad Académicamente Dirigida con Presencia del Profesor II (2 horas) 6.1 Procesos y Canales en Java: CTJ 6.2 Programación de Clientes y Servidores con CTJ Práctica 7: Actividad Académicamente Dirigida con Presencia del Profesor III (2 horas) 7.1 RMI en Java 7.2 Escritura de Interface 7.2 Generación de resguardos: rmic 7.4 Escritura de clientes y servidores 7.5 Registrando el servicio: rmiregistry 7.6 Políticas de Seguridad: policytool 7.7 Call-Back de Cliente 7.8 Activación de Objetos Remotos Práctica 8: Actividad Académicamente Dirigida con Presencia del Profesor IV (2 horas) 8.1 CORBA con Java-IDL 8.2 Escritura del fichero .dil 8.3 Precompilación: idlj 8.4 Implementación de servidores y clientes: 8.5 El orbd y el servicio de nombres. 8.6 Integrando la aplicación Práctica 9: Actividad Académicamente Dirigida con Presencia del Profesor V (2 horas) 9.1 Programación J2ME 9.2 Utilizando el Wireless Tool Kit 9.3 Escritura de un ejemplo 9.4 Precompilación, empaquetamiento y ejecución del ejemplo Práctica 10: Actividad Académicamente Dirigida con Presencia del Profesor VI (2 horas) 10.1 Tecnología AJAX en entornos cliente-servidor. 10.2 El objeto XMLHttpRequest. 10.3 Escritura de una aplicación sencilla.
-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.
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.
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: 1
- 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: 7
- ...
El apartado Preparación de Trabajo Personal consistirá en la elaboración de una memoria de teoría.
- Realización de Exámenes:
- Examen escrito: 2
- Exámenes orales (control del Trabajo Personal):
|
||||||
Otros (especificar):
a) Autoevaluación de progresos mediante test de contenidos. b) Actividades Académicas con Presencia del Profesor. |
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, medida mediante aportaciones objetivas a los foros, glosario y wiki de la asignatura: hasta 2 puntos. 2)Asignaciones de Prácticas (AP): se califican globalmente con APTO o no APTO. 3)Confección y entrega de una memoria de teoría (MT): hasta 8 puntos. 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 (de teoría y de prácticas) según establecen los Estatutos de la Universidad de Cádiz. a)Dicho examen final constará de 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 de la asignatura se obtendrá en modalidad de evaluación continua será la suma de las puntuaciones obtenidas en los apartados de asistencia y participación y memoria de teoría, siempre que en prácticas haya obtenido APTO globalmente. En modalidad de evaluación ordinaria CALIFICACIÓN = (Teoría*0.4)+(Prácticas*0.6) d)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. e)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 a través del campus virtual. f)A todas las convocatorias se acude con la asignatura completa. No se guardarán partes superadas de la asignatura entre convocatorias diferentes.
[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. [Fro05] Froufe, A. JAVA 2. Manual de usuario y tutorial. 4ª ed., Ra-Ma, 2005. [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. [Liu04] Liu, M.L. Computación Distribuida. Fundamentos y Aplicaciones. Addison- Wesley, 2004. [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.
Pulse aquí si desea visionar el fichero referente al cronograma sobre el número de horas de los estudiantes.
El presente documento es propiedad de la Universidad de Cádiz y forma parte de su Sistema de Gestión de Calidad Docente.