• Nenhum resultado encontrado

Departamento de Engenharia e Ciências do Mar Licenciatura em Engenharia Informática e de Computadores Projeto Fim de Curso TÍTULO

N/A
N/A
Protected

Academic year: 2021

Share "Departamento de Engenharia e Ciências do Mar Licenciatura em Engenharia Informática e de Computadores Projeto Fim de Curso TÍTULO"

Copied!
29
0
0

Texto

(1)

Universidade de Cabo Verde Página 1

Departamento de Engenharia e Ciências do Mar

Licenciatura em Engenharia Informática e de Computadores

Projeto Fim de Curso

TÍTULO

CLASS-REMINDER PARA ESTUDANTES DO DECM

AUTOR: Arilson Jorge Santos Rocha

ORIENTADOR: Mestre João Do Monte Gomes Duarte

(2)

Universidade de Cabo Verde Página 2

AGRADECIMENTOS

À Deus, por permitir-me chegar até aqui.

À minha família, que mesmo estando longe, sempre apoiaram-me. Aos meus amigos e colegas, pelo apoio que sempre me deram.

Ao meu orientador João do Monte, por ter-me auxiliado na conclusão deste trabalho.

(3)

Universidade de Cabo Verde Página 3

Resumo

Este trabalho está dividido em três capítulos. No primeiro capitulo se apresenta uma introdução sobre o projecto Class Reminder Para Estudantes do DECM, as vantagens da sua implementação e os objectivos a atingir com o seu desenvolvimento. No segundo capítulo se apresenta a fundamentação teórica das tecnologias e ferramentas em que se baseia o desenvolvimento da aplicação. No terceiro capítulo são apresentadas informações referentes ao desenvolvimento da aplicação, tais como os seus requisitos, as suas camadas, os diagramas e o teste das suas funcionalidades. No final apresentam-se as conclusões a que chegaram com o desenvolvimento do projecto e uma perspectiva de trabalhos futuros.

(4)

Universidade de Cabo Verde Página 4

Lista de Ilustrações

Figura 1 - Arquitectura Geral da Plataforma Android ...9

Figura 2 - Estrutura de um Projecto Android ...11

Figura 3 - Ciclo de vida de uma aplicação Android ...14

Figura 4 – Estrutura do Projecto...17

Figura 5 - Diagrama de Classes ...18

Figura 6 - Classe Para criação da Base de Dados ...19

Figura 7 - Construtor da Classe DBAdapter ...19

Figura 8 - Método para criar um novo lembrete ...20

Figura 9 - Método Eliminar ...20

Figura 10 - Método cursorToNota ...21

Figura 11 - Método Eliminar Todos os Lembretes ...21

Figura 12 - Método getNota ...21

Figura 13- LocationListener ...22

Figura 14- inicialização automática do serviço ...22

Figura 15 - Fluxograma da Aplicação ...23

Figura 16 - Tela principal ...24

Figura 17 - Criação de um novo lembrete ...25

Figura 18 – Notificação ...26

Figura 19 - Lista de Lembretes ...26

(5)

Universidade de Cabo Verde Página 5

Índice

1 Introdução ... 7

1.1 Vantagens da sua implementação ... 7

1.2 Objectivos ... 7

1.2.1 Objectivo Geral: ... 7

1.2.2 Objetivos específicos do trabalho: ... 7

2 Fundamentos Teóricos ... 8

2.1 Android ... 8

2.2 Estrutura geral da plataforma Android ... 8

2.3 Arquitectura do Android ... 9 2.3.1 As Aplicações ... 9 2.3.2 Framework de Aplicações ... 10 2.3.3 Bibliotecas... 10 2.3.4 Android Runtime ... 10 2.3.5 Linux Kernel ... 10

2.4 Estrutura de um Projecto Android ... 11

2.5 Principais Componentes do Framework ... 12

(6)

Universidade de Cabo Verde Página 6

3 Desenvolvimento ... 16

3.1 Requisitos principais da aplicação ... 16

3.1.1 Os Requisitos Funcionais incluem: ... 16

3.1.2 Os Requisitos não Funcionais incluem: ... 16

3.2 Especificação ... 16

3.2.1 As camadas da Aplicação ... 16

3.2.2 Diagrama de Classes ... 17

