PROGRAMACIÓN ORIENTADA A OBJETOS GRADO EN INGENIERÍA INFORMÁTICA SEGUNDO CURSO DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO ESCUELA POLITÉCNICA SUPERIOR UNIVERSIDAD DE CÓRDOBA CURSO ACADÉMICO: 2011 – 2012 • Número de práctica: 1 • Objetivos ◦ Definir tipos abstractos de datos utilizando el punto de vista de “la programación estructurada”. ▪ punto2D ▪ recta2D ◦ En la práctica 2, se definirán los mismos tipos de datos pero utilizando el punto de vista de la “programación orientada a objetos”. ◦ Utilizar recursos habituales de programación ◦ Presentar conceptos preliminares de C++ • Recursos habituales de programación ◦ Makefile ◦ Directivas de depuración ◦ Uso de "guardas" de ficheros de cabecera ◦ Código comentado ▪ Comentarios de línea ▪ Comentarios de doxygen • Conceptos preliminares de C++ ◦ Notación de C++ para la inclusión de ficheros de cabecera ◦ Definición y uso de espacios de nombres ◦ Convenios de notación de variables y funciones ◦ Declaración de variables en cualquiera lugar, pero antes de su utilización ◦ Entrada y salida en C++: cin, cout y endl ◦ Nuevo tipo de dato lógico: bool ◦ Declaración de estructuras sin utilizar “tyepdef” ◦ Paso de párametros por “referencia” ◦ Polimorfismo o sobrecarga de funciones 1 ◦ Funciones con argumentos pasados por defecto ◦ Funciones “inline” ◦ Gestión de memoria: new y delete • Descripción ◦ Se deben codificar las funciones de los tipos abstractos de datos Punto2D y Recta2D para que funcione correctamente el programa codificado en el fichero “practica_1.cpp” ◦ Se debe crear el espacio de nombres “poo” para el código desarrollado en la asignatura. ◦ Se debe utilizar un fichero “makefile” para compilar el código. ◦ Tipo abstracto de datos “Punto2D” ▪ Atributos: • Coordenadas “x” e “y” del punto en el plano euclídeo P = (x, y) • Las coordenadas son del tipo real de punto flotante. ▪ Funciones o métodos • Consulta ◦ getX: recibe un Punto2D y devuelve su atributo “x” ◦ getY: recibe un Punto2D y devuelve su atributo “y” • Modificación ◦ setX: recibe un Punto2D “p” pasado por referencia y un valor numérico “v” y le asigna dicho valor a la componente “x” del punto. ◦ setY: recibe un Punto2D “p” pasado por referencia y un valor numérico “v” y le asigna dicho valor a la componente “y” del punto. • Observación: ◦ Las demás funciones deben utilizar las funciones de acceso y modificación del tipo abstracto de datos. • Creación: función polimórfica o sobrecargada crearPunto2D ◦ Versión 1: ▪ Recibe como parámetros a las coordenadas “x” e “y” y devuelve un objeto del tipo Punto2D con las coordenadas indicadas. ▪ Esta función tiene argumentos por defecto. ▪ El valor por defecto de los parámetros es 0.0 ◦ Versión 2: ▪ Recibe como parámetro un Punto2D “q” pasado por referencia y devuelve otro Punto2D con una copia de los valores del parámetro “q”. • Otras funciones ◦ leerPunto2D ▪ Lee desde el teclado las coordenadas y se las asigna a un punto Punto2D pasado por referencia ◦ escribirPunto2D: 2 ▪ Recibe un Punto2D y escribe por pantalla sus coordenadas de la forma “(x, y)”. ◦ calcularDistanciaEuclidea2D ▪ Recibe dos Puntos2D y devuelve su distancia euclídea. ▪ Observación • El fichero punto2D.hpp debe contener ◦ Definición de punto2D ◦ Funciones “inline” ▪ getX ▪ getY ▪ setX ▪ setY ▪ versiones de crearPunto2D ◦ Prototipo de las otras funciones ▪ leerPunto2D ▪ escribirPunto2D ▪ calcularDistanciaEuclidea • El fichero punto2D.cpp debe contener el código de las funciones ◦ leerPunto2D ◦ escribirPunto2D ◦ calcularDistanciaEuclidea2D ◦ Tipo abstracto de datos “Recta2D” ▪ Atributos: • coeficientes “a”, “b” y “c” de la recta en el plano euclídeo. ◦ aX+bY+c=0 • Los coeficientes son del tipo real de punto flotante. ▪ Funciones o métodos: • Consulta ◦ getA: recibe una Recta2D “r” y devuelve su atributo “a” ◦ getB: recibe una Recta2D “r” y devuelve su atributo “b” ◦ getC: recibe una Recta2D “r” y devuelve su atributo “c” • Modificación ◦ setA: recibe una Recta2D “r” pasada por referencia y un valor numérico “v” y le asigna dicho valor al coeficiente “a” de la recta. ◦ setB: recibe una Recta2D “r” pasada por referencia y un valor numérico “v” y le asigna dicho valor al coeficiente “b” de la recta. ◦ setC: recibe una Recta2D “r” pasada por referencia y un valor numérico “v” y le asigna dicho valor al coeficiente “c” de la recta. • Observación: ◦ Las demás funciones deben utilizar las funciones de acceso y 3 • • modificación del tipo abstracto de datos. Creación: función polimórfica o sobrecargada crearRecta2D ◦ Versión 1: ▪ Recibe como parámetros a los coeficientes “a”, “b” y “c” y devuelve un objeto del tipo Recta2D con los coeficientes indicados. ▪ Esta función tienen argumentos por defecto. ▪ El valor por defecto de los coeficientes es 1.0, que permitirá crear la recta X + Y + 1 = 0 ◦ Versión 2: ▪ Recibe como parámetro un Recta2D “s” pasado por referencia y devuelve otra Recta2D con una copia de los valores del parámetro “s”. ◦ Versión 3: ▪ Recibe dos Puntos2D “p1” y “p2” y crea la recta que pasa por dichos puntos. Otras funciones ◦ leerRecta2D ▪ Lee desde el teclado los coeficientes y se los asigna a una Recta2D “r” pasada por referencia. ◦ escribirRecta2D: ▪ Recibe una Recta2D y escribe por pantalla la ecuación “a X + b Y + C = 0”. ▪ Se valorarán las siguientes mejoras • Escribir correctamente el signo de los coeficientes • Omitir los coeficientes nulos. • Si un coeficiente vale 1 entonces solamente se ha de escribir la incógnita ◦ Por ejemplo r: 3 x - 1 y + 0 = 0 ◦ Se podría escribir r: 3 x - y = 0 ◦ calcularDistanciaPunto2DRecta2D ▪ Recibe un Punto2D “p” y una Recta2D “r” y calcula la distancia del punto a la recta ▪ Observación • Si el punto p = (x0, y0) y la recta es aX + b Y + c = 0 entonces la distancia del punto a la recta es ∣a x0b y0c∣ d(p,r) = a∗ab∗b ◦ sonRectas2DPerpendiculares ▪ Recibe dos Rectas2D “r1” y “r2” comprueba si son perpendiculares ▪ Las rectas • r1: a1 X + b1 Y + c1 = 0 • r2: a2 X + b2 Y + c2 = 0, 4 son perpendiculares si a1 * a2 + b1 * b2 = 0.0 ▪ El valor devuelto ha de ser de tipo “bool” ◦ sonRectas2DParalelas ▪ Recibe dos Rectas2D “r1” y “r2” comprueba si son paralelas ▪ Las rectas • r1: a1 X + b1 Y + c1 = 0 • r2: a2 X + b2 Y + c2 = 0, son paralelas si a1 * b2 - b1 * a2 = 0.0 ▪ El valor devuelto ha de ser de tipo “bool” ▪ Observaciones • Se deben utilizar los comandos de doxygen para comentar las funciones y los tipos de datos. Consúltense los ficheros ◦ plantilla-funcion.txt ◦ plantilla-TAD.version1.txt • Se debe utilizar un fichero “makefile” de compilación • Las funciones codificadas deben permitir el funcionamiento del programa denominado practica_1.cpp • El fichero recta2D.hpp debe contener ◦ Definición de punto2D ◦ Funciones “inline” ▪ getA ▪ getB ▪ getC ▪ setA ▪ setB ▪ setC ▪ versiones de crearRecta2D ◦ Prototipo de las otras funciones ▪ leerRecta2D ▪ escribirRecta2D ▪ calcularDistanciaPunto2DRecta2D ◦ sonRectas2DPerpendiculares ◦ sonRectas2DParalelas • El fichero recta2D.cpp debe contener el código de las funciones ◦ leerPunto2D ◦ escribirPunto2D ◦ calcularDistanciaEuclidea2D ◦ sonRectas2DPerpendiculares ◦ sonRectas2DParalelas 5