Verdadero o Falso
Se debe contestar si son verdaderas o falsas. No es necesario justificar las respuestas, pero puede hacerlo si lo creee necesario.
Selección Múltiple
Elija solo una opción en cada pregunta. No es necesario justificar las respuestas, pero puede hacerlo si lo creee necesario.
Desarrollo
Explique los conceptos de atributos de clase y atributos constantes y muestre, con ejemplos, que no son conceptos que deban ir juntos. Dar 4 ejemplos: un atributo de clase constante, un atributo de clase cuyo valor pueda variar, un atributo de instancia (el que no es de clase) constante y un atributo de instancia cuyo valor pueda variar.
Atributos de clase son aquellos atributos que son compartidos por cada una de las instancias de dicha clase, y por eso existe un unico valor asociado a todo ese grupo de instancias de clase para dicha clase.
Para el caso mas concreto y donde se utiliza dicho concepto es el siguiente: Supongamos en un código C++ o Java que queremos llevar la cuenta de las instancias que son creadas, podemos tener entonces algo de código asi:
[C++]
class ClaseA { private: //Atributo de clase o estatico de la clase ClaseA static int cantidadInstancias = 0; public: ClaseA(){ ClaseA::setCantidadInstancias( ClaseA::getCantidadInstancias() + 1 ); }; ~ClaseA() { ClaseA::setCantidadInstancias( ClaseA::getCantidadInstancias() - 1 ); }; static int getCantidadInstancias() { return cantidadInstancias; } static void setCantidadInstancias(int cantidad) { cantidadInstancias = cantidad; } };
[JAVA]
public class ClaseContadora { private static int cantidadInstancias = 0; public ClaseContadora() { super(); ClaseContadora.setCantidadInstancias( ClaseContadora.getCantidadInstancias() + 1 ); }; public static int getCantidadInstancias() { return cantidadInstancias; }; public static void setCantidadInstancias(int cantidad) { cantidadInstancias = cantidad; } };
Como veràn con ese codigo se guarda un solo valor de dicho atributo para todas las instancias de esa clase y ese valor se comparte entre todas las instancias.
Con respecto a los atributos constantes son atributos que se les otorga un valor inicial y luego de otorgarsele ese valor inicial no puede ser modificado, previene de que pueda ser sobreescrito, la principal utilidad de todo esto es tener datos que son fijos, que no varian con el tiempo.
Ambos conceptos son completamente diferentes uno de otro, porque denotan significados diferentes, entre ellos el primero es un dato que si bien cambian con el ciclo de vida de la aplicacion se comparte entre todas las instancias de la clase, por otro lado el segundo concepto de un atributo constante es un atributo que no cambia su valor con el ciclo de la aplicacion y por ende se lo de nota como constatne (valga la redundancia).
Los 4 ejemplos que propone el enunciado son: Para atributo de clase que varia. ya vimos un ejemplo en C++ y en Java.
Para un ejemplo de un atributo de clase constante podemos definir lo siguiente:
public class ClaseLectoraXML { private static final String ELEMENTO_RAIZ = "RAIZ"; private static final String ELEMENTO_HIJO ="PRIMER HIJO"; public ClaseLectoraXML(String archivo) { super(); inicializar(); } public void inicializar() { ... .... ...... }; }
Como veràn en este ejemplo defini una clase que se encarga de leer archivos XML, el codigo de lectura de XML esta sujeto a las clases que leen XML que viene con Java, y pro eso el codigo no està pero defini 2 atributos de clase (static) y cosntantes (final) los defini así por el simple hecho de que son datos que comparten todas las instancias de clase que leen XML y a su vez son constantes porque no cambian con el ciclo de vida de la aplicacion.
Ahora para el emjemplo de un atributo constante de instancia:
public class Persona { public final String SEXO_MASCULINO ="M"; public final String SEXO_FEMENINO ="F"; private String nombre; private String sexo; public Persona() { super(); } public void setNombre(String nombre) { this.nombre = nombre; }; public void setSexo(String sexo) { this.sexo = sexo; }; public boolean esMasculino() { return getSexo().equals(SEXO_MASCULINO); }; };
Como veràn en este ejemplo defini un atributo constante (definido por el modificador final) pero no es de clase, es de instancia es decir que cada instancia va a tener un atributo con el valor constante.
En si aca se puede plantear una gran confusion y es de que en este caso particular un atributo constante y de instancia, se ve de que todas las instancias tienen ese atributo con el mismo valor, pero no se comparte ese atributo entre si, cada instancia tiene su atributo propio, y ese atributo tiene el mismo valor en todas las instancias.
Con respecto al ultimo ejemplo un atributo de instancia que pueda variar, es el de cualquier atributo que una clase puede tener, con su metodo para modificarse.
tomoemos la clase Persona un tanto mas simplificada:
public class Persona { private String nombre; public Persona(String nombre) { super(); setNombre(nombre); } public void setNombre(String nombre) { this.nombre = nombre; //Se puede ver como acá se modifica el atributo de instancia nombre de la clase Persona } public String getNombre() { return this.nombre; } };
Bueno este es un caso de lo mas normal ya que la mayoria de los atributos de definimos en una clase son de isntancia y se pueden modificar, solo casos especiales donde queremos compartir un atributo definimos atributos de clase (static) y en ciertos casos donde queremso que un dato no pueda modificarse, ya sea desde una cadena que nunca varia en una clase de utilidad o etc definimos un atributo constante (final en java y cosnt en C++)