N° DE DISPOSICIÓN: _______________ DEPARTAMENTO DE CIENCIAS BÁSICAS: CIENCIAS BASICAS CARRERA: LICENCIATURA EN SISTEMAS PROGRAMA DE LA ASIGNATURA: PROGRAMACION III (ORIENTADA A OBJETOS) EQUIPO RESPONSABLE: JAVIER BLANQUE HORAS DE CLASE: 96 Horas TEORICAS: 48 Horas PRACTICAS: 48 Horas ASIGNATURAS CORRELATIVAS PRECEDENTES APROBADAS Esta asignatura no tiene precorrelativas específicas, 11407 no obstante, el cursado regular del ciclo de grado presupone la aprobación completa de los ciclos anteriores que corresponden en cada caso. CURSADAS OBJETIVOS: El objetivo fundamental de la materia Programación III es introducir a los alumnos a las técnicas actuales de desarrollo de software, en particular, en aspectos de análisis, diseño y programación orientados a objetos. El alumno debe ser capaz de desarrollar un proyecto donde aplique los conceptos fundamentales del Análisis, Diseño y la Programación Orientada a Objetos. Es necesario que demuestre a través del mismo que ha aprendido a pensar de una manera no centrada en bloques de procedimientos, sino que describa la globalidad de propiedades, estados y comportamiento de cada objeto modelizado en su proyecto, pensando a partir de los mismos, y de las interacciones entre ellos. Se requerirá que el alumno al término del curso esté razonablemente capacitado en alguno de los lenguajes orientados a objetos recomendados y que haya realizado un proyecto de mediana complejidad incorporando a ese lenguaje como un componente esencial o central del mismo. Se pondrá énfasis en metodologías como UML (Unified Modeling Language) y en “Desarrollo Agil” (Programación Extrema). Se mostrará un análisis comparativo entre los lenguajes actuales de programación orientados a objetos (C++, Java y Python) y se realizarán prácticas sobre ambientes de desarrollo modernos como Eclipse, o NetBeans, por lo que se brinda libertad de elección del lenguaje y del ambiente de desarrollo para la realización del proyecto final. Se considera que para el correcto aprendizaje de los fundamentos de C++ es necesaria la realización de una actualización (o introducción) de los alumnos al lenguaje C. N° DE DISPOSICIÓN: _______________ Tipo de Evaluación Se realizarán prácticas y pequeños desarrollos orientados a objetos durante el cursado de la materia. La evaluación tendrá el formato de un proyecto que se realiza durante alrededor de dos meses (60 días). Será un trabajo en equipo que se definirá durante los dos primeros meses del cuatrimestre, los equipos deberán ser idealmente de tres personas pudiendo excepcionalmente (con causa justificada, como lejanía del resto de los alumnos, grado de dificultad del proyecto, etc.) ser de 1 a 5 personas. La evaluación final se deriva de un proyecto al que los alumnos dedican como mínimo 100 horas y como máximo 300 horas. La complejidad de este proyecto depende de las herramientas elegidas por el grupo y de la cantidad de gente que lo compone, es decir a más gente en el grupo, más complejo debe ser el proyecto. El grupo presenta un anteproyecto con objetivos concretos, que describe las tecnologías, arquitectura y topología a usar, cómo se dividirán las tareas (quién hace qué cosa, cuándo), una carta GANTT, y una justificación de porqué se eligieron ese proyecto y esas tecnologías para desarrollarlo. La evaluación se realiza sobre el proyecto, como una aplicación que debe ser funcional, como resultado del mismo se entrega un CD / DVD con la aplicación funcional, y una carpeta completa de documentación, donde se detalla el trabajo de forma total, con las actividades de todos los integrantes a lo largo del mismo, con una explicación de los problemas encontrados durante el desarrollo y cómo se resolvieron. Durante el final el equipo de trabajo realiza la Demo del producto o aplicación, que podrá considerarse el PROTOTIPO del proyecto y su manifestación concreta, pudiendo cualquier integrante ser preguntado sobre aspectos del mismo. Todos los integrantes de cada equipo deben conocer todos los aspectos de sus respectivos proyectos. VIGENCIA AÑO: 2010 N° DE DISPOSICIÓN: _______________ 2) CONTENIDOS UNIDADES TEMÁTICAS: (MESES 1, 2, 3) 2.1- Introducción al Pensamiento Orientado a Objetos y Conceptos. Programación Orientada a Objetos - Introducción. Que és, Qué esperamos, Explicación del Programa. Explicación y Formato para la Presentación de los Proyectos. Metodología de Trabajo Durante el Curso. Bibliografía y Fuentes de Acceso. Arquitecturas de Hardware y Software Básicas y Orientaciones. 2.2- Historia de la Programación Orientada a Objetos. Paradigmas de Programación. La programación tipo “Plato de Fideos”. El assembler. Programación Estructurada. El C. Programación Orientada a Objetos. C++, Java, Python. Programación Funcional. El Lisp (CLOS, SCHEME). Programación Lógica. El Prolog. Programación Centrada en Procesos. Programación Centrada en Datos. Programación Centrada en Interfases. Como Obtener lo Mejor de Cada Metodología. Profundización de Conceptos en Lenguaje C/C++ y Java Clases, Estructuras y Objetos. Encapsulamiento. Caja Negra y Caja Blanca. Herencia. Métodos. Excepciones. Streams o Librería de Entrada/Salida. Standard Template Library (Stepanov). Interfases Gráficas y Programación Dirigida por Eventos. Java. Applets. Servlets. Aplicaciones Java. Ejemplos. Python. Ejemplos. El stack LAMP (Linux-Apache-MySQL/PostgreSQL-PHP/Python/Perl). 2.3- Orígenes. Inserción en la Inteligencia Artificial. Entornos de Programación Explorativos. El SmallTalk-80. El GNU SmallTalk (GST). Entornos de Programación Orientados al Desarrollo Rápido (RAD). Inserción en la Ingeniería de Software. Entornos Derivados de CASE. Entornos Derivados de CAD-CAM-CIM. El Simula-67. El ADA. El C++. 2.4- Análisis y Diseño Orientado a Objetos. Técnicas. Booch-Rumbaugh. Jacobson Use Cases. UML (Unified Modeling Language). Diseño por Implementación Evolutiva. Diseño Out-In/In-Out. Conexiones y Diferencias con Diseño Estructurado. Problemas de Complejidad y Niveles. Técnicas de Medición y Reducción de la Complejidad. Líneas de código, Puntos de Función. Clases. Metodologías de Desarrollo Agiles. Programación Extrema. 2.5- Bases de Datos Orientadas a Objetos. OODBMS Bases de Datos de Red. Bases de Datos Relacionales y Relacionales Extendidas. El caso PostgreSQL. Bases de Datos de Conexión Semántica y de Conocimiento. Temas de Implementación. Concurrencia. Seguridad. Versioning. Mecanismos de Acceso y Almacenamiento. Optimización. N° DE DISPOSICIÓN: _______________ 2) CONTENIDOS (CONTINUACIÓN) 2.6- Arquitecturas Client-Server. Bases de Datos Relacionales. Arquitecturas MultiUsuario. SQL, ODBC (Open Data Base Connectivity). Entornos Distribuidos, Sockets. 2.7- Objetos Distribuidos. Problemas Epistemológicos. Ergonomía y Usabilidad de Aplicaciones. Programación Orientada a Objetos Distribuidos. Arquitecturas Inteligentes. 2.8- Construcción de Programas Orientados a Objetos. Programación Dirigida por Eventos. Métodos de Comunicación entre Objetos. Conceptos. Clase y Objeto. Herencia y Herencia Múltiple (El concepto IS-A). Propiedades (El concepto HAVE). Métodos, Precondiciones y Poscondiciones. Polimorfismo y Protocolo. Mecanismos de 'Garbagge-Collection'. Variables de clase y variables de instancia (objeto). 2.10- Desarrollo de Proyectos Orientados a Objetos. Mecanismos de Flexibilidad y Eficiencia. Intérpretes y Compiladores. Programación, Lenguajes Alternativos y Ejemplos. LISP (CLOS, SCHEME). SmallTalk (GST, Squeak). Arquitecturas Paralelas y Entornos Futuros. Elección y desarrollo de un trabajo de investigación (MES 4) 9- Algunas alternativas de Proyectos de Desarrollo e Investigación Grupal. a) Realización de una aplicación Funcional implantable en Internet, en una intranet o una extranet. c) Realización de una aplicación distribuida (por ejemplo Client/Server) implantable en LAN. d) Realización de una aplicación de Inteligencia Artificial o que incuya Multimedia. e) Realización de un Juego como First o 3rd person shooter, de estrategia o de simulación. f) Realización de una aplicación propuesta por el Grupo. Sera consensuada con el docente y se pondrán puntos de control para administrar la complejidad. Lenguajes habilitados para los proyectos son Python, Java, C/C++ o PHP5, puede proponerse otro. (FINAL) 10-Presentación de Proyectos y examen final sobre el mismo. N° DE DISPOSICIÓN: _______________ 3) TRABAJOS PRACTICOS 4) MODALIDAD DE APROBACION 4.1 4.2 4.3 4.4 Regularización Promoción Examen regular Examen libre 5) BIBLIOGRAFIA: Internet: Googlear. La biblioteca UNLu: En revistas y libros existentes allí. A los alumnos de la materia se les brinda un CD con los siguientes libros, artículos o documentos en formato Adobe Acrobat Reader (PDF o Portable Document Format) Thinking in C++, Bruce Eckel Thinking in C++, Bruce Eckel Thinking in Java, Bruce Eckel J2EE Tutorial, MassLight J2EE Optimization, Scott Marlow EJB Design Patterns, Floyd Marinescu Maszterig Enterprise Java Beans, Ed Roman, Scott Ambler, Tyler Jewell J2EE and XML Development, Kurt Gabrick, David Weiss Java Data Objects and Transparent Persistence, Sun Microsystems JBOSS, java application server presentation JDO 1.0 Specification CPP HOWTO, Alavoor Vasudevan JavaScript Manuals Postgresql Introduction and Concepts, Bruce Momjian Struts templates in Java Tutorial XML Programming in Java Tutorial UML Guia Visual, Josep Vilalta The Essence of OOP Using Java, Richard Baldwin ...