|
@@ -6,6 +6,7 @@
|
6
|
6
|
![main2.png](images/main2.png)
|
7
|
7
|
![main3.png](images/main3.png)
|
8
|
8
|
|
|
9
|
+[Verano 2016 - Ive]
|
9
|
10
|
|
10
|
11
|
En casi todas las instancias en que queremos resolver un problema hay una o más opciones que dependen de si se cumplen o no ciertas condiciones. Los programas de computadoras se construyen para resolver problemas y, por lo tanto, deben tener una estructura que permita tomar decisiones. En C++ las instrucciones de decisión (o condicionales) se estructuran utilizando `if`, `else`, `else if` o `switch`. Muchas veces el uso de estas estructuras también envuelve el uso de expresiones de relación y operadores lógicos. En la experiencia de laboratorio de hoy practicarás el uso de algunas estructuras de decisión completando el diseño utilizando una clase llamada `Bird`. También repasarás conceptos relacionados a objetos.
|
11
|
12
|
|
|
@@ -20,24 +21,24 @@ En casi todas las instancias en que queremos resolver un problema hay una o más
|
20
|
21
|
|
21
|
22
|
##Pre-Lab:
|
22
|
23
|
|
23
|
|
-Antes de llegar al laboratorio debes:
|
|
24
|
+Antes de llegar al laboratorio debes haber:
|
24
|
25
|
|
25
|
|
-1. Haber repasado los siguientes conceptos relacionados a estructuras de decisión:
|
|
26
|
+1. Repasado los siguientes conceptos relacionados a estructuras de decisión:
|
26
|
27
|
|
27
|
|
- a. operadores lógicos.
|
28
|
|
- b. `if`, `else`, `else if`.
|
|
28
|
+ a. operadores lógicos.
|
|
29
|
+ b. `if`, `else`, `else if`.
|
29
|
30
|
|
30
|
|
-2. Haber repasado los siguientes conceptos relacionados a objetos y clases en C++:
|
|
31
|
+2. Repasado los siguientes conceptos relacionados a objetos y clases en C++:
|
31
|
32
|
|
32
|
|
- a. creación de objetos de una clase.
|
33
|
|
- b. utilización de métodos "getters" para acceder a los atributos de un objeto.
|
34
|
|
- c. utilización de métodos "setters" para modificar los atributos de un objeto.
|
|
33
|
+ a. creación de objetos de una clase.
|
|
34
|
+ b. utilización de métodos "getters" para acceder a los atributos de un objeto.
|
|
35
|
+ c. utilización de métodos "setters" para modificar los atributos de un objeto.
|
35
|
36
|
|
36
|
|
-3. Haber estudiado la documentación de la clase `Bird` disponible en [este enlace] (http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html).
|
|
37
|
+3. Estudiado la documentación de la clase `Bird` disponible en [este enlace] (http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html).
|
37
|
38
|
|
38
|
|
-4. Haber estudiado los conceptos e instrucciones para la sesión de laboratorio.
|
|
39
|
+4. Estudiado los conceptos e instrucciones para la sesión de laboratorio.
|
39
|
40
|
|
40
|
|
-5. haber tomado el quiz Pre-Lab que se encuentra en Moodle.
|
|
41
|
+5. Tomado el quiz Pre-Lab que se encuentra en Moodle.
|
41
|
42
|
|
42
|
43
|
|
43
|
44
|
|
|
@@ -49,7 +50,7 @@ Para facilitar la ejecución de esta experiencia de laboratorio, comenzaremos re
|
49
|
50
|
|
50
|
51
|
------------------------------------------
|
51
|
52
|
|
52
|
|
-##Clases y objetos en C++
|
|
53
|
+## Clases y objetos en C++
|
53
|
54
|
|
54
|
55
|
Un *objeto* es un ente que contiene datos y procedimientos para manipularlos. Al igual que cada variable tiene un *tipo* de dato asociada a ella, cada objeto tiene una *clase* asociada que describe las propiedades de los objetos:
|
55
|
56
|
sus datos (*atributos*), y los procedimientos con los que se pueden manipular los datos (*métodos*).
|
|
@@ -58,7 +59,7 @@ Para definir y utilizar un objeto no hay que saber todos los detalles de los m
|
58
|
59
|
|
59
|
60
|
Dale un vistazo a la documentación de la clase `Bird` que se encuentra en http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html.
|
60
|
61
|
|
61
|
|
-###Clases
|
|
62
|
+### Clases
|
62
|
63
|
|
63
|
64
|
Una clase es un pedazo de código en donde se describe cómo serán los objetos. La declaración de una clase establece los atributos que tendrá cada objeto de esa clase y los métodos que puede invocar.
|
64
|
65
|
|
|
@@ -95,7 +96,7 @@ Lo siguiente es el esqueleto de la declaración de una clase:
|
95
|
96
|
|
96
|
97
|
Puedes ver la declaración de la clase `Bird` en el archivo `bird.h` incluido en el programado de esta experiencia de laboratorio.
|
97
|
98
|
|
98
|
|
-###Objetos
|
|
99
|
+### Objetos
|
99
|
100
|
|
100
|
101
|
Un objeto es un ente que contiene datos (al igual que una variable), llamados sus `atributos`, y también contiene procedimientos, llamados `métodos`, que se usan para manipularlos. Los objetos son "instancias" de una clase que se crean de manera similar a como se definen las variables:
|
101
|
102
|
|
|
@@ -154,7 +155,7 @@ Para invocar un método escribimos el nombre del objeto, seguido de un punto y l
|
154
|
155
|
|
155
|
156
|
|
156
|
157
|
|
157
|
|
-####Constructores
|
|
158
|
+#### Constructores
|
158
|
159
|
|
159
|
160
|
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.
|
160
|
161
|
|
|
@@ -185,7 +186,7 @@ Dale un vistazo a la documentación del segundo constructor, `Bird (int, EyeBrow
|
185
|
186
|
`Bird guaraguao(200, Bird::UPSET, "blue", "red");`
|
186
|
187
|
|
187
|
188
|
|
188
|
|
-####"Setters" ("mutators")
|
|
189
|
+#### "Setters" ("mutators")
|
189
|
190
|
|
190
|
191
|
Las clases proveen métodos para modificar los valores de los atributos de un objeto que se ha creado. Estos métodos se llaman "*setters*" o "*mutators*". Usualmente se declara un "setter" por cada atributo que tiene la clase. La clase `Bird` tiene los siguientes "setters":
|
191
|
192
|
|
|
@@ -203,7 +204,7 @@ bobo.setSize(333);
|
203
|
204
|
```
|
204
|
205
|
|
205
|
206
|
|
206
|
|
-####"Getters" ("accessors")
|
|
207
|
+#### "Getters" ("accessors")
|
207
|
208
|
|
208
|
209
|
Las clases también proveen métodos para acceder ("get") el valor del atributo de un objeto. Estos métodos se llaman "*getters*" o "*accessors*". Usualmente se declara un "getter" por cada atributo que tiene la clase. La clase `Bird` tiene los siguientes "getters":
|
209
|
210
|
|
|
@@ -220,7 +221,7 @@ Bird piolin;
|
220
|
221
|
cout << piolin.getSize();
|
221
|
222
|
```
|
222
|
223
|
|
223
|
|
-####Otras funciones o métodos que utilizarás en esta experiencia de laboratorio
|
|
224
|
+#### Otras funciones o métodos que utilizarás en esta experiencia de laboratorio
|
224
|
225
|
|
225
|
226
|
**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
|
226
|
227
|
|
|
@@ -267,7 +268,7 @@ para generar números enteros aleatorios ("random") en el rango [min, max]. El m
|
267
|
268
|
|
268
|
269
|
## Sesión de laboratorio
|
269
|
270
|
|
270
|
|
-###Ejercicio 1: Estudiar las reglas de herencia de la familia *Birds*
|
|
271
|
+### Ejercicio 1 - Estudiar las reglas de herencia de la familia *Birds*
|
271
|
272
|
|
272
|
273
|
#### La familia *Birds*
|
273
|
274
|
|
|
@@ -308,34 +309,38 @@ La dominancia de los genes de las cejas está dada por la siguiente lista (en in
|
308
|
309
|
|
309
|
310
|
Los genes de las cejas siguen las siguientes reglas:
|
310
|
311
|
|
311
|
|
-a. Si ambos padres tienen cejas "angry", el bebé tendrá cejas "unibrow".
|
312
|
|
-b. Si ambos padres tienen cejas "unibrow", el bebé tendrá cejas "upset".
|
313
|
|
-c. En los otros casos, el bebé heredará las cejas más dominantes de las cejas de sus padres.
|
|
312
|
+* Si ambos padres tienen cejas "angry", el bebé tendrá cejas "unibrow".
|
|
313
|
+* Si ambos padres tienen cejas "unibrow", el bebé tendrá cejas "upset".
|
|
314
|
+* En los otros casos, el bebé heredará las cejas más dominantes de las cejas de sus padres.
|
314
|
315
|
|
315
|
316
|
|
316
|
|
-###Ejercicio 2: Estudiar la función `main`
|
|
317
|
+### Ejercicio 2 - Estudiar la función `main`
|
317
|
318
|
|
318
|
|
-**Instrucciones**
|
|
319
|
+#### Instrucciones:
|
319
|
320
|
|
320
|
|
-1. Carga a Qt el proyecto `Conditionals-BirthOfABird` haciendo doble "click" en el archivo `Conditionals-BirthOfABird.pro` que se encuentra en la carpeta `Documents/eip/Conditionals-BirthOfABird` de tu computadora. También puedes ir a `http://bitbucket.org/eip-uprrp/conditionals-birthofabird` para descargar la carpeta `Conditionals-BirthOfABird` a tu computadora.
|
|
321
|
+1. Carga a `QtCreator` el proyecto `BirthOfABird`. Hay dos maneras de hacer esto:
|
|
322
|
+
|
|
323
|
+ * Utilizando la máquina virtual: Haz doble “click” en el archivo `BirthOfABird.pro` que se encuentra en el directorio `/home/eip/labs/conditionals-birthofabird` de la máquina virtual.
|
|
324
|
+ * Descargando la carpeta del proyecto de `Bitbucket`: Utiliza un terminal y escribe el commando `git clone http:/bitbucket.org/eip-uprrp/conditionals-birthofabird` para descargar la carpeta `conditionals-birthofabird` de `Bitbucket`. En esa carpeta, haz doble “click” en el archivo `BirthOfABird.pro`.
|
321
|
325
|
|
322
|
326
|
2. Configura el proyecto.
|
323
|
327
|
|
324
|
|
- **Importante:** En la pantalla "Configure Project", selecciona la configuración Qt 5.3 o Qt 5.4 clang 64 bit. Si usas otra configuración el proyecto no compilará.
|
|
328
|
+ **Importante:** En la pantalla "Configure Project", selecciona la configuración Qt 5.3 o Qt 5.4 clang 64 bit. Si usas otra configuración el proyecto no compilará.
|
325
|
329
|
|
326
|
330
|
3. Compila y corre el proyecto. Debes ver una pantalla con dos pájaros que representan a Juana y Abelardo. Luego de un segundo, serás testigo del nacimiento de su bebé Piolín. Sin embargo, este Piolín pudo ser haber volado de otro nido y no ser su hijo, tendrá características aleatorias.
|
327
|
331
|
|
328
|
332
|
4. Abre el archivo `main.cpp` (no harás cambios a ningún otro archivo de este proyecto). Estudia la función `main`. NO harás cambios a la función `main`. Nota que la función `main` esencialmente hace dos cosas:
|
329
|
|
- a. Crea los tres pájaros y añade dos de ellos a la pantalla.
|
330
|
|
-b. Crea un cronómetro ("timer") que espera un segundo y luego invoca a la función `birth` pasándole una referencia a la ventana y a los tres pájaros.
|
|
333
|
+
|
|
334
|
+ i. Crea los tres pájaros y añade dos de ellos a la pantalla.
|
|
335
|
+ ii. Crea un cronómetro ("timer") que espera un segundo y luego invoca a la función `birth` pasándole una referencia a la ventana y a los tres pájaros.
|
331
|
336
|
|
332
|
|
----
|
|
337
|
+ ---
|
333
|
338
|
|
334
|
|
-![funcionMain.png](images/funcionMain.png)
|
|
339
|
+ ![funcionMain.png](images/funcionMain.png)
|
335
|
340
|
|
336
|
|
-**Figura 2.** Función `main`.
|
|
341
|
+ **Figura 2.** Función `main`.
|
337
|
342
|
|
338
|
|
----
|
|
343
|
+ ---
|
339
|
344
|
|
340
|
345
|
|
341
|
346
|
###Ejercicio 3: Escribir el código para determinar las características de Piolín
|