2010-05-24 23 views
13

Cuando tomé mi primer curso de programación en la universidad, nos enseñaron que las variables globales eran malvadas & debe evitarse a toda costa (ya que puede desarrollar rápidamente código confuso e inmanejable). El año siguiente, nos enseñaron programación orientada a objetos y cómo crear código modular usando clases.¿Cómo puedo escribir clases que no dependen de variables "globales"?

Me parece que cada vez que trabajo con OOP, utilizo las variables privadas de mis clases como variables globales, es decir, pueden ser (y son) leídas y modificadas por cualquier función dentro de la clase. Esto realmente no me sienta bien, ya que parece presentar los mismos problemas que las variables globales tenían en lenguajes como C.

Así que supongo que mi pregunta es, ¿cómo dejo de escribir clases con variables "globales"? ¿Tendría más sentido fingir que estoy escribiendo en un lenguaje funcional? Con esto me refiero a que todas las funciones tomen los valores de retorno de los parámetros & en lugar de modificar directamente las variables de clase. Si necesito establecer cualquier campo, puedo tomar la salida de la función y asignarla en lugar de hacer que la función lo haga directamente. Esto parece que podría hacer un código más fácil de mantener, al menos para las clases más grandes. ¿Cuál es la práctica común?

+0

"tener todas las funciones tomar parámetros y valores devueltos en lugar de modificar directamente las variables de clase. Si necesito establecer cualquier campo, puedo tomar la salida de la función y asignarla en lugar de tener la función de hacerlo directamente." Así me enseñaron a programar de manera eficiente, como fuente de reutilización, legibilidad (suponiendo que los nombres de tus funciones reflejen lo que hace la función), buena estructura y facilidad de modificación. – Mike

Respuesta

11

Acepto que las variables de los miembros de la clase a veces se pueden sentir como globales de alguna manera. Encuentro que lo importante es mantener las clases pequeñas, luego solo se puede acceder a cada variable desde un número limitado de lugares. Si solo tiene unas pocas clases enormes, la diferencia entre una variable miembro y una global puede a veces ser limitada.

Pasar por alto demasiados parámetros a veces puede ser un problema también, si está desesperado por evitar todas las variables miembro, puede terminar fácilmente con demasiados parámetros que hacen que el código sea difícil de seguir.

16

me parece que cada vez que trabajo con programación orientada a objetos, utilizo variables privadas mis clases como variables globales, es decir, pueden ser (y son) leer y modificado por cualquier función dentro de la clase.

Esto es perfectamente aceptable.

Las variables están confinadas dentro de su clase, por lo que no son "globales".

Ver Encapsulation.

+0

Pero si tu clase es lo suficientemente grande, ¿qué la diferencia efectiva entre eso y un programa grande, digamos C, cambia las variables globales ¿o no? – Joel

+11

@Joel - Ese es el problema, si tus clases son tan grandes, probablemente haya un problema con el diseño general de la aplicación. –

+0

@Joel : No hay mucha diferencia, y no es muy OO ni = D. – bloparod

3

Las variables de clase no son globales, son locales para cada instancia de una clase. Este es uno de los poderosos conceptos de OOP, y es perfectamente aceptable (y la forma correcta de hacerlo [suponiendo que sus clases se ocupen de una cosa lógica, ver: encapsulación]).

2

Si sus variables miembro están accesibles en toda la aplicación, entonces creo que está estructurando el código incorrectamente para OOP. Divida el código en más clases más pequeñas, cada una de las cuales tiene un propósito claramente definido. De esta forma, cada variable de miembro privado tiene ahora un alcance limitado a solo la sección del programa que lo necesita.