Práctica 1 - Universidad de Córdoba

Anuncio
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 x0b y0c∣
d(p,r) =
 a∗ab∗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
Descargar