• Nenhum resultado encontrado

No Capítulo 2 foram apresentados os problemas relacionados com reconhecedores de gestos. Contudo, devido a existir ferramentas específicas de baixa complexidade, muitos desenvolvedores preferem a solução de Aprendizagem de Máquina para reconhecimento de gestos usando o Kinect.

Assim como acontece no Reconhecimento por Comparação, seria ideal o usuário ou especialista de um domínio de determinada área especificar um gesto, em alto nível, usando apenas um conjunto de regras e condições que poderiam ser descritas de forma comum, sem ter que lidar com uma matemática complexa da abordagem de Reconhecimento por Algoritmo.

Abstração é a chave para o progresso na Engenharia de Software. Através da inclusão de camadas de alto nível sobre as camadas de baixo nível, desenvolvedores de software podem pensar em conceitos de alto nível para compor aplicações mais complexas. Ao abstrair um artefato de software, a questão-chave à abstração é que tipo de detalhes são suprimidos. Um equívoco comum é pensar que quanto menos detalhes, maior será o nível de abstração. Mas abstração não é sobre omitir detalhes, trata-se de suprimir os detalhes que não são importantes para um desenvolvedor de software e enfatizar de forma sucinta a informação que é importante. Por exemplo, a abstração provida por uma linguagem de programação de alto nível permite a um programador construir algoritmos sem ter a preocupação sobre os detalhes de dados a nível de hardware(KRUEGER, 1992).

No caso de reconhecedores de gestos, mecanismos de abstração convencionais tais como: Linguagem de Programação de Propósito Geral (LPPG), Application Programming Interface(API) e ferramentas como Visual Gesture Builder permitem novas camadas de abstração. No entanto, não são suficientes para definir um código que possa ser expressado e interpretado facilmente por qualquer desenvolvedor, muito menos por um não desenvolvedor. Além disso, esse mesmo código deve também ser interpretável computacionalmente para que haja, posteriormente, o reconhecimento do gesto definido.

Comum a todas estas especificidades, o mecanismo de abstração deve permitir um nível de abração ideal para atender os desafios do domínio. Nos últimos anos, uma abordagem em particular tem recebido muita atenção na área de reconhecimento de gestos. Trata-se de Domain- Specific Language(DSL), que visa a criação de novas camadas de abstração no desenvolvimento de software. Na próxima Seção 3.2.1 explanamos sobre DSL e como tais linguagens permitem programação em alto nível de reconhecedores de gestos.

3.2.1

Domain-Specific Languages

A evolução das linguagens de programação começou com trabalhos específicos, para depois se chegar a linguagens com um generalização suficiente para computar qualquer problema. Ao propor compiladores de propósito geral, Holt (1958) argumenta que a maioria dos sistemas de

compilação são desenvolvidos inicialmente para uma gama específica de problemas e possuem generalidade suficiente apenas para lidar com essas anotações. De acordo com Sammet (1972), linguagens de programação desenvolvidas especificamente para uso acadêmico, comercial ou matemático já são descritas na literatura desde o inicio da computação moderna.

Portanto, o conceito de linguagem de programação para um propósito específico não é recente. Este conceito é a base das Domain-Specific Languages (DSLs). Apesar do conceito já existir, o termo é recente e nunca teve um definição muito rigorosa. Até o momento não existe nenhuma definição oficial e universalmente aceita sobre DSLs.

Neste trabalho, utilizaremos a definição mais comum para explicar o termo/conceito de Domain-Specific Language(DSL), que é dada por Fowler (2010):

DSL é uma linguagem de programação de computadores, com expressividade limitada aos conceitos e abstrações de um domínio específico.

Tal definição pode ser analisada considerando os elementos que a compõe:

 Linguagem de Programação de Computadores: uma DSL é usada por humanos

a fim de instruir um computador a fazer algo. Assim como em qualquer linguagem de programação moderna, sua estrutura é projetada para facilitar seu entendimento por humanos, mas também deve ser executável por um computador. Para isso deve possuir uma coleção de sentenças, de notação textual ou visual, com definição formal e bem definida de sintaxe e semântica.

 Expressividade Limitada: uma LPPG fornece muitos recursos úteis que torna

possível construir um sistema de software inteiro usando apenas uma linguagem. Uma DSL suporta apenas os recursos relativos ao domínio, portanto, usa-se apenas para um aspecto específico do sistema.

 Domínio Específico: uma linguagem específica é útil apenas se tiver foco claro em

um domínio pequeno. O foco no domínio é o que faz uma linguagem específica valer a pena.

Considerando essa simples definição, um exemplo concreto de uma DSL é Structured Query Language(SQL) (CHAMBERLIN; BOYCE, 1974), ou Linguagem de Consulta Estru- turada. SQL é a linguagem declarativa padrão para banco de dados relacional. Através de uma semântica padronizada e elementos sintáticos próprios permite expressar soluções para problemas de dados que podem ser resolvidos utilizando cálculo relacional. Entretanto, SQL abstrai como o modelo de dados será executada ou implementado. A implementação fica para o mecanismo do banco de dados relacional. Isso permite ao desenvolvedor de software ser mais produtivo ao concentrar-se no problema dos dados e não nos detalhes da sua implementação.

Uma DSL fornece uma abstração que pode ser usada para pensar acerca de uma área de conhecimento qualquer. Tal abstração é realmente valiosa, pois lhe permite expressar o

comportamento de um domínio de um modo muito mais fácil do que se você pensasse em termos de construções de nível mais baixo. Por exemplo: no desenvolvimento de software, a maneira mais comum de construir uma abstração é a partir da implementação de uma biblioteca ou de um framework, que pode ser manipulável através de uma API. DSL fornece um estilo diferente de manipulação para essa abstração. Não é apenas uma nova sintaxe para expressar os conceitos de abstração do domínio, mas também um meio para comunicar mais claramente a intenção de uma parte de um sistema (FOWLER, 2010).

O benefício mais importante do uso de DSL é que o conhecimento de domínio é abstraído no nível certo. Partindo deste nível, os especialistas do domínio podem entender, validar, e modificar o código, adaptando as necessidades específicas do domínio, o que torna as modifica- ções mais fáceis de fazer e o seu impacto mais fácil de entender. Além de haver um aumento na flexibilidade, produtividade, confiabilidade e facilidade de utilização (DEURSEN; KLINT, 1998).

De um ponto de vista geral, DSLs são importantes para o desenvolvimento de software porque representam uma maneira de codificar a solução de um problema de forma mais natural, com maior fidelidade do que os mecanismos de abstração tradicionais. Assim sendo, DSLs auxiliam no desenvolvimento de reconhecedores de gestos ao aumentar a abstração dentro do domínio.

A adoção de DSL envolve algumas etapas que vão desde a decisão até o uso da nova linguagem. No próximo tópico relacionamos as etapas envolvidas na concepção de uma DSL. Implementando DSLs

Para Deursen, Klint e Visser (2000) o desenvolvimento de DSL envolve três passos: (I) Análise; (II) Implementação; e (III) Uso.

 (I) Análise: antes de desenvolver uma nova DSL deve-se considerar os custos de

concepção, implementação e manutenção. É necessário também analisar se, em comparação com outros abordagens convencionais, justifica-se a construção de uma nova DSL ou até mesmo se já existe uma DSL adequada para o domínio. Após a decisão em favor de uma (nova) DSL, o domínio específico tem de ser analisado. O objetivo desta análise é definir as regras que serão abstraídas e modeladas para se tornarem elementos semânticos e sintáticos da linguagem.

 (II) Implementação: com a análise do domínio definida, é implementado uma

biblioteca que representa as noções semânticas do domínio. A DSL é construída para ser uma interface que irá traduzir as chamadas necessárias para manipular o modelo computacional presente na biblioteca. Essa implementação pode ser classificada entre Externa, Interna e Linguagens de bancada.

têm-se total liberdade para criar sua estrutura sintática e semântica, necessitando de um parser1para processá-las. Trata-se de uma linguagem construída muitas vezes da mesma forma que uma LPPG.

Interna, também chamada de embutida, é produzida utilizando uma LPPG. A vantagem desta abordagem é tentar trazer um menor esforço de desenvolvimento, já que a plataforma (parser, compilador, bibliotecas) da linguagem hospedeira pode ser utilizada. O resultado pode ser mais rápido, já que muitos recursos podem ser reutilizados (HUDAK, 1996).

Linguagens de Bancada, do inglês Language Workbench são Integrated De- velopment Environments (IDEs) especializadas na definição e construção de DSLs. Tais ambientes de desenvolvimento têm sido adotados com a finalidade de reduzir os custos de implementação de DSL. A utilização de Languages Workbenches implica no fato de ficar preso a uma determinada plataforma, todo o conjunto de componentes ficará preso a este ambiente de desenvolvimento (FOWLER, 2010).

 (III) Uso: basicamente esta fase é onde escreve-se os "programas"desejados para

computá-los. Mas, para isso há uma curva de aprendizado, assim como com qualquer outra abstração, e esta abstração é algo que está sempre evoluindo, algo inacabado e o uso da DSL poderá ser um caminho útil para que ela absorva mais facilmente o comportamento que melhor evolui a linguagem.

Como visto na fase de análise, uma vez que os benefícios oferecidos por DSL são aplicáveis às circunstâncias de desenvolvimento do domínio em questão, há que se fazer uma análise do domínio. No caso deste trabalho, o domínio que estamos à abstrair é dos gestos do corpo humano, onde buscamos melhorar a descrição computacional para possibilitar o reconhecimento dos mesmos como forma de reduzir a complexidade no desenvolvimento de aplicações baseadas em gestos.

Nesse sentido, foi feito um estudo das representações do movimento humano a fim de capturar as regras que serão abstraídas e modeladas para se tornarem elementos semânticos e sintáticos da linguagem que foi implementada. Esse estudo inclui também as DSLs já existentes que são consideradas como trabalhos relacionados. Apresentamos a partir da próxima Seção os estudos relacionados à fase de Análise para concepção da DSL.