ソースを参照

Added diagnostic questions

コミット
86bce93ea8
共有1 個のファイルを変更した115 個の追加69 個の削除を含む
  1. 115
    69
      README.md

+ 115
- 69
README.md ファイルの表示

@@ -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
 
@@ -66,7 +66,7 @@ Lo siguiente es el esqueleto de la declaración de una clase:
66 66
 
67 67
 ---
68 68
 
69
-```
69
+```cpp
70 70
   class NombreClase
71 71
    {
72 72
     // Declaraciones
@@ -107,7 +107,7 @@ Los métodos de una clase determinan qué acciones podemos tomar sobre los objet
107 107
 ---
108 108
 
109 109
 
110
-```
110
+```cpp
111 111
 class Bird : public QWidget
112 112
 {
113 113
 .
@@ -165,21 +165,29 @@ El encabezado de la función será algo así:
165 165
 
166 166
 La clase `Bird` que estarás usando en la sesión de hoy tiene dos constructores (funciones sobrecargadas):
167 167
 
168
-`Bird (QWidget *parent=0)`
168
+```cpp
169
+Bird (QWidget *parent=0)`
170
+```
169 171
 
170
-`Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`
172
+```cpp
173
+Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)
174
+```
171 175
 
172 176
 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. 
173 177
 
174 178
 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:
175 179
 
176
-`Bird pitirre;`
180
+```cpp
181
+Bird pitirre;
182
+```
177 183
 
178 184
 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`.
179 185
 
180 186
 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:
181 187
 
182
-`Bird guaraguao(200, Bird::UPSET, "blue", "red");`
188
+```cpp
189
+Bird guaraguao(200, Bird::UPSET, "blue", "red");
190
+```
183 191
 
184 192
 
185 193
 ####"Setters" ("mutators")
@@ -194,7 +202,7 @@ Las clases proveen métodos para modificar los valores de los atributos de un ob
194 202
 
195 203
 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.
196 204
 
197
-```
205
+```cpp
198 206
 Bird bobo;
199 207
 bobo.setSize(333);
200 208
 ```
@@ -212,7 +220,7 @@ Las clases también proveen métodos para acceder  ("get") el valor del atributo
212 220
 
213 221
 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.
214 222
 
215
-```
223
+```cpp
216 224
 Bird piolin;
217 225
 cout << piolin.getSize();
218 226
 ```
@@ -221,15 +229,19 @@ cout << piolin.getSize();
221 229
 
222 230
 **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
223 231
 
224
-`void MainWindow::addBird(int x, int y, Bird &b)`  
232
+```cpp
233
+void MainWindow::addBird(int x, int y, Bird &b)
234
+```
225 235
 
226
-`void MainWindow::addBird(Bird &b)` 
236
+```cpp
237
+void MainWindow::addBird(Bird &b)` 
238
+```
227 239
 
228 240
 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.
229 241
 
230 242
 
231 243
 
232
-```
244
+```cpp
233 245
 MainWindow w;
234 246
 Bird zumbador;
235 247
 w.addBird(200,200,zumbador);
@@ -252,12 +264,24 @@ w.addBird(200,200,zumbador);
252 264
 
253 265
 **randInt:** La clase `Bird` incluye el método
254 266
 
255
-`int Bird::randInt(int min, int max)`
267
+```cpp
268
+int Bird::randInt(int min, int max)
269
+```
256 270
 
257 271
 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)) ;`.
258 272
 
259 273
 
260 274
 
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
+
261 285
 ---
262 286
 
263 287
 ---
@@ -279,15 +303,15 @@ En este ejercicio te familiarizarás con la clase `Bird` y con algunos métodos
279 303
 
280 304
 3. En el archivo `main.cpp` (en Sources) la función `main` hace lo siguiente:
281 305
 
282
-  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.
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.
283 307
 
284
-  b. Crea un objeto  de la clase MainWindow llamado `w`. Este objeto corresponde a la ventana que verás cuando corras la aplicación.
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.
285 309
 
286
-  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).
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).
287 311
 
288
-  d. Invoca el método `show()` al objeto `w`. Esto logra que se muestre la ventana donde se desplegarán los resultados.
312
+    d. Invoca el método `show()` al objeto `w`. Esto logra que se muestre la ventana donde se desplegarán los resultados.
289 313
 
290
-  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.
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.
291 315
 
292 316
 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.
293 317
 
@@ -303,37 +327,34 @@ En este ejercicio crearás objetos del tipo `Bird` usando el constructor por def
303 327
 
304 328
 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).
305 329
 
306
-  
307
-  ---
308
-
309
-  ![figure2.png](images/figure2.png)
330
+    ---
310 331
 
311
-  **Figura 2.** Abelardo.
332
+    ![figure2.png](images/figure2.png)
312 333
 
313
-  ---
334
+    **Figura 2.** Abelardo.
314 335
 
336
+    ---
315 337
 
316 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
317 339
 
340
+    ---
318 341
 
319
-   ---
320
-
321
-  ![figure3.png](images/figure3.png)
342
+    ![figure3.png](images/figure3.png)
322 343
 
323
-  **Figura 3.** Abelardo y Piolin.
324
-
325
-  ---
344
+    **Figura 3.** Abelardo y Piolin.
326 345
 
346
+    ---
347
+    
327 348
 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.
328 349
 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.
329 350
 
330
-   ---
351
+    ---
331 352
 
332
-  ![figure4.png](images/figure4.png)
353
+    ![figure4.png](images/figure4.png)
333 354
 
334
-  **Figura 4.** Abelardo, Piolín, Juana y Alondra.
355
+    **Figura 4.** Abelardo, Piolín, Juana y Alondra.
335 356
 
336
-  ---
357
+    ---
337 358
 
338 359
 6. Corre varias veces el programa para asegurarte que `alondra` y `juana` siguen pareciéndose en tamaño, cejas y ojos. 
339 360
 
@@ -394,11 +415,11 @@ Before the lab session each student should have:
394 415
 
395 416
 1. Reviewed the following concepts:
396 417
 
397
-  a. the creation of objects of a class.
418
+    a. the creation of objects of a class.
398 419
 
399
-  b. using the "getter" method functions to access the attributes of an object.
420
+    b. using the "getter" method functions to access the attributes of an object.
400 421
 
401
-  c. using the "setter" method functions to modify the attributes of an object.
422
+    c. using the "setter" method functions to modify the attributes of an object.
402 423
 
403 424
 2. Studied the documentation for the class `Bird` available in [this link.](http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html)
404 425
 
@@ -429,7 +450,7 @@ The following is the skeleton of the declaration of a class:
429 450
 
430 451
 ---
431 452
 
432
-```
453
+```cpp
433 454
   class ClassName
434 455
    {
435 456
     // Declarations
@@ -470,7 +491,7 @@ The methods of a class determine the actions that we can take on the objects of
470 491
 ---
471 492
 
472 493
 
473
-```
494
+```cpp
474 495
 class Bird : public QWidget
475 496
 {
476 497
 .
@@ -530,22 +551,29 @@ The function header will be like this:
530 551
 
531 552
 The class `Bird` that you will be using in today's session has two constructors (overloaded functions):
532 553
 
533
-`Bird (QWidget *parent=0)`
554
+```cpp
555
+Bird (QWidget *parent=0)
556
+```
534 557
 
535
-`Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`
558
+```cpp
559
+Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)
560
+```
536 561
 
537 562
 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.
538 563
 
539 564
 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:
540 565
 
541
-`Bird pitirre;`
566
+```cpp
567
+Bird pitirre;
568
+```
542 569
 
543 570
 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.
544 571
 
545 572
 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:
546 573
 
547
-`Bird guaraguao(200, Bird::UPSET, "blue", "red");`
548
-
574
+```cpp
575
+Bird guaraguao(200, Bird::UPSET, "blue", "red");
576
+```
549 577
 
550 578
 ####Setters (mutators)
551 579
 
@@ -559,7 +587,7 @@ Classes provide methods to modify the values of the attributes of an objected th
559 587
 
560 588
 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.
561 589
 
562
-```
590
+```cpp
563 591
 Bird bobo;
564 592
 bobo.setSize(333);
565 593
 ```
@@ -575,7 +603,7 @@ Classes also provide methods to access (get) the value of the attribute of an ob
575 603
 
576 604
 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:
577 605
 
578
-```
606
+```cpp
579 607
 Bird piolin;
580 608
 cout << piolin.getSize();
581 609
 ```
@@ -584,13 +612,17 @@ cout << piolin.getSize();
584 612
 
585 613
 **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
586 614
 
587
-`void MainWindow::addBird(int x, int y, Bird &b)`  
615
+```cpp
616
+void MainWindow::addBird(int x, int y, Bird &b)
617
+```
588 618
 
589
-`void MainWindow::addBird(Bird &b)`  
619
+```cpp
620
+void MainWindow::addBird(Bird &b)
621
+```
590 622
 
591 623
 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.
592 624
 
593
-```
625
+```cpp
594 626
 MainWindow w;
595 627
 Bird zumbador;
596 628
 w.addBird(200,200,zumbador);
@@ -612,11 +644,25 @@ w.addBird(200,200,zumbador);
612 644
 
613 645
 **randInt:** The `Bird` class includes the method
614 646
 
615
-`int Bird::randInt(int min, int max)`
647
+```cpp
648
+int Bird::randInt(int min, int max)
649
+```
650
+
616 651
 
617 652
 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)) ;`.
618 653
 
619 654
 
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
+
620 666
 ---
621 667
 
622 668
 ---
@@ -637,15 +683,15 @@ In this exercise you will familiarize yourself with the `Bird` class and with so
637 683
 
638 684
 3. In the `main.cpp` file (in Sources) the `main` function does the following:
639 685
 
640
-  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.
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 687
 
642
-  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.
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 689
 
644
-  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).
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 691
 
646
-  d. Invokes the method `show()` on the object `w`. This shows the window where the results will be displayed.
692
+    d. Invokes the method `show()` on the object `w`. This shows the window where the results will be displayed.
647 693
 
648
-  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.
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 695
 
650 696
 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.
651 697
 
@@ -661,33 +707,33 @@ In this exercise you will create an object of type `Bird` using the default cons
661 707
 
662 708
 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).
663 709
 
664
-  ---
710
+    ---
665 711
 
666
-  ![figure2.png](images/figure2.png)
712
+    ![figure2.png](images/figure2.png)
667 713
 
668
-  **Figure 2.** Abelardo.
714
+    **Figure 2.** Abelardo.
669 715
 
670
-  ---
716
+    ---
671 717
 
672 718
 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
673 719
 
674
-  ---
720
+    ---
675 721
 
676
-  ![figure3.png](images/figure3.png)
722
+    ![figure3.png](images/figure3.png)
677 723
 
678
-  **Figure 3.** Abelardo and Piolin.
724
+    **Figure 3.** Abelardo and Piolin.
679 725
 
680
-  ---
726
+    ---
681 727
 
682 728
 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.
683 729
 
684
-  ---
730
+    ---
685 731
 
686
-  ![figure4.png](images/figure4.png)
732
+    ![figure4.png](images/figure4.png)
687 733
 
688
-  **Figure 4.** Abelardo, Piolin, Juana and Alondra.
734
+    **Figure 4.** Abelardo, Piolin, Juana and Alondra.
689 735
 
690
-  ---
736
+    ---
691 737
 
692 738
 6. Run the program several times making sure that `alondra` and `juana` have the same size, eyebrows and eyes.
693 739