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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  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,032 veces)
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Representación de Coordenadas
« Respuesta #10 en: 10 Abril 2014, 08:39 am »

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

En el caso concreto de las coordenadas no hay mucha diferencia... Sin embargo me gustaría matizar un detalle:

* Si cambias la implementación de la función, sin cambiar la firma, únicamente necesitas recompilar la clase para que todo siga funcionando.

* Si expones la variable directamente y después necesitas cambiarlo a función porque te das cuenta de que necesitas realizar algún chequeo u operación adicional, te ves obligado a recompilar todo el código ( en mi caso unas 6 horas ).

* Los getters y los setters pueden ser convertidos a inline por el compilador, por lo que tendrían exactamente el mismo rendimiento que exponer la variable directamente.

Por ese motivo a mí me gusta más la tercera opción... pero creo que es también cuestión de costumbre.

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

también puedes declarar la clase tal que:

Código
  1. class Coord
  2. {
  3.  public:
  4.    int X( ) const;
  5.    void X( int x );
  6.  
  7.    int Y( ) const;
  8.    void Y( int y );
  9.  
  10.    void SetValues( int x, int y );
  11. };

Tampoco hay demasiada diferencia entre poner coord.X( valor ) y coord.X = valor.

Por otro lado, si es cierto que estaría genial que en alguna revisión incorporasen el concepto de propiedades a C++... reconozco que el uso del operador = es más intuitivo.

También recordar que gracias a la sobrecarga de operadores, es posible "linealizar" este tipo de estructuras para poder acceder a sus elementos de forma secuencial:

Código
  1. class Coord
  2. {
  3.  public:
  4.    int X( ) const;
  5.    void X( int x );
  6.  
  7.    int Y( ) const;
  8.    void Y( int y );
  9.  
  10.    int& operator[]( int index ) const
  11.    {
  12.      int to_return = 0;
  13.  
  14.      if ( index == 0 )
  15.        to_return = x;
  16.      else if ( index == 1 )
  17.        to_return = y;
  18.  
  19.      return to_return;
  20.    }
  21. };

Otra ventaja importante de usar getters y setters es que se pueden poner breakpoints en los mismos... mientras que para los accesos directos a variables esto es imposible.


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Representación de Coordenadas
« Respuesta #11 en: 10 Abril 2014, 12:41 pm »

* Si expones la variable directamente y después necesitas cambiarlo a función porque te das cuenta de que necesitas realizar algún chequeo u operación adicional, te ves obligado a recompilar todo el código ( en mi caso unas 6 horas ).
Un inciso.

Si cambias el tipo de la coordenada de int a float (o añades algún método/operador nuevo)... ¿No tendrías que recompilar todo el código? Para que te coja la declaración de la clase digo.

Lo pregunto por si conoces algún atajo que yo no sepa.


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 #12 en: 10 Abril 2014, 13:00 pm »

Si cambias el tipo de la coordenada de int a float (o añades algún método/operador nuevo)... ¿No tendrías que recompilar todo el código? Para que te coja la declaración de la clase digo.

Es que eso no es un chequeo u operación adicional... eso es un cambio de variable directamente.

Yo me refería a, por ejemplo, tener que añadir una comprobación para evitar coordenadas con valores negativos, o limitar el número de decimales, en el caso del tipo float, para evitar "oscilaciones" debido a la falta de precisión.

En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


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


Ver Perfil WWW
Re: Representación de Coordenadas
« Respuesta #13 en: 10 Abril 2014, 13:42 pm »

Otra ventaja importante de usar getters y setters es que se pueden poner breakpoints en los mismos... mientras que para los accesos directos a variables esto es imposible.

Depende de que no sean metodos inline (cosa mas bien comun ya que suelen ser de un par de lineas), por otro lado si tenes muchos objetos de esa clase en uso tendras muchos breaks y si te interesa uno en particular es posible poner breakpoints en memoria (aplica a los miembros de una clase y a variables).
« Última modificación: 10 Abril 2014, 13:45 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 #14 en: 10 Abril 2014, 14:29 pm »

Si compilas en Debug, desde luego no van a ser inline porque no se aplicarán optimizaciones... por otro lado, breakpoints en memoria, estoy seguro que muchísima gente no sabe utilizarlos o, directamente, no sabe que existen.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


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


Ver Perfil WWW
Re: Representación de Coordenadas
« Respuesta #15 en: 10 Abril 2014, 15:06 pm »

Por eso dije que depende, en mi experiencia de miles de horas de depuracion en Release suele suceder mucho. Que lo aprendan en el foro seria muy bueno, es muy util si la funcion es llamada multitud de veces.
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
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,085 Último mensaje 11 Enero 2012, 19:54 pm
por DickGumshoe
Representación de un número
Java
maikmilk 6 3,890 Ú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,126 Ú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,816 Último mensaje 28 Febrero 2014, 19:44 pm
por lanun
Representación decimal en la computadora « 1 2 »
Dudas Generales
fafafa01 12 6,069 Último mensaje 3 Julio 2016, 13:46 pm
por Orubatosu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines