Professional Documents
Culture Documents
Tabla de contenido
INTRODUCCIN ............................................................................................................................................ 4
RECURSOS DE PROGRAMACIN............................................................................................................. 5
PRCTICA #1 PUNTEROS ........................................................................................................................... 6
PRCTICA #2 CADENAS .............................................................................................................................. 8
PRCTICA #3 LA CLASE CCADENA .......................................................................................................10
PRCTICA #4 LISTA ENLAZADA-PARTE1 ............................................................................................11
PRCTICA #5 LISTA ENLAZADA-PARTE2 ............................................................................................12
PRCTICA #6 LISTA ENLAZADA-PARTE3 ............................................................................................14
PRCTICA #7 RBOL BINARIO ...............................................................................................................15
PRCTICA #8 RBOL BINARIO - RECORRIDOS .................................................................................16
PRCTICA #9 HERENCIA ..........................................................................................................................17
PRCTICA #10 POLIMORFISMO .............................................................................................................18
PRCTICA #11 FLUJOS DE DATOS Y SERIALIZACIN ....................................................................19
PROYECTO ....................................................................................................................................................21
Introduccin
Es muy importante comprobar que el alumno est instruido en resolver problemas y definir
sus soluciones. Por una parte est el examen terico y por otra el desarrollo de prcticas,
tareas y proyectos donde el estudiante construye las implementaciones de sus soluciones.
Es slo la implementacin lo que permite tener un programa til de computador y es
durante las prcticas, donde la habilidad del estudiante se desarrolla para adaptarse y ser
productivo en entornos industriales. Adems es muy importante que, en el desarrollo del
software de cualquier tipo, el estudiante est preparado para formar parte de un equipo de
trabajo. Algunas prcticas de este manual pueden ser muy simples, por lo que el mismo
estudiante puede resolverlos. Hay otras prcticas, sin embargo, en donde la complejidad de
la misma requiera de que varios estudiantes trabajen en equipo para poder realizarla.
Cada prctica est desarrollada de manera que se trabaje sobre los temas ms importantes
de la programacin orientada a objetos. En cada una se indican los objetivos de la prctica
y la cantidad de sesiones de laboratorio que se deben dedicar a esta.
La forma y contenido de los reportes quedarn definidos segn las indicaciones del
profesor que les asiste en el laboratorio, sin embargo al final de cada prctica en la seccin
Entregables se incluye un listado de elementos que es altamente recomendable se incluyan
en la evaluacin. La prctica no es una tarea en donde se deje solo al alumno sin la
asistencia del profesor, sin embargo el alumno debe de adelantar todo lo que le sea posible
antes de la sesin, puesto que usualmente las horas de laboratorio no son suficientes para
el desarrollo de la prctica.
Un consejo, que le doy al alumno antes de comenzar un curso: debe leer, investigar,
comprender y ser capaz de discernir fuentes de informacin tiles de las superfluas. Slo el
hbito de la lectura y la prctica de lo que aprendemos nos permite comprender la compleja
tecnologa moderna.
La forma en la que se implementan las soluciones a estas prcticas y problemas est muy
ligada a los mtodos de enseanza que el profesor utiliza durante la sesin de clase. Es
recomendable que se prepare al alumno en las disciplinas y estilos de codificacin. Esto se
hace al implantar normas de codificacin, la buena costumbre de comentar cdigo, as
como el diseo y redaccin de la documentacin asociada a las unidades de cdigo:
funciones, mtodos, estructuras y clases. Estas buenas costumbres permitirn desarrollar
productividad en el trabajo en equipo y evitar estrs para el alumno o integrantes del
equipo.
Antes de que el alumno resuelva las prcticas, antes incluso de escribir su primer lnea de
cdigo; el alumno debe dedicarse a comprender la prctica, el dominio del problema y la
estrategia para resolver el problema. Es muy importante que se identifiquen los dominios de
entrada y salida. Si es necesario el alumno o el equipo debern de aclarar los
requerimientos expresados en las prcticas con el profesor asistente. En la vida real, los
requerimientos comienzan siendo muy ambiguos y stos deben ser aclarados antes de
comenzar la codificacin de la solucin.
Recursos de programacin
Este manual tiene como objetivo, servir de apoyo en la enseanza del paradigma orientado
a objetos. Para la realizacin de estas prcticas es necesario el uso de herramientas: un
editor de texto y un compilador de C++. Existen entornos de desarrollo que integran las
herramientas antes mencionadas y adems incluyen herramientas varias para el desarrollo
de soluciones de software, de hecho yo recomiendo que su uso puesto que son estas las
herramientas que se utilizan en el mercado laboral.
Dos de los entornos de desarrollo de ms populares son MS Visual Studio 2008 Express y
DevC++. A continuacin incluyo los enlaces para su descarga:
Para descargar y conocer acerca de cmo instalar Microsoft Visual Studio 2008 Express
Edition visite el siguiente enlace:
http://www.microsoft.com/express/download/
Para descargar un excelente, fcil de usar y ligero compilador de C++ compatible con
Windows, recomendamos a Bloodshed Dev C++ en siguiente sitio web:
http://www.bloodshed.net/dev/devcpp.html
Prctica #1 Punteros
Duracin: 1 Sesin.
Objetivos:
Desarrollo:
Parte1:
Dentro de su funcin principal:
1. Declare dos variables enteras iX e iY.
2. Asigne a iX el valor 5.
3. Asigne a iY el valor 10.
4. Declare dos punteros a enteros pA.
5. Haga que pA apunte a iX.
6. Imprima iX.
7. Imprima a lo que apunta pA.
8. Imprima la direccin de memoria de iX.
9. Imprima pA.
10. Haga que pA apunte a iY.
11. Imprima iY.
12. Imprima a lo que apunta pA.
13. Imprima la direccin de memoria de iY.
14. Imprima pA.
Ejecute su programa y observe que 6 y 7 imprimen lo mismo. Explique porqu.
Observe tambin que 8 y 9 imprimen lo mismo. Explique porqu.
Observe tambin que 11 y 12 imprimen lo mismo. Explique porqu.
Observe tambin que 13 y 14 imprimen lo mismo. Explique porqu.
Parte2:
Implemente las siguintes funciones:
int Potencia(int iBase, int iExp)
Esta funcin eleva el nmero iBase a la potencia iExp y regresa el resultado
de la operacion.
Ejemplos de entradas-salidas:
iBase: 5
iExp: 0
Regresa: 1
iBase: 5
iExp: 1
Regresa: 5
iBase: 5
iExp: 2
Regresa: 25
iBase: 5
iExp: 3
Regresa: 125
void Potencia2(int* pBase, int iExp)
Esta funcin eleva a lo que apunta pBase a la potencia iExp almacenando el
resultado en la variable a la que apunta pBase.
Entregables:
Algoritmos
Diagramas de flujo
Implementacin
Prctica #2 Cadenas
Duracin: 1 Sesin.
Objetivos:
Familiarizarse con la declaracin de arreglos.
Familiarizarse con la declaracin de cadenas.
Familiarizarse con las operaciones sobre cadenas.
Entender la relacin puntero-arreglo.
Entender el uso de operador ++ en punteros.
Entender el uso de operador [] en punteros.
Comprender el paso de arreglos como argumentos a las funciones.
Desarrollo:
Implemente una de las dos siguientes funciones:
void ImprimeVertical(char* pszCadena)
Esta funcin recibe una cadena e imprime un carcter por cada linea de
texto.
Ejemplo de entrada-salida:
Entrada:
Hola Mundo
Imprime:
H
o
l
a
M
u
n
d
o
Restriccin: para desplazarse atravs de la cadena debe utilizar el
operador ++ sobre un apuntador a carcter.
int Tamanio(char* pszCadena)
Esta funcin recibe una cadena y retorna la cantidad de caracteres de la
misma incluyendo los espacios en blanco.
Ejemplo de entrada-salida:
Entrada:
Hola Mundo
Retorna:
10
Implemente una de las tres siguientes funciones:
void ImprimeReves(char* pszCadena)
Esta funcin recibe una cadena y retorna la cantidad de caracteres de la
misma incluyendo los espacios en blanco.
Ejemplo de entrada-salida:
Entrada:
Hola Mundo
Imprime:
odnuM aloH
Restriccin: para desplazarse atravs de la cadena debe utilizar el
operador [] sobre un apuntador a carcter.
int Cuenta(char* pszCadena, char cContar)
Esta funcin recibe una cadena y retorna la cantidad apariciones del
carcter cContar.
Ejemplo de entrada-salida:
Entrada:
pszCadena: Hola Mundo cContar: o Retorna: 2
pszCadena: Hola Mundo cContar: h Retorna: 0
pszCadena: Hola Mundo cContar: H Retorna: 1
pszCadena: Hola Mundo cContar: u Retorna: 1
pszCadena: Hola Mundo cContar: z Retorna: 0
Restriccin: para desplazarse atravs de la cadena debe utilizar el
operador [] sobre un apuntador a carcter.
int PrimerAparicion(char* pszCadena, char cBuscar)
Esta funcin recibe una cadena y retorna la posicin de la primer
aparicion del carcter cBuscar. En caso de que el carcter cBuscar no
exista en la cadena regresa -1.
Ejemplo de entrada-salida:
Entrada:
pszCadena: Hola Mundo cBuscar: o Retorna: 2
pszCadena: Hola Mundo cBuscar: h Retorna: -1
pszCadena: Hola Mundo cBuscar: H Retorna: 1
pszCadena: Hola Mundo cBuscar: u Retorna: 7
pszCadena: Hola Mundo cBuscar: z Retorna: -1
Restriccin: para desplazarse atravs de la cadena debe utilizar el
operador [] sobre un apuntador a carcter.
Implemente una de las dos siguientes funciones:
int Concatenar(char* pszInOut, char* pszIn)
Esta funcin recibe dos cadenas y anexa a la cadena pszInOut la cadena
pszIn.
Ejemplo de entrada-salida:
Entrada:
pszInOut: Hola
pszIn: Mundo
Salida:
pszInOut tendr: HolaMndo
void Reves(char* pszCadena)
Esta funcin recibe una cadena e invierte el contenido de la misma.
Ejemplo de entrada-salida:
Entrada:
pszCadena: Hola Mundo
Salida:
pszCadena tendr: odnuM aloH
Entregables:
Algoritmos
Diagramas de flujo
Implementacin
Objetivos:
Desarrollo:
Cree una Clase denominada CCadena.
Agregue la propiedad privada m_szCadena a la clase CCadena, m_szCadena ser
un arreglo de 128 caracteres.
Agregue los mtodos:
void SetCadena(char* pszIn)
Este mtodo recibe copia en m_szCadena el contenido de pszIn.
char* GetCadena()
Este mtodo regresa la direccin de inicio de m_szCadena.
En la prctica pasada usted ha implementado al menos tres funciones de manejo de
cadenas, todas ellas tienen como primer argumento a char *pszCadena, y trabajan
con el contenido de esta cadena.
Implemente como mtodos de su clase CCadena las funciones que implemento en la
prctica pasada, pero en esta ocasin no recibirn como pszCadena parmetro, este
parmetro es innecesario puesto que la clase CCadena ya contiene su propia cadena
m_szCadena y por lo tanto debe trabajar con ella.
Los mtodos equivalentes a las funciones de la prctica pasada quedaran as:
void ImprimeVertical()
int Tamanio()
void ImprimeReves()
int Cuenta(char cContar)
int PrimerAparicion(char cBuscar)
int Concatenar(char* pszIn)
Esta funcin recibe una cadena y la anexa al contenido de la cadena
m_szCadena.
void Reves()
Entregables:
Diagrama de Clases
Implementacin
Objetivos:
Desarrollo:
Implemente las siguientes clases:
CNodo
-pSiguiente : CNodo*
-pAnterior : CNodo*
-iContenido : int
+InsertarAdenante(entrada iData : int) : void
+Borrar() : int
CLista
-Inicio : CNodo
-Final : CNodo
+InsertarInicio(entrada iData : int) : void
+InsetarFinal(entrada iData : int) : void
+IsEmpty() : bool
+Size() : int
+CLista()
+~CLista()
+Imprime() : void
Entregables:
Algoritmos
Diagramas de flujo
Implementacin
Objetivos:
Desarrollo:
Parte 1
Implemente los siguientes mtodos en la clase CLista:
CLista::Begin devuelve la direccin del nodo siguiente
CLista::Inicio.
CLista::End devuelve la direccin del nodo CLista::Final.
Parte 2
Sobrecargue los operadores de incremento postfijo (++), decremento postfijo (--),
asignacin (=) e indirecin (*) con la funcionalidad de Avanza, Retrocede,
SetNodo y GetNodo respectivamente.
Implemente el siguiente mtodo en la clase CLista:
CLista::Buscar(iElemento CLista) : int este mtodo busca la primer
aparicin del elemento iElemento y regresa la posicin del elemento dentro
de la lista. Si el elemento no se encuentra en la lista regresa -1. Restriccin:
deber implementar primero la clase CIterador y utilizarla para la bsqueda.
Entregables:
Implementacin
Diagrama de clases actualizado.
Objetivos:
Desarrollo:
Implemente los siguientes mtodos en la clase CLista:
CLista::OrdenarBurbuja ordena el contenido de la lista utilizando para
ello el mtodo de burbuja.
CLista::OrdenarInsercion ordena el contenido de la lista utilizando para
ello el mtodo de insercin. Restriccin: utilice el iterador.
Entregables:
Algoritmos
Diagramas de flujo
Implementacin
Diagrama de clases actualizado.
Objetivos:
Desarrollo:
Implemente un rbol binario bajo las siguientes clases:
CTreeNode
-int ikey : int
-pRigth : CTreeNode*
-pLeft : CTreeNode*
CTree
-pRoot : CTreeNode*
+Insert(entrada iVal : int) : void
+Find(entrada iVal : int) : bool
+delete(entrada iVal : int) : bool
Entregables:
Algoritmos
Diagramas de flujo
Implementacin
Objetivos:
Desarrollo:
Implemente los siguientes mtodos en su clase CTree:
CTree::ImprimePreOrden Imprimir el contenido del rbol en pre-orden.
CTree::ImprimeInOrden Imprimir el contenido del rbol en orden.
CTree::ImprimePostOrden Imprimir el contenido del rbol en post-orden.
Entregables:
Algoritmos
Diagramas de flujo
Implementacin
Diagrama de clases.
Prctica #9 Herencia
Duracin: 1 Sesin.
Objetivos:
Desarrollo:
Implemente el las clases indicadas en el siguiente diagrama:
CVehiculoConRuedas
-nRuedas : int
-strColor : CCadena
+Imprime() : void
CBicicleta
-iRodado : int
CCadena
CAutomovil
-strModelo : CCadena
1
1
Motor
-Cilindros : int
-Cilindrada : int
Entregables:
Objetivos:
Desarrollo:
Parte1
Modifique su lista enlazada de forma que sus nodos almacenen punteros a
CVehiculoConRuedas y no enteros.
Implemente el metodo CLista::Imprime(), este mtodo deber imprimir Esto es
una lista y CONTIENE: y la descripcin de todos y cada uno de los elementos de la
lista, para imprimir la descripcin de los objetos CLista::Imprime() deber de
llamar el mtodo imprime de los objetos que almacena, es decir que CADA OBJETO
ES RESPONSABLE DE SU IMPRESION.
Introduzca 5 objetos en su lista asegrese de introducir objetos del tipo CBicicleta y
CAutomovil.
Imprima su lista. Observe el resultado, Est imprimindose lo que esperaba? Explique
porqu.
Parte 2
Modifique el mtodo CVehiculoConRuedas::Imprime() para que sea vitual.
Vuelva a imprimir su lista. Observe el resultado, Est imprimindose lo que esperaba?
Explique porqu.
Entregables:
Objetivos:
Desarrollo:
Cree una clase CSerializable, esta clase no contendr propiedad alguna y tendr
solamente un mtodo:
virtual void CSerializable::Serializar(iostream& refStream,
bool bRead) = 0;
al igualar este mtodo a cero estamos asegurndonos de que este mtodo no se
implementara en esta clase, a este tipo de mtodos se les denomina virtuales puros. Los
mtodos virtuales puros convierten a la clase que los contiene en clases abstractas, las
clases abstractas no pueden ser instanciadas directamente, por lo tanto es necesario
derivarlas. A las clases abstractas que solamente contienen mtodos virtuales puros se
les conoce como interfaces.
Derive las clases CLista y CVehiculoConRuedas de CSerializable.
Modifique su clase CLista para que contenga elementos de tipo CSerializable.
Implemente el mtodo serializar en CLista.
Implemente el mtodo serializar en CVehiculoConRuedas y todas sus clases
derivadas.
En su programa principal:
Instancie un objeto de la clase fstream, nmbrelo dBase.
En esta prctica utilizaremos un archivo para almacenar datos, este archivo se
llamara DataBase.txt.
Cree una lista.
Su programa principar deber las siguientes opciones:
Abrir:
Abra el archivo DataBase.txt en modo lectura con el objeto dBase. Si el
archivo no existe informe al usuario del error.
Serialice(cargue) su lista desde dBase.
Cierre el flujo dBase.
Llenar Lista:
Inserte en su lista al menos 5 objetos, asegrese de introducir objetos del
tipo CBicicleta y CAutomovil.
Insertar objeto:
Inserta un nuevo objeto en la lista. Los datos del objeto los introduce el
usuario.
Imprimir:
Entregables:
PROYECTO
Duracin: 4 Sesiones.
Este proyecto deber realizarse en equipos de 4 personas.
Objetivos:
Desarrollo:
Se necesita una base de datos, esta base de datos deber contener al menos tres tablas,
estas tablas debern estar relacionadas entre s.
La base de datos deber ser serializable.
Deber de implementar a menos dos tipos de consultas para la base de datos. Estas
consultas debern mostrar elementos de diferentes tablas.
El programa principal deber dar facilidades para la introduccin, eliminacin y
bsqueda de elementos en la base de datos.
El programa principal deber dar acceso a las consultas en la base de datos.
El programa principal deber mostrar las opciones Cargar y Guardar base de datos.
El diseo concreto de la base de datos podr ser propuesto por el alumno, en cuyo caso
ser el maestro el que de el visto bueno. En caso de que el alumno no desee proponer un
diseo ser el maestro el que lo proporcione. Todas las bases de datos de todos los
equipos debern ser diferentes.
Ejemplo de base de datos: Llamadas Recibidas
Tablas:
Tabla de contactos. Contiene como su nombre lo indica los datos de los
contactos.
Tabla de llamadas. Contiene el registro de las llamadas recibidas, ID del
contacto, hora de la llamada, asunto, etc.
Tabla de tipos de contacto. Contiene dos campos: Tipo de contacto y Id
del contacto.
Consultas:
Llamadas de X contacto: esta consulta mostrara todas las llamadas que ha
realizado el contacto de nombre X.
Llamadas de tipo contacto: muestra todas las llamadas realizadas por
todos los contactos de cierto tipo.
Sesiones
Entregables:
Estudio de requerimientos.
Diagrama de clases.
Implementacin.
Manual de usuario.
Asignacin de responsabilidades en equipo.
Reporte de actividades de cada miembro del equipo.
Reporte de aplicacin de conceptos. En este se deber incluir un anlisis de
cmo y en donde han sido aplicados en el proyecto los conceptos, tcnicas y
patrones de diseo vistos en este curso.