variable una resueltos que objetos miembros miembro instancia ejercicios comportamientos clases clase variables methods declaration

variables - resueltos - cuándo pasar un parámetro y cuándo usar una variable de instancia



variables en clases (5)

Como se refiere a variables de instancia, asumo que está trabajando en un lenguaje orientado a objetos. Hasta cierto punto, cuándo usar variables de instancia, cómo definir su alcance y cuándo usar variables locales es subjetivo, pero hay algunas reglas básicas que puedes seguir cada vez que creas tus clases.

  • Las variables de instancia generalmente se consideran atributos de una clase. Piense en estos como adjetivos del objeto que se creará a partir de su clase. Si los datos de su instancia se pueden utilizar para ayudar a describir el objeto, entonces es seguro apostar que es una buena opción, por ejemplo, los datos.

  • Las variables locales se usan dentro del alcance de los métodos para ayudarlos a completar su trabajo. Por lo general, un método debe tener como objetivo obtener algunos datos, devolver algunos datos y / o procesar / ejecutar un algoritmo en algunos datos. A veces, ayuda pensar en las variables locales como formas de ayudar a que un método llegue de principio a fin.

  • El alcance de la variable de instancia no es solo por seguridad, sino también por encapsulación. No asuma que el "objetivo debe ser mantener todas las variables privadas". En los casos de herencia, hacer que las variables estén protegidas suele ser una buena alternativa. En lugar de marcar todos los datos de instancia como públicos, crea getters / setters para aquellos a los que se necesita acceder al mundo exterior. No los ponga todos disponibles, solo los que necesita. Esto vendrá durante todo el ciclo de vida de desarrollo, es difícil de adivinar desde el principio.

Cuando se trata de pasar datos en una clase, es difícil decir que lo que estás haciendo es una buena práctica sin ver un código. A veces, operar directamente en los datos de la instancia está bien; otras veces, no lo es. En mi opinión, esto es algo que viene con la experiencia: desarrollarás cierta intuición a medida que mejoren tus habilidades de pensamiento orientado a objetos.

¿Cómo deciden entre hacer un seguimiento de algo localmente y luego simplemente pasarlo a cada método que llamen, o declarar una variable de instancia y usarla en los métodos?

Tiendo a preferir variables de instancia guardadas en una lista al final de la clase. Pero a medida que mis programas se vuelven más y más complicados, esta lista se hace cada vez más larga ... Me imagino que si algo se pasa con suficiente frecuencia debería ser visible para todos los niños y niñas que lo necesitan, pero luego empiezo a preguntarme: "¿Por qué no hacer que todo sea público? ¡Entonces ya no habrá más necesidad de pasar nada!"


EN MI HUMILDE OPINIÓN:

Si la variable forma parte del estado de la instancia, entonces debe ser una variable de instancia - classinstance HAS-A instancevariable.

Si descubro que paso repetidamente algo en los métodos de una instancia, o si encuentro que tengo una gran cantidad de variables de instancia, probablemente probaré y veré mi diseño en caso de que haya omitido algo o haya realizado una mala abstracción en alguna parte.

Espero eso ayude


En mi opinión, las variables de instancia solo son necesarias cuando los datos se usarán en todas las llamadas.

Aquí hay un ejemplo:

myCircle = myDrawing.drawCircle(center, radius);

Ahora permite que la creación de imágenes de la clase myDrawing use 15 funciones auxiliares para crear el objeto myCircle y cada una de esas funciones necesitará el centro y el radio. Aún no deberían establecerse como variables de instancia de la clase myDrawing. Porque nunca más se necesitarán.

Por otro lado, la clase myCircle necesitará almacenar el centro y el radio como variables de instancia.

myCircle.move(newCenter); myCircle.resize(newRadius);

Para que el objeto myCircle sepa cuál es su radio y su centro cuando se realizan estas nuevas llamadas, es necesario que se almacenen como variables de instancia, y no como pasadas a las funciones que las necesitan.

Entonces, básicamente, las variables de instancia son una forma de guardar el "estado" de un objeto. Si una variable no es necesaria para conocer el estado de un objeto, entonces no debe ser una variable de instancia.

Y en cuanto a hacer todo público. Podría hacer tu vida más fácil en el momento. Pero volverá a perseguirte. Pease no.


Por supuesto, es fácil mantener una gran lista de variables públicas en la clase. Pero incluso de forma intuitiva, puedes decir que este no es el camino a seguir.

Defina cada variable justo antes de usarla. Si una variable admite la función de un método específico, úsela solo en el alcance del método.

También piense en la seguridad, una variable de clase pública es susceptible a cambios no deseados desde el código "externo". Su principal objetivo debe ser mantener todas las variables privadas, y cualquier variable que no lo sea, debería tener una muy buena razón para serlo.

Acerca de pasar los parámetros en toda la pila, esto puede ponerse muy rápido. Una regla práctica es mantener las firmas de sus métodos limpias y elegantes. Si ve muchos métodos que usan los mismos datos, decida si es lo suficientemente importante como para ser un miembro de la clase, y si no lo es, refactorice su código para que tenga más sentido.

Todo se reduce al sentido común. Piense exactamente dónde y por qué declara cada nueva variable, cuál debe ser su función y, a partir de allí, tome una decisión con respecto a qué ámbito debe vivir.


Principalmente, esto depende de la duración de los datos que almacena en la variable. Si los datos solo se usan durante un cálculo, páselos como un parámetro. Si los datos están vinculados a la duración del objeto, use una variable de instancia.

Cuando su lista de variables sea demasiado larga, tal vez sea un buen momento pensar en refaccionar algunas partes de la clase en una nueva clase.