Convenciones Java y UML
Constructores explicitos e implicitos
Cuando el entorno de ejecución Java tiene que crear una instancia de una Clase lo primero que hace es llamar a una especie de Constructor que se crea internamente y que se le conoce como Constructor por defecto e inicicializa las variables de instancia a sus valores por defecto.
Las convenciones sobre declarar Constructores sin argumentos y sin contenido varían dependiendo de si se declaran o no se declaran otros Constructores sobrecargados.
No declaramos ningún otro Constructor sobrecargado
No hace falta que esté declarado en el código de la Clase ni tampoco en la Clase de Diseño de un Diagrama de Clases de Diseño UML.
Aquí tenemos una Clase de Diseño llamada Bicicleta que no tiene ningún otro Constructor sobrecargado
Esta es la implementación de la Clase Bicicleta
package paqtvestandar;
public class Bicicleta {
String marca;
public void cambiarMarcha() {
// aquí tendría que haber código Java que implemente este método
}
public void frenar() {
// aquí tendría que haber código Java que implemente este método
}
public void setMarca(String valorMarca) {
marca = valorMarca;
}
public String getMarca(){
return marca;
}
} |
y ahora creamos una instancia de la clase
Bicicleta desde cualquier otro objeto
Bicicleta b1 = new Bicicleta(); |
podemos observar que la Clase
Bicicleta no tiene ningún Constructor declarado y todavía menos inicializado. En estos casos se dice que la Clase tiene un
Constructor implícito y que el entorno de ejecución Java sólo utilizará el
Constructor por defecto
Constructores con argumentos
Estos Constructores sobrecargados
- nos permiten crear objetos pasándoles diferentes valores
- estarán incluidos tanto en el código de la Clase como en las Clases de diseño de un Diagrama de Clases de diseño UML
Aquí tenemos una Clase de Diseño llamada Bicicleta con un Constructor sobrecargado. En UML nos podemos ahorrar la escritura del Constructor que no tiene argumentos para ahorramos un espacio muy valioso en este tipo de diagramas
Esta es la implementación de la Clase Bicicleta
package paqtvestandar;
public class Bicicleta {
String marca;
public Bicicleta() {
}
public Bicicleta(String valorMarca) {
marca = valorMarca()
}
public void cambiarMarcha() {
// aquí tendría que haber código Java que implemente este método
}
public void frenar() {
// aquí tendría que haber código Java que implemente este método
}
public void setMarca(String valorMarca) {
marca = valorMarca;
}
public String getMarca(){
return marca;
}
} |
- public Bicicleta() {
- este constructor sin argumentos tiene que estar escrito dentro de la Clase aunque no tenga contenido
- si no se hace así el compilador se quejará cuando desde otro objeto queramos crear una instancia te tipo Bicicleta con un Constructor sin argumentos
Y ahora creamos dos instancias de la clase Bicicleta desde cualquier otro objeto
teniendo en cuenta que en estos momentos la Clase Bicicleta tiene declarada e inicializada de forma explícita un Constructor sobrecargado.
Bicicleta b1 = new Bicicleta();
Bicicleta b2 = new Bicicleta("Cannondale"); |
- Bicicleta b1 = new Bicicleta();
- en este caso el entorno de ejecución Java utiliza
- el Constructor por defecto que realiza lo siguiente
- inicailiza la variable de instancia matricula a su valor por defecto que en este caso por ser una Clase lo inicilaliza a valor null
- y obtiene una referencia al nuevo objeto que se guarda en la variable de referencia b1
- Bicicleta b2 = new Bicicleta("Cannondale");
- en este caso el entorno de ejecución Java utiliza
- primeramente el Constructor por defecto que realiza lo siguiente
- inicailiza la variable de instancia matricula a su valor por defecto que en este caso por ser una Clase lo inicilaliza a valor null
- y seguidamente el Constructor sobrecargado con un argumento de tipo String que realiza lo siguiente
- inicializa la variable de instancia marca en este caso con el valor "Cannondale"
- y obtiene una referencia al nuevo objeto que se guarda en la variable de referencia b2