Вы находитесь на странице: 1из 29

SEMINARIO C++

Introduccin a la Programacin Orientada a Objetos


Herramientas de programacin y Prctica 0 v. 20070918
Cristina Cachero Pedro J. Ponce de Len
Depto. Lenguajes y Sistemas Informticos - Universidad de Alicante

C++
NDICE 1. 2. 3. 4. 5. 6. 7. Compilador: g++ Directivas de compilacin Make Doxygen Utilidad de compresin tar UML Enunciado prctica 0

C++

COMPILADOR: G++
GCC es una coleccin de compiladores para varios lenguajes: C, C++, Objective C, Fortran y Java. Incluye las libreras para stos. Para C++ usaremos el compilador g++. Sintaxis $ g++ [opciones] nom_fichero... Opciones: con man gcc podemos ver todas.

-help Indica a gcc que muestre su salida de ayuda -o <fichero> El archivo ejecutable generado por gcc es por defecto a.out. Mediante este modificador, le especificamos el nombre del ejecutable. -Wall No omite la deteccin de ningn warning. Por defecto, gcc omite una coleccin de warnings ``poco importantes''. -c Preprocesa, compila y ensambla, pero no enlaza. -g Incluye en el binario informacin necesaria para utilizar un depurador (gdb o ddd) posteriormente.
3

C++
NDICE 1. 2. 3. 4. 5. 6. 7. Compilador: g++ Directivas de compilacin Make Doxygen Utilidad de compresin tar UML Enunciado prctica 0

#IF, #ELIF, #ELSE, #ENDIF

C++

DIRECTIVAS DE COMPILACIN
C++ ofrece la posibilidad de compilacin condicional mediante la inclusin de ciertas directivas que controlan el comportamiento del preprocesador, de forma que este puede ignorar o compilar determinadas lneas del cdigo en funcin de ciertas condiciones que son evaluadas durante el preproceso.

#IFDEF, #IFNDEF

C++

