La última entrega sobre POO fue ya unos meses atrás y hablábamos de los Setters y Getters, hoy tocaremos un tema sencillo también que son los Constructores de Clases. Ya que tocamos el tema aprovecharemos para saber que son las sobrecargas y como se usan (también los utilizaremos cuando veamos los métodos).
El fin de un constructor es asignar “obligar” a asignar valores a los atributos de nuestra clase, al momento de ser instanciado. Aunque si vamos por el sentido estricto de la programación podríamos escribir casi cualquier código allí dentro pero no es recomendable. Un constructor debe tener definido su alcance (en la mayoría de los casos será public) y no debe retornar ningún tipo de valor incluyendo en void. Además que debe tener el mismo nombre que su clase. Es muy común agregar validaciones dentro de los constructores, es uno de los lugares donde se escribirá una sóla vez así como en los setters y getters.
También notaremos que una clase puede tener más de un constructor, eso es lo que conocemos por sobrecarga de constructores. Todos tienen el mismo nombre pero necesariamente deben variar en la cantidad, orden y tipos de datos que reciban (al menos en uno de ellos debe haber una variante para poder identificar cual se ejecutará). Siguiendo con el código anterior agregaremos constructores a los Setters y Getters que teniamos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | package devtroce; public class Persona { /** * @author GeekZero@DevTroce.com */ // lista de atributos que la definen private String Nombre; private String Apellido; private String Documento; private int Peso; private String Ojos; private char Sexo; // Constructores public Persona() { this.setNombre(""); this.setApellido(""); this.setDocumento(""); this.setPeso(0); this.setOjos(""); this.setSexo(''); } public Persona(String Nombre, String Apellido, String Documento, int Peso, String Ojos, char Sexo) { this.setNombre(Nombre); this.setApellido(Apellido); this.setDocumento(Documento); this.setPeso(Peso); this.setOjos(Ojos); this.setSexo(Sexo); } public Persona(int Peso, String Nombre, String Apellido, String Documento, String Ojos, char Sexo) throws Exception { if (Peso < 0) throw new Exception("No se admiten peso menores a 0"); this.setNombre(Nombre); this.setApellido(Apellido); this.setDocumento(Documento); this.setPeso(Peso); this.setOjos(Ojos); this.setSexo(Sexo); } public Personal(String Nombre, String Apellido, String Documento) { this.setNombre(Nombre); this.setApellido(Apellido); this.setDocumento(Documento); this.setPeso(0); this.setOjos(""); this.setSexo(''); } public String getApellido() { return Apellido; } public void setApellido(String Apellido) { this.Apellido = Apellido; } public String getDocumento() { return Documento; } public void setDocumento(String Documento) { this.Documento = Documento; } public String getNombre() { return Nombre; } public void setNombre(String Nombre) { this.Nombre = Nombre; } public String getOjos() { return Ojos; } public void setOjos(String Ojos) { this.Ojos = Ojos; } public int getPeso() { return Peso; } public void setPeso(int Peso) { this.Peso = Peso; } public char getSexo() { return Sexo; } public void setSexo(char Sexo) { this.Sexo = Sexo; } // metodo para poder ejecutar la clase en Java (irrelevante para el conceto estudiado) public static void main(String[] args) throws Exception{ // instancia de la clase persona // el nombre del objeto debe ser distinto que el nombre de su clase, // puede tener cualquiera que querramos Persona persona = new Persona(); // asignación de valores en el constructor Persona otraPersona = new Persona("Winona", "Raider", "666", 65, "Marrones", 'F'); // asignación de valores al objeto persona.setNombre("Linus"); persona.setApellido("Torvals"); persona.setDocumento("777"); persona.setPeso(80); persona.setOjos("Azul"); persona.setSexo('M'); // listado System.out.println("La primer persona es: " + persona.getNombre() + " " + persona.getApellido()); System.out.println("La segunda persona es: " + otraPersona.getNombre() + " " + otraPersona.getApellido()); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | ' @author GeekZero@DevTroce.com Public Class Persona ' lista de atributos que la definen Private _Nombre As String Private _Apellido As String Private _Documento As String Private _Peso As Integer Private _Ojos As String Private _Sexo As Char ' Si no se incluye el parámetro Public Sub New() ' MyBase.New() siempre debe estar en el constructor MyBase.New() End Sub Public Sub New(ByVal Nombre As String, ByVal Apellido As String, ByVal Documento As String, ByVal Peso As Integer, ByVal Ojos As String, ByVal Sexo As Char) ' MyBase.New() siempre debe estar en el constructor MyBase.New() _Nombre = Nombre _Apellido = Apellido _Documento = Documento _Peso = Peso _Ojos = Ojos _Sexo = Sexo End Sub Public Sub New(ByVal Peso As Integer, ByVal Apellido As String, ByVal Documento As String, ByVal Nombres As String, ByVal Ojos As String, ByVal Sexo As Char) ' MyBase.New() siempre debe estar en el constructor MyBase.New() If Peso < 0 Then Throw New Exception("El peso no debe ser menor a 0") End If _Nombre = Nombre _Apellido = Apellido _Documento = Documento _Peso = Peso _Ojos = Ojos _Sexo = Sexo End Sub Public Sub New(ByVal Nombre As String, ByVal Apellido As String, ByVal Documento As String) ' MyBase.New() siempre debe estar en el constructor MyBase.New() _Nombre = Nombre _Apellido = Apellido _Documento = Documento _Peso = 0 _Ojos = "" _Sexo = "" End Sub Public Property Nombre() As String Get Return _Nombre End Get Set(ByVal value As String) _Nombre = value End Set End Property Public Property Apellido() As String Get Return _Apellido End Get Set(ByVal value As String) _Apellido = value End Set End Property Public Property Documento() As String Get Return _Documento End Get Set(ByVal value As String) _Documento = value End Set End Property Public Property Peso() As String Get Return _Peso End Get Set(ByVal value As String) _Peso = value End Set End Property Public Property Ojos() As String Get Return _Ojos End Get Set(ByVal value As String) _Ojos = value End Set End Property Public Property Sexo() As String Get Return _Sexo End Get Set(ByVal value As String) _Sexo = value End Set End Property Public Sub Mostrar() ' instancia de la clase persona ' el nombre del objeto debe ser distinto que el nombre de su clase, ' puede tener cualquiera que querramos Dim persona As Persona = New Persona ' asignación de valores al objeto persona.Nombre = "Linus" persona.Apellido = "Torvals" persona.Documento = "777" persona.Peso = 80 persona.Ojos = "Azul" persona.Sexo = "M" ' instancia de la clase persona Dim otraPersona As Persona = New Persona("Winona", "Rider", "666", 65, "Marrones", Convert.ToChar("F")) ' listado Debug.WriteLine("La primer persona es: " + persona.Nombre + " " + persona.Apellido) Debug.WriteLine("La segunda persona es: " + otraPersona.Nombre + " " + otraPersona.Apellido) End Sub End Class |








en
en
en
en
en
Excelentes tus artículos, solo me gustaría que completaras el código agregando otra instancia para invocar al método que genera la excepción, para ver cómo funciona.
Muchas gracias!