|
|
|
|
86
|
|
86
|
|
87
|
### Objetos
|
87
|
### Objetos
|
88
|
|
88
|
|
89
|
-Un objeto es un ente que contiene datos (al igual que una variable), llamados sus *atributos* o *miembros dato*, y también contiene procedimientos, llamados *métodos* o *funciones miembro*, que se usan para manipularlos. Los objetos son *instancias* de una clase que se crean de manera similar a como se definen las variables:
|
|
|
|
|
89
|
+Un objeto es un ente que contiene datos llamados sus *atributos* o *miembros dato*, y también contiene procedimientos, llamados *métodos* o *funciones miembro*, que se usan para manipularlos. Los objetos son *instancias* de una clase que se crean de manera similar a como se definen las variables. Por ejemplo, ya conoces como crear objetos de tipo `string` en tus programas:
|
90
|
|
90
|
|
91
|
-`NombreClase nombreObjeto;`
|
|
|
|
|
91
|
+```cpp
|
|
|
92
|
+string nombre;
|
|
|
93
|
+```
|
92
|
|
94
|
|
93
|
Una vez creamos un objeto, podemos interactuar con él usando los métodos de la clase a la que pertenece.
|
95
|
Una vez creamos un objeto, podemos interactuar con él usando los métodos de la clase a la que pertenece.
|
94
|
|
96
|
|
95
|
### Métodos de una clase
|
97
|
### Métodos de una clase
|
96
|
|
98
|
|
97
|
-Los métodos de una clase determinan qué acciones podemos tomar sobre los objetos de esa clase. Los métodos son parecidos a las funciones en el sentido de que pueden recibir parámetros y regresar un resultado. Una forma elemental de conocer los métodos de una clase es leyendo la declaración de la clase. Por ejemplo, el siguiente código es parte de la declaración de la clase `Bird` en el archivo `bird.h`.
|
|
|
|
|
99
|
+Los *métodos* o *funciones miembro* de una clase determinan qué acciones podemos tomar sobre los objetos de esa clase. Los métodos son parecidos a las funciones en el sentido de que pueden recibir parámetros y regresar un resultado. Una forma elemental de conocer los métodos de una clase es leyendo la declaración de la clase. Por ejemplo, el siguiente código es parte de la declaración de la clase `Bird` en el archivo `bird.h`.
|
98
|
|
100
|
|
99
|
---
|
101
|
---
|
100
|
|
102
|
|
101
|
|
103
|
|
102
|
-```
|
|
|
103
|
-class Bird : public QWidget
|
|
|
104
|
-{
|
|
|
105
|
-.
|
|
|
106
|
-.
|
|
|
107
|
-.
|
|
|
|
|
104
|
+```cpp
|
|
|
105
|
+class Bird : public QWidget {
|
|
|
106
|
+private:
|
|
|
107
|
+ int size;
|
|
|
108
|
+ QString faceColor;
|
|
|
109
|
+ .
|
|
|
110
|
+ .
|
|
|
111
|
+public:
|
108
|
Bird(int , EyeBrowType , QString , QString, QWidget *parent = 0) ;
|
112
|
Bird(int , EyeBrowType , QString , QString, QWidget *parent = 0) ;
|
109
|
|
113
|
|
110
|
int getSize() const;
|
114
|
int getSize() const;
|
|
|
|
|
117
|
void setEyebrow(EyeBrowType) ;
|
121
|
void setEyebrow(EyeBrowType) ;
|
118
|
void setFaceColor(QString) ;
|
122
|
void setFaceColor(QString) ;
|
119
|
void setEyeColor(QString) ;
|
123
|
void setEyeColor(QString) ;
|
120
|
-.
|
|
|
121
|
-.
|
|
|
122
|
-.
|
|
|
|
|
124
|
+ .
|
|
|
125
|
+ .
|
123
|
};
|
126
|
};
|
124
|
```
|
127
|
```
|
125
|
---
|
128
|
---
|
126
|
|
129
|
|
127
|
Una vez creado un objeto, sus métodos proveen la única forma de cambiar sus atributos, obtener información o hacer cómputos en los mismos. Es por esto que comúnmente se llama *interfaz* al conjunto de métodos de una clase. Los métodos son la interfaz entre el usuario de un objeto y su contenido.
|
130
|
Una vez creado un objeto, sus métodos proveen la única forma de cambiar sus atributos, obtener información o hacer cómputos en los mismos. Es por esto que comúnmente se llama *interfaz* al conjunto de métodos de una clase. Los métodos son la interfaz entre el usuario de un objeto y su contenido.
|
128
|
|
131
|
|
|
|
132
|
+Digamos que en tu programa defines un objeto llamado `Piolin` de clase `Bird` así:
|
129
|
|
133
|
|
130
|
-En general, en cada clase se definen los prototipos de los métodos para construir los objetos, y para buscar, manipular y guardar los datos. Lo siguiente es el formato general del prototipo de un método:
|
|
|
131
|
-
|
|
|
132
|
-`tipoDevolver nombreMetodo(tipo de los parámetros);`
|
|
|
133
|
-
|
|
|
134
|
-Luego, en el código del proyecto se escribe la función correspondiente al método, comenzando con un encabezado que incluye el nombre de la clase a la cuál pertenece la función:
|
|
|
135
|
-
|
|
|
136
|
-`TipoDevolver NombreClase::NombreMetodo(parámetros)`
|
|
|
137
|
-
|
|
|
138
|
-Para que los objetos que sean una instancia de una clase puedan tener acceso a las variables privadas de la clase se declaran métodos que sean públicos y que den acceso a estas clases (ver abajo "setters" y "getters"). Es preferible utilizar variables privadas y accederlas mediante los "setters" y "getters", a declararlas públicas ya que de esta manera el objeto que está asociado a estas variables tiene el control de los cambios que se hacen.
|
|
|
139
|
-
|
|
|
140
|
-Para invocar un método escribimos el nombre del objeto, seguido de un punto y luego el nombre del método:
|
|
|
141
|
-
|
|
|
142
|
-`nombreObjeto.nombreMetodo(argumentos);`
|
|
|
|
|
134
|
+```cpp
|
|
|
135
|
+Bird Piolin;
|
|
|
136
|
+```
|
143
|
|
137
|
|
|
|
138
|
+Para acceder y/o modificar los valores de los miembros de dato de `Piolin` debes hacerlo usando la función miembro adecuada. Por ejemplo, si quisieras cambiar el valor al miembro dato `size` de `Piolin` lo harías llamando a la función miembro `setSize` así:
|
144
|
|
139
|
|
|
|
140
|
+```cpp
|
|
|
141
|
+Piolin.setSize(100)
|
|
|
142
|
+```
|
145
|
|
143
|
|
146
|
#### Constructores
|
144
|
#### Constructores
|
147
|
|
145
|
|
148
|
Los primeros métodos de una clase que debemos entender son los *constructores*. Una clase puede tener múltiples constructores. Uno de los constructores será invocado automáticamente cada vez que se crea un objeto de esa clase. En la mayoría de los casos, los constructores se utilizan para inicializar los valores de los atributos del objeto. Para poder crear objetos de una clase, debemos conocer cuáles son sus constructores.
|
146
|
Los primeros métodos de una clase que debemos entender son los *constructores*. Una clase puede tener múltiples constructores. Uno de los constructores será invocado automáticamente cada vez que se crea un objeto de esa clase. En la mayoría de los casos, los constructores se utilizan para inicializar los valores de los atributos del objeto. Para poder crear objetos de una clase, debemos conocer cuáles son sus constructores.
|
149
|
|
147
|
|
150
|
-En C++, los constructores tienen el mismo nombre que la clase. No se declara el tipo que devuelven porque estas funciones no devuelven ningún valor. Su declaración (incluida en la definición de la clase) es algo así:
|
|
|
151
|
-
|
|
|
152
|
-`nombreMetodo(tipo de los parámetros);`
|
|
|
153
|
-
|
|
|
154
|
-El encabezado de la función será algo así:
|
|
|
155
|
-
|
|
|
156
|
-`NombreClase::NombreMetodo(parámetros)`
|
|
|
|
|
148
|
+En C++, los constructores tienen el mismo nombre que la clase y no tienen tipo de valor de regreso (ya que no devuelven ningún valor).
|
157
|
|
149
|
|
158
|
La clase `Bird` que estarás usando en la sesión de hoy tiene dos constructores (funciones sobrecargadas):
|
150
|
La clase `Bird` que estarás usando en la sesión de hoy tiene dos constructores (funciones sobrecargadas):
|
159
|
|
151
|
|