DIRECTIVAS DE COMPILACIN
#ifdefendif, #ifndef#endif
Son condicionales especializadas en comprobar si un macroidentificador est definido (con #define) o no.

Sintaxis #ifdef identificador #ifndef identificador

Un macro-identificador X se define con #define X y se anula su definicin con #undef X, con lo que podemos controlar a voluntad las zonas de cdigo en que X se considera definido e indefinido. Ejercicio:

Aade a rectangulo.cpp un segundo #include rectangulo.h. Intenta compilar el cdigo de nuevo. Qu ocurre? Modifica los ficheros rectangulo.h, rectangulo.cpp y main.cpp con las directivas,#ifdef, #ifndef, #endif que consideres necesarias. Compila y comprueba que todo funciona correctamente.
6

#IFDEF, #IFNDEF

C++

DIRECTIVAS DE COMPILACIN
La siguiente situacin es muy habitual en proyectos en C++:
El fichero B.h incluye a A.h El fichero C.h incluye a A.h El fichero D.cpp incluye a B.h y a C.h

Para evitar problemas al compilar por la doble inclusin de ficheros de declaraciones (.h) se inserta las siguientes directivas en cada .h:
#ifndef __A_H #define __A_H // declaraciones en el .h #endif <fin del fichero>

C++
NDICE 1. 2. 3. 4. 5. 6. 7. Compilador: g++ Directivas de compilacin Make Doxygen Utilidad de compresin tar UML Enunciado prctica 0

C++
MAKE

make: Utilidad que automatiza el proceso de compilacin Busca un fichero de configuracin makefile o Makefile (en ese orden) Ejemplos:

make make prog1 #crea el objetivo prog1" make -f mimakefile (fich. config. mimakefile) make -f mimakefile prog1"prog1"

C++

El fichero de configuracin Makefile


Makefile de ejemplo que automatiza el comando gcc necesario para compilar el ejemplo del rectngulo.

OBJ = main.o rectangulo.o OPC = -g -Wall Objetivo ficticio COMP = g++ objetivo rden de creacin del .PHONY = clean ejecutable main: $(OBJ) $(COMP) $(OPC) $(OBJ) -o main El propio fichero y los main.o: main.cpp rectangulo.h que se incluyan en l $(COMP) $(OPC) -c main.cpp rectangulo.o: rectangulo.cpp rectangulo.h rden de $(COMP) $(OPC) -c rectangulo.cpp creacin del .o clean: rm main Tabuladores rm -r *.o
10

$ make $ make clean

C++
NDICE 1. 2. 3. 4. 5. 6. 7. Compilador: g++ Directivas de compilacin Make Doxygen Utilidad de compresin tar UML Enunciado prctica 0

11

C++

DOXYGEN

Herramienta para la generacin de documentacin (HTML entre otros formatos) a partir de comentarios en el cdigo fuente. Descargad y consultad tutorial de Doxygen en la seccin de materiales del C.V.
12

C++
NDICE 1. 2. 3. 4. 5. 6. 7. Compilador: g++ Directivas de compilacin Make Doxygen Utilidad de compresin tar UML Enunciado prctica 0

13

C++

TAR y MCOPY

Usar comando tar (comprimir) y mcopy para guardar los archivos en un disco:
$ tar cvzf prac1.tgz * $ mcopy prac1.tgz a:/ Si quiero copiar texto en lugar de binario:

$ mcopy t Coordenada.cpp a:/

Para recuperarlo del disco y descomprimirlo en la siguiente sesin:


$ mcopy a:/prac1.tgz $ tar xvzf prac1.tgz

14

C++
NDICE 1. 2. 3. 4. 5. 6. 7. Compilador: g++ Directivas de compilacin Make Doxygen Utilidad de compresin tar UML Enunciado prctica 0

15

Breve introduccin a

(Unified Modeling Language)

UML

UML es un lenguaje grfico que se utiliza para el anlisis y diseo de aplicaciones. Permite comunicar de forma precisa las ideas de diseo al equipo de desarrollo En POO usaremos nicamente el diagrama de clases Este diagrama especifica qu clases componen el sistema, sus atributos, su interfaz y sus relaciones con otras clases. En prcticas usaremos el diagrama de clases detallado 16

UML

Diagrama de clases

Cada clase se representa por una caja con tres secciones:

17

UML

Diagrama de clases Especificacin de atributos y operaciones:

El valor por defecto de un atributo es opcional La lista de argumentos de un mtodo se especifica del mismo modo que los atributos, separando los argumentos por comas. Se puede omitir el nombre de los argumentos e indicar nicamente su tipo.
18

UML

Diagrama de clases Visibilidad pblica (+) y privada (-):

Mtodos constantes:

19

UML

Diagrama de clases

La especificacin de relaciones entre objetos y entre clases, as como otras caractersticas de los diagramas de clases se tratar en sesiones posteriores.

20

C++
NDICE 1. 2. 3. 4. 5. 6. 7. Compilador: g++ Directivas de compilacin Make Doxygen Utilidad de compresin tar UML Enunciado prctica 0

21

PRCTICA 0
ENUNCIADO Los objetivos de esta pequea prctica son: Introducirnos en la P.O.O. Implementar una clase sencilla diseada en UML Familiarizarnos con la estructura de directorios del cdigo fuente y el proceso de compilacin. Realizar una entrega de prueba en el servidor de prcticas del DLSI

22

PRCTICA 0
ENUNCIADO

23

PRCTICA 0
ENUNCIADO

Dado el diagrama de clases de la figura anterior, se pide:


Implementad la clase Coordenada mediante dos ficheros

Coordenada.h: declaracin de mtodos y variables. El fichero debe ubicarse en el directorio include Coordenada.cc: implementacin de mtodos. Este fichero debe ubicarse en el directorio lib

Cread un fichero main.cc con una funcin main() donde se pidan al usuario un par de nmeros con los que debis crear una coordenada que debis imprimir por pantalla. Escribid el cdigo necesario para que cada mtodo pblico de la clase sea utilizado al menos una vez. Este fichero debe ubicarse en el directorio src. El mtodo Coordenada::imprimir() debe imprimir los valores x e y de la coordenada separados por una coma.

Comprimid toda la estructura de directorios en un fichero llamado p0-0708.tgz

tar czvf p0-0708.tgz *

24

PRCTICA 0

EVALUACIN DE LA PRCTICA
Los requisitos imprescindibles para considerar correcta la prctica son:

La prctica debe funcionar sin errores. En particular, no se debe producir ningn error del tipo segmentation fault, null pointer assignment, etc. No se deben utilizar variables globales La entrada de datos debe estar filtrada.

Los valores introducidos deben ser mayores o igual a cero

La prctica debe compilar correctamente con la orden make desde lnea de comandos.

25

PRCTICA 0
FICHERO MAKEFILE
# Este fichero no se debe modificar. Lo puedes encontrar en la seccin de materiales del CV. # La practica debe compilar con este fichero situado en el directorio raz del proyecto # (del cual cuelgan lib/ src/ e include/).

# COMP=g++ OPC=-g -Wall .PHONY=clean main: ./src/main.cc Coordenada.o ./include/Coordenada.h $(COMP) $(OPC) ./src/main.cc Coordenada.o -I ./include -o main Coordenada.o: ./lib/Coordenada.cc ./include/Coordenada.h $(COMP) $(OPC) -c ./lib/Coordenada.cc -I ./include clean: rm main rm -r *.o 26

PRCTICA 0

MODIFICACIN (opcional)
Cread un nuevo main() que genere dos nmeros aleatorios, uno para la coordenada x y otro para la coordenada y, ambos entre 0 y 100, los utilice para crear una coordenada y la muestre por pantalla.

27

PRCTICA 0

GENERACION DE NUMEROS ALEATORIOS


Funciones rand() y srand()

Permiten generar nmeros (pseudo)aleatorios. Los generadores de nmeros aleatorios (Random Number Generator, RNG) se inicializan con un nmero llamado semilla. Cada vez que se inicializa el RNG con la misma semilla, produce la misma secuencia de nmeros aleatorios. srand() inicializa el RNG. rand() produce un entero aleatorio entre 0 y RAND_MAX (definido en stdlib.h).

28

PRCTICA 0

GENERACION DE NUMEROS ALEATORIOS


Por cada ejecucin de la prctica, se debe inicializar el RNG una sola vez. Esto se suele hacer en main() o, si estamos siguiendo una estructura puramente OO, en el mtodo run() de la clase que representa a la aplicacin: #include <time.h> // para la funcion time() #include <stdlib.h> // rand() y srand() main() { srand((unsigned)time(NULL)); } Despus, cada vez que se necesite un entero aleatorio, se debe llamar a rand(): int num = rand(); Si lo que quieres obtener es un entero entre 0 y N-1: num = (int)(N*(rand()/(RAND_MAX+1.0)))

29

Вам также может понравиться