Classe de Fronteira

Uma classe de fronteira modela a interação entre um ou mais atores e o sistema.

Tópicos

Explicação Início da página

As classes de fronteira são usadas para modelar a interação entre um sistema e o ambiente em que se encontra, ou seja, seus atores. Os seguintes aspectos da interação são capturados em classes de fronteira:

  • coordenação do comportamento do ator com os "aspectos internos" do sistema;
  • recebimento de entradas provenientes do ator para o sistema (por exemplo, informações ou solicitações);
  • fornecimento de saídas provenientes do sistema para o ator (por exemplo, informações armazenadas ou resultados derivados).

As classes de fronteira podem, portanto, ser usadas para capturar os requisitos em uma interface do usuário. Normalmente, fazer um modelo de objetos da interface do usuário traz várias vantagens, já que muitas dessas interfaces criadas atualmente são orientadas a objetos e a tendência é que o uso desse tipo de orientação seja cada vez maior. Embora muitas das decisões de design da interface do usuário sejam melhor tomadas durante a criação de protótipo e o rápido desenvolvimento da própria interface do usuário, é normal pensar na estrutura e nos requisitos de usabilidade da interface do usuário em termos de um modelo de objetos.

Uso de Classes de Fronteira para Modelar a Interface do Usuário Início da página

Para compreender o restante dessas diretrizes, consulte a seção "Conceitos sobre Janelas: Definição do
Contexto", em Diretrizes: Interface do Usuário (Geral).

Uma interface do usuário baseada em janelas pode ser modelada por classes de fronteira. Isso pode ser descrito em alto nível nos seguintes pontos:

  • Use uma classe de fronteira para representar uma janela principal.
  • Use uma classe de fronteira para representar cada (tipo de) objeto relevante e lógico manipulado pelo ator dentro das janelas principais. Lembre-se de que cada objeto desse tipo geralmente também tem suas próprias janelas secundárias, como as janelas de propriedade.
  • Use responsabilidades em classes de fronteira para descrever as operações necessárias em suas janelas e objetos correspondentes.
  • Use atributos em classes de fronteira para descrever propriedades de suas janelas e objetos correspondentes.
  • Use relacionamentos entre classes de fronteira para representar relacionamentos, como hierarquias de agregação e caminhos de navegação das janelas e objetos correspondentes.
  • Use requisitos especiais em classes de fronteira para capturar requisitos de usabilidade e outros tipos de requisitos (como requisitos de design e de implementação) em suas janelas e objetos correspondentes.

A partir das janelas e objetos dos exemplos acima, identificamos as seguintes classes de fronteira, responsabilidades, atributos, relacionamentos e requisitos especiais.

Exemplos de Classes de FronteiraInício da página

As classes de fronteira a seguir podem ser identificadas para um editor de documentos:

Observe que Caractere está incluído somente porque é essencial para exibir um caractere como um objeto próprio neste aplicativo específico, ou seja, no editor de documentos. É claro que as classes Caractere não devem ser usadas se não forem consideradas essenciais no aplicativo que esteja sendo modelado. Nesses casos, é provável que Caractere possua uma granularidade muito fina.

As classes de fronteira a seguir podem ser identificadas para um aplicativo de correio:

As classes de fronteira a seguir podem ser identificadas para manipulação de arquivos:

Exemplos de Responsabilidades de Classes de FronteiraInício da página

As responsabilidades a seguir podem ser identificadas para um editor de documentos:

A responsabilidade Dividir serve para dividir um Documento em duas (sub)janelas. A responsabilidade Localizar(Texto) serve para localizar algum Texto no Documento.

As responsabilidades a seguir podem ser identificadas para um aplicativo de correio:

A responsabilidade Organizar(Critérios) serve para organizar as Mensagens Eletrônicas de uma Caixa de Correio de acordo com vários critérios, como remetente, assunto, hora de recebimento, etc.

As responsabilidades a seguir podem ser identificadas para manipulação de arquivos:

Exemplos de Atributos de Classes Fronteira Início da página

Os atributos a seguir podem ser identificados para um editor de documentos:

Observe que este tipos de atributo são exibidos aqui conceitualmente e podem ser realizados na interface real do usuário em várias unidades de medida, como centímetros, polegadas, etc.

Os atributos a seguir podem ser identificados para um aplicativo de correio:

Exemplos de Relacionamentos de Classes de FronteiraInício da página

Os relacionamentos de agregação a seguir podem ser identificados para um editor de documentos:

Observe que a janela principal, neste caso o Documento, costuma ser um agregado, já que contém um número arbitrário de outros objetos. No entanto, agregados (como o Parágrafo) também existem dentro de outros agregados e não representam necessariamente janelas principais.

Os relacionamentos de agregação a seguir podem ser identificados para um aplicativo de correio.

Com relação aos arquivos, o relacionamento entre Pasta e Arquivo também poderia ser modelado como um agregado:

Os relacionamentos de associação a seguir podem ser identificados para um editor de documentos:

Uma Nota de Rodapé deve estar sempre ancorada a um Caractere. Por outro lado, um Caractere pode se associar a uma ou várias Notas de Rodapé.

Observe a diferença entre agregações e associações (comuns). Geralmente, as agregações são usadas para modelar hierarquias de confinamento, enquanto as associações modelam relacionamentos e caminhos de navegação alternativos entre diferentes hierarquias de confinamento.

Um uso das associações ligeiramente mais avançado é a modelagem de herança controlada por usuário. Por isso, uma associação deve ficar entre o objeto herdado e o objeto herdante. Um exemplo é quando um Parágrafo herda um Estilo:

O relacionamento de generalização a seguir pode ser identificado para um editor de documentos:

Um Documento também é um Arquivo, ou seja, ele herda todas as responsabilidades e atributos deste.

Os relacionamentos de generalização podem ser identificados para um aplicativo de correio:

Exemplos de Requisitos Especiais em Classes de FronteiraInício da página

Os requisitos especiais em classes de fronteira podem ser:

  • Requisitos de usabilidade, como tempos de execução de usuário, tempos de aprendizado e taxas de erro associados à classe de fronteira.
  • Requisitos não-funcionais, que são capturados na classe mas que precisam ser gerenciados durante o design e a implementação da interface de usuário correspondente. Um exemplo desse requisito é que uma classe de fronteira deve ser implementada usando um componente específico, como um controle ActiveX.
Exemplo:

Um requisito de usabilidade relacionado à classe Caractere poderia ser:

  • Um Caractere deve permitir a navegação para qualquer Nota de Rodapé associada com um único movimento do mouse.

Um requisito de usabilidade relacionado à classe Mensagem Eletrônica poderia ser:

  • O Usuário de E-mail não deve se deixar distrair pelas Mensagens Eletrônicas de entrada enquanto estiver lendo as Mensagens Eletrônicas existentes.

Um requisito de usabilidade relacionado à classe Caixa de Correio poderia ser:

  • O Usuário de E-mail deve ser capaz de organizar as Mensagens Eletrônicas simplesmente clicando o mouse.

Outros requisitos de usabilidade têm a ver com valores de atributo e volumes de objeto. Isso ocorre porque a interface do usuário geralmente possui um requisito para fornecer uma interface legível relacionada a um intervalo específico de um valor de atributo ou para fornecer um gerenciamento usável do intervalo de um volume específico de objetos. Portanto, tais intervalos devem representar os casos normais e cobrir até 90% deles. Por sua vez, a interface do usuário vai cobrir todos os valores, incluindo aqueles que excederem os intervalos, mas pode ser otimizada para valores nos intervalos normais.

Exemplo:

Um requisito de usabilidade relacionado a volumes de objetos contidos na classe Documento poderia ser:

  • Um Documento deve ser capaz de gerenciar 1.000 Parágrafos sem atrasar o mecanismo de rolagem.

Um requisito de usabilidade relacionado a valores de atributo da classe Mensagem Eletrônica poderia ser:

  • Um Sujeito deve ser capaz de incluir 40 caracteres, sem hifens.

Como Relacionar Atores e Classes de FronteiraInício da página

Como as classes de fronteira modelam interações entre os atores e o sistema, esclarecemos isso ao associar cada ator às classes de fronteira que gerenciam a interação com o ator.

Exemplo:

Para o editor de documentos, identificamos um ator Escritor que interage com Documentos.

Um Escritor pode trabalhar com vários Documentos diferentes. Um Documento pode ser criado por vários Escritores diferentes. Observe que, provavelmente, isso fará com que um Documento precise ser capaz de distinguir Escritores diferentes.

Além disso, nesse caso, deixamos que se depreenda do contexto o fato de que um Escritor interage com todos os objetos contidos na hierarquia de agregação em Documento.

Para o aplicativo de correio, identificamos um ator Usuário de E-mail que interage com Caixas de Correio.

Também nesse caso, deixamos que se depreenda do contexto o fato de que um Usuário de E-mail interage com todos os objetos contidos na hierarquia de agregação em Caixa de Correio.

Critérios de Satisfação em Classes de Fronteira e seus Relacionamentos Início da página

Um problema com muitas interfaces do usuário é que elas possuem janelas demais e caminhos de navegação de janelas demasiado longos. Além de adicionar uma carga desnecessária de interações, esses caminhos de navegação aumentam a probabilidade de o usuário se "perder" no sistema. O ideal é que todas as janelas sejam abertas a partir de uma única janela primária, geralmente chamada de janela principal. Portanto, o comprimento máximo de navegação deve ser de dois. Evite comprimentos de navegação maiores que três.

Uma meta importante durante a criação da interface do usuário é ter somente uma janela principal por ator, se possível com todos os objetos que ele precise acessar. Se isso não for possível, a janela deve fornecer navegação para todos os objetos que o ator precise acessar. É importante que o ator passe uma parte considerável de seu "tempo de uso" interagindo com essa janela principal.

Conseqüentemente, esse fato tem o seguinte impacto no modelo de objetos da interface do usuário:

  • Se possível, cada ator deve estar relacionado somente a uma classe de fronteira (agregado) que representa a janela principal.
  • Todas as classes de fronteira usadas pelo mesmo ator devem estar relacionadas de alguma maneira, geralmente por meio de uma hierarquia de agregação, começando pela classe de fronteira que representa a janela principal.
  • Toda hierarquia de agregação deve ser o mais ampla e superficial possível.
  • Em geral, as classes de fronteira devem fazer parte de uma (e apenas uma) hierarquia de agregação, para que o ator saiba onde encontrá-la.
  • Deve haver o menor número de hierarquias de agregação possível, pois elas complicam o modelo mental do ator.
  • Se você tiver uma associação com uma multiplicidade de um e as classes associadas fizerem parte de diferentes hierarquias de agregação, deve pensar em substituir a associação pela agregação, se as duas hierarquias de agregação puderem ser mescladas. No entanto, observe que isso pode levar a um comprometimento entre uma hierarquia de agregação detalhada e duas mais superficiais.

Os critérios de satisfação apresentados acima estão em um nível bem detalhado. Em um nível mais alto, podemos listar os seguintes critérios, que podem não fornecer tantos detalhes mas que pelo menos demonstram a intenção das classes de fronteira:

  • As classes de fronteira devem contribuir para uma usabilidade satisfatória do sistema.
  • As classes de fronteira devem ser mantidas no maior nível conceitual possível.
  • As classes de fronteira devem fornecer um encapsulamento estável da interação entre o sistema e o ator.
  • As classes de fronteira devem ser os únicos objetos que precisem ser alterados, caso os atores alterem a forma de fornecer entrada ao sistema.
  • As classes de fronteira devem ser os únicos objetos que precisem ser alterados, caso o sistema altere a forma de fornecer saída aos atores.
  • As classes de fronteira devem estar "cientes" dos requisitos provenientes de outros tipos de objeto (como objetos de controle e de entidade), para que possam ser implementadas sem perder usabilidade e eficácia em relação ao "interior do sistema."

Copyright  (c) 1987 - 2001 Rational Software Corporation


Exibir o Rational Unified Process usando quadros

Rational Unified Process