Essa seção apresenta dois conceitos fundamentais que serão citados ao logo desta dissertação. Assim, nas duas próximas subseções apresentaremos o conceito de Middleware e Framework.
2.6.1 Middlewre
No âmbito de computação distribuída, o Middleware é um programa de computador que faz a mediação entre o Sistema Operacional (SO) e a Aplicação com o intuito de facilitar o desenvolvimento de aplicações. A Figura 4 apresenta uma visão que demonstra a relação entre Aplicação, Middleware e o SO.
Figura 4: Apresentação do Middleware como um elemento intermediário
Middleware é o termo criado para designar camadas de software que não constituem diretamente aplicações, mas que facilitam o uso de ambientes ricos em tecnologia da informação. Nesta camada concentra serviços dos mais diversos tipos, como por exemplo, comunicação, identificação, autenticação, certificados, etc.
É geralmente acessível através de uma API de alto nível que proporciona a sua inte- gração com aplicações desenvolvidas em diversas linguagens de programação e interfaces de baixo nível que permitem a sua independência relativamente ao dispositivo. Assim, os middlewares apresentam a função de tornar transparente a interação com elementos do sistema operacional e fornecer um modelo de programação mais produtivo para os programadores de aplicativos, ou seja, ao se utilizar de um middleware os programadores se beneficia de toda a transparência criada para a comunicação entre a Aplicação e o SO, e assim concentra seus esforços na própria aplicação.
Um Middleware provê: (i) Portabilidade de componentes e de aplicações distribuídas através da sua API única; e (ii) Interoperabilidade de aplicações distribuídas. Além disso, ele deve fornecer:
• Facilidade de Uso, deve ser mais fácil de se comunicar utilizando-o do que escrever uma interface de comunicação de baixo nível usando sockets, por exemplo;
• Transparência de Localização, deve ser possível mover uma aplicação para um en- dereço de rede diferente sem a necessidade de recompilar o software; e
• Transparência de Linguagem e Plataforma, um processo usando o middleware deve ser capaz de se comunicar com um processo que foi escrito em uma linguagem diferente, desde que estes façam uso da mesma interface de comunicação.
2.6.2 Framework
Também chamado de arcabouço, um framework consiste em uma abstração que agrupa trechos de códigos de computadores que são comuns a diversos projetos, fornecendo assim funcionalidades genéricas. Existem diversas definições para eles, para [GAMMA et al., 2006] framework pode ser visto como um conjunto de classes cooperativas que com-
põem um projeto reutilizável para um domínio especifico de aplicações. Ele oferece um guia arquitetural para a partição do projeto em classes abstratas e a definição de suas res- ponsabilidades e colaborações. O desenvolvedor adapta o framework para a sua aplicação particular por meio da criação de subclasses e da composição de instâncias das classes dos frameworks.
Já [FAYAD; SCHMIDT; JOHNSON, 1999] diz que framework é o esqueleto de uma apli-
cação que pode ser adaptado por um desenvolvedor de aplicações. Ambas as definições estão corretas e se complementam.
No geral, os frameworks apresentam as seguintes características [FAYAD; SCHMIDT; JOHNSON, 1999]:
• Modularidade: Obtida por meio do encapsulamento, em interfaces bem definidas, de pontos da implementação que são susceptíveis a mudança. Isto minimiza o impacto gerado quando da manutenção do software e facilita o seu desempenho.
• Reusabilidade: A utilização do projeto de framework na criação de novas aplicações e das definições de interfaces para a construção de componentes que se adaptem à sua estrutura ratificam a característica de reuso assegurada para frameworks. O aumento da produtividade dos programadores, da qualidade e da confiabilidade dos programas gerados são ganhos diretamente vinculados ao reuso promovido pelo framework.
• Adaptabilidade: O framework permite que o desenvolvedor crie suas aplicações por meio de adaptações: extensão de interfaces e métodos pré-determinados. Desta forma, está assegurada a criação de infinitas possibilidades de novas aplicações com base no mesmo framework.
• Inversão de controle: Esta característica fundamental dos framework permite que eles definam que método específico da aplicação a ser gerada deve ser invocado em resposta a um evento externo. Neste sentido, o framework têm o funcionamento con- trário ao de uma aplicação que utiliza uma biblioteca de classes. Esta característica é conhecida como princípio de Hollywood “Não ligue para nós, nós ligaremos para você” [LARMAN, 2007].
A vantagem na utilização do framework se dá em benefícios como: redução de custos no desenvolvimento e o tempo entre a análise de um produto e sua disponibilização para a venda (Time-to-market), consequência da maximização do reuso, onde os desenvolvedores se concentram no desenvolvimento de módulos específicos. Para tanto, desenvolver um framework é uma tarefa complexa, deve ser muito bem planejado para assim alcançar a generalização, que trás consigo o benefício do reuso, por exemplo.
2.7
Conclusões
Este capítulo apresentou conceitos de suma importância para um melhor entendimento desta dissertação. As principais definições encontradas na literatura foram expostas e usadas para fundamentar nosso trabalho.
Para tal, mostramos algumas das principais definições de sensibilidade do contexto e expomos a definição que será abordada nesse trabalho, ao qual chamamos de contexto de alto nível semântico. Além disso, apresentamos as principais formas de representação de contexto existentes e a forma que nós escolhemos utilizar nesse trabalho. Logo em seguida apresentamos conceitos relativos ao paradigmas da computação em nuvem que fundamentam o que nos motivou a utilizar essa tecnologia em nossa proposta e outros conceitos relativos ao armazenamento e recuperação de informação sistemas ubíquos. E por fim, apresentamos outros assuntos correlatos, em que apresentamos os conceitos de middleware e framework.
No próximo capítulo apresentaremos os principais trabalhos correlatos com a nossa proposta.