3.2.2.1 Serviço de Localização ... 22

3.2.2.2 Serviço executado em segundo plano (background) ... 22

3.2.3 Diagrama de Actividade ... 23

3.3 Teste de Funcionalidades... 24

Conclusão... 28

Trabalhos Futuros ... 28

(7)

Universidade de Cabo Verde Página 7

Capitulo I

1 Introdução

Este projecto pretende oferecer aos estudantes do DECM uma ferramenta de ajuda na calendarização das suas actividades.

O Class-Reminder Para Estudantes do DECM é uma aplicação que provê lembretes com base na localização do estudante. Quando um estudante agenda um lembrete de um compromisso na universidade, caso ele não se encontra na universidade ser-lhe-á enviada uma notificação 15 minutos antes da hora do compromisso, alertando do compromisso.

1.1 Vantagens da sua implementação

Com a implementação desta aplicação os estudantes possuem uma ferramenta que lhes ajuda no cumprimento dos compromissos agendados no DECM, com recurso a tecnologias inovadoras no seio da comunidade Caboverdiana.

1.2 Objectivos

1.2.1 Objectivo Geral:

Permitir aos estudantes do DECM agendar os seus compromissos com uso da plataforma Android para dispositivos móveis.

1.2.2 Objetivos específicos do trabalho:

 Disponibilizar uma interface gráfica para a interação entre

os usuários e a aplicação.

 Prover lembretes caso os estudantes não encontrar no

DECM na hora que tem um compromisso agendado.

 Desenvolver uma base dados com o uso do SQLite do

Android.

 Permitir aos utilizadores guardar, editar, consultar e

(8)

Universidade de Cabo Verde Página 8

Capitulo II

2 Fundamentos Teóricos

Este capítulo apresenta as concepções teóricas e as tecnologias utilizadas para o desenvolvimento da aplicação.

2.1 Android

O Android é uma plataforma desenvolvida pela Google voltada para dispositivos móveis. Em 5 de novembro de 2007, a Google tornou público Android, sendo esta a primeira plataforma Open Source de desenvolvimento para dispositivos moveis baseada na plataforma Java com sistema operacional Linux, a qual foi chamada de Android. Essa plataforma é mantida pela OHA (Open Handset Alliance), um grupo formado por mais de 40 empresas as quais se uniram para inovar e acelerar o desenvolvimento de aplicações e serviços para Android [1].

2.2 Estrutura geral da plataforma Android

Para desenvolvimento de aplicações, a Google disponibiliza algumas ferramentas livres e gratuitas. Essas ferramentas compreendem:

O Android SDK (Software Developer Kit)é o kit de

desenvolvimento que disponibiliza as ferramentas e APIs necessárias para construir e testar aplicações [3].

ADT (Android Development Tools) é um plugin para o Eclipse que é projetado para oferecer um ambiente poderoso, integrado, para a criação de aplicações Android [3].

Eclipse IDE, utilizado como principal simulador para aplicações Android.

(9)

Universidade de Cabo Verde Página 9

2.3 Arquitectura do Android

A Figura 1 apresenta a arquitectura da plataforma Android que é constituída na geral por:  Aplicações Android  Application Framework  Bibliotecas  Android Runtime  Linux Kernel

Figura 1 - Arquitectura Geral da Plataforma Android

2.3.1 As Aplicações

Juntamente com o Android vem um conjunto de aplicações importantes que podem ser utilizadas no desenvolvimento de outras aplicações. De entre esses, se destacam:

Um cliente de e-mail

 Um programa de SMS

 Mapas

 Browser de internet

(10)

Universidade de Cabo Verde Página 10 2.3.2 Framework de Aplicações

O Android fornece uma plataforma de desenvolvimento aberta, que provê aos desenvolvedores o pleno acesso aos APIs usados pelas aplicações principais. Os desenvolvedores são livres para aproveitar as vantagens dos dispositivos, como são exemplos o sistema de localização, execução de serviços em segundo plano (background), definição de alarmes e adição de notificações na barra de status.

2.3.3 Bibliotecas

O sistema inclui um conjunto de bibliotecas C/C++ usadas por diversos componentes do Android. Essas bibliotecas permitem trabalhar com arquivos de mídia comuns como, por exemplo, MPEG4, H.264, MP3, AAC, AMR, JPG e PNG. Componentes como o Surface Manager permitem a exibição de conteúdo tanto em 2D como em 3D. O Android inclui suporte gráficos de alto desempenho em 2D e 3D com o OpenGL (Open Graphics Library). O OpenGL é um conjunto de várias funções que fornecem acesso a praticamente todos os recursos do hardware de vídeo. Para completar, foi disponibilizado também o SQLite, um simples banco de dados relacional. As aplicações que usam SQLite podem ter assim acesso a uma base de dados relacional SQL, sem a necessidade de recorrerem a sistemas de base de dados RDBMS (relational database management system) separados. Isto permite um nível menor de consumo de recursos [1].

2.3.4 Android Runtime

O Android inclui um grupo de bibliotecas que fornece a maioria das funcionalidades disponíveis nas principais bibliotecas da linguagem Java.

Toda aplicação Android roda em seu próprio processo, com sua própria instância da máquina virtual Dalvik. O Dalvik foi escrito de forma a executar várias VMs (Virtual Machines) eficientemente. Este executa arquivos .dex (Dalvik Executable), que é optimizado para consumo mínimo de memória. A VM é baseada em registros e roda classes compiladas pela linguagem Java que foram transformadas em arquivos .dex,

através da ferramenta “dx” incluída no SDK [1].

2.3.5 Linux Kernel

O Android usa a versão do Linux 2.6 para serviços essenciais do sistema, tais como segurança, gestão de memória, gestão de processos, rede e drivers. O Kernel do

(11)

Universidade de Cabo Verde Página 11 Linux também funciona como uma camada de abstração entre o hardware do dispositivo

e o resto do conjunto de softwares que são desenvolvidos em paralelo [5].

2.4 Estrutura de um Projecto Android

As aplicações básicas em Android obedecem a uma estrutura comum. A Figura 2

ilustra o ambiente de trabalho de uma aplicação Android, onde se podem observar os ficheiros e pastas que o conformam.

Figura 2 - Estrutura de um Projecto Android

De entre esses componentes se destacam:

src – é pasta onde se armazenam todos os ficheiros java que contém as classes. gen – pasta onde se armazenam os arquivos gerados automaticamente na compilação da aplicação.

assets – pasta onde se armazenam os arquivos de mídia utilizados pela aplicação. Podem ser vídeos, músicas, imagens, etc.

bin – pasta onde se armazenam os arquivos compilados automaticamente pela plataforma de desenvolvimento.

(12)

Universidade de Cabo Verde Página 12 res – abreviatura da palavra resources; esta pasta é subdividida em varias pastas, com propósitos diferentes. As pastas que iniciam com o sufixo drawable são destinadas a armazenar imagens que são usadas na aplicação. A pasta layout destina-se a armazenar os ficheiros XML que representam o layout das telas da aplicação. A pasta values também destina-se a armazenar outros arquivos XMLs que serão usadas na aplicação. Inicialmente só existe um ficheiro nesta pasta, o string.xml.

AndroidManifest.xml – Todas as aplicações Android precisam ter um arquivo AndroidManifest.xml no seu directório raiz. O manifest apresenta informações essenciais que a aplicação deve ter antes de este ser executado. O AndroidManifest descreve os componentes da aplicação tais como, as activities, services, broadcast receiver e content provider que compõem a aplicação. Neste ficheiro, se declara as permissões que a aplicação deve possuir para acessar partes protegidas da API e interagir com outras aplicações. O AndroidManifest também é usado, para estabelecer as permissões que outras aplicações devem possuir para acessar a aplicação [3].

2.5 Principais Componentes do Framework

O framework do Android possui vários componentes. Os principais são:

Activities – Uma Activity é uma subclasse da superclasse android.app.Activity de extrema importância em Android.

Uma activity é um componente de aplicação que fornece uma tela com a qual o utilizador pode interagir, para realizar acções, como por exemplo, marcar um número, tirar uma foto ou visualizar um mapa [3].

Services – Um service (serviço) é um componente de aplicação que pode executar operações de longa duração em segundo plano (background) e não fornece uma interface de utilizador. Outro componente da aplicação pode iniciar um serviço e este vai continuar a executar em segundo plano, mesmo se o utilizador mudar para outra aplicação [3].

