post icon

Programación Orientada a Objetos: Constructores y Sobrecarga

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

Comentarios desde Facebook:

  1. avatar
    Your Name ARGENTINA Internet Explorer Windows
    10 Marzo 2013 at 15:20 #

    sos un salchicha,,,

  2. avatar
    yiyoyiyo MEXICO Mozilla Firefox Windows
    18 Marzo 2012 at 01:19 #

    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.

  3. avatar
    Irene NETHERLANDS Mozilla Firefox Windows
    13 Septiembre 2011 at 05:05 #

    Muchas gracias!

Responder