|
@@ -28,11 +28,11 @@ Antes de llegar al laboratorio debes:
|
28
|
28
|
|
29
|
29
|
1. Haber repasado los siguientes conceptos:
|
30
|
30
|
|
31
|
|
- a. creación de objetos de una clase.
|
|
31
|
+ a. creación de objetos de una clase.
|
32
|
32
|
|
33
|
|
- b. utilización de métodos "getters" para acceder a los atributos de un objeto.
|
|
33
|
+ b. utilización de métodos "getters" para acceder a los atributos de un objeto.
|
34
|
34
|
|
35
|
|
- c. utilización de métodos "setters" para modificar los atributos de un objeto.
|
|
35
|
+ c. utilización de métodos "setters" para modificar los atributos de un objeto.
|
36
|
36
|
|
37
|
37
|
2. Haber estudiado la documentación de la clase `Bird` disponible en [este enlace] (http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html).
|
38
|
38
|
|
|
@@ -57,10 +57,7 @@ Dale un vistazo a la documentación de la clase `Bird` que se encuentra en http:
|
57
|
57
|
|
58
|
58
|
###Clases
|
59
|
59
|
|
60
|
|
-Una clase es un pedazo de código en donde se describe cómo serán los objetos. Se definen las variables o atributos de los datos que contendrá el objeto y las funciones o métodos que hacen algún procedimiento a los datos del objeto. Para declarar una clase debemos especificar los tipos que tendrán las variables y los prototipos de los métodos de la clase.
|
61
|
|
-
|
62
|
|
-
|
63
|
|
-Si no se especifica lo contrario, los atributos y métodos definidos en una clase serán "privados". Esto quiere decir que esas variables solo se pueden acceder y cambiar por los métodos de la clase (*constructores*, *"setters"* y *"getters"*, entre otros).
|
|
60
|
+Una clase es una plantilla para la creación de objetos que establece sus atributos y su comportamiento. Si no se especifica lo contrario, los atributos y métodos definidos en una clase serán "privados". Esto quiere decir que esas variables solo se pueden acceder y cambiar por los métodos de la clase (*constructores*, *"setters"* y *"getters"*, entre otros).
|
64
|
61
|
|
65
|
62
|
Lo siguiente es el esqueleto de la declaración de una clase:
|
66
|
63
|
|
|
@@ -108,11 +105,12 @@ Los métodos de una clase determinan qué acciones podemos tomar sobre los objet
|
108
|
105
|
|
109
|
106
|
|
110
|
107
|
```cpp
|
|
108
|
+
|
111
|
109
|
class Bird : public QWidget
|
112
|
110
|
{
|
113
|
|
-.
|
114
|
|
-.
|
115
|
|
-.
|
|
111
|
+
|
|
112
|
+//...
|
|
113
|
+
|
116
|
114
|
Bird(int , EyeBrowType , QString , QString, QWidget *parent = 0) ;
|
117
|
115
|
|
118
|
116
|
int getSize() const;
|
|
@@ -125,9 +123,9 @@ class Bird : public QWidget
|
125
|
123
|
void setEyebrow(EyeBrowType) ;
|
126
|
124
|
void setFaceColor(QString) ;
|
127
|
125
|
void setEyeColor(QString) ;
|
128
|
|
-.
|
129
|
|
-.
|
130
|
|
-.
|
|
126
|
+
|
|
127
|
+//...
|
|
128
|
+
|
131
|
129
|
};
|
132
|
130
|
```
|
133
|
131
|
---
|
|
@@ -165,29 +163,21 @@ El encabezado de la función será algo así:
|
165
|
163
|
|
166
|
164
|
La clase `Bird` que estarás usando en la sesión de hoy tiene dos constructores (funciones sobrecargadas):
|
167
|
165
|
|
168
|
|
-```cpp
|
169
|
|
-Bird (QWidget *parent=0)`
|
170
|
|
-```
|
|
166
|
+`Bird (QWidget *parent=0)`
|
171
|
167
|
|
172
|
|
-```cpp
|
173
|
|
-Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)
|
174
|
|
-```
|
|
168
|
+`Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`
|
175
|
169
|
|
176
|
170
|
Puedes ver las declaraciones de los prototipos de estos métodos en la declaración de la clase `Bird` en el archivo `bird.h` del proyecto. La documentación se encuentra en http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html. El primer constructor, `Bird (QWidget *parent=0)`, es un método que se puede invocar con uno o ningún argumento. Si al invocarlo no se usa argumento, el parámetro de la función toma el valor 0.
|
177
|
171
|
|
178
|
172
|
El constructor de una clase que se puede invocar sin usar argumentos es el *constructor* "*default*" de la clase; esto es, el constructor que se invoca cuando creamos un objeto usando una instrucción como:
|
179
|
173
|
|
180
|
|
-```cpp
|
181
|
|
-Bird pitirre;
|
182
|
|
-```
|
|
174
|
+`Bird pitirre;`
|
183
|
175
|
|
184
|
176
|
Puedes ver las implementaciones de los métodos de la clase Birden el archivo `bird.cpp`. Nota que el primer constructor, `Bird (QWidget *parent=0)`, asignará valores aleatorios ("random") a cada uno de los atributos del objeto. Más adelante hay una breve explicación de la función `randInt`.
|
185
|
177
|
|
186
|
178
|
Dale un vistazo a la documentación del segundo constructor, `Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`. Esta función requiere cuatro argumentos y tiene un quinto argumento que es opcional porque tiene un valor por defecto. Una manera para usar este constructor es creando un objeto como el siguiente:
|
187
|
179
|
|
188
|
|
-```cpp
|
189
|
|
-Bird guaraguao(200, Bird::UPSET, "blue", "red");
|
190
|
|
-```
|
|
180
|
+`Bird guaraguao(200, Bird::UPSET, "blue", "red");`
|
191
|
181
|
|
192
|
182
|
|
193
|
183
|
####"Setters" ("mutators")
|
|
@@ -202,7 +192,7 @@ Las clases proveen métodos para modificar los valores de los atributos de un ob
|
202
|
192
|
|
203
|
193
|
Puedes ver las declaraciones de los métodos en la Figura 1 y en la declaración de la clase `Bird` en `bird.h`, y la implementación de algunos de los métodos en `bird.cpp`. El código en el siguiente ejemplo crea el objeto `bobo` de la clase `Bird` y luego cambia su tamaño a 333.
|
204
|
194
|
|
205
|
|
-```cpp
|
|
195
|
+```
|
206
|
196
|
Bird bobo;
|
207
|
197
|
bobo.setSize(333);
|
208
|
198
|
```
|
|
@@ -220,7 +210,7 @@ Las clases también proveen métodos para acceder ("get") el valor del atributo
|
220
|
210
|
|
221
|
211
|
Puedes ver las declaraciones de los métodos en la Figura 1 y en la declaración de la clase `Bird` en `bird.h`, y las implementaciones de algunos de métodos en `bird.cpp`. El código en el siguiente ejemplo crea el objeto `piolin` de la clase `Bird` e imprime su tamaño.
|
222
|
212
|
|
223
|
|
-```cpp
|
|
213
|
+```
|
224
|
214
|
Bird piolin;
|
225
|
215
|
cout << piolin.getSize();
|
226
|
216
|
```
|
|
@@ -229,19 +219,16 @@ cout << piolin.getSize();
|
229
|
219
|
|
230
|
220
|
**MainWindow:** El archivo `mainwindow.h` contiene la declaración de una clase llamada `MainWindow`. Los objetos que sean instancias de esta clase podrán utilizar los métodos sobrecargados
|
231
|
221
|
|
232
|
|
-```cpp
|
233
|
|
-void MainWindow::addBird(int x, int y, Bird &b)
|
234
|
|
-```
|
|
222
|
+`void MainWindow::addBird(int x, int y, Bird &b)`
|
235
|
223
|
|
236
|
|
-```cpp
|
237
|
|
-void MainWindow::addBird(Bird &b)`
|
238
|
|
-```
|
|
224
|
+`void MainWindow::addBird(Bird &b)`
|
239
|
225
|
|
240
|
226
|
que añadirán a la pantalla un dibujo del objeto de la clase `Bird` que es recibido como argumento. El código en el siguiente ejemplo crea un objeto `w` de la clase `MainWindow`, crea un objeto `zumbador` de la clase `Bird` y lo añade a la posición (200,200) de la pantalla `w` usando el primer método.
|
241
|
227
|
|
242
|
228
|
|
243
|
229
|
|
244
|
230
|
```cpp
|
|
231
|
+
|
245
|
232
|
MainWindow w;
|
246
|
233
|
Bird zumbador;
|
247
|
234
|
w.addBird(200,200,zumbador);
|
|
@@ -264,24 +251,12 @@ w.addBird(200,200,zumbador);
|
264
|
251
|
|
265
|
252
|
**randInt:** La clase `Bird` incluye el método
|
266
|
253
|
|
267
|
|
-```cpp
|
268
|
|
-int Bird::randInt(int min, int max)
|
269
|
|
-```
|
|
254
|
+`int Bird::randInt(int min, int max)`
|
270
|
255
|
|
271
|
256
|
para generar números enteros aleatorios ("random") en el rango [min, max]. El método `randInt` depende de otra función para generar números aleatorios que requiere un primer elemento o *semilla* para ser evaluada. En este proyecto, ese primer elemento se genera con la invocación `srand(time(NULL)) ;`.
|
272
|
257
|
|
273
|
258
|
|
274
|
259
|
|
275
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-01.html"
|
276
|
|
-
|
277
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-02.html"
|
278
|
|
-
|
279
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-03.html"
|
280
|
|
-
|
281
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-04.html"
|
282
|
|
-
|
283
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-05.html"
|
284
|
|
-
|
285
|
260
|
---
|
286
|
261
|
|
287
|
262
|
---
|
|
@@ -291,7 +266,7 @@ para generar números enteros aleatorios ("random") en el rango [min, max]. El m
|
291
|
266
|
En la experiencia de laboratorio de hoy utilizarás la clase `Bird` para practicar la creación de objetos, acceder y cambiar sus atributos.
|
292
|
267
|
|
293
|
268
|
|
294
|
|
-###Ejercicio 1
|
|
269
|
+###Ejercicio 1: Estudiar la clase `Bird`
|
295
|
270
|
|
296
|
271
|
En este ejercicio te familiarizarás con la clase `Bird` y con algunos métodos asociados a la clase `MainWindow` que define la ventana en donde se despliegan resultados.
|
297
|
272
|
|
|
@@ -303,21 +278,21 @@ En este ejercicio te familiarizarás con la clase `Bird` y con algunos métodos
|
303
|
278
|
|
304
|
279
|
3. En el archivo `main.cpp` (en Sources) la función `main` hace lo siguiente:
|
305
|
280
|
|
306
|
|
- a. Crea un objeto aplicación de Qt, llamado `a`. Lo único que necesitas saber sobre este objeto es que gracias a él es que podemos crear una aplicación gráfica en Qt e interaccionar con ella.
|
|
281
|
+a. Crea un objeto aplicación de Qt, llamado `a`. Lo único que necesitas saber sobre este objeto es que gracias a él es que podemos crear una aplicación gráfica en Qt e interaccionar con ella.
|
307
|
282
|
|
308
|
|
- b. Crea un objeto de la clase MainWindow llamado `w`. Este objeto corresponde a la ventana que verás cuando corras la aplicación.
|
|
283
|
+ b. Crea un objeto de la clase MainWindow llamado `w`. Este objeto corresponde a la ventana que verás cuando corras la aplicación.
|
309
|
284
|
|
310
|
|
- c. Inicializa la semilla del generador de números aleatorios de Qt. Esto hará que los pájaros nuevos tengan tamaños, colores y cejas aleatorias (a menos que los forcemos a tener valores específicos).
|
|
285
|
+c. Inicializa la semilla del generador de números aleatorios de Qt. Esto hará que los pájaros nuevos tengan tamaños, colores y cejas aleatorias (a menos que los forcemos a tener valores específicos).
|
311
|
286
|
|
312
|
|
- d. Invoca el método `show()` al objeto `w`. Esto logra que se muestre la ventana donde se desplegarán los resultados.
|
|
287
|
+d. Invoca el método `show()` al objeto `w`. Esto logra que se muestre la ventana donde se desplegarán los resultados.
|
313
|
288
|
|
314
|
|
- e. En los programas que no tienen interfaz gráfica, la función `main()` usualmente termina con la instrucción `return 0;`. En este proyecto se utiliza la instrucción `return a.exec();` para que el objeto `a` se haga cargo de la aplicación a partir de ese momento.
|
|
289
|
+e. En los programas que no tienen interfaz gráfica, la función `main()` usualmente termina con la instrucción `return 0;`. En este proyecto se utiliza la instrucción `return a.exec();` para que el objeto `a` se haga cargo de la aplicación a partir de ese momento.
|
315
|
290
|
|
316
|
291
|
4. Ejecuta el programa marcando la flecha verde en el menú de la izquierda de la ventana de Qt Creator. El programa debe mostrar una ventana blanca.
|
317
|
292
|
|
318
|
|
-###Ejercicio 2
|
|
293
|
+###Ejercicio 2: Crear objetos de clase `Bird` con ciertos atributos
|
319
|
294
|
|
320
|
|
-En este ejercicio crearás objetos del tipo `Bird` usando el constructor por defecto y usando constructores donde defines características específicas para el objeto. También practicarás el uso de "getters" y "setters" para obtener y asignar atributos a los objetos.
|
|
295
|
+En este ejercicio crearás objetos de clase `Bird` usando el constructor por defecto y usando constructores donde defines características específicas para el objeto. También practicarás el uso de "getters" y "setters" para obtener y asignar atributos a los objetos.
|
321
|
296
|
|
322
|
297
|
**Instrucciones**
|
323
|
298
|
|
|
@@ -327,34 +302,37 @@ En este ejercicio crearás objetos del tipo `Bird` usando el constructor por def
|
327
|
302
|
|
328
|
303
|
3. Utiliza los "setters" `setSize(int size)`, `setFaceColor(Qstring color)`, `setEyeColor(Qstring color)`, y `setEyebrow(EyeBrowType)` para que `abelardo` luzca como en la Figura 2 (su size es 200).
|
329
|
304
|
|
330
|
|
- ---
|
|
305
|
+
|
|
306
|
+ ---
|
331
|
307
|
|
332
|
|
- ![figure2.png](images/figure2.png)
|
|
308
|
+ ![figure2.png](images/figure2.png)
|
333
|
309
|
|
334
|
|
- **Figura 2.** Abelardo.
|
|
310
|
+ **Figura 2.** Abelardo.
|
335
|
311
|
|
336
|
|
- ---
|
|
312
|
+ ---
|
337
|
313
|
|
338
|
|
-4. Crea otro objeto de la clase Bird llamado `piolin` que tenga cara azul, ojos verdes, y cejas UNI invocando el constructor `Bird(int size, EyeBrowType brow, QString faceColor, QString eyeColor, QWidget *parent = 0)`. Su tamaño debe ser la mitad que el de `abelardo`. Añádelo a la misma ventana donde se muestra a `abelardo` usando `w.addBird(300, 100, piolin)` para obtener una imagen como la que se muestra en la Figura 3
|
339
|
314
|
|
340
|
|
- ---
|
|
315
|
+4. Crea otro objeto de la clase Bird llamado `piolin` que tenga cara azul, ojos verdes, y cejas UNI invocando el constructor `Bird(int size, EyeBrowType brow, QString faceColor, QString eyeColor, QWidget *parent = 0)`. Su tamaño debe ser la mitad que el de `abelardo`. Añádelo a la misma ventana donde se muestra a `abelardo` usando `w.addBird(300, 100, piolin)` para obtener una imagen como la que se muestra en la Figura 3.
|
341
|
316
|
|
342
|
|
- ![figure3.png](images/figure3.png)
|
343
|
317
|
|
344
|
|
- **Figura 3.** Abelardo y Piolin.
|
|
318
|
+ ---
|
|
319
|
+
|
|
320
|
+ ![figure3.png](images/figure3.png)
|
|
321
|
+
|
|
322
|
+ **Figura 3.** Abelardo y Piolin.
|
|
323
|
+
|
|
324
|
+ ---
|
345
|
325
|
|
346
|
|
- ---
|
347
|
|
-
|
348
|
326
|
5. Crea otros dos objetos llamados `juana` y `alondra` que salgan dibujados en las coordenadas (100, 300) y (300,300) respectivamente. Crea a `juana` usando el constructor por defecto para que sus propiedades sean asignadas de forma aleatoria.
|
349
|
327
|
Luego crea a `alondra` usando el otro constructor (el que recibe argumentos) para que puedas especificar sus propiedades durante su creación. `alondra` debe ser igual de grande que `juana`, tener el mismo tipo de cejas, y el mismo color de ojos. Su cara debe ser blanca. Añade a `alondra` y a `juana` a la misma ventana de `abelardo` y `piolin`. La ventana debe ser similar a la de la Figura 4.
|
350
|
328
|
|
351
|
|
- ---
|
|
329
|
+ ---
|
352
|
330
|
|
353
|
|
- ![figure4.png](images/figure4.png)
|
|
331
|
+ ![figure4.png](images/figure4.png)
|
354
|
332
|
|
355
|
|
- **Figura 4.** Abelardo, Piolín, Juana y Alondra.
|
|
333
|
+ **Figura 4.** Abelardo, Piolín, Juana y Alondra.
|
356
|
334
|
|
357
|
|
- ---
|
|
335
|
+ ---
|
358
|
336
|
|
359
|
337
|
6. Corre varias veces el programa para asegurarte que `alondra` y `juana` siguen pareciéndose en tamaño, cejas y ojos.
|
360
|
338
|
|
|
@@ -415,11 +393,11 @@ Before the lab session each student should have:
|
415
|
393
|
|
416
|
394
|
1. Reviewed the following concepts:
|
417
|
395
|
|
418
|
|
- a. the creation of objects of a class.
|
|
396
|
+ a. the creation of objects of a class.
|
419
|
397
|
|
420
|
|
- b. using the "getter" method functions to access the attributes of an object.
|
|
398
|
+ b. using the "getter" method functions to access the attributes of an object.
|
421
|
399
|
|
422
|
|
- c. using the "setter" method functions to modify the attributes of an object.
|
|
400
|
+ c. using the "setter" method functions to modify the attributes of an object.
|
423
|
401
|
|
424
|
402
|
2. Studied the documentation for the class `Bird` available in [this link.](http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html)
|
425
|
403
|
|
|
@@ -442,15 +420,14 @@ Take a look at the documentation of the `Bird` class which can be found in [this
|
442
|
420
|
|
443
|
421
|
###Classes
|
444
|
422
|
|
445
|
|
-A class is a piece of code that describes how objects will be. The variables or data's attributes that the object will contain are defined, and the methods that carry out a procedure on the object's data. To declare a class we should specify the types that the variables and the prototypes of the methods will have.
|
446
|
|
-
|
447
|
|
-If it isn't specified otherwise, the attributes and methods defined in a class will be private. This means that the variables can only be accessed and changed by the methods of the class (*constructors*, *setters*, and *getters*, among others).
|
|
423
|
+A class is a template for the creation of objects that establishes its attributes and behavior. If it isn't specified otherwise, the attributes and methods defined in a class will be private. This means that the variables can only be accessed and changed by the methods of the class (*constructors*, *setters*, and *getters*, among others).
|
448
|
424
|
|
449
|
425
|
The following is the skeleton of the declaration of a class:
|
450
|
426
|
|
451
|
427
|
---
|
452
|
428
|
|
453
|
429
|
```cpp
|
|
430
|
+
|
454
|
431
|
class ClassName
|
455
|
432
|
{
|
456
|
433
|
// Declarations
|
|
@@ -472,6 +449,7 @@ The following is the skeleton of the declaration of a class:
|
472
|
449
|
type nameOfPublicMemFunc(type of the parameters);
|
473
|
450
|
};
|
474
|
451
|
```
|
|
452
|
+
|
475
|
453
|
---
|
476
|
454
|
|
477
|
455
|
You can see the declaration of the `Bird` class in the file `bird.h` included in this laboratory experience's program.
|
|
@@ -492,11 +470,12 @@ The methods of a class determine the actions that we can take on the objects of
|
492
|
470
|
|
493
|
471
|
|
494
|
472
|
```cpp
|
|
473
|
+
|
495
|
474
|
class Bird : public QWidget
|
496
|
475
|
{
|
497
|
|
-.
|
498
|
|
-.
|
499
|
|
-.
|
|
476
|
+
|
|
477
|
+//...
|
|
478
|
+
|
500
|
479
|
Bird(int , EyeBrowType , QString , QString, QWidget *parent = 0) ;
|
501
|
480
|
|
502
|
481
|
int getSize() const;
|
|
@@ -509,9 +488,9 @@ class Bird : public QWidget
|
509
|
488
|
void setEyebrow(EyeBrowType) ;
|
510
|
489
|
void setFaceColor(QString) ;
|
511
|
490
|
void setEyeColor(QString) ;
|
512
|
|
-.
|
513
|
|
-.
|
514
|
|
-.
|
|
491
|
+
|
|
492
|
+//...
|
|
493
|
+
|
515
|
494
|
};
|
516
|
495
|
```
|
517
|
496
|
|
|
@@ -551,29 +530,22 @@ The function header will be like this:
|
551
|
530
|
|
552
|
531
|
The class `Bird` that you will be using in today's session has two constructors (overloaded functions):
|
553
|
532
|
|
554
|
|
-```cpp
|
555
|
|
-Bird (QWidget *parent=0)
|
556
|
|
-```
|
|
533
|
+`Bird (QWidget *parent=0)`
|
557
|
534
|
|
558
|
|
-```cpp
|
559
|
|
-Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)
|
560
|
|
-```
|
|
535
|
+`Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`
|
561
|
536
|
|
562
|
537
|
You can see the declarations of the method prototypes in the declaration of the `Bird` class in the project's `bird.h` file. The documentation can be found in [this link.](http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html) The first constructor, `Bird (QWidget *parent=0)`, is a method that can be invoked with one or no argument. If no argument is used, the function's parameter has a value of 0.
|
563
|
538
|
|
564
|
539
|
A class' constructor that can be invoked without using an argument is the class' *default constructor*; that is, the constructor that is invoked when we create an object using an instruction like:
|
565
|
540
|
|
566
|
|
-```cpp
|
567
|
|
-Bird pitirre;
|
568
|
|
-```
|
|
541
|
+`Bird pitirre;`
|
569
|
542
|
|
570
|
543
|
You can see the implementations of the class `Bird` in the file `bird.cpp`. Note that the first constructor, `Bird (QWidget *parent=0)`, will assign random values to each of the object's attributes. Later on there is a brief explanation for the `randInt` function.
|
571
|
544
|
|
572
|
545
|
Have a look at the documentation for the second constructor, `Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`. This function requires four arguments and has a fifth argument that is optional since it has a default value. One way to use this constructor is creating an object like this:
|
573
|
546
|
|
574
|
|
-```cpp
|
575
|
|
-Bird guaraguao(200, Bird::UPSET, "blue", "red");
|
576
|
|
-```
|
|
547
|
+`Bird guaraguao(200, Bird::UPSET, "blue", "red");`
|
|
548
|
+
|
577
|
549
|
|
578
|
550
|
####Setters (mutators)
|
579
|
551
|
|
|
@@ -587,7 +559,7 @@ Classes provide methods to modify the values of the attributes of an objected th
|
587
|
559
|
|
588
|
560
|
You can see the method's declarations in Figure 1 and in the `Bird` class declaration in `bird.h`, and the implementation of the some of the methods in `bird.cpp`. The code in the following example creates the object `bobo` of the `Bird` class and then changes its size to 333.
|
589
|
561
|
|
590
|
|
-```cpp
|
|
562
|
+```
|
591
|
563
|
Bird bobo;
|
592
|
564
|
bobo.setSize(333);
|
593
|
565
|
```
|
|
@@ -603,7 +575,7 @@ Classes also provide methods to access (get) the value of the attribute of an ob
|
603
|
575
|
|
604
|
576
|
You can see the declarations of the methods in Figure 1 and in the `Bird` class declaration in `bird.h`, and the implementations of some of the methods in `bird.cpp`. The code in the following example creates the object `piolin` of the `Bird` class and prints its size:
|
605
|
577
|
|
606
|
|
-```cpp
|
|
578
|
+```
|
607
|
579
|
Bird piolin;
|
608
|
580
|
cout << piolin.getSize();
|
609
|
581
|
```
|
|
@@ -612,17 +584,14 @@ cout << piolin.getSize();
|
612
|
584
|
|
613
|
585
|
**MainWindow:** The file `mainwindow.h` contains the declaration of a class called `MainWindow`. The objects that are instances of this class will be able to use the overloaded methods
|
614
|
586
|
|
615
|
|
-```cpp
|
616
|
|
-void MainWindow::addBird(int x, int y, Bird &b)
|
617
|
|
-```
|
|
587
|
+`void MainWindow::addBird(int x, int y, Bird &b)`
|
618
|
588
|
|
619
|
|
-```cpp
|
620
|
|
-void MainWindow::addBird(Bird &b)
|
621
|
|
-```
|
|
589
|
+`void MainWindow::addBird(Bird &b)`
|
622
|
590
|
|
623
|
591
|
that will add to the screen a drawing of an object of the `Bird` class that is received as an argument. The code in the following example creates an object `w` of the `MainWindow` class, creates an object `zumbador` of the `Bird` class and adds it in the position (200,200) on the screen `w` using the first method.
|
624
|
592
|
|
625
|
593
|
```cpp
|
|
594
|
+
|
626
|
595
|
MainWindow w;
|
627
|
596
|
Bird zumbador;
|
628
|
597
|
w.addBird(200,200,zumbador);
|
|
@@ -644,25 +613,11 @@ w.addBird(200,200,zumbador);
|
644
|
613
|
|
645
|
614
|
**randInt:** The `Bird` class includes the method
|
646
|
615
|
|
647
|
|
-```cpp
|
648
|
|
-int Bird::randInt(int min, int max)
|
649
|
|
-```
|
650
|
|
-
|
|
616
|
+`int Bird::randInt(int min, int max)`
|
651
|
617
|
|
652
|
618
|
to generate random numbers in the range [min, max]. The method `randInt` depends on another function to generate random numbers that require a first element or *seed* to be evaluated. In this project, that first element is generated with the function call `srand(time(NULL)) ;`.
|
653
|
619
|
|
654
|
620
|
|
655
|
|
-
|
656
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-01.html"
|
657
|
|
-
|
658
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-02.html"
|
659
|
|
-
|
660
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-03.html"
|
661
|
|
-
|
662
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-04.html"
|
663
|
|
-
|
664
|
|
-!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-05.html"
|
665
|
|
-
|
666
|
621
|
---
|
667
|
622
|
|
668
|
623
|
---
|
|
@@ -671,7 +626,7 @@ to generate random numbers in the range [min, max]. The method `randInt` depends
|
671
|
626
|
|
672
|
627
|
In today's laboratory experience you will use the `Bird` class to practice the creation of objects, accessing and changing its attributes.
|
673
|
628
|
|
674
|
|
-###Exercise 1
|
|
629
|
+###Exercise 1: Study the `Bird` class
|
675
|
630
|
|
676
|
631
|
In this exercise you will familiarize yourself with the `Bird` class and with some methods associated with the `MainWindow` class that defines the window where the results are displayed.
|
677
|
632
|
|
|
@@ -683,21 +638,21 @@ In this exercise you will familiarize yourself with the `Bird` class and with so
|
683
|
638
|
|
684
|
639
|
3. In the `main.cpp` file (in Sources) the `main` function does the following:
|
685
|
640
|
|
686
|
|
- a. Creates a Qt object application, called `a`. The only thing you need to know is that thanks to this object we can create a graphical application in Qt and interact with it.
|
|
641
|
+a. Creates a Qt object application, called `a`. The only thing you need to know is that thanks to this object we can create a graphical application in Qt and interact with it.
|
687
|
642
|
|
688
|
|
- b. Creates an object of the MainWindow class called `w`. This object corresponds to the window that you will see when you run the application.
|
|
643
|
+b. Creates an object of the MainWindow class called `w`. This object corresponds to the window that you will see when you run the application.
|
689
|
644
|
|
690
|
|
- c. Initializes the seed of Qt's random number generator. As a result of this, the new birds will have random sizes, colors and eyebrows (unless we force them to have specific values).
|
|
645
|
+c. Initializes the seed of Qt's random number generator. As a result of this, the new birds will have random sizes, colors and eyebrows (unless we force them to have specific values).
|
691
|
646
|
|
692
|
|
- d. Invokes the method `show()` on the object `w`. This shows the window where the results will be displayed.
|
|
647
|
+d. Invokes the method `show()` on the object `w`. This shows the window where the results will be displayed.
|
693
|
648
|
|
694
|
|
- e. In programs that don't have a graphical interface, the `main()` function usually ends with the instruction `return 0;`. In this project, the `return a.exec();` instruction is used so that the object `a` takes charge of the application from that moment on.
|
|
649
|
+e. In programs that don't have a graphical interface, the `main()` function usually ends with the instruction `return 0;`. In this project, the `return a.exec();` instruction is used so that the object `a` takes charge of the application from that moment on.
|
695
|
650
|
|
696
|
651
|
4. Execute the program by clicking on the green arrow in the left menu on the Qt Creator window. The program should display a blank window.
|
697
|
652
|
|
698
|
|
-###Exercise 2
|
|
653
|
+###Exercise 2: Create objects of the `Bird` class with certain attributes
|
699
|
654
|
|
700
|
|
-In this exercise you will create an object of type `Bird` using the default constructor and using constructors where you define specific characteristics for the object. You will also practice the use of getters and setters to obtain and assign attributes to the objects.
|
|
655
|
+In this exercise you will create objects of the `Bird` class using the default constructor and using constructors where you define specific characteristics for the object. You will also practice the use of getters and setters to obtain and assign attributes to the objects.
|
701
|
656
|
|
702
|
657
|
**Instructions**
|
703
|
658
|
|
|
@@ -707,33 +662,33 @@ In this exercise you will create an object of type `Bird` using the default cons
|
707
|
662
|
|
708
|
663
|
3. Use the setters `setSize(int size)`, `setFaceColor(Qstring color)`, `setEyeColor(Qstring color)`, and `setEyebrow(EyeBrowType)` so that `abelardo` looks as in Figure 2 (its size is 200).
|
709
|
664
|
|
710
|
|
- ---
|
|
665
|
+ ---
|
711
|
666
|
|
712
|
|
- ![figure2.png](images/figure2.png)
|
|
667
|
+ ![figure2.png](images/figure2.png)
|
713
|
668
|
|
714
|
|
- **Figure 2.** Abelardo.
|
|
669
|
+ **Figure 2.** Abelardo.
|
715
|
670
|
|
716
|
|
- ---
|
|
671
|
+ ---
|
717
|
672
|
|
718
|
673
|
4. Create another object of class Bird called `piolin` that has a blue face, green eyes and UNI eyebrows invoking the constructor `Bird(int size, EyeBrowType brow, QString faceColor, QString eyeColor, QWidget *parent = 0)`. Its size should be half of `abelardo`'s. Add it to the same window where `abelardo` is being displayed by using `w.addBird(300, 100, piolin)`, to obtain an image like the one in Figure 3
|
719
|
674
|
|
720
|
|
- ---
|
|
675
|
+ ---
|
721
|
676
|
|
722
|
|
- ![figure3.png](images/figure3.png)
|
|
677
|
+ ![figure3.png](images/figure3.png)
|
723
|
678
|
|
724
|
|
- **Figure 3.** Abelardo and Piolin.
|
|
679
|
+ **Figure 3.** Abelardo and Piolin.
|
725
|
680
|
|
726
|
|
- ---
|
|
681
|
+ ---
|
727
|
682
|
|
728
|
683
|
5. Create two other objects called `juana` and `alondra` that will appear drawn in the coordinates (100, 300) and (300,300) respectively. Create `juana` using the default constructor so that its properties are assigned randomly. Create `alondra` using the other constructor so that you may specify its properties during its creation. `alondra` should have the same size as `juana`, have the same type of eyebrows, and the same eye color. Its face should be white. Add `alondra` and `juana` to the window where `abelardo` and `piolin` are. The window should look similar to the one in Figure 4.
|
729
|
684
|
|
730
|
|
- ---
|
|
685
|
+ ---
|
731
|
686
|
|
732
|
|
- ![figure4.png](images/figure4.png)
|
|
687
|
+ ![figure4.png](images/figure4.png)
|
733
|
688
|
|
734
|
|
- **Figure 4.** Abelardo, Piolin, Juana and Alondra.
|
|
689
|
+ **Figure 4.** Abelardo, Piolin, Juana and Alondra.
|
735
|
690
|
|
736
|
|
- ---
|
|
691
|
+ ---
|
737
|
692
|
|
738
|
693
|
6. Run the program several times making sure that `alondra` and `juana` have the same size, eyebrows and eyes.
|
739
|
694
|
|
|
@@ -752,15 +707,4 @@ Use "Deliverables" in Moodle to hand in the `main.cpp` file that contains the fu
|
752
|
707
|
##References
|
753
|
708
|
|
754
|
709
|
|
755
|
|
-https://sites.google.com/a/wellesley.edu/wellesley-cs118-spring13/lectures-labs/lab-2
|
756
|
|
-
|
757
|
|
-
|
758
|
|
-
|
759
|
|
-
|
760
|
|
-
|
761
|
|
-
|
762
|
|
-
|
763
|
|
-
|
764
|
|
-
|
765
|
|
-
|
766
|
|
-
|
|
710
|
+https://sites.google.com/a/wellesley.edu/wellesley-cs118-spring13/lectures-labs/lab-2
|