Broadcast Receiver – é um componente responsável por responder a eventos do sistema. Os eventos podem ser de varias tipos, como por exemplo uma variação na localização detectado pelo GPS [4].

(13)

Universidade de Cabo Verde Página 13 Intents – Três dos principais componentes de uma aplicação - activities, services e broadcast receiver - são activados através de mensagens, chamado de intents.

Content provider – componente responsável por gerenciar um conjunto estruturado de dados de uma aplicação. O content provider encapsula os dados e proporcionam mecanismos para definição de segurança dos dados.

2.6 Ciclo de Vida de uma Aplicação Android

Activity é responsável por tratar os eventos da tela como, por exemplo, tratar o evento clique de um botão na tela, escrever textos dinamicamente na tela, visualizar imagens entre outros. De entre os componentes da classe Activity se sobressai o método onCreate() que responsável por realizar a inicialização da tela através do método setContentView(view). Este método recebe como parâmetro uma componente da classe View, que é o ficheiro xml representa a tela.

A Figura 3 ilustra uma Activity. Para além do método onCreate(), é formado pelos métodos onStart, onResume, onPause, onStop, onDestroy e onRestart.

(14)

Universidade de Cabo Verde Página 14

Figura 3 - Ciclo de vida de uma aplicação Android [5]

onCreate() – É o primeiro método a ser executado em uma Activity. Geralmente é a responsável por carregar os layouts XML e outras operações de inicialização. É executada apenas uma vez.

(15)

Universidade de Cabo Verde Página 15 onStart() - É chamada imediatamente após o onCreate() – e também quando uma Activity que estava em background volta a ter foco.

onResume() - Assim como o onStart(), é chamada na inicialização da Activity e também quando uma Activity volta a ter foco.

onPause() - É a primeira função a ser invocada quando a Activity perde o foco (isso ocorre quando uma nova Activity é iniciada).

onStop() - Só é chamada quando a Activity fica completamente encoberta por outra Activity.

onDestroy() - O última método a ser executado. Depois dela, a Activity é considerada “morta” – ou seja, não pode mais ser relançada. Se o usuário voltar a requisitar essa Activity, um novo objeto será construído.

onRestart() - Chamada imediatamente antes do onStart(), quando uma Activity volta a ter o foco depois de estar em background.

(16)

Universidade de Cabo Verde Página 16

Capitulo III

3 Desenvolvimento

Neste capítulo são descritas as fases relativas à implementação do projecto proposto.

3.1 Requisitos principais da aplicação

Os requisitos da aplicação estão divididos em dois tipos fundamentais: Requisitos Funcionais e Requisitos não Funcionais.

3.1.1 Os Requisitos Funcionais incluem:

 Agendar uma nova tarefa

 Criar uma lista com todas as tarefas agendadas

 Determinar a localização do dispositivo a cada instante de tempo

 Enviar notificação para a barra de “status”

 Remover tarefas

3.1.2 Os Requisitos não Funcionais incluem:

 Desenvolvimento utilizando o Eclipse

 Utilizar o serviço de Localização do Google

3.2 Especificação

Nesta secção são apresentados os diagramas de classes e de Actividades do projecto, utilizadas para o desenvolvimento do projecto. Para o desenvolvimento dos diagramas foi utilizada a ferramenta Microsoft Visio.

3.2.1 As camadas da Aplicação

Esta aplicação está dividida nas seguintes camadas:

 UI (User interface) - camada responsável pela a interação entre o

(17)

Universidade de Cabo Verde Página 17

 POJO (Plain Old Java Objects) – camada responsável pelo

transporte dos dados entre a base de dados e a aplicação.

 DAO (Data Access Object) – camada responsável pela

persistência dos dados.

 ES (Extends Service) – camada responsável por criar e manter os

serviços em execução em segundo plano (execute in background).

A Figura 4 ilustra a estrutura da aplicação Class Reminder, onde se observam as camadas supracitadas e os seus repectivos conteúdos.

Figura 4 – Estrutura do Projecto

3.2.2 Diagrama de Classes

O diagrama de classes representa as classes existentes no projecto e é apresentado na Figura 5.

(18)

Universidade de Cabo Verde Página 18

Figura 5 - Diagrama de Classes

O diagrama de classes apresenta a classe DBHelper responsável por criar a base de dados no momento em que a aplicação é instalada (método onCreate) e actualizá-la

para novas versões(método onUpgrade). Esta classe exdende a classe

SQLiteOpenHelper, que fornece os métodos getReadableDatabase() e

getWriteableDatabase(), que permitem aceder à base dados SQLite Database quer para

ler quer para escrever.

(19)

Universidade de Cabo Verde Página 19

Figura 6 - Classe Para criação da Base de Dados

A classe DBAdapter é a classe base para trabalhar com SQLite. Esta vai permitir abrir, fechar, fazer queries e actualizar a base de dados.

A Figura 7 mostra a declaração do construtor da classe

Figura 7 - Construtor da Classe DBAdapter

(20)

Universidade de Cabo Verde Página 20  CreateNota() - para criar um novo lembrete na base de dados, este

irá retornar um objecto Nota. Este método é representado na Figura 8.

Figura 8 - Método para criar um novo lembrete

É criado um objecto do tipo Cursor para armazenar a query.

Os cursores são “apontadores de dados” da base de dados – ou seja, uma interface que permite o acesso aos dados retornados pela query. O objecto

ContentValues permite definir os valores a inserir.

EliminaNota() - Método para eliminar lembretes.Este método recebe como parâmetro o respectivo id do lembrete a iliminar. Este método é apresentado na Figura 9.

Figura 9 - Método Eliminar

cursorToNota() - Método para devolver um lembrete passando como parâmetro um cursor. A Figura 10 faz a representação deste método.

(21)

Universidade de Cabo Verde Página 21

Figura 10 - Método cursorToNota

getNotas() - Método para devolver todos os lembretes da tabela. EliminarTodasNotas() - Método para eliminar todos os lembretes da tabela. Este método e representado na Figura 11.

Figura 11 - Método Eliminar Todos os Lembretes

getNota() - Método que devolve o lembrete passando como parâmetro o id do lembrete pretendido. Este método é representado na Figura 12.

Figura 12 - Método getNota

A classe Nota é a classe responsável por transportar os dados entre o utilizador e o banco de dados SQLite.

(22)

Universidade de Cabo Verde Página 22

3.2.2.1 Serviço de Localização

Para determinar a localização do dispositivo, foi implementada a classe RemiderLocationService. Esta classe implementa a classe LocationListeners, que é classe usada para receber notificações do LocationManager, quando a localização muda, apresentado na A Figura 13.

Figura 13- LocationListener

Esta classe possui o método onLocationChanged() que é chamado sempre que a localização muda.

3.2.2.2 Serviço executado em segundo plano (background)

A classe RemiderLocationService também estende (extends) a classe Service visto que esta classe precisa estar sempre em execução para pode notificar o utilizar sobre os lembretes agendados.

Para que o serviço seja iniciado toda vez que o dispositivo for iniciado, foi implementado a classe ServiceManager. A classe ServiceManager extende a classe BroadcastReceiver e é apresentada na Figura 14.

(23)

Universidade de Cabo Verde Página 23 Um BroadcastReceiver é um componente android que permite registar eventos do sistema ou aplicação.

As restantes classes são as classes que interagem com o usuário. Estas classes irão utilizar os métodos e o serviço implementados nas classes supracitadas anteriormente.

3.2.3 Diagrama de Actividade

O diagrama de actividade mostra como as varias classes do programa interagem para o bom funcionamento da aplicação, como se pode observar na figura 15.

(24)

Universidade de Cabo Verde Página 24

3.3 Teste de Funcionalidades

Nesta secção serão apresentadas as funcionalidades da aplicação.

Quando a aplicação é iniciada é apresentada uma tela com algumas animações durante 3 segundos.

Passados estes 3 segundos é apresentada a tela principal da aplicação, que é ilustrada na Figura 16.

Figura 16 - Tela principal

Nesta tela se o utilizador clicar no botão “NOVA NOTA” será apresentado à tela

(25)

Universidade de Cabo Verde Página 25

Figura 17 - Criação de um novo lembrete

Nesta tela deve-se fornecer os dados do novo lembrete e depois clicar no botão “Agendar” para criar o novo lembrete. Se o utilizador clicar no botão “Cancelar” ele apagará todos os campos e volta para a tela principal.

Após a criação de lembretes, o serviço ReminderLocationService que está sendo executado em segundo plano ficará constantemente a comparar a hora e data dos lembretes com a hora e data do dispositivo e também comparará a localização actual do dispositivo com a localização do Departamento de Engenharias e Ciências do Mar (DECM). Caso a hora e data de algum lembrete coincidir com hora e data do dispositivo, e a localização do dispositivo forem diferentes das coordenadas do DECM, será enviada uma notificação para a barra de status do dispositivo. Esta notificação informa ao utilizador que tem um compromisso agendado naquele momento e não se encontra no DECM.

(26)

Universidade de Cabo Verde Página 26

Figura 18 – Notificação

Na tela principal se o utilizador clicar no botão “LISTA NOTAS” abrirá outra tela contendo uma lista com todos os lembretes agendados. A Figura 19 apresenta esta tela.

Figura 19 - Lista de Lembretes

Se o utilizador clicar num lembrete abrirá outra tela contendo os detalhes do lembrete, como mostrada na Figura 20.

(27)

Universidade de Cabo Verde Página 27

Figura 20 - Detalhes do Lembrete

Nesta tela o utilizador tem as opções de Editar ou Eliminar o lembrete, clicando nos botões “Editar” e “Eliminar” respectivamente. Clicando no botão “Voltar” o utilizador regressará a tela principal da aplicação.

(28)

Universidade de Cabo Verde Página 28

Conclusão

Utilizando as metodologias apresentadas, se alcançou os objetivos descritos para o trabalho proposto. Nomeadamente a disponibilização da interface gráfica para os usuários possam interagir com aplicação. Com os testes realizados, aplicação atingiu outro dos objectivos, que era o envio de notificações caso o estudante não encontrasse no DECM na hora que tinha um compromisso agendado. O desenvolvimento da base dados usando o SQLite foi conseguido, possibilitando os estudantes guardarem os seus lembretes, editá-los, consultá-los e eliminá-los.

A utilização desta aplicação é capaz de auxiliar os estudantes na organização dos seus compromissos no DECM, permitindo assim uma melhor gestão e cumprimento dos seus compromissos que têm no DECM.

Trabalhos Futuros

Sendo esta a primeira versão da aplicação ainda não possui todas as funcionalidades e facilidades desejadas.

Como extensão do trabalho futuro pretende-se assegurar que no inicio de cada semestre o estudante cria o seu horário semestral e aplicação passará a notificar o estudante sempre que estiver no horário de uma aula e não se encontrar na universidade. Deixando a parte implementada para compromissos fora do horário semestral.

(29)

Universidade de Cabo Verde Página 29

Referências Bibliográficas

[1] Silva, L. A. (2010). Apostila de Android Programando Passo a Passo (4ª ed.). Disponível em www.apostilaandroid.ueuo.com

[2] K19. Desenvolvimento Mobile com Android

[3] http://developer.android.com/guide/components/index.html [4] http://www.vogella.com/articles/Android/article.html [5] http://www.vivasemfio.com/blog/arquitetura-do-android/ [6]http://www.fernandoans.site50.net/oficial/?page_id=50

Referências

Documentos relacionados

Como pontos fortes, destacam-se a existência de iniciativas já em- preendidas em torno da aprovação de um Código de classificação e uma Ta- bela de temporalidade e destinação

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Desta maneira, observando a figura 2A e 2C para os genótipos 6 e 8, nota-se que os valores de captura da energia luminosa (TRo/RC) são maiores que o de absorção (ABS/RC) e

Os resultados mostram efeito benéfico, quadrático, do ácido cítrico, na presença do fosfato natural, sobre os parâmetros avaliados; na ausência da aplicação ácido cítrico,

c.4) Não ocorrerá o cancelamento do contrato de seguro cujo prêmio tenha sido pago a vista, mediante financiamento obtido junto a instituições financeiras, no

- Se o estagiário, ou alguém com contacto direto, tiver sintomas sugestivos de infeção respiratória (febre, tosse, expetoração e/ou falta de ar) NÃO DEVE frequentar

Ninguém quer essa vida assim não Zambi.. Eu não quero as crianças

Além das espécies selvagens, existem também algumas variedades de tomate da espécie Solanum lycopersicum que podem ser utilizadas como fontes de resistência a algumas pragas, entre