Cb00823 Computación II

Clave: Cb00823

Requisito: Haber aprobado Cb00822.

Equivalencia: No Tiene

Generaciones a las que se imparte: 2 IEC, 2 IFI, 3 IMT04.

Características generales del curso: En este curso es importante enfatizar habilidades de programación con menor abstracción. Incluso es conveniente que los alumnos desarrollen aplicaciones bajo un contexto procedural o imperativo, descubriendo que no solo la programación orientada a objetos es la mejor opción para todos los problemas. En el curso se fortalecerán habilidades de programación a través del conocimiento de herramientas avanzadas en donde se mezclen diferentes niveles de abstracción. En el curso se hará una transición del lenguaje JAVA al lenguaje C++, como medio de aplicación de los conceptos.

En la medida de que los temas se presten, el alumno deberá comparar las ventajas y desventajas entre las herramientas que provee el lenguaje JAVA y el lenguaje C++.

El curso, deberá introducir el concepto de Tipo de Dato Abstracto ya que le permite al alumno crear una visión mas estructurada en cuanto a la programación, además de que permite darle congruencia a la introducción de temas como sobrecarga de operadores, herencia, streams, y facilita la asimilación del concepto de apuntadores a un objeto. Se sugiere como texto de esta sección "Classical Data Structures en C++" de Timothy Budd. Se pueden trabajar como ejemplos de TDA, el Tipo de Dato Abstracto Número Racional, Complejos, Enteros Largos, etc...

Se sugiere manejar librerías para interfaz gráfica (para este nivel se sugiere utilizar una librería sencilla como la definida por Timothy Budd llamada PCLAF).

Objetivo General

Acrecentar la habilidad de resolver problemas por medio de la programación, a través de nuevas herramientas de programación y el conocimiento comparativo entre el lenguaje JAVA y el lenguaje C++.

Objetivos Particulares

  1. Fortalecer el pensamiento abstracto a través del uso de estructuras de datos lineales como archivos, arreglos y listas encadenadas para resolver problemas que manejan grandes cantidades de datos.
  2. Aprender a desarrollar programas mezclando el uso de memoria dinámica y estática.
  3. Aplicar los conceptos de herencia y polimorfismo en la solución de problemas bajo el contexto orientado a objetos.
  4. Ampliar el concepto de programación, resolviendo problemas en que la solución procedural sea la más conveniente.
  5. Ampliar el concepto de programación, resolviendo problemas en que la solución recursiva sea la más conveniente.

Temario

  1. Java y C++ : Similitudes y diferencias. (5 horas)
  2. 1.1 Comparación respecto a Tipos de datos, operadores y expresiones.

    1.2 Comparación respecto a estructuras de control.

    1.3 Comparación respecto a operaciones de Entrada y salida

    1.4 Comparación respecto a la definición, creación y uso de clases y objetos.

    1.5 Comparación respecto a la definición y uso de métodos y parametrización.

    1.6 Concepto de programación procedural o imperativa en C++.

    1.7 Concepto de tipo de dato abstracto.

  3. Aplicaciones con arreglos en JAVA y C++ (8 horas).
  4. 2.1 Definición de arreglos unidimensionales en C++. Comparación con JAVA.

    2.2 Métodos básicos de ordenamiento en un arreglo: Burbuja, Inserción, Selección.

    2.3 Strings en C++. Comparación con JAVA.

    2.4 Arreglos bidimensionales. Aplicaciones con matrices en ambos lenguajes.

  5. Manejo de excepciones en JAVA y C++. (4 horas)
  6. Archivos (6 horas)
  7. 4.1 Tipos de archivo: texto, binarios con tipo, binarios sin tipo.

    4.2 Streams en JAVA y en C++.

    4.3 Aplicaciones con archivos de texto en ambos lenguajes.

    4.4 Aplicaciones con archivos binarios en ambos lenguajes.

  8. Herramientas para el acceso directo a memoria en C++ (6 horas)
  9. 5.1 Apuntadores en C++.

    5.2 Relación entre arreglos y apuntadores en C++.

    5.3 Aritmética de apuntadores en C++.

    5.4 Memoria estática y dinámica

    5.5 Creación y uso de arreglos y objetos dinámicos en C++. Comparación con JAVA.

  10. Programación procedural y recursiva en C++. (4 horas)
  11. 6.1 Implementación de funciones libres.

    6.2 Uso del typedef y el struct en C++.

    6.3 Recursividad como herramienta para el control de ciclos.

  12. Listas encadenadas. (5 horas)
  13. 7.1 Concepto de nodo y encadenamiento.

    7.2 Operaciones de inserción, desplegado y eliminación de nodos de una lista.

    7.3 Aplicación integradora de conceptos del curso.

  14. Herramientas de polimorfismo y herencia en C++. (5 horas)

8.1 Sobrecarga de operadores en C++.

8.2 Uso de plantillas (templates) en C++.

8.3 Manejo congruente de parámetros con objetos dinámicos y atributos dinámicos.

8.4 Herencia en C++: Definición, clases abstractas y métodos virtuales.

 

Libros de consulta:

Bibliografía Actualizada

Descripción de recursos necesarios

Software de desarrollo de aplicaciones en C++ y Java.

Perfil del Profesor

Persona con preparación académica en el área de computación y con experiencia en la programación orientada a objetos utilizando Java y C++

Programa Sintético

(3-0-8. Requisito: Computación I. 2 ISC, 2 ISE, 2 ISI, 2 LSCA, 2 IEC, 2IFI).

Equivalencia: no tiene.

Java y C++ (similitudes y diferencias). Archivos de texto y binarios. Arreglos multidimensionales y strings. Reutilización de código. Polimorfismo. Sobrecarga de operadores. Herencia. Apuntadores y memoria dinámica. Recursividad. Manejo de excepciones.

Programa Sintético (inglés)

(3-0-8. Requisito: Computación I. 2 ISC, 2 ISE, 2 ISI, 2 LSCA, 2 IEC, 2IFI).

Java and C++ (similarities and differences). Text and binary files. Multidimensional arrays and strings. Reusability of code. Polymorphism. Overload of Operators. Inheritance. Pointers and Dynamic Memory. Recursion. Handling of Exceptions.

Fecha de la última actualización: 7 de junio de 2004(M)