elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Representación de Coordenadas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Representación de Coordenadas  (Leído 7,019 veces)
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Representación de Coordenadas
« en: 9 Abril 2014, 16:49 pm »

Buenas.

Frecuentemente hay que trabajar con coordenadas en la programación. Actualmente conozco tres formas de pasarlas:

1º A "pelo" con dos variables int:

Código
  1. int x = 1;
  2. int y = 1;
  3.  
  4. pintar(x,y);

2º Creandote una estructura "Cord":

Código
  1. struct Cord
  2. {
  3.    int X,Y;
  4.  
  5.   Cord(int x,int y) : X(x),Y(y) {}
  6. };
  7.  
  8. //...
  9.  
  10. pintar(Cord(1,1));

3º Un objeto Cord con su encapsulamiento y su todo:
Código
  1. class Cord
  2. {
  3. int X,Y;
  4.  
  5. public:
  6.  
  7. Cord(int x,int y) : X(x),Y(y) {}
  8.  
  9. int getX() const {return X;}
  10. int getY() const {return Y;}
  11. void setX(int x){X = x;}
  12. void setY(int y){Y = y;}
  13.  
  14. bool operator==(const Cord a) const {return X == a.X && Y == a.Y;}
  15. bool operator!=(const Cord a) const {return X != a.X || Y != a.Y;}
  16.        Cord operator+(const Cord a) const{return Cord(A.X+X,A.Y+Y);}
  17. };
  18.  
  19. //...
  20.  
  21. Pintar(Cord(1,1));]

En vuestra opinión. ¿Cual es la forma más adecuada? Con la primera quizás se escribe menos, aunque se te acumulan los argumentos en la función.


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Representación de Coordenadas
« Respuesta #1 en: 9 Abril 2014, 17:01 pm »

A mi me gusta más la tercera opción por varias razones:

* Existe encapsulamiento.

* Permite obtener un código más legible, sobretodo si se sobrecargan varios operadores ( suma, resta, ... )

* Su mantenimiento luego es más sencillo y se limitan la cantidad de "gazapos" por parte del que usa el objeto.

* Es muy sencillo acoplarle una batería te test para asegurar el correcto funcionamiento.

Se que tiene varias desventajas, pero desde mi punto de vista y mi experiencia ( trabajo en un cad orientado al sector naval ) me dicen que la tercera opción es la que más beneficios tiene.

Algunas desventajas:

* Resevas de memoria al crear copias del objeto, lo que reduce sensiblemente el rendimiento.

* Hay que currárselo todo al principio.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Representación de Coordenadas
« Respuesta #2 en: 9 Abril 2014, 17:33 pm »

La segunda manera tambien usa un objeto, en C++ las estructuras son a todos los efectos clases con sus miembros y clases bases publicos por defecto. Los constructores no existen en C.
« Última modificación: 9 Abril 2014, 17:35 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Representación de Coordenadas
« Respuesta #3 en: 9 Abril 2014, 17:42 pm »

La segunda manera tambien usa un objeto, en C++ las estructuras son a todos los efectos clases con sus miembros y clases bases publicos por defecto. Los constructores no existen en C.

Ya, lo que sucede es que en las estructuras, por defecto, sus miembros son públicos, lo que viola el concepto de encapsulamiento.

Además en C++ la gente espera encontrar clases... es más natural. Las estructuras, en los grupos en los que he estado, se reservan para tareas específicas, por ejemplo, para cuando hay que enviar tramas de datos por red... aunque hay que tener cuidado de no tener estructuras con herencia para no enviar basura.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Representación de Coordenadas
« Respuesta #4 en: 9 Abril 2014, 17:53 pm »

Ya, lo que sucede es que en las estructuras, por defecto, sus miembros son públicos, lo que viola el concepto de encapsulamiento.

Lo que decis es correcto - ademas las clases base se heredan por defecto como publicas tambien - pero no invalida mi afirmacion en lo absoluto, en ambos casos al llamar a pintar se usa un objeto y es lo que queria aclarar.
« Última modificación: 9 Abril 2014, 18:05 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Representación de Coordenadas
« Respuesta #5 en: 9 Abril 2014, 18:04 pm »

Yo voto a favor de la estuctura. No es necesario ningún método si solo vas a usar un X y un Y, que no interfieren en nada el uno del otro.

No es necesario controlarlos con una clase. Es más: se hace más engorroso poner coord.getX() que poner coord.x.

Pero bueno. La primera opción, desde luego, si usas muchas coordenadas, es lioso. x1 x2 x3 y1 y2 y3. Y si no lioso, menos legible.

En cualquier caso, también se puede hacer una clase con miembros públicos. Es lo mismo prácticamente. Funciones le vas a poder poner igual a clase como a estructura.

Y como dato final, yo prefiero hacer vectores, no coordenadas. Aunque prácticamente son lo mismo, tienen más usos cuerdos. No es cuerdo sumar coordenadas, en cambio sí lo es sumar vectores. No es cuerdo un producto mixto de coordenadas, pero sí uno de vectores. En fin.
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Representación de Coordenadas
« Respuesta #6 en: 9 Abril 2014, 18:29 pm »

A mi me gusta más la tercera opción por varias razones:

* Existe encapsulamiento.

* Permite obtener un código más legible, sobretodo si se sobrecargan varios operadores ( suma, resta, ... )

* Su mantenimiento luego es más sencillo y se limitan la cantidad de "gazapos" por parte del que usa el objeto.

* Es muy sencillo acoplarle una batería te test para asegurar el correcto funcionamiento.

Se que tiene varias desventajas, pero desde mi punto de vista y mi experiencia ( trabajo en un cad orientado al sector naval ) me dicen que la tercera opción es la que más beneficios tiene.

Algunas desventajas:

* Resevas de memoria al crear copias del objeto, lo que reduce sensiblemente el rendimiento.

* Hay que currárselo todo al principio.

Vaya no lo había visto así. ¿Pero es necesario el encapsulamiento en un objeto así?

La segunda manera tambien usa un objeto, en C++ las estructuras son a todos los efectos clases con sus miembros y clases bases publicos por defecto. Los constructores no existen en C.
Muy cierto, quizás debería haber sido más preciso en la terminología ^^

Y como dato final, yo prefiero hacer vectores, no coordenadas. Aunque prácticamente son lo mismo, tienen más usos cuerdos. No es cuerdo sumar coordenadas, en cambio sí lo es sumar vectores. No es cuerdo un producto mixto de coordenadas, pero sí uno de vectores. En fin.
Las coordenadas se pueden interpretar como un vector desde la posición (0,0) a la posición (x,y). Ergo si tiene un uso cuerdo.

Quizás para no liar se puede cambiar el nombre de Cord -> Vector.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Representación de Coordenadas
« Respuesta #7 en: 9 Abril 2014, 18:36 pm »

Las coordenadas se pueden interpretar como un vector desde la posición (0,0) a la posición (x,y).

Se puede interpretar. Pero sigue sin ser cuerdo, por ejemplo, ver "coordenada.longitud()".
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Representación de Coordenadas
« Respuesta #8 en: 9 Abril 2014, 18:37 pm »

Se puede interpretar. Pero sigue sin ser cuerdo, por ejemplo, ver "coordenada.longitud()".
Cierto.

Pues le cambio el nombre de Cord a vector y listo ^^
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Representación de Coordenadas
« Respuesta #9 en: 9 Abril 2014, 19:55 pm »

ummmm me voy más con la segunda opción, es algo que herede de conocimientos de amchacon y kaltorak, que trabajan de esta forma el código, y aún no estoy acostumbrado al encapsulamiento (apenas lo estoy comenzando a aplicar para c# con patrón singleton y es todo un dilema aplicarle encapsulamiento del vikingo a esa clase control) y menos en c++, y para un caso particular como este, se me hace un poco enredado utilizar tanto metodo para estas variables, prácticamente cada variable requiere de su clase y sus metodos de control, y a mi se me hace adecuado solo en ciertos casos con variables realmente importantes.

Yo voto a favor de la estuctura. No es necesario ningún método si solo vas a usar un X y un Y, que no interfieren en nada el uno del otro.

No es necesario controlarlos con una clase. Es más: se hace más engorroso poner coord.getX() que poner coord.x.

Pero bueno. La primera opción, desde luego, si usas muchas coordenadas, es lioso. x1 x2 x3 y1 y2 y3. Y si no lioso, menos legible.

En cualquier caso, también se puede hacer una clase con miembros públicos. Es lo mismo prácticamente. Funciones le vas a poder poner igual a clase como a estructura.

Y como dato final, yo prefiero hacer vectores, no coordenadas. Aunque prácticamente son lo mismo, tienen más usos cuerdos. No es cuerdo sumar coordenadas, en cambio sí lo es sumar vectores. No es cuerdo un producto mixto de coordenadas, pero sí uno de vectores. En fin.

Creo estoy de acuerdo con ivancea96 en todo, excepto en lo de vectores, bueno, casi, depende del caso.
En línea


Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Representación interna de un número real
Dudas Generales
DickGumshoe 0 2,080 Último mensaje 11 Enero 2012, 19:54 pm
por DickGumshoe
Representación de un número
Java
maikmilk 6 3,886 Último mensaje 6 Junio 2012, 16:48 pm
por lluvplay
Representación de los valores de un array en función de su indice
Programación C/C++
cabre89 3 2,123 Último mensaje 29 Octubre 2012, 22:56 pm
por flony
Problema representación dirección de memoria en C.
Programación C/C++
lanun 6 2,812 Último mensaje 28 Febrero 2014, 19:44 pm
por lanun
Representación decimal en la computadora « 1 2 »
Dudas Generales
fafafa01 12 6,043 Último mensaje 3 Julio 2016, 13:46 pm
por Orubatosu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines