Professional Documents
Culture Documents
COMPOSTELA
Autor:
Antonio Carou Iglesias
Directores:
Dora Blanco Heras
Francisco Argüello Pedreira
INFORMAN:
E para que así conste aos efectos oportunos, expiden o presente informe en
Santiago de Compostela, a (9 de Setembro do 2013):
i
ii
Agradecementos
Á miña compañeira e futura dona, grazas polo seu mezenazgo e infinita pa-
ciencia.
iii
iv
Resumo
Dende finais da década dos 70, a humanidade demanda máis recursos dos que
a terra pode rexenerar cada ano. Este sobrexiro ecolóxico12 non resulta sostible e
precisa dun replantexamento sobre o consumo enerxético e tomar medidas, tanto
de xeito individual como colectivo para desfacer este sobrexiro e facer volver á
humanidade a vivir dentro dos límites da Terra.
v
e información sexa, ademais de abundante, regular. Para acadar este obxectivo
servímonos da metodoloxía de comportamento de Fogg[2] como guía para buscar
estímulos que fagan que o usuario utilice máis de cotío a aplicación (fidelización).
vi
Índice Xeral
1 Introdución 1
1.1 Contextualización . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Motivacións e Obxectivos . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Estrutura da memoria . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Xestión do Proxecto 11
3.1 Xestión do Alcance do Proxecto . . . . . . . . . . . . . . . . . . . . 11
3.1.1 Metodoloxía do Desenvolvemento . . . . . . . . . . . . . . . 11
3.1.2 Xestión de Requerimentos . . . . . . . . . . . . . . . . . . . 12
3.1.3 Estrutura de Desagregación do Traballo . . . . . . . . . . . . 12
3.2 Xestión de Riscos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3 Xestión Temporal . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.1 Etapa de Formación Preliminar . . . . . . . . . . . . . . . . 19
3.3.2 Etapa de Xestión do Proxecto . . . . . . . . . . . . . . . . . 20
3.3.3 Etapa de Análise Primeira Iteración . . . . . . . . . . . . . . 20
3.3.4 Etapa de Deseño Primeira Iteración . . . . . . . . . . . . . . 20
3.3.5 Etapa de Implementación Primeira Iteración . . . . . . . . . 21
3.3.6 Etapa de Análise Segunda Iteración . . . . . . . . . . . . . . 21
3.3.7 Etapa de Deseño Segunda Iteración . . . . . . . . . . . . . . 21
3.3.8 Etapa de Implementación Segunda Iteración . . . . . . . . . 21
3.4 Xestión do Custo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4.1 Factores Ambientais . . . . . . . . . . . . . . . . . . . . . . . 23
3.5 Xestión da Configuración . . . . . . . . . . . . . . . . . . . . . . . 26
3.5.1 Xestión do Código Fonte . . . . . . . . . . . . . . . . . . . . 26
3.5.2 Xestión da Documentación . . . . . . . . . . . . . . . . . . . 26
vii
4.2 Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.1 Definicións . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.2 Acrónimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3 Participantes no Proxecto . . . . . . . . . . . . . . . . . . . . . . . 29
4.4 Obxectivos do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.5 Actores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.6 Catálogo de Requerimentos da Apaalicación . . . . . . . . . . . . . 31
4.6.1 Requerimentos Funcionais . . . . . . . . . . . . . . . . . . . 31
4.6.2 Requerimentos Non Funcionais . . . . . . . . . . . . . . . . . 33
4.7 Especificación de Requerimentos . . . . . . . . . . . . . . . . . . . 33
4.7.1 Requerimentos Funcionais . . . . . . . . . . . . . . . . . . . 34
4.7.2 Requerimentos Non Funcionais . . . . . . . . . . . . . . . . . 43
4.8 Casos de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.8.1 Diagrama de Casos de Uso . . . . . . . . . . . . . . . . . . . 46
4.9 Matriz de Trazabilidade . . . . . . . . . . . . . . . . . . . . . . . . 60
4.10 Enunciado do Alcance do Proxecto . . . . . . . . . . . . . . . . . . 60
4.10.1 Definición do Alcance do Proxecto . . . . . . . . . . . . . . . 60
4.10.2 Criterios de Aceptación do Produto . . . . . . . . . . . . . . 61
4.10.3 Entregables do Proxecto . . . . . . . . . . . . . . . . . . . . 61
4.10.4 Exclusións do Proxecto . . . . . . . . . . . . . . . . . . . . . 61
4.10.5 Restricións do Proxecto . . . . . . . . . . . . . . . . . . . . . 61
4.10.6 Supostos do Proxecto . . . . . . . . . . . . . . . . . . . . . . 62
5 Deseño 63
5.1 Plataforma iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.1.1 Compoñentes da Plataforma . . . . . . . . . . . . . . . . . . 64
5.1.2 Modelo Vista Controlador . . . . . . . . . . . . . . . . . . . 65
5.1.3 Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.2 Deseño e Implementación . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.1 Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.2 Vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.2.3 Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
viii
7 Conclusións 121
7.1 Conclusións . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
7.2 Posibles Ampliacións . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Bibliografía 137
Índice de Figuras
ix
4.7 Subsistema Bolsa de Traballo . . . . . . . . . . . . . . . . . . . . . 58
x
B.2 Selección Perfil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
B.3 Xanela Cuestionario. Cuestionarios incompletos (a) e cuestionarios
completos (b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
B.4 Elementos comúns do cuestionario Transporte (1) . . . . . . . . . . 128
B.5 Áreas comúns do cuestionario Transporte (2) . . . . . . . . . . . . 129
B.6 Xanela Estatísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
B.7 Vistas Consellos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
B.8 Vistas Información . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
B.9 Vistas Resultados Pegada Ecolóxica . . . . . . . . . . . . . . . . . 132
B.10Borrar Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
B.11Xanela Calendario . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
B.12Xanela Traballo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
B.13Xanela Novidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Índice de Táboas
xi
4.3 Obxectivo do sistema Obx.02 . . . . . . . . . . . . . . . . . . . . . 29
4.4 Obxectivo do sistema Obx.03 . . . . . . . . . . . . . . . . . . . . . 29
4.5 Obxectivo do sistema Obx.04 . . . . . . . . . . . . . . . . . . . . . 30
4.6 Obxectivo do sistema Obx.05 . . . . . . . . . . . . . . . . . . . . . 30
4.7 Obxectivo do sistema Obx.06 . . . . . . . . . . . . . . . . . . . . . 30
4.8 Obxectivo do sistema Obx.07 . . . . . . . . . . . . . . . . . . . . . 30
4.9 Actor Act.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.10 Descrición das opcións de relevancia dun requerimento . . . . . . . 34
4.11 Requerimento RF.01: “Seleccionar o perfil entre 3 diferentes PDI,
PAS e Estudante” . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.12 Requerimento RF.02: “Consultar información relativa á Pegada
Ecolóxica” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.13 Requerimento RF.03: “Consultar recomendacións que lle permita
reducir a súa Pegada Ecolóxica” . . . . . . . . . . . . . . . . . . . 35
4.14 Requerimento RF.04: “Acceder ao cuestionario para a recollida de
información relativa a os hábitos de transporte” . . . . . . . . . . . 35
4.15 Requerimento RF.05: “Acceder ao cuestionario para a recollida de
información relativa ao consumo de papel” . . . . . . . . . . . . . . 36
4.16 Requerimento RF.06: “Recordatorio cada 6 meses” . . . . . . . . . 36
4.17 Requerimento RF.07: “Borrar todos os datos respondidos nos cues-
tionarios” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.18 Requerimento RF.08: “Consultar o resultado do cálculo da súa Pe-
gada Ecolóxica” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.19 Requerimento RF.09: “Amosará o resultado da Pegada Ecolóxica
do usuario comparada coa media da USC” . . . . . . . . . . . . . . 37
4.20 Requerimento RF.10: “Engade novidades á lista” . . . . . . . . . . 38
4.21 Requerimento RF.11: “Obter datos do calendario da páxina web da
ETSE” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.22 Requerimento RF.12: “Listar citas do calendario agrupados por días” 38
4.23 Requerimento RF.13: “Acceder a detalles da cita do calendario” . . 39
4.24 Requerimento RF.14: “Obter datos da sección novidades da páxina
web da ETSE” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.25 Requerimento RF.15: “Listar as novidades” . . . . . . . . . . . . . 39
4.26 Requerimento RF.16: “Acceder a detalles de unha novidade” . . . . 40
4.27 Requerimento RF.17: “Obter datos da bolsa de traballo da páxina
web da ETSE” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.28 Requerimento RF.18: “Listar as ofertas de traballo agrupadas por
perfil profesional” . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.29 Requerimento RF.19: “Acceder a os detalles dunha oferta de traballo” 41
4.30 Requerimento RF.20: “Subir datos ao servidor central” . . . . . . . 41
4.31 Requerimento RF.21: “Actualiza lista de citas do calendario” . . . 42
4.32 Requerimento RF.22: “Actualiza lista de novidades” . . . . . . . . 42
4.33 Requerimento RF.23: “Actualiza ofertas de traballo” . . . . . . . . 42
xii
4.34 Requerimento RF.24: “As respostas da enquisa poden ser consul-
tadas” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.35 Requerimento RP.01: “Desenvolta para dispositivos co sistema op-
erativo iOS de Apple” . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.36 Requerimento RP.02: “Traballar con unha base de datos MySQL” . 43
4.37 Requerimento RP.03: “Dispoñer dunha conta de desenvolvedor de
Apple gratuíta para as etapas de implementación” . . . . . . . . . 44
4.38 Requerimento RP.04: “Dispoñer dunha conta de desenvolvedor de
Apple de pago para a etapa de despregue” . . . . . . . . . . . . . . 44
4.39 Requerimento RI.01: “Interface amigable e usable” . . . . . . . . . 44
4.40 Requerimento RI.02: “Interface orientada a dispositivos táctiles” . 45
4.41 Requerimento RD.01: “Gardar as respostas en local” . . . . . . . . 45
4.42 Requerimento RD.02: “Os datos gardados en local deben ser al-
maceados nunha base de datos SQLite” . . . . . . . . . . . . . . . 45
4.43 Requerimento R.01: “A aplicación debe velar polo anonimato do
usuario” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.44 Requerimento R.02: “Non accederá á información da ETSE sen ter
cuberta as enquisas” . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.45 Caso de Uso CU.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.46 Caso de Uso CU.02 . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.47 Caso de Uso CU.03 . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.48 Caso de Uso CU.04 . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.49 Caso de Uso CU.05 . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.50 Caso de Uso CU.06 . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.51 Caso de Uso CU.07 . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.52 Caso de Uso CU.08 . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.53 Caso de Uso CU.09 . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.54 Caso de Uso CU.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.55 Caso de Uso CU.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.56 Caso de Uso CU.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.57 Caso de Uso CU.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.58 Caso de Uso CU.14 . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.59 Caso de Uso CU.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.60 Caso de Uso CU.16 . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.61 Caso de Uso CU.17 . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.62 Caso de Uso CU.18 . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.63 Caso de Uso CU.19 . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.64 Matriz de Trazabilidade . . . . . . . . . . . . . . . . . . . . . . . . 60
xiii
5.5 CRC Clase MainViewController . . . . . . . . . . . . . . . . . . . . 88
5.6 CRC Clase SeleccionPerfilViewController . . . . . . . . . . . . . . . 88
5.7 CRC Clase UITabBarController . . . . . . . . . . . . . . . . . . . . 88
5.8 CRC Clase UINavigationController . . . . . . . . . . . . . . . . . . 89
5.9 CRC Clase SeleccionCuestionarioViewController . . . . . . . . . . 89
5.10 CRC Clase DetalleNovidadeViewController . . . . . . . . . . . . . 89
5.11 CRC Clase DetalleOfertaTraballoViewController . . . . . . . . . . 89
5.12 CRC Clase DetalleCitaViewController . . . . . . . . . . . . . . . . 89
5.13 CRC Clase DetalleInformacionViewController . . . . . . . . . . . . 90
5.14 CRC Clase DetalleConselloViewController . . . . . . . . . . . . . . 90
5.15 CRC Clase EstatisticaViewController . . . . . . . . . . . . . . . . . 90
5.16 CRC Clase NovidadesTableViewController . . . . . . . . . . . . . . 91
5.17 CRC Clase BolsaTraballoTableViewController . . . . . . . . . . . . 91
5.18 CRC Clase BolsaTraballoTableViewController . . . . . . . . . . . . 91
5.19 CRC Clase ConsellosTableViewController . . . . . . . . . . . . . . 91
5.20 CRC Clase InformacionTableViewController . . . . . . . . . . . . . 92
5.21 CRC Clase Utilidades . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.22 CRC Clase RespuestaChecksViewController . . . . . . . . . . . . . 92
5.23 CRC Clase RespuestaChecksViewController . . . . . . . . . . . . . 93
5.24 CRC Clase RespuestaValorViewController . . . . . . . . . . . . . . 93
5.25 CRC Clase RespuestaDistanciaViewController . . . . . . . . . . . . 93
5.26 CRC Clase RespuestaCantidadViewController . . . . . . . . . . . . 93
5.27 CRC Clase EnquisaDAO . . . . . . . . . . . . . . . . . . . . . . . . 94
5.28 CRC Clase NovidadesDAO . . . . . . . . . . . . . . . . . . . . . . 94
5.29 CRC Clase TraballosDAO . . . . . . . . . . . . . . . . . . . . . . . 94
5.30 CRC Clase CitasDAO . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.31 CRC Clase XeralDAO . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.32 CRC Clase LocalDB . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.33 CRC Clase Perfil . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.34 CRC Clase Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.35 CRC Clase Respostas . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.36 CRC Clase Cita . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.37 CRC Clase Traballo . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.38 CRC Clase Novidades . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.39 CRC Clase Informacion . . . . . . . . . . . . . . . . . . . . . . . . 96
5.40 CRC Clase Consello . . . . . . . . . . . . . . . . . . . . . . . . . . 96
xiv
Capítulo 1
Introdución
1.1 Contextualización
Nos anos noventa, William Rees e Mathis Wackernagel da universidade da
Columbia Británica, desenvolven o concepto de Pegada Ecolóxica[18]. Este con-
cepto permite estimar cuantitativamente os requerimentos ecolóxicos dunha de-
terminada entidade, poboación, rexión ou país. As medidas que devolve o cálculo
de dita pegada represéntanse en unidades de superficie equivalentes de terreo
ecolóxicamente produtivo. Este terreo supón unha fonte de recursos de terra e
agua que deberían ser necesarios para asimilar os residuos derivados da actividade
socioeconómica e cultural da entidade estudada. Ademais do concepto definiron
un modelo de cálculo de esta Pegada Ecolóxica, que aplicaron a diferentes países
con un alto grao de desenvolvemento. Os cálculos efectuados puxeron de man-
ifesto resultados pouco optimistas en canto a sostebilidade, presentando graves
déficits ecolóxicos.
1
2 CAPÍTULO 1. INTRODUCIÓN
Pese a todo, requírese dos bolseiros que seguiran realizando enquisas presen-
ciais para obter datos relativos ao transporte e hábitos de consumo de papel. Co
obxectivo de que os datos cheguen de xeito autónomo, Javier López Fandiño[8]
desenvolveu unha aplicación para dispositivos móbiles Android. A aplicación
encárgase de realizar a enquisa sobre transporte e consumo de papel e almace-
nala nun servidor á espera de ser procesada. A aplicación de Android presentaba
os resultados da súa pegada ecolóxica e relacionábaos coa media da USC. Ade-
mais ofrecía información adicional sobre a pegada ecolóxica e distintos consellos
para axudar a reducila. Pese a que a aplicación resultou ser usada, non ofrecía su-
ficiente atractivo para que o usuario voltara a utilizala, perdendo a continuidade
do fluxo dos datos.
(FBM3 ).
Fogg propón que para que unha persoa teña un comportamento desexado
deben cumprirse 3 condicións simultáneamente, que estea suficientemente movi-
tada, que sexa capaz de actuar de esa maneira (habilidade) e que exista un
desencadeante que o faga actuar (desencadeante). Coa aplicación desenvolta no
presente proxecto, trátase de aplicar a metodoloxía de comportamento de Fogg
coa intención de que o usuario da aplicación encha a enquisa e conseguir os datos
necesarios para o cálculo da pegada ecolóxica da universidade.
a súa relación
toneladas
ano
toneladas ⇒ superf icie
ano
superf icie
1
A hectárea corresponde á centésima parte dun Km2 , 10.000 m2 ou aproximadamente un
campo de fútbol
5
6 CAPÍTULO 2. A PEGADA ECOLÓXICA E FBM
2
https://www.usc.es/plands/seccions/datos_plan/eixe2/pegada_ecoloxica/
pegada.htm
3
https://www.usc.es/plands/seccions/datos_plan/eixe3/linas_actuacion/
sensibeparticipalumnado/bolsassostibles/bolseiro.htm
2.2. METODOLOXÍA DE COMPORTAMENTO DE FOGG 7
Comportamento
Desexado
3. Desencadeante
do
e xa
1. Motivación
qu ese
de d
d e nto
a e
lid am
a bi ort
ob mp
pr co
d a o
to ee
en cad
em n
cr se
In de
se
2. Habilidade
Xestión do Proxecto
11
12 CAPÍTULO 3. XESTIÓN DO PROXECTO
Análise Análise
Deseño Deseño
Implementación Implementación
Probas Probas
Figura 3.1: Iteración n e iteración n+1 dunha metodoloxía áxil por incrementos
A figura 3.2 representa o EDT. Cabe sinalar que as fases análise, deseño e
implementación se realizarán en cada iteración, seguindo coa metodoloxía de de-
senvolvemento escollida.
Metodoloxía de Deseño
de Aplicacións iOS
Familiarización co Entorno
de Desenvolvemento Xcode
Definición do Alcance
da Aplicación para iOS
Creación do EDT
Creación do
Cronograma
Xestión do Proxecto
Control e Seguemento
do Cronograma
Revisión do Alcance
do Proxecto
Estudo preliminar sobre
a Pegada Ecolóxica
Documentación
Identificación dos Casos de
Uso dos Subsistemas Enquisa,
Perfil e Pegada Ecolóxica
Análise Primeira
Iteración
Especificación de Requerimentos
dos Subsistemas Enquisa, Perfil
Desenvolvemento dunha
e Pegada Ecolóxica
aplicación iOS para o cálculo da
Pegada Ecolóxica Deseño de almaceamento
de datos
Deseño orientado a
Deseño Primeira obxectos da aplicación iOS
Iteración
Deseño da interface
Primeira Iteración gráfica
Estudo Preliminar da
Metodoloxía de
Comportamento de Fogg
Especificación de requerimentos
dos subsistemas Calendario,
Bolsa de Traballo e Novidades
Deseño de
almaceamento de datos
Deseño orientado a
Segunda Iteración
Deseño Segunda obxectos da aplicación iOS
Iteración
Deseño da interface
gráfica
Probabilidade
Alta Media Baixa
Alto Alto Alto Medio
Impacto Medio Alto Medio Baixo
Baixo Medio Baixo Baixo
RSC.01
Planificación optimista
Descrición
Alta
Probabilidade
Medio
Impacto
Alta
Exposición
• Considerar dende o principio do proxecto a data
límite e o alcance do proxecto.
Plan de Prevención • Facer unha análise e estimacións exhaustiva.
RSC.02
Un atraso nunha tarefa, produce atrasos en cascada
Descrición nas tarefas dependentes.
Alta
Probabilidade
Medio
Impacto
Alta
Exposición
• Máis esforzo na planificación.
• Selección axeitada do ciclo de vida que permita un
Plan de Prevención desenvolvemento máis dinámico.
Táboa 3.5: Risco RSC.02 Un atraso nunha tarefa, produce atrasos en cascada
nas tarefas dependentes
RSC.03
Desenvolvemento deficiente, implica recodificar partes
Descrición da aplicación.
Media
Probabilidade
Alto
Impacto
Alta
Exposición
•Máis énfase no deseño.
• Seguemento exhaustivo na etapa de implementación.
Plan de Prevención • Probas periódicas durante a codificación.
RSC.04
Os obxectivos non se definiron correctamente.
Descrición
Media
Probabilidade
Alto
Impacto
Alta
Exposición
Realizar novas entrevistas co cliente, facendo énfase
Plan de Prevención nos obxectivos esperados.
Renegociar o alcance co cliente.
Plan de Corrección
RSC.05
Os intervalos para a revisión e decisión dos plans, pro-
Descrición totipos e especificacións resultan máis lentos do esper-
ado.
Media
Probabilidade
Medio
Impacto
Media
Exposición
Plans para as entrevistas co cliente máis minuciosas.
Plan de Prevención
Aumentar a frecuencia dos intentos de comunicación
Plan de Corrección cando son falidos.
Táboa 3.8: Risco RSC.05 Os intervalos para a revisión e decisión dos plans,
prototipos e/ou especificacións resultan máis lentos do esperado
18 CAPÍTULO 3. XESTIÓN DO PROXECTO
RSC.06
A falta de motivación e moral reduce a productividade.
Descrición
Media
Probabilidade
Medio
Impacto
Media
Exposición
Manter a motivación evitando que as tarefas máis ar-
Plan de Prevención duas se prolonguen durante moito tempo nunha única
xornada.
Distraerse con outra tarefa máis agradecida.
Plan de Corrección
RSC.07
Perda accidental do código implementado.
Descrición
Media
Probabilidade
Medio
Impacto
Media
Exposición
• Énfase na Xestión da configuración.
• Coidados axeitados sobre os sistemas hardware e
Plan de Prevención software implicados na implementación.
RSC.08
Apple rexeita a publicación na App Store.
Descrición
Alta
Probabilidade
Alto
Impacto
Media
Exposición
Énfase nos requerimentos de Apple para a publicación
Plan de Prevención de aplicacións na App Store.
Revisión das causas do rexeitamento e corrección.
Plan de Corrección
Duración: 64 horas
Duración: 24 horas
1
https://developer.apple.com/library/ios/navigation/
3.3. XESTIÓN TEMPORAL 21
Duración: 19 horas
Duración: 84 horas
Duración: 24 horas
Duración: 16 horas
Salario Bruto
Categoría
FOGASA
Recurso
Total
€/h
S.S.
Antonio Proxectando 24000 7128 48 31176 14,76
Tendo en conta o custo por hora analizado na táboa 3.12 a cantidade que
se debe aboar ao proxectando, sendo o proxecto dunha duración de 409 horas a
14,76 €/hora, é 6036,84 €.
prezo €
= (1)
anos vida util · dias laborais da
da
O custo dun ordenador MacBook Pro é de 1229,00 €. O tempo de vida útil
dun ordenador vai dende os 5 aos 7 anos, unha media de 6 anos. Os días laborais
son de media 250 días cada ano, polo tanto:
1299,00€
6anos·250dias
= 0, 87€/dia
0,87
4
= 0, 22€/hora
Por outro lado, o custo dun dispositivo móbil como un iPhone4, que foi o
utilizado para o proxecto, é de 389 € e a sua vida útil ronda entre 3 e 4 anos,
unha media de 3,5 anos. Aplicando as fórmulas 1 e 2:
3.4. XESTIÓN DO CUSTO 25
389€
3,5anos·250dias
= 0, 44€/dia
0,44
4
= 0, 11€/hora
Financiamento
Xa que se trata de un proxecto de fin de grado, non resulta necesario detallar
o fluxo de caixa do proxecto.
TOTAIS
Xcode dispón de un control de versións propio, facendo que non sexa nece-
saria unha ferramenta adicional para acadar a seguridade buscada. Ademais, a
metodoloxía de desenvolvemento escollida fai que o control de versións sexa algo
natural.
Elaboración do Catálogo de
Requerimentos
4.1 Introdución
Sendo iOS a segunda plataforma en canto tráfico, este proxecto pretende facer
chegar a ese nicho de usuarios unha utilidade que, para aqueles usuarios sensi-
bilizados co desenvolvemento sostible, poida aportar información que axude á
USC a achegarse máis á sostebilidade desexada aportando información sobre os
seus hábitos de transporte e consumo de papel. Ademais, para facer que o fluxo
de información sexa o máis continuada e autónoma posible, a aplicación disporá
de funcionalidades adicionais que resulten útiles para o desenvolvemento da súa
actividade na USC, aumentando a súa utilidade con respecto á aplicación de An-
droid, unha interface máis amigable que aumente a súa usabilidade, conseguindo
así unha maior fidelización por parte dos usuarios.
27
28CAPÍTULO 4. ELABORACIÓN DO CATÁLOGO DE REQUERIMENTOS
4.2 Glosario
4.2.1 Definicións
Actor: Ente que interaciona coa aplicación.
App Store: Tenda de aplicacións de Apple. Único medio a través do cal se pode
distribuir software para os dispositivos iOS.
4.2.2 Acrónimos
API: Do inglés “Application Programming Interface”. Conxunto de funcións ou
un conxunto de clases cos seus métodos que teñen o propósito de dar acceso
aos servizos dun determinado sistema.
4.5 Actores
Preséntanse a continuación os actores que interaccionarán coas funcionali-
dades da aplicación.
4.6. CATÁLOGO DE REQUERIMENTOS DA APAALICACIÓN 31
Usuario.
Act.01
Persoas que fan uso da aplicación.
Descrición
Non se consideran actores diferentes, usuarios que teñan un
Comentarios perfil distinto. PDI, PAS e Estudantes son considerados todos
como actores Usuario.
Requerimentos de Datos
RD.02 Os datos gardados en local deben ser almaceados nunha base de datos
SQLite.
Restricións
Relevancia Descrición
Esperado O requerimento resulta de gran importancia para acadar o
obxectivo principal do proxecto.
Desexable Acadar o requerimento mellora a calidade do proxecto, pero
pode acadarse o obxectivo principal prescindindo do requer-
imento.
Opcional Requerimentos que melloran a calidade nun grao menor que
os requerimentos desexables. Únicamente se levarán a cabo
se se dispón de tempo suficiente.
Táboa 4.17: Requerimento RF.07: “Borrar todos os datos respondidos nos cues-
tionarios”
Táboa 4.34: Requerimento RF.24: “As respostas da enquisa poden ser consul-
tadas”
Táboa 4.36: Requerimento RP.02: “Traballar con unha base de datos MySQL”
44CAPÍTULO 4. ELABORACIÓN DO CATÁLOGO DE REQUERIMENTOS
Requerimentos de Datos
Táboa 4.42: Requerimento RD.02: “Os datos gardados en local deben ser al-
maceados nunha base de datos SQLite”
46CAPÍTULO 4. ELABORACIÓN DO CATÁLOGO DE REQUERIMENTOS
Restricións
Táboa 4.44: Requerimento R.02: “Non accederá á información da ETSE sen ter
cuberta as enquisas”
Accede a
Detalles da Cita
Información
Adicional
Consellos para a
Redución da Pegada
Borrar Datos
Ecolóxica
Usuario
Subsistema Pegada Ecolóxica
Selección do
Perfil de Usuario
Subsistema Perfil
Subsistema Perfil
Subsistema Perfil
Borrar Datos
Usuario
Usuario
Selección do
Perfil de Usuario
Identificador CU.01
Nome Selección do Perfil de Usuario
Propósito A primeira vez que se inicie a aplicación pediráselle
ao usuario que seleccione o perfil ao cal pertence
dentro da universidade.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O perfil non foi seleccionado con anterioridade ou
os datos do usuario foron borrados.
Poscondicións O usuario queda configurado con un perfil deter-
minado entre PDI, PAS ou Estudante
Escenarios Iníciase a aplicación por primeira vez ou borrouse
a información do usuario, preguntaráselle con cal
dos 3 perfís coincide a súa relación coa USC (PDI,
PAS ou Estudante).
Escenario alternativo Iníciase a aplicación cando o usuario xa selec-
cionara un perfil anteriormente. Saltará esta op-
ción á vista principal da aplicación.
Subsistemas Subsistema Perfil
Identificador CU.02
Nome Borrar Datos Usuario
Propósito Eliminar do medio de almacenamento local os
datos relativos ás enquisas cubertas polo usuario.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario seleccionou un perfil.
Poscondicións A información do usuario elimínase do almacena-
mento local.
Escenarios O usuario preme o botón que lle permite borrar
os datos relativos a el na xanela correspondente, a
aplicación xera unha alerta pedindo confirmación
para evitar borrados accidentais.
Subsistemas Subsistema Perfil
Subsistema Enquisa
Este subsistema é o encargado de manexar todas as accións que o usuario debe
realizar sobre a aplicación á hora de encher as enquisas de papel e transporte.
Tamén se encarga de amosar os resultados obtidos despois de cubrir a enquisa e
de subir os datos a o servidor central.
Subsistema Enquisa
Cubre Enquisa
Transporte
Consulta Resultados
Transporte
Usuario
Cubre Enquisa
Papel
Consulta Resultados
Papel
Envía Datos
Identificador CU.03
Nome Cobre Enquisa Transporte
Propósito Responder ás preguntas relacionadas coa enquisa
sobre hábitos de transporte.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario seleccionou un perfil.
Poscondicións As resposta seleccionadas quedan gardadas en al-
macenamento local mentres remata de cubrir a en-
quisa.
Escenarios O usuario preme o botón que o leva ao inicio da
enquisa de transporte e vai avanzando a través das
diferentes preguntas.
Subsistemas Subsistema Enquisa
Identificador CU.04
Nome Consulta Resultados Transporte
Propósito Consulta a pegada ecolóxica relativa ao transporte.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario completou a enquisa de transporte.
Poscondicións Todas as respostas foron gardadas en almacena-
mento local a partir das cales se calculou a pegada
ecolóxica relativa ao transporte.
Escenarios O usuario remata de cubrir a enquisa de transporte
e dirísexe á sección de estatísticas para consultar a
súa pegada ecolóxica relativa a os hábitos de trans-
porte.
Subsistemas Subsistema Enquisa
Identificador CU.05
Nome Cobre Enquisa Papel
Propósito Responder ás preguntas relacionadas coa enquisa
sobre consumo de papel.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario seleccionou un perfil.
Poscondicións As resposta seleccionadas quedan gardadas en al-
macenamento local mentres o usuario remata de
cubrir a enquisa.
Escenarios O usuario preme o botón que o leva ao inicio da
enquisa de transporte e vai avanzando a través das
diferentes preguntas.
Subsistemas Subsistema Enquisa
Identificador CU.06
Nome Consulta Resultados Papel
Propósito Consulta a pegada ecolóxica relativa ao consumo
de papel.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario completou a enquisa de consumo de pa-
pel.
Poscondicións Todas as respostas foron gardadas en almacena-
mento local a partir das cales se calculou a pegada
ecolóxica relativa ao consumo de papel.
Escenarios O usuario remata de cubrir a enquisa de consumo
de papel e dirísexe á sección de estatísticas para
consultar a súa pegada ecolóxica relativa ao con-
sumo de papel.
Subsistemas Subsistema Enquisa
Identificador CU.07
Nome Envía Datos
Propósito Enviar os datos recollidos polas enquisas ao servi-
dor central.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario completou a enquisa de consumo de pa-
pel e de transporte.
Poscondicións Todas as respostas foron gardadas en almacena-
mento local á espera de ser enviadas. O botón que
permite enviar os datos actívase.
Escenarios O usuario remata de cubrir as dúas enquisas e dirí-
sexe á sección de estatísticas onde o botón de en-
viar datos deberá estar habilitado.
Subsistemas Subsistema Enquisa
Información
Usuario Adicional
Identificador CU.08
Nome Consellos para a Redución da Pegada Ecolóxica
Propósito Informar ao usuario sobre accións que pode re-
alizar para conseguir reducir a súa pegada ecolóx-
ica.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario seleccionou un perfil.
Poscondicións O usuario visualizou a lista de consellos que lle
permiten reducir a súa pegada ecolóxica.
Escenarios O usuario entra na sección de estatísticos e con-
sulta os consellos para reducir a Pegada Ecolóxica.
Subsistemas Subsistema Pegada Ecolóxica
Identificador CU.09
Nome Información Adicional
Propósito Presentar ao usuario información que poida ser de
interese sobre a Pegada Ecolóxica.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario seleccionou un perfil.
Poscondicións O usuario visualizou a lista que contén información
sobre a Pegada Ecolóxica.
Escenarios O usuario entra na sección de estatísticos e con-
sulta a información adicional sobre a Pegada
Ecolóxica.
Subsistemas Subsistema Pegada Ecolóxica
Subsistema Calendario
Subsistema Calendario
Acceso á Lista
de Citas do
Calendario
Recarga Citas do
Usuario Calendario
Accede a
Detalles da Cita
Identificador CU.10
Nome Acceso a Lista de Citas do Calendario
Propósito Acceder á vista onde se amosará unha lista coas
citas contidas no calendario da web da escola.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte.
Poscondicións O usuario pode navegar pola lista de citas do cal-
endario.
Escenarios O usuario preme sobre a xanela correspondente ao
calendario e amósaselle unha lista coas citas do
calendario da ETSE agrupadas por días.
Subsistemas Subsistema Calendario
Identificador CU.11
Nome Recarga Citas Do Calendario
Propósito Actualizar as citas no calendario para comprobar
se existen citas novas.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte e entrou na xanela do calendario.
Poscondicións A aplicación dispón da lista actualizada de citas.
Escenarios O usuario preme sobre o botón de recarga de citas e
amosa unha lista actualizada coas novas citas obti-
das dende o arquivo ICS do calendario da ETSE.
Subsistemas Subsistema Calendario
Identificador CU.12
Nome Accede a Detalles da Cita
Propósito Amosar información detallada sobre unha deter-
minada cita.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte e entrou na xanela do calendario.
Poscondicións Vista coa información detallada da cita selec-
cionada.
Escenarios O usuario preme sobre unha cita da lista, cam-
biando de vista a unha que amosa a información
detallada da mesma.
Subsistemas Subsistema Calendario
Subsistema Novidades
Subsistema Novidades
Acceso á Lista
de Novidades
Recarga
Novidades
Usuario
Accede a Detalles
da Novidade
Carga Máis
Novidades
Identificador CU.13
Nome Acceso a Lista de Novidades
Propósito Acceder á vista onde se amosará unha lista coas
novidades contidas na web da escola.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte.
Poscondicións O usuario pode navegar pola lista das novidades.
Escenarios O usuario preme sobre a xanela correspondente ás
novidades e amósaselle unha lista coas novidades
publicadas na páxina web da ETSE.
Subsistemas Subsistema Novidades
Identificador CU.14
Nome Recarga Novidades
Propósito Actualizar novidades para comprobar se existen
novas.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte e entrou na xanela de novidades.
Poscondicións A aplicación dispón da lista actualizada das novi-
dades.
Escenarios O usuario preme sobre o botón de recarga de novi-
dades e recarga a lista de novidades coas 10 novi-
dades máis recentes publicadas na páxina web da
ETSE.
Subsistemas Subsistema Novidades
Identificador CU.15
Nome Accede a Detalles da Novidade
Propósito Amosar información detallada sobre unha deter-
minada novidade.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte e entrou na xanela das novidades.
Poscondicións Vista coa información detallada da novidade selec-
cionada.
Escenarios O usuario preme sobre unha novidade da lista,
cambiando de vista a unha que permita ver a in-
formación detallada da mesma.
Subsistemas Subsistema Calendario
Identificador CU.16
Nome Carga Máis Novidades
Propósito Engade novidades á lista de novidades.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte e entrou na xanela das novidades.
Poscondicións Hai 10 novidades máis na lista.
Escenarios O usuario chega ao final da lista de novidades e a
aplicación carga 10 novidades máis.
Subsistemas Subsistema Novidades
Recarga Ofertas de
Traballo
Accede a Detalles da
Usuario Oferta de Traballo
Acceso á Lista de
Ofertas de Traballo
Identificador CU.17
Nome Acceso á lista de Ofertas de Traballo
Propósito Acceder á vista onde se amosará unha lista coas
ofertas de traballo contidas na web da escola agru-
padas por perfil.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte.
Poscondicións O usuario pode navegar pola lista das ofertas de
traballo.
Escenarios O usuario preme sobre a xanela correspondente ás
ofertas de traballo onde se amosa unha lista coas
ofertas de traballo organizadas segundo o perfil
profesional.
Subsistemas Subsistema Bolsa de Traballo
Identificador CU.18
Nome Recarga Ofertas de Traballo
Propósito Actualizar ofertas de traballo para comprobar se
existen novas ofertas.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte e entrou na xanela de traballo.
Poscondicións A aplicación dispón da lista actualizada das ofertas
de traballo.
Escenarios O usuario preme sobre o botón de recarga de ofer-
tas de traballo amosando unha lista actualizada
das ofertas de traballo publicadas na páxina web
da ETSE.
Subsistemas Subsistema Bolsa de Traballo
Identificador CU.19
Nome Accede a Detalles da Oferta de Traballo
Propósito Amosar información detallada sobre unha deter-
minada oferta de traballo.
Actores que participan Usuario
Relacións con outros Non consta
casos de uso
Precondicións O usuario rematou de cubrir as enquisas de papel
e transporte e entrou na xanela de traballo.
Poscondicións Vista coa información detallada da oferta de tra-
ballo seleccionada.
Escenarios O usuario preme sobre unha oferta de traballo da
lista, cambiando de vista a unha que permita ver
a información detallada da mesma.
Subsistemas Subsistema Bolsa de Traballo
CU.04
CU.08
CU.01
CU.02
CU.03
CU.05
CU.06
CU.07
CU.09
CU.10
CU.11
CU.12
CU.13
CU.15
CU.14
CU.16
CU.17
CU.18
CU.19
RF.01 •
RF.02 •
RF.03 •
RF.04 •
RF.05 •
RF.06
RF.07 •
RF.08 • •
RF.09 • •
RF.10 •
RF.11 •
RF.12 •
RF.13 •
RF.14 • •
RF.15 •
RF.16 •
RF.17 •
RF.18 •
RF.19 •
RF.20 •
RF.21 •
RF.22 •
RF.23 •
RF.24 • •
Para que a aplicación poida ser publicada na App Store, deberá cumprir as
seguintes restricións:
Suponse que ao servidor central se debe subir o arquivo SQLite e que os datos
contidos no mesmo serán procesados dende o lado do servidor.
Capítulo 5
Deseño
Cocoa Touch
Media
Core Services
Core OS
Hardware
Core OS: En esta capa atópanse as características de baixo nivel sobre as que
63
64 CAPÍTULO 5. DESEÑO
Core Services: Esta capa contén os servizos fundamentais do sistema que pode
chegar a utilizar unha aplicación. Acceso a arquivos, servizos de rede,
manexo de fíos, obxectos e coleccións de obxectos (coleccións, dicionar-
ios1 ...),etc son algunhas das características que se manexan en esta capa.
En esta capa comezan a implementarse obxectos, tratando o acceso a o
hardware de máis baixo nivel con programación orientada a obxectos. Por
exemplo, en este nivel un socket é un obxecto, a posición que devolve o
GPS é un obxecto, etc.
Media: Manexo de vídeo, fotos, e todo tipo de contido multimedia. Inclúe tamén
soporte para OpenGL, audio, pdf, etc.
Modelo: O campo modelo contén obxectos que describen que obxectos vai
manexar a aplicación. É completamente independente da interface de
usuario.
Target
Action
Controlador Delegate
Notificación
Modelo Vista
Os obxectos contidos en cada un dos campos poden comunicarse entre si, pero
se queremos respetar esta estratexia de deseño existen certas restricións a estas
comunicacións.
O Controlador ten acceso total sen restricións aos obxectos presentes no campo
Modelo. Do mesmo xeito debe ter acceso aos obxectos presentes no campo Vista,
66 CAPÍTULO 5. DESEÑO
pero debe comunicarse con eles a través dun obxecto instanciado no controlador
de tipo Outlet, no caso de que dito obxecto presente unha saída (unha etiqueta,
unha imaxe, etc), ou un tipo Action, no caso de que sexa un obxecto da vista
que execute unha acción (un botón, un slider, etc). Estas entidades son partes
da vista que se referencian a través do Xcode.
• Target Action: A vista envía unha acción a un Target. En iOS este obxec-
tivo está representado por unha instancia do tipo Action, que será referen-
ciado a través do Xcode.
5.1.3 Arquitectura
Modelo Obxectos
Persoalizados
Obxectos do Sistema
Do Sistema e/ou
Persoalizados
Controlador Vista
Vistas e Obxectos
ViewController
de UI
Event
Loop
5.2.1 Modelo
A persistencia dos datos acádase a partir dunha base de datos SQLite, e para
a súa correcta implementación é necesario seguir unha serie de tarefas de deseño:
2. Modelo Entidade-Relación.
3. Modelo Relacional.
Modelo Entidade-Relación
Enquisas Utilidades
OfertaTraballo
Perfiles
titulo {PK}
id {PK}
perfil {PK}
completado
empresa {PK}
perfil
descricion
seleccionado
1 url
carga_inicial_traballos
localidade
carga_inicial_citas
carga_inicial_novidades
Citas
1
resumo {PK}
dataInicio {PK}
dispon requeridas
dataFin
1..* descricion
0..1 url
Preguntas 0..1
id {PK}
1 Responde
tipo Novidades
enunciado titulo
tipoResposta descricion
url {PK}
1
respondeseCon
Utilidades
0..*
Respostas Consellos
1..*
id {PK_P} tipo {PK_P}
resposta titulol {PK_P}
consello
Entidade débil
de Preguntas Informacion
pregunta {PK_P}
resposta {PK_P}
Dicionario de Datos:
72 CAPÍTULO 5. DESEÑO
Modelo Relacional
A partir do diagrama Entidade-Relación da figura 5.4 crearase o Modelo Rela-
cional que se seguirá para a implementación do script de xeración da base de
datos. A transformación do modelo Entidade-Relación a modelo Relacional con-
séguese seguindo unha serie de pasos:
1. A partir de entidades fortes, créanse táboas que inclúan todos os atributos
da entidade.
2. A partir dunha entidade débil créase unha táboa que inclúa todos os atrib-
utos de esta, incluíndo a clave principal da entidade forte da que depende
como clave externa. A clave principal da nova relación será a composta
pola clave principal da entidade forte e a clave principal da entidade débil.
3. Nas relacións con multiplicidade 1:* debe engadirse na relación do lado “*”
a clave principal do lado “1” como clave externa. Se a relación é unha
relación con atributos deben ser incluídos na mesma táboa.
4. Se a multiplicidade é 1:1 debemos verificar a obrigatoriedade de partici-
pación na relación:
• Se é obrigatorio que as dúas entidades interveñan na relación (1..1—
1..1) combínanse as dúas entidades nunha mesma táboa
• Se a participación é obrigatoria nun único lado (1..1—0..1) a clave
principal do lado opcional da relación 0..1 engádese na táboa no lado
obrigatorio como clave externa.
• Se a participación é opcional nos dous lados (0..1—0..1), a disposición
é arbitraria sempre e cando non se dispoña de información adicional
na semántica.
5. Se a relación é *:* debe crearse unha táboa para representar a relación, que
constará coas claves primarias das entidades presentes na relación.
Ademais teranse en conta as políticas de integridade referencial.
• Restrinxir (RESTRICT): Non se permite a actualización ou borrado do atrib-
uto referenciado.
• Cascada (CASCADE): A actualización ou borrado dun atributo, no caso de
seres clave externa, desencadea o borrado da tupla que é referenciada por
esa clave externa (e así consecutivamente se esta fai referencia a outra,
sempre e cando non estea restrinxida por unha política diferente).
• Fixar un valor determinado: O atributo referenciado pola clave externa
ponse nun valor por defecto ou NULL sempre que non quebre ningunha
política de integridade.
5.2. DESEÑO E IMPLEMENTACIÓN 75
5.2.2 Vista
A vista presenta a aplicación ao usuario. Está formada por diferentes vistas
segundo a función que vaia a desempeñar.
O entorno de desenvolvemento que ofrece Xcode fai que o deseño das vistas
se realice de xeito natural e dende o storyboard pódese comprobar o fluxo entre
as diferentes vistas.
Unha vez seleccionado o perfil presentarase a figura 5.6a onde poderá escoller
a enquisa que desexa cubrir.
(a) (b)
(a) (b)
(a) (b)
(a) (b)
(a) (b)
5.2.3 Controlador
Como se comentou no apartado 5.1.2 o controlador é o encargado de admin-
istrar toda a lóxica da aplicación, utilizando aquelas partes do modelo que sexan
necesarias indicándolle á vista como deben ser presentadas ao usuario. É no con-
trolador onde se precisa do maior esforzo de implementación.
2
Acrónimo de Clase - Responsabilidade - Colaboración
5.2. DESEÑO E IMPLEMENTACIÓN 81
Diagramas de Clases
AppDelegate
+ window : UIWindow
- enquisaDAO : EnquisaDAO
- mainViewController : MainViewController
+ application (UIApplication) didReceiceLocalNotification (UILocalNotification)
Utilidades - alertView (UIAlertView) didDismissWithButtonIndex (NSInteger)
+ dataInicioDaCitaICS (NSString) : NSString
+ dataFinDaCitaICS (NSString) : NSString
+ dataDoString (NSString) : NSDate
+ urlDaCitaICS (NSString) : NSString
+ resumoDaCitaICS (NSString) : NSString
+ descricionDaCitaICS (NSString) : NSString MainViewController
+ obtenTraballos (NSUrl) : NSMutableArray
+ cargarCalendario + application (UIApplication) didReceiceLocalNotification (UILocalNotification)
+ cargarNovasCitas - alertView (UIAlertView) didDismissWithButtonIndex (NSInteger)
+ obterDetallesCita (Cita) : NSString
+ obterDetallesTraballo (Traballo) : NSString
+ obtenNovidades (NSUrl) : NSMutableArray
+ calculaEmisionesPapel : double
+ calculaEmisionesTransporte : double
+ subirArquivo : NSString
+ obterPlistOrdixinal : NSDictionary
+ obterPlistDocuments : NSMutableDictionary
+ gardarPlistDocuments (NSMutableDictionary) EstatisticaViewController SeleccionPerfilViewcontroller
+ consultaCargandoDatosDB : BOOL + selectorUnidades : UIPickerView - enquisaDAO : EnquisaDAO
+ cargandoDatos (BOOL) + labelTransportePE : UILabel - perfil : Perfil
+ labelTransportePEMedia : UILabel + SeleccionarPerfil (id) : IBAction
+ labelPapelPE : UILabel
+ labelPapelPEMedia : UILabel
+ botonTransporte : UIButton
+ botonPapel : UIButton
+ botonSubirDatos : UIButton
+ textoInicial : UITextView
+ progresoPropioTransporte : UIProgressView
+ progresoMediaTransporte : UIProgressView
+ listaUnidades : NSArray
+ progresoPropioPapel : UIProgressView
+ progresoMediaPapel : UIProgressView
+ pegadaTransporte : double
+ pegadaPapel : double
+ pegadaMediaTransporte : double
+ pegadaMediaPapel : double
+ subirDatos (id) : IBAction
+ borrarDatos (id) : IBAction
- numberOfComponentsInPickerView (UIPickerView) : NSInteger
- pickerView (UIPickerView) numberOfRowsInComponent (NSInteger) : NSInteger
- pickerView (UIPickerView) titleForRow (NSInteger) forComponent (NSInteger) : NSString
- pickerView (UIPickerView) didSelectRow (NSInteger) inComponent (NSInteger)
- alertView (UIAlertView) didDismissWithButtonIndex (NSInteger)
LocalDB
+ dataBaseName : NSString
+ dataBasePath : NSString
+ sqlString : NSString
+ paths : NSArray
+ documentsDirectory : NSString <<interface>>
+ init : id UIViewController
+ obterConsellos : NSMutableArray
+ obterInformacion : NSArray + initWithNibName (NSString) bundle (NSBubdle) : id
+ insertarNovidade (Novidades) + viewDidLoad
+ insertarNovidades (NSMutableArray) + viewDidAppear (BOOL)
+ obterNovidades : NSMutableArray + viewWillDisappear (BOOL)
+ establecerCargaInicialNovidadesCompletada + prepareForSegue (UIStoryboardSegue) sender (id)
+ estaCompletadaACargaDeNovidades : BOOL
+ establecerCargaInicialNovidadesNonCompletada *
+ insertaTraballo (Traballo)
+ obtenTraballos : NSMutableArray manexa
+ establecerCargaInicialTraballosCompletada
+ estaCompletadaACargaDeTraballos : BOOL
+ establecerCargaInicialTraballosNonCompletada
+ insertarCita (Cita) 1
+ obterCitasDende (int) ata (int) : NSMutableArray
+ borrarCitas <<interface>>
+ establecerCargaInicialCitasCompletada UINavigationController 5 controla 1 UITabBarController
+ estaCompletadaACargaDeCitas : BOOL
+ establecerCargaInicialCitasNonCompletada
+ establecerPerfil
+ borrarPerfiles 1 manexa
+ obterNumeroTiposPreguntas : int
+ obterRespostasParaPreguntaRespostaUnica (NSInteger) : NSArray
+ obterNumeroDePreguntasPorTipo : NSDictionary
+ obterRespostasAPregunta (NSInteger) : NSMutableArray *
+ estaRespondidaAPregunta (int) CoaResposta (int) : BOOL <<interface>>
+ respondePreguntaMultiple (int) coaResposta (int) UITableViewController
+ respondePreguntaValorUnico (Preguntas) coValor (Respostas)
+ borrarRespostas + viewDidLoad
+ estaRespondidaAPregunta (int) : BOOL + numberOfSectionsInTableView (UITableView) : NSInteger
+ obterRespostasDependentesDePregunta (int) : NSMutableArray + tableView (UITableView) numberOfRowsInSection (NSInteger) : NSInteger
+ eAPreguntaRequeridaDeRespostaMultiple (int) : BOOL + tableView (UITableView) cellForRowAtIndexPath (NSIndexPath) : UITableViewCell
+ obterTransportesSelecionados : NSMutableArray + tableView (UITableView) didSelectRowAtIndexPath (NSIndexPath)
+ obterPreguntaTipoVia : Preguntas + tableView (UITableView) willDisplayCell (UITableViewCell) forRowAtIndexPath (NSIndexPath)
+ obterPreguntaMotivoTipo : Preguntas + tableView (UITableView) titleForHeaderInSection (NSInteger) : NSString
+ obterPreguntaConId (int) : Preguntas + viewWillAppear : BOOL
+ obterRespostaAPregunta (int) : Respostas
+ respondePreguntaValor (int) coValor (NSString)
+ establecerCuestionarioNonCompletado (NSString) Perfil
+ finalizarCuestionario (NSString) + idPerfil : NSString
+ borrarRespostaAPregunta (int) + stringPerfil : NSString
- insertarNovaResposta (Respostas) conID (int) + completado : NSString
- actualizaResposta (int) coValor (NSString) + seleccionado : NSString
- obterIdPreguntaRequeridaPara (int) : int + cargaCalendarioInicialCompletada : NSString
- obterIdUltimaResposta : int + cargaTraballosInicialCompletada : NSString
- haiRespostaParaPreguntaDistancia (int) : BOOL + getInstance : Perfil
- obterSeguinteIdCitas : int
- obterSeguinteIdTraballos : int
AppDelegate <<interface>>
UITabBarController 1
+ window : UIWindow UINavigationController
- enquisaDAO : EnquisaDAO 1 controla 5
- mainViewController : MainViewController
+ application (UIApplication) didReceiceLocalNotification (UILocalNotification)
- alertView (UIAlertView) didDismissWithButtonIndex (NSInteger) 1
MainViewController manexa
manexa
+ application (UIApplication) didReceiceLocalNotification (UILocalNotification)
- alertView (UIAlertView) didDismissWithButtonIndex (NSInteger)
<<interface>>
SeleccionPerfilViewcontroller UITableViewController
- enquisaDAO : EnquisaDAO *
- perfil : Perfil + viewDidLoad
+ SeleccionarPerfil (id) : IBAction + numberOfSectionsInTableView (UITableView) : NSInteger
+ tableView (UITableView) numberOfRowsInSection (NSInteger) : NSInteger
+ tableView (UITableView) cellForRowAtIndexPath (NSIndexPath) : UITableViewCell
+ tableView (UITableView) didSelectRowAtIndexPath (NSIndexPath)
+ tableView (UITableView) willDisplayCell (UITableViewCell) forRowAtIndexPath (NSIndexPath)
+ tableView (UITableView) titleForHeaderInSection (NSInteger) : NSString
+ viewWillAppear : BOOL
<<interface>>
*
UIViewController
EnquisaDAO
- fonteDatos: LocalDB
+ init : id
+ establecerPerfil LocalDB
+ borrarPerfiles + dataBaseName : NSString
+ dataBasePath : NSString Perfil
+ obterNumeroTiposPreguntas : int + idPerfil : NSString
+ obterRespostasParaPreguntaRespostaUnica (NSInteger) : NSArray + sqlString : NSString
+ paths : NSArray + stringPerfil : NSString
+ obterNumeroDePreguntasPorTipo : NSDictionary + completado : NSString
+ obterRespostasAPregunta (NSInteger) : NSMutableArray + documentsDirectory : NSString
+ init : id + seleccionado : NSString
+ estaRespondidaAPregunta (int) CoaResposta (int) : BOOL + cargaCalendarioInicialCompletada : NSString
+ respondePreguntaMultiple (int) coaResposta (int) + obterConsellos : NSMutableArray
+ obterInformacion : NSArray + cargaTraballosInicialCompletada : NSString
+ respondePreguntaValorUnico (Preguntas) coValor (Respostas) + getInstance : Perfil
+ borrarRespostas + insertarNovidade (Novidades)
+ estaRespondidaAPregunta (int) : BOOL + insertarNovidades (NSMutableArray)
+ obterRespostasDependentesDePregunta (int) : NSMutableArray + obterNovidades : NSMutableArray
+ eAPreguntaRequeridaDeRespostaMultiple (int) : BOOL + establecerCargaInicialNovidadesCompletada
+ obterTransportesSelecionados : NSMutableArray + estaCompletadaACargaDeNovidades : BOOL
+ obterPreguntaTipoVia : Preguntas + establecerCargaInicialNovidadesNonCompletada
+ obterPreguntaMotivoTipo : Preguntas + insertaTraballo (Traballo)
+ obtenTraballos : NSMutableArray Preguntas
+ obterPreguntaConId (int) : Preguntas + idPregunta : NSString
+ obterRespostaAPregunta (int) : Respostas + establecerCargaInicialTraballosCompletada
+ estaCompletadaACargaDeTraballos : BOOL + tipo : NSString
+ respondePreguntaValor (int) coValor (NSString) + enunciado : NSString
+ establecerCuestionarioNonCompletado (NSString) + establecerCargaInicialTraballosNonCompletada
+ insertarCita (Cita) + preguntaPadre : NSString
+ finalizarCuestionario (NSString) + tipoResposta : NSString
+ borrarRespostaAPregunta (int) + obterCitasDende (int) ata (int) : NSMutableArray
+ borrarCitas
+ establecerCargaInicialCitasCompletada
+ estaCompletadaACargaDeCitas : BOOL
SeleccionCuestionarioViewController + establecerCargaInicialCitasNonCompletada
+ botonTransporte : UIButton + establecerPerfil
+ botonPapel : UIButton + borrarPerfiles
+ aclaracion : UITextView + obterNumeroTiposPreguntas : int
+ completado : int + obterRespostasParaPreguntaRespostaUnica (NSInteger) : NSArray
+ transporteCompletado : UIImageView + obterNumeroDePreguntasPorTipo : NSDictionary
+ papelCompletado : UIImageView + obterRespostasAPregunta (NSInteger) : NSMutableArray
+ estaRespondidaAPregunta (int) CoaResposta (int) : BOOL
+ respondePreguntaMultiple (int) coaResposta (int)
+ respondePreguntaValorUnico (Preguntas) coValor (Respostas) Respostas
+ borrarRespostas + idResposta : NSString
+ estaRespondidaAPregunta (int) : BOOL + idPregunta : NSString
+ obterRespostasDependentesDePregunta (int) : NSMutableArray + resposta : NSString
+ eAPreguntaRequeridaDeRespostaMultiple (int) : BOOL + definitiva : BOOL
+ obterTransportesSelecionados : NSMutableArray + seleccionada : BOOL
+ obterPreguntaTipoVia : Preguntas
+ obterPreguntaMotivoTipo : Preguntas
+ obterPreguntaConId (int) : Preguntas
+ obterRespostaAPregunta (int) : Respostas
+ respondePreguntaValor (int) coValor (NSString)
+ establecerCuestionarioNonCompletado (NSString)
+ finalizarCuestionario (NSString)
+ borrarRespostaAPregunta (int)
- insertarNovaResposta (Respostas) conID (int)
- actualizaResposta (int) coValor (NSString)
- obterIdPreguntaRequeridaPara (int) : int
- obterIdUltimaResposta : int
- haiRespostaParaPreguntaDistancia (int) : BOOL
- obterSeguinteIdCitas : int
- obterSeguinteIdTraballos : int
AppDelegate
1 controla 5 <<interface>>
UITabBarController
+ window : UIWindow UINavigationController
- enquisaDAO : EnquisaDAO
- mainViewController : MainViewController
+ application (UIApplication) didReceiceLocalNotification (UILocalNotification)
- alertView (UIAlertView) didDismissWithButtonIndex (NSInteger) 1 1
<<interface>> * manexa
UIViewController
SeleccionPerfilViewcontroller
- enquisaDAO : EnquisaDAO
manexa
- perfil : Perfil
+ SeleccionarPerfil (id) : IBAction
*
<<interface>>
DetalleCitaViewController UITableViewController
+ cita : Cita
+ textoResumo : UITextView + viewDidLoad
+ textoData : UITextView + numberOfSectionsInTableView (UITableView) : NSInteger
+ textoDescricion : UITextView + tableView (UITableView) numberOfRowsInSection (NSInteger) : NSInteger
+ actividad : UIActivityIndicatorView + tableView (UITableView) cellForRowAtIndexPath (NSIndexPath) : UITableViewCell
- cargaDetalle + tableView (UITableView) didSelectRowAtIndexPath (NSIndexPath)
+ tableView (UITableView) willDisplayCell (UITableViewCell) forRowAtIndexPath (NSIndexPath)
+ tableView (UITableView) titleForHeaderInSection (NSInteger) : NSString
Cita + viewWillAppear : BOOL
+ dataInicio : NSDate
+ dataFin : NSDate
+ web : NSURL
+ resumo : NSString
+ descricion : NSString
CalendarioTableViewController
+ citas : NSMutableArray
+ dias : NSDictionary
+ celdas : NSMutableArray
+ keysSecciones : NSMutableArray
LocalDB + seccionHoy : int
+ dataBaseName : NSString - NSIndexPath : selectedCellIndexPath
+ dataBasePath : NSString - citasDAO : CitasDAO
+ sqlString : NSString - citaFilaSeleccionada : Citas
+ paths : NSArray + scrollAHoxe (UIBarButtonItem) : IBAction
+ documentsDirectory : NSString + recargarCitas (id) : IBAction
+ init : id - threadRecargarCitas (UIBarButtonItem)
+ obterConsellos : NSMutableArray - prepareForSegue (UIStoryBoardSegue) sender (id)
+ obterInformacion : NSArray
+ insertarNovidade (Novidades)
+ insertarNovidades (NSMutableArray)
+ obterNovidades : NSMutableArray
+ establecerCargaInicialNovidadesCompletada
CitasDAO
+ estaCompletadaACargaDeNovidades : BOOL
- fonteDatos: LocalDB
+ establecerCargaInicialNovidadesNonCompletada
+ init : id
+ insertaTraballo (Traballo)
+ insertarCita (Cita)
+ obtenTraballos : NSMutableArray
+ obterCitasDende (int) ata (int) : NSMutableArray
+ establecerCargaInicialTraballosCompletada
+ borrarCitas
+ estaCompletadaACargaDeTraballos : BOOL
+ establecerCargaInicialCitasCompletada
+ establecerCargaInicialTraballosNonCompletada
+ estaCompletadaACargaDeCitas : BOOL
+ insertarCita (Cita)
+ establecerCargaInicialCitasNonCompletada
+ obterCitasDende (int) ata (int) : NSMutableArray
+ borrarCitas
+ establecerCargaInicialCitasCompletada
+ estaCompletadaACargaDeCitas : BOOL Utilidades
+ establecerCargaInicialCitasNonCompletada
+ establecerPerfil + dataInicioDaCitaICS (NSString) : NSString
+ borrarPerfiles + dataFinDaCitaICS (NSString) : NSString
+ obterNumeroTiposPreguntas : int + dataDoString (NSString) : NSDate
+ obterRespostasParaPreguntaRespostaUnica (NSInteger) : NSArray + urlDaCitaICS (NSString) : NSString
+ obterNumeroDePreguntasPorTipo : NSDictionary + resumoDaCitaICS (NSString) : NSString
+ obterRespostasAPregunta (NSInteger) : NSMutableArray + descricionDaCitaICS (NSString) : NSString
+ estaRespondidaAPregunta (int) CoaResposta (int) : BOOL + obtenTraballos (NSUrl) : NSMutableArray
+ respondePreguntaMultiple (int) coaResposta (int) + cargarCalendario
+ respondePreguntaValorUnico (Preguntas) coValor (Respostas) + cargarNovasCitas
+ borrarRespostas + obterDetallesCita (Cita) : NSString
+ estaRespondidaAPregunta (int) : BOOL + obterDetallesTraballo (Traballo) : NSString
+ obterRespostasDependentesDePregunta (int) : NSMutableArray + obtenNovidades (NSUrl) : NSMutableArray
+ eAPreguntaRequeridaDeRespostaMultiple (int) : BOOL + calculaEmisionesPapel : double
+ obterTransportesSelecionados : NSMutableArray + calculaEmisionesTransporte : double
+ obterPreguntaTipoVia : Preguntas + subirArquivo : NSString
+ obterPreguntaMotivoTipo : Preguntas + obterPlistOrdixinal : NSDictionary
+ obterPreguntaConId (int) : Preguntas + obterPlistDocuments : NSMutableDictionary
+ obterRespostaAPregunta (int) : Respostas + gardarPlistDocuments (NSMutableDictionary)
+ respondePreguntaValor (int) coValor (NSString) + consultaCargandoDatosDB : BOOL
+ establecerCuestionarioNonCompletado (NSString) + cargandoDatos (BOOL)
+ finalizarCuestionario (NSString)
+ borrarRespostaAPregunta (int)
- insertarNovaResposta (Respostas) conID (int)
- actualizaResposta (int) coValor (NSString)
- obterIdPreguntaRequeridaPara (int) : int
- obterIdUltimaResposta : int
- haiRespostaParaPreguntaDistancia (int) : BOOL
- obterSeguinteIdCitas : int
- obterSeguinteIdTraballos : int
AppDelegate
+ window : UIWindow
- enquisaDAO : EnquisaDAO
- mainViewController : MainViewController
+ application (UIApplication) didReceiceLocalNotification (UILocalNotification)
- alertView (UIAlertView) didDismissWithButtonIndex (NSInteger)
MainViewController
SeleccionPerfilViewcontroller
- enquisaDAO : EnquisaDAO
1 controla 5
UITabBarController <<interface>>
- perfil : Perfil UINavigationController 1
+ SeleccionarPerfil (id) : IBAction
manexa
<<interface>> * manexa
UIViewController
AppDelegate
+ window : UIWindow
- enquisaDAO : EnquisaDAO
- mainViewController : MainViewController
+ application (UIApplication) didReceiceLocalNotification (UILocalNotification)
- alertView (UIAlertView) didDismissWithButtonIndex (NSInteger)
MainViewController
SeleccionPerfilViewcontroller
- enquisaDAO : EnquisaDAO
1 controla 5 <<interface>>
UITabBarController 1
- perfil : Perfil UINavigationController
+ SeleccionarPerfil (id) : IBAction
1
manexa
<<interface>> * manexa
UIViewController
NovidadesTableViewController
+ novidades : NSMutableArray
- novidadesDAO : NovidadesDAO
LocalDB - ultimaPaxinaNovidadesCargada : int
+ dataBaseName : NSString - posicionUltimaFila : int
+ dataBasePath : NSString + recargaNovidades (id) : IBAction
+ sqlString : NSString - engadeNovidades
+ paths : NSArray - recargaTodasNovidades (UIBarButtonItem)
+ documentsDirectory : NSString - threadCargaNovidadesPaxina (UIBarButtonItem)
+ init : id
+ obterConsellos : NSMutableArray
+ obterInformacion : NSArray
+ insertarNovidade (Novidades) NovidadesDAO
+ insertarNovidades (NSMutableArray) - fonteDatos: LocalDB
+ obterNovidades : NSMutableArray + init : id
+ establecerCargaInicialNovidadesCompletada + insertarNovidade (Novidades)
+ estaCompletadaACargaDeNovidades : BOOL + insertarNovidades (NSMutableArray)
+ establecerCargaInicialNovidadesNonCompletada + obterNovidades : NSMutableArray
+ insertaTraballo (Traballo) + establecerCargaInicialNovidadesCompletada
+ obtenTraballos : NSMutableArray + estaCompletadaACargaDeNovidades : BOOL
+ establecerCargaInicialTraballosCompletada + establecerCargaInicialNovidadesNonCompletada
+ estaCompletadaACargaDeTraballos : BOOL
+ establecerCargaInicialTraballosNonCompletada
+ insertarCita (Cita) Novidades
+ obterCitasDende (int) ata (int) : NSMutableArray + titulo : NSString
+ borrarCitas + descricion : NSString
+ establecerCargaInicialCitasCompletada + url : NSURL
+ estaCompletadaACargaDeCitas : BOOL
+ establecerCargaInicialCitasNonCompletada
+ establecerPerfil
+ borrarPerfiles Utilidades
+ obterNumeroTiposPreguntas : int
+ obterRespostasParaPreguntaRespostaUnica (NSInteger) : NSArray + dataInicioDaCitaICS (NSString) : NSString
+ obterNumeroDePreguntasPorTipo : NSDictionary + dataFinDaCitaICS (NSString) : NSString
+ obterRespostasAPregunta (NSInteger) : NSMutableArray + dataDoString (NSString) : NSDate
+ estaRespondidaAPregunta (int) CoaResposta (int) : BOOL + urlDaCitaICS (NSString) : NSString
+ respondePreguntaMultiple (int) coaResposta (int) + resumoDaCitaICS (NSString) : NSString
+ respondePreguntaValorUnico (Preguntas) coValor (Respostas) + descricionDaCitaICS (NSString) : NSString
+ borrarRespostas + obtenTraballos (NSUrl) : NSMutableArray
+ estaRespondidaAPregunta (int) : BOOL + cargarCalendario
+ obterRespostasDependentesDePregunta (int) : NSMutableArray + cargarNovasCitas
+ eAPreguntaRequeridaDeRespostaMultiple (int) : BOOL + obterDetallesCita (Cita) : NSString
+ obterTransportesSelecionados : NSMutableArray + obterDetallesTraballo (Traballo) : NSString
+ obterPreguntaTipoVia : Preguntas + obtenNovidades (NSUrl) : NSMutableArray
+ obterPreguntaMotivoTipo : Preguntas + calculaEmisionesPapel : double
+ obterPreguntaConId (int) : Preguntas + calculaEmisionesTransporte : double
+ obterRespostaAPregunta (int) : Respostas + subirArquivo : NSString
+ respondePreguntaValor (int) coValor (NSString) + obterPlistOrdixinal : NSDictionary
+ establecerCuestionarioNonCompletado (NSString) + obterPlistDocuments : NSMutableDictionary
+ finalizarCuestionario (NSString) + gardarPlistDocuments (NSMutableDictionary)
+ borrarRespostaAPregunta (int) + consultaCargandoDatosDB : BOOL
- insertarNovaResposta (Respostas) conID (int) + cargandoDatos (BOOL)
- actualizaResposta (int) coValor (NSString)
- obterIdPreguntaRequeridaPara (int) : int
- obterIdUltimaResposta : int
- haiRespostaParaPreguntaDistancia (int) : BOOL
- obterSeguinteIdCitas : int
- obterSeguinteIdTraballos : int
AppDelegate <<interface>>
+ window : UIWindow UITableViewController
- enquisaDAO : EnquisaDAO
- mainViewController : MainViewController + viewDidLoad
+ application (UIApplication) didReceiceLocalNotification (UILocalNotification) + numberOfSectionsInTableView (UITableView) : NSInteger
- alertView (UIAlertView) didDismissWithButtonIndex (NSInteger) + tableView (UITableView) numberOfRowsInSection (NSInteger) : NSInteger
+ tableView (UITableView) cellForRowAtIndexPath (NSIndexPath) : UITableViewCell
+ tableView (UITableView) didSelectRowAtIndexPath (NSIndexPath)
+ tableView (UITableView) willDisplayCell (UITableViewCell) forRowAtIndexPath (NSIndexPath)
+ tableView (UITableView) titleForHeaderInSection (NSInteger) : NSString
+ viewWillAppear : BOOL
MainViewController
<<interface>> * manexa
UIViewController
ConsellosTableViewController InformacionTableViewController
+ initWithNibName (NSString) bundle (NSBubdle) : id + consellos : NSMutableArray + informacion : NSArray
+ viewDidLoad + keysTipos : NSMutableArray + xeralDAO : XeralDAO
+ viewDidAppear (BOOL) + consellosPorTipo : NSMutableArray
+ viewWillDisappear (BOOL) + diccionarioConsellos : NSDictionary
+ prepareForSegue (UIStoryboardSegue) sender (id) - xeralDAO : XeralDAO
AppDelegate
MainViewController
1
* manexa
<<interface>>
UIViewController
Utilidades
EstatisticaViewController
Informacion Cita
BolsaTraballoTableViewController
Perfil Preguntas
DetalleOfertaTraballoViewController ConsellosTableViewController
InformacionTableViewController
DetalleCitaViewController
LocalDB
DetalleInformacionViewController
NovidadesDAO
DetalleConselloViewController
TraballosDAO
SeleccionCuestionarioViewController
CitasDAO
Lenda
Subsistema Perfil
RespuestaChecksViewController XeralDAO
SubsistemaEnquisa
Subsistema Calendario
RespuestaValorViewController EnquisaDAO
Subsistema Bolsa de Traballo
Subsistema Novidades
RespuestaDistanciaViewController
Subsistema Pegada Ecolóxica
Propósito Xeral
RespuestaCantidadViewController
Tarxetas CRC
AppDelegate
Coordina o comportamento de toda a Chama: MainViewController
aplicación
MainViewController
Controlador da vista inicial da apli- Chama: SeleccionPerfilViewCon-
cación troller
Engade notificación periódica dos seis
meses
Manexa a notificación unha vez
recibida
SeleccionPerfilViewController
Controlador da vista de selección de Herda: UIViewController
perfil de usuario
Establece na base de datos un perfil Chama: UITabaBarController
como seleccionado
Manexa a notificación unha vez Agrega: EnquisaDAO
recibida
Chamar ao controlador que manexa o
UITabBarController
UITabBarController
Encargada de manexar as xanelas que Controla: UINavigationController
conforman a aplicación
Instanciar os controladores que con-
teñen cada xanela
UINavigationController
Interface que manexa a navegación en- Manexa: UIViewController
tre vistas de cada xanela
Manexa: UITableViewController
SeleccionCuestionarioViewController
Recolle a selección do usuario respecto Herda UIViewController
ao cuestionario da enquisa que desexa
realizar. Chama ao controlador que
controla a vista relativa á primeira
pregunta do cuestionario seleccionado
Controlar iconas da vista que amosan
ao usuario cales dos cuestionarios
foron completados
DetalleNovidadeViewController
Manexa a vista que amosa ao usuario Herda: UIViewController
o detalle dunha novidade
DetalleOfertaTraballoViewController
Manexa a vista que amosa ao usuario Herda: UIViewController
o detalle dunha oferta de traballo
DetalleCitaViewController
Manexa a vista que amosa ao usuario Herda: UIViewController
o detalle dunha cita do calendario
Chama: Utilidades
DetalleInformacionViewController
Manexa a vista que amosa ao usuario Herda: UIViewController
información relativa á Pegada Ecolóx-
ica
DetalleConselloViewController
Manexa a vista que amosa ao usuario Herda: UIViewController
un consello para reducir a Pegada
Ecolóxica
EstatisticaViewController
Manexa a vista que permite ao usuario Herda: UIViewController
borrar os datos relativos á enquisa
Manexa a vista que permite ao usuario Chama: Utilidades
subir os datos da enquisa ao servidor
central
Manexa a vista que da acceso ao Chama: MainViewController
usuario aos resultados da Pegada
Ecolóxica
Manexa a vista que amosa os resulta-
dos da enquisa
Manexa a vista que da acceso á lista
de consellos para a redución da Pegada
Ecolóxica
Manexa a vista que da acceso á lisa de
información adicional sobre a Pegada
Ecolóxica
NovidadesTableViewController
Encargada de manexar a repre- Herda: UITableViewController
sentación da lista de novidades
Chama: Utilidades
Chama: NovidadesDAO
BolsaTraballoTableViewController
Encargada de manexar a repre- Herda: UITableViewController
sentación da lista de ofertas de traballo
Chama: Utilidades
Chama: TraballosDAO
CalendarioTableViewController
Encargada de manexar a repre- Herda: UITableViewController
sentación da lista de citas do calen-
dario
Chama: Utilidades
Chama: CitasDAO
ConsellosTableViewController
Encargada de manexar a repre- Herda: UITableViewController
sentación da lista de consellos para re-
ducir a Pegada Ecolóxica
Chama: XeralDAO
InformacionTableViewController
Encargada de manexar a repre- Herda: UITableViewController
sentación a información adicional so-
bre a Pegada Ecolóxica
Chama: XeralDAO
Utilidades
Encargada de parsear o arquivo ICS
descargado dende a páxina web da
ETSE
Encargada de parsear a páxina web da
ETSE que amosa as novidades
Encargada de parsear a páxina web da
ETSE que amosa as ofertas de traballo
Encargada de subir o arquivo cos datos
da enquisa ao servidor central
Encargada de manexar documentos de
propiedades da aplicación
Encargada de manexar a concorrencia
á base de datos SQLite
RespuestaChecksViewController
Manexa a presentación dunha pre- Herda: UIViewController
gunta da enquisa con posible resposta
múltiple
Recolle as respostas seleccionadas polo Chama: EnquisaDAO
usuario para unha pregunta de re-
sposta múltiple
Composta: UITableViewController
RespuestaChecksViewController
Manexa a presentación dunha pre- Herda: UIViewController
gunta da enquisa con posible resposta
múltiple
Recolle as respostas seleccionadas polo Chama: EnquisaDAO
usuario para unha pregunta de re-
sposta múltiple
Composta: UITableViewController
RespuestaValorViewController
Manexa a presentación dunha pre- Herda: UIViewController
gunta da enquisa cunha resposta única
Recolle a resposta introducida polo Chama: EnquisaDAO
usuario para unha pregunta de re-
sposta única
RespuestaDistanciaViewController
Manexa a presentación da pregunta Herda: UIViewController
dos quilómetros percorridos no de-
sprazamento á universidade
Recolle a resposta introducida polo Chama: EnquisaDAO
usuario
RespuestaCantidadViewController
Manexa a presentación da pregunta do Herda: UIViewController
número de percorridos semanais
Recolle a resposta introducida polo Chama: EnquisaDAO
usuario
EnquisaDAO
Manexa o acceso a datos relativos á Composto: LocalDB
enquisa
Fai que a aplicación sexa independente
do tipo de almacenamento de datos do
modelo
NovidadesDAO
Manexa o acceso a datos relativos ás Composto: LocalDB
novidades da ETSE almaceados no
modelo
Fai que a aplicación sexa independente
do tipo de almacenamento de datos do
modelo
TraballosDAO
Manexa o acceso a datos relativos Composto: LocalDB
ás ofertas de traballo publicados pola
ETSE almaceados no modelo
Fai que a aplicación sexa independente
do tipo de almacenamento de datos do
modelo
CitasDAO
Manexa o acceso a datos relativos ao Composto: LocalDB
calendario publicado na páxina web da
ETSE almaceados no modelo
Fai que a aplicación sexa independente
do tipo de almacenamento de datos do
modelo
XeralDAO
Manexa o acceso a datos relativos á in- Composto: LocalDB
formación adicional da Pegada Ecolóx-
ica e a os consellos para reducila
Fai que a aplicación sexa independente
do tipo de almacenamento de datos do
modelo
LocalDB
Manexa o acceso aos datos almaceados Instancia: Perfil
nunha base de datos local nun arquivo
SQLite
Instancia: Preguntas
Instancia: Respostas
Instancia: Cita
Instancia: Traballo
Instancia: Novidades
Instancia: Informacion
Instancia: Consello
Perfil
Encapsula nun obxecto a entidade
Perfil
Preguntas
Encapsula nun obxecto a entidade
Preguntas
Respostas
Encapsula nun obxecto a entidade Re-
spostas
Cita
Encapsula nun obxecto a entidade
Cita
Traballo
Encapsula nun obxecto a entidade
Traballo
Novidades
Encapsula nun obxecto a entidade
Novidades
Informacion
Encapsula nun obxecto a entidade In-
formacion
Consello
Encapsula nun obxecto a entidade
Consello
Diagramas de Secuencia
Os diagramas de secuencia representan a secuencia de eventos que segue á
interacción do usuario coa aplicación. Amósanse diagramas de secuencia para as
funcións máis representativas da aplicación.
Usuario
estaCompletadaACargaDeTraballos
alt obterTraballos
obterTraballos
[completada]
[else] nil:recargarTraballos
NSURL:obtenTraballos
establecerCargaInicialTraballosCompletada
Usuario
Traballo:setTraballo
pushViewController
Usuario
obterNovidades
obterTraballos
alt
[novidades.count == 0] recargaNovidades
NSURL:obterNovidades
insertarNovidades
insertarNovidades
[else]
Usuario
Novidade:setNovidade
pushViewController
Usuario
alt
[ultimaFila]
engadeNovidades
threadCargaNovidadesPaxina
NSURL:obtenNovidades
insertarNovidades
insertarNovidades
[else]
Usuario
estaCompletadaACargaDeCitas
[else]
nil:recargarCitas
NSURL:cargarCalendario
borrarCitas
borrarCitas
loop
cargarCitasDoMes: doAno:
insertarCita
insertarCita
establecerCargaInicialDeCitascompletada
reloadData
Usuario
Cita:setCita
pushViewController
Usuario
SeleccionaPerfil
getInstance
setSeleccionado
0 : setCompletado
setStringPerfil
establecerPerfil
establecerPerfil
Usuario
borrarDatos
alert
alt getInstance
[buttonIndex==1] borrarPerfiles
borrarPerfiles
0 : setSeleccionado
setStringPerfil
0 : setCompletado
0 : setIdPerfil
[else]
O diagrama de secuencias da figura 5.29 resulta idéntico sexa cal sexa o re-
sultado que se desexe obter. O controlador EstatisticaViewcontroller carga todos
os datos, pero amosa aqueles que o usuario precisa.
102 CAPÍTULO 5. DESEÑO
Usuario
cambiaValor respondePreguntaMultiple:
coaResposta: respondePreguntaMultiple:
coaResposta:
alt
[ultimaPregunta]
finalizarCuestionaro
[else]
seguintePregunta
Figura 5.28: Diagrama de Secuencia para os casos de uso CU.03 e CU.05, Cobre
Enquisa Transporte e Cobre Enquisa Papel respectivamente
EstatisticaViewController Utilidades
Usuario
obterPlistDocuments
setPegadaTransporte
setPegadaPapel
setMediaPegadaTransporte
setMediaPegadaPapel
Figura 5.29: Diagrama de Secuencia para os casos de uso CU.04 e CU.06, Con-
sulta Resultados Transporte e Consulta Resultados Papel respectivamente
5.2. DESEÑO E IMPLEMENTACIÓN 103
EstatisticaViewController Utilidades
Usuario
subirDatos
subirArquivo
NO : botonSubirDatos.enable
Validación e Probas
Os requerimentos que sexan probados nunha iteración non deberían ser proba-
dos nas seguintes xa que cada iteración resulta independente da outra.
105
106 CAPÍTULO 6. VALIDACIÓN E PROBAS
Estado: Cumprido
Estado: Cumprido
Estado: Cumprido
Estado: Cumprido
As probas de usabilidade constan dunha enquisa que se lle pasa aos individuos
de proba despois de familiarizarse coa aplicación e realizar unha serie de tarefas
sobre ela.
• Usabilidade:
• Utilidade:
6.2.1 Resultados
Realizóuselle unha proba piloto a 10 potenciais usuarios de dous perfís difer-
entes, PDI e estudantes obtendo os seguintes resultados:
Usuario P1 P2 P3 P4 P5 P6 P7 P8
PDI.01 1 5 1 5 5 5 1 5
PDI.02 1 5 1 4 4 4 1 5
PDI.03 1 4 2 5 4 4 1 4
PDI.04 1 5 2 5 5 5 1 4
PDI.05 1 5 1 4 4 5 1 5
Estudante.01 1 5 1 5 5 4 1 4
Estudante.02 1 4 3 5 5 4 1 4
Estudante.03 1 5 2 4 5 4 2 5
Estudante.04 1 5 1 4 4 4 1 4
Estudante.05 1 5 1 5 5 5 1 5
PAS.01 5 5 5 4 4 4 5 4
PAS.02 1 3 2 5 5 3 2 4
PAS.03 1 5 1 5 4 5 1 5
Usuario P1 P2 P3 P4 P5 P6
PDI.01 5 5 5 5 5 5
PDI.02 3 5 5 4 5 4
PDI.03 1 3 4 4 5 4
PDI.04 4 5 5 5 5 5
PDI.05 3 5 5 3 5 4
Estudante.01 4 5 5 4 5 5
Estudante.02 2 4 4 4 3 5
Estudante.03 4 4 4 1 5 5
Estudante.04 3 5 2 3 5 3
Estudante.05 3 5 4 3 5 5
PAS.01 3 1 1 4 5 4
PAS.02 3 2 2 3 5 4
PAS.03 3 2 1 5 5 4
Os estudantes son os máis críticos con respecto á enquisa e son aos que menos
útil lle resulta a información que lle aporta a aplicación. Non obstante considera
que a información pode resultar relevante para outros usuarios da USC.
O tempo medio que Apple tarda en publicar unha aplicación no caso de que
na revisión non atopasen fallas ou algunha das súas partes non violara os termos
e condicións de Apple, é de entre 5 e 10 días 12 . Tendo en conta este tempo aprox-
imado, a aplicación podería terse publicado na App Store antes da finalización
do proxecto, e posiblemente puidésemos obter algún resultado.
1
http://www.ubicuostudio.com/es/diario-de-desarrollo-es/
apple-tiempo-revision-apps-app-store/
2
http://www.ellibrogordodepetete.com/2012/02/fases-de-aprobacion-de-la-app-store.
html
120 CAPÍTULO 6. VALIDACIÓN E PROBAS
Proposta Estimación/Desestimación
Consulta de correo Desestimada: iOS dispón dunha ferramenta moi po-
electrónico tente para a xestión do correo electrónico.
Acceso á infor- Estimada: Resulta útil sobretodo para os perfís de es-
mación dispoñible tudante e PDI ter acceso rápido á información dispoñible
Campus Virtual no campus virtual.
Acceso a documen- Estimada: Atractivo para PAS, podendo consultar fá-
tos relevantes de cilmente prazos e requerimentos burocráticos.
carácter administra-
tivo
Mellorar a rep- Estimada: Unha representación do calendario máis
resentación do acorde co estilo nativo da plataforma resulta moito máis
calendario atractiva e usable.
Acceso a horarios de Estimada: Faría a aplicación más atractiva a usuarios
clase co perfil de Estudante.
Sincronizar citas co Desestimada: Se se sincronizan as citas do calendario
calendario do dis- da ETSE co calendario nativo, non é necesario continuar
positivo utilizando a aplicación, indo en contra do obxectivo de
fidelización.
Conclusións
7.1 Conclusións
As probas realizadas despois da etapa de implementación da primeira iteración
foron satisfactorias polo que o obxectivo de que a aplicación recolla información
sobre hábitos de transporte e consumo de papel na comunidade universitaria e
expoña o valor da pegada ecolóxica ao usuario comparado coa media da USC
está cumprido.
Creouse unha aplicación que, segundo as probas piloto, é útil para ampliar o
radio de acción das enquisas realizadas polos bolseiros SPIU. Recolle información
do mesmo xeito que o fai a aplicación para Android de Javier[8], engadindo os
datos dos usuarios da segunda plataforma máis utilizada de dispositivos móbiles.
121
122 CAPÍTULO 7. CONCLUSIÓNS
A aplicación non resulta todo o atractiva que pode chegar a ser utilizando
as ferramentas que nos ofrece Apple para desenvolver para iOS. Cumprir coa
planificación temporal fixo que non se puidera profundizar na utilización de esas
ferramentas e poder facer a aplicación máis atractiva visualmente.
Manual de Instalación
123
124 APÉNDICE A. MANUAL DE INSTALACIÓN
Unha vez aberto o proxecto prememos sobre o botón “Run” na parte superior
esquerda, sinalado na figura A.1.
Manual de Usuario
A primeira vez que se inicia a aplicación deberase aceptar tanto que a apli-
cación necesita conexión de datos a internet e que se lle enviarán notificacións.
(a) (b)
125
126 APÉNDICE B. MANUAL DE USUARIO
Recoméndase ler o texto explicativo que se pode ver na figura B.10 sobre os
obxectivos e funcionalidade da aplicación.
Unha vez escollido o perfil temos acceso á vista de xanelas coas funcionalidades
da aplicación. Antes de ter cuberta a enquisa únicamente se habilitan dúas
xanelas, Cuestionario e Estatísticas.
(a) (b)
Esta xanela conterá tamén as vistas a través das cales se cubrirán as enquisas.
Pode observarse a diferencia entre as xanelas habilitadas e as inhabilitadas, así
como a diferencia entre a xanela activa a o resto de xanelas.
(a) (b)
tap
(a) (b)
As preguntas con resposta única dispón dun selector que se acciona deslizando
o selector de arriba a abaixo, deixando no medio e resaltada a resposta axeitada,
tal e como se amosa na figura B.5a.
(a) (b)
B.3.1 Consellos
Esta vista da figura B.7a dispón de diferentes consellos para reducir a pegada
ecolóxica do usuario. En esta vista o usuario poderá seleccionar un elemento
sobre o que obter consellos, ou voltar ao inicio da sección Estatísticas.
Os detalles dun determinado consello (figura B.7b) pode ter máis contido que
o contedor pode amosar e para poder velo todo debemos arrastrar o dedo arriba e
a baixo navegando por todo o texto. O texto resaltado en azul destaca enlaces de
interese, números de teléfono e citas no calendario. Poden accederse mantendo
pulsado este texto resaltado.
B.3. CUESTIONARIO ESTATÍSTICAS 131
tap
Atrás
tap
n
cció
Sele
(a) (b)
B.3.2 Información
(a) (b)
(a) (b)
(a) (b)
(a) (b)
(a) (b)
[3] Bruce ”Tog” Tognazzini’, Lista de principios básicos para o deseño de inter-
faces (http://www.asktog.com/basics/firstPrinciples.html). Consultado o 10
Xuño de 2013.
[7] López Álvarez, Noelia e Blanco Heras, Dora, Impacto Ambiental da Uni-
versidade de Santiago de Compostela. Oficina de Desenvolvemento Sostible.
Universidade Santiago de Compostela. Maio 2009.
[9] López Rodríguez, Ramón; Taboada Iglesias, José Luis e López Álvarez,
Noelia, Impacto Ambiental en Centros da USC. Vicerreitoría de Calidade
e Planificación. Universidade de Santiago de Compostela. Febreiro 2008.
137
138 BIBLIOGRAFÍA
[12] Otero Vázquez, Juan David. Sistema de cálculo da Pegada Ecolóxica e ren-
demento sostible para universidades. Escola Técnica Superior de Enxeñaría.
Universidade de Santiago de Compostela. Setembro 2011.