Artefatos > Conjunto de Artefatos de Requisitos > Protótipo da Interface do Usuário > Diretrizes


Interface do Usuário

Esta é uma descrição das diretrizes gerais aplicáveis à  criação de uma interface do usuário, na qual

"A interface do usuário é o que permite que as informações sejam transmitidas entre um usuário humano e os componentes de hardware ou software de um sistema de computador." [IEEE, Std 610.12-1990]

Tópicos

Conceitos sobre Janelas: Definição do Contexto Início da página

Esta seção oferece uma visão geral da anatomia de uma interface do usuário baseada em janelas. Essa visão geral é necessária para compreender o restante destas diretrizes.

Uma interface do usuário baseada em janelas divide-se em janelas. As janelas podem ser movidas por toda a tela, empilhadas umas sobre as outras e transformadas em ícones. Um sistema geralmente apresenta uma janela primária e várias janelas secundárias. A janela primária trata da interação principal com o usuário e costuma conter um número arbitrário de objetos. As janelas secundárias são usadas para suportar as interações com as janelas primárias, fornecendo detalhes sobre seus objetos e as operações neles realizadas.

Janelas Primárias

A janela primária geralmente contém um número arbitrário de objetos com os quais o usuário interage. Normalmente, o usuário interage com o sistema selecionando primeiro um ou vários objetos, ou seja, clicando neles e escolhendo uma operação (por exemplo, através de um menu) que é executada em todos os objetos selecionados. Cortar, Copiar, Colar, Excluir e Visualizar Propriedades são algumas operações comuns.

A janela primária geralmente contém uma barra de menu, na qual os usuários podem escolher as operações. Os usuários também podem escolher operações através de menus pop-up (pressionando o botão direito do mouse sobre o próprio objeto) e por manipulação direta (clicando e arrastando o objeto). Como o total de objetos pode não caber na janela primária, geralmente os usuários podem rolar pelos objetos usando uma barra de rolagem ou redimensionar a janela. Além disso, a janela primária pode ser dividida em painéis (definindo subáreas da janela), que também podem ser redimensionados pelo usuário.

Uma janela primária do Microsoft® Word, mostrando um documento. Ela contém objetos como parágrafos e caracteres. (Embora os exemplos ilustrados aqui sejam da plataforma Microsoft®, estas diretrizes não pretendem ser, de forma alguma, específicas para essa plataforma.)

Uma janela primária do Microsoft® Outlook, mostrando uma caixa de correio. Ela contém objetos como mensagens eletrônicas.

Composições

Um objeto composto em uma interface de usuário é aquele que é visualmente composto por outros objetos. Por exemplo, um parágrafo é uma composição de caracteres; um objeto de desenho complexo é uma composição de vários objetos de desenho primitivos.

Janelas Secundárias

As janelas secundárias suportam as janelas primárias fornecendo detalhes (como propriedades, por exemplo) sobre seus objetos e as operações neles realizadas. Somente algumas propriedades dos objetos aparecem normalmente na janela primária. As propriedades de um objeto são exibidas quando uma janela de propriedades é aberta (janela secundária), mostrando todos os atributos de um objeto. Em geral, o usuário pode alterar os atributos através de controles, como os botões de alternância e de opção, as escalas, as caixas de opções e os campos de texto.

Uma janela secundária do Microsoft® Word, que é uma janela de propriedades mostrando as propriedades de um parágrafo.

Uma janela de propriedades do Microsoft® Outlook, mostrando as propriedades de uma mensagem eletrônica.

Observe que há uma linha fina - e às vezes bem artificial - entre as janelas primárias e as secundárias. Elas podem exibir os mesmos níveis de complexidade. Por exemplo, compare a janela de documento mostrada acima com a janela de mensagens eletrônicas; a janela de documento é considerada primária, ao passo que a janela de mensagens eletrônicas é considerada secundária.

Entretanto, existem duas diferenças principais entre as janelas primárias e secundárias:

  • As janelas primárias geralmente são consideradas mais importantes para o aplicativo, já que precisam fornecer usabilidade extensiva. Por isso, os esforços de desenvolvimento tendem a ser mais concentrados nas janelas primárias.
  • As janelas secundárias costumam ser exibidas através da navegação em janelas primárias, e não vice-versa.

Além das janelas de propriedades, existem outros tipos de janelas secundárias, como as caixas de diálogo, as caixas de mensagem, as paletas e as janelas pop-up.

Uma caixa de diálogo do Microsoft® Word, oferecendo uma operação de localização entre parágrafos e caracteres.

Muitos aplicativos se baseiam em arquivos. Os usuários podem iniciar esses aplicativos com a operação Open em um objeto de arquivo (por exemplo, clicando duas vezes no ícone de um arquivo em uma pasta). A janela primária desses aplicativos mostra os objetos armazenados nesse arquivo. Save, Save As, Open e New são algumas operações comuns, que normalmente podem ser selecionadas através de um menu de arquivo na janela principal. Além disso, a janela primária pode exibir vários arquivos (também chamada de Interface de Documentos Múltiplos ou MDI), permitindo que o usuário alterne entre diferentes arquivos.

Uma janela de gerenciamento de arquivos na plataforma Microsoft® Windows, mostrando arquivos e pastas.

Dimensões Visuais Início da página

A chave para obter janelas primárias com usabilidade é utilizar as dimensões visuais para visualizar os objetos contidos e seus atributos. Eis algumas das vantagens de apresentar mais atributos do que os necessários para identificação:

  • O usuário evita a sobrecarga na navegação de janelas, já que diminui o número de janelas a serem exibidas (quando o usuário precisa ver um atributo que é apresentado na janela primária).
  • O usuário pode ver os aspectos distintos (de diferentes objetos) ao mesmo tempo, o que costuma ser útil para fazer comparações e começar a reconhecer padrões. Um bom uso das dimensões visuais pode estimular os usuários a desenvolver um senso totalmente novo e aguçado em seu trabalho.

As dimensões visuais são:

Essas dimensões são apresentadas a seguir. Entretanto, tenha cuidado com a área de tela disponível quando estiver projetando a visualização dos objetos. Tente diminuir ao máximo a sobrecarga ao explorar a área da tela e avalie se o uso de várias dimensões visuais justifica o consumo extra da área da tela. É provável que o usuário já fique bastante satisfeito apenas com uma lista de nomes, pois o que ele realmente precisa é ver o maior número de objetos possível.

Observe que é importante usar essas dimensões visuais (ou estendê-las) para conseguir identificar os objetos de forma exclusiva. Incluímos também a seguir uma discussão sobre esse assunto (consulte a seção "Identificação" abaixo).

Observe que as dimensões visuais podem ser usadas em conjunto com a dimensão de tempo - por exemplo, movendo objetos (sua posição é alterada através do tempo) ou alterando a forma ou a cor de objetos (seu estado é alterado através do tempo). Esse último caso é abordado na seção "Forma" a seguir.

Posição

Os aspectos mais intuitivos que a posição pode apresentar são as posições do mundo real. Como exemplos, podemos citar:

  • Sistemas de Informações Geográficas (GIS), que exibem um mapa no qual é possível apresentar os objetos nas mesmas longitude e latitude do mundo real;
  • Programas CAD (Design Auxiliado por Computador), que apresentam os objetos e seu ambiente exatamente de acordo com as coordenadas do mundo real;
  • Editores WYSIWYG "What You See Is What You Get" (O Que Se Vê É o Que Será Impresso), que exibem os objetos (caracteres) no mesmo local da janela em que aparecerão em uma cópia impressa.

Às vezes, é relevante mostrar o tamanho real (exemplos de programa CAD e de editor WYSIWYG); outras vezes, isso não é tão relevante assim (por exemplo, quando o tamanho dos objetos é muito menor que a distância entre os objetos).

Por exemplo, imagine que nós temos um sistema de cadastro de vôos em que o usuário deve inserir os destinos. Uma possível apresentação disso seria exibir um mapa contendo os diferentes aeroportos (onde um aeroporto seria um objeto). Naturalmente, como os tamanhos reais dos aeroportos são irrelevantes (muito pequenos para serem vistos), todos os aeroportos são mostrados como ícones do mesmo tamanho.

Esse exemplo também ilustra que as posições do mundo real podem ser usadas mesmo que elas não sejam relevantes, contanto que ajudem o usuário a identificar os objetos. No exemplo, o usuário não precisa saber a localização de um aeroporto. Porém, se ele estiver familiarizado com geografia, pode ser mais fácil para ele localizar os destinos em um mapa do que em uma lista.

Você também pode usar a posição para representar posições "virtuais" do mundo real. Por exemplo, imagine um sistema de compras à distância, onde os usuários podem comprar itens de diferentes lojas. Uma possível apresentação disso seria exibir um diagrama esquemático de uma alameda (virtual) com as diferentes lojas em suas devidas posições (onde uma loja seria um objeto). Esse diagrama esquemático nada teria a ver com a localização real dessas lojas. Ele apenas exploraria a memória espacial do usuário, já que é mais fácil memorizar uma posição x-y do que um item em uma lista ou hierarquia.

Outra alternativa de uso da posição é mostrar associações entre objetos; todos os objetos que possuem a mesma posição vertical são associados de uma maneira, enquanto todos os objetos que possuem a mesma posição horizontal são associados de outra maneira. As planilhas são um exemplo disso.

Uma alternativa semelhante é permitir que um eixo represente o intervalo de valores de algum atributo. Por exemplo, em um sistema de cadastro de viagens, os vôos cadastrados (onde um vôo seria um objeto) poderiam ser apresentados ao longo de um eixo de tempo horizontal, mostrando sua relação no tempo, sua duração e o período de tempo em que o usuário ficaria em cada destino. Essas são informações que o usuário não precisa saber, mas que ele verá com prazer se elas forem apresentadas oportunamente.

Se você não quiser usar tanta área da tela para apresentar todo o intervalo de valores, poderá reduzir as distâncias entre os objetos. No exemplo do cadastro de viagens, isso significaria que todos os vôos cadastrados seriam apresentados horizontalmente e sem espaço entre eles, mas o primeiro vôo ficaria à esquerda, o segundo ficaria imediatamente à direita do primeiro, e assim por diante. Os usuários não veriam o período de tempo em que poderiam ficar em cada destino, mas poderiam ver a duração dos vôos.

Tamanho

Em muitos casos, o "tamanho" deve representar o mesmo que posição. Em um sistema CAD, por exemplo, o tamanho deve representar naturalmente a extensão do mundo real. Às vezes, porém, ficamos à vontade para escolher que tamanho deveria representar os aeroportos, por exemplo, no mapa que permite a seleção de destinos.

Nesses casos, o tamanho deve representar o que é mais intuitivamente percebido como o tamanho real do objeto. No caso de um arquivo, o tamanho do objeto deve representar a quantidade de espaço em disco ocupado. No caso de uma conta bancária, o tamanho do objeto deve representar o saldo. Na maioria dos tamanhos, uma escala logarítmica é melhor do que uma escala proporcional, já que uma escala proporcional geralmente ocupa uma grande parte da área da tela.

O tamanho é, na verdade, tão intuitivo que você pode pensar em mostrá-lo mesmo que isso não seja relevante. Afinal de contas, no mundo real, objetos diferentes ocupam proporções diferentes de nosso campo visual devido aos seus diferentes tamanhos. Isso não é inconveniente; apenas nos ajuda a distinguir os vários objetos. Da mesma forma, o uso de diferentes tamanhos na interface do usuário ajudará os usuários a fazer a distinção entre os vários objetos.

Normalmente, o tamanho deve ser usado para apresentar somente um único atributo, mesmo que fosse possível permitir que a extensão horizontal apresentasse um atributo e a extensão vertical apresentasse outro (o que acabaria sendo não intuitivo e poderia confundir o usuário).

A extensão horizontal ou vertical deve ser (logaritmicamente) proporcional ao atributo que o tamanho ilustrará. A outra extensão deve ser fixa (ou depender do tamanho do nome, por exemplo). Se as extensões horizontal e vertical forem proporcionais ao mesmo atributo, elas raramente adicionarão algum valor. Isso parece ser inoportuno e apenas consumirá mais espaço na área da tela.

Forma

As formas são normalmente representadas por ícones em uma interface gráfica do usuário. Ela é melhor usada para representar o tipo, pois é mais intuitivo mapear uma diferença na aparência do que no tipo. No mundo real, objetos diferentes do mesmo tipo geralmente têm a mesma aparência, ao passo que objetos de tipos diferentes apresentam diferença na aparência. Por exemplo, várias cadeiras diferentes possuem uma aparência semelhante (todas elas têm quatro pernas, um assento e um encosto), enquanto um carro é bastante diferente de uma cadeira.

Portanto, quais são os critérios para os casos em que objetos diferentes apresentam tipos diferentes? Para começar, classes diferentes devem certamente ser consideradas como tipos diferentes. Além disso, alguns atributos são "semelhantes em tipo". Esses atributos devem ter um conjunto limitado de possíveis valores e seu valor normalmente determina o que pode ser feito com o objeto (em termos de operações e possíveis valores de outros atributos). Isso é o mesmo que acontece no mundo real. A diferença mais importante entre uma cadeira e um carro é o modo como eles são utilizados: uma cadeira é utilizada para descansar e um carro é utilizado para transportar.

No entanto, quando você analisar o que deve ser considerado como tipos diferentes, lembre-se de que o mais importante é qual atributo apresenta uma probabilidade maior de ser conhecido pelo usuário como um tipo.

Se você não tiver classes múltiplas ou nenhum atributo semelhante a "tipo", poderá usar ícones para representar os diferentes valores de algum outro atributo de valor limitado, mas somente se esse atributo for muito interessante para o usuário.

Os ícones também costumam ser usados para mostrar diferentes estados do objeto (além de mostrar o tipo). Quando você seleciona um objeto, ele geralmente é exibido de duas maneiras: a cor é alterada para preto ou ele aparece com um retângulo em torno dele. Outro possível estado é que uma janela de propriedades tenha sido aberta para o objeto. Normalmente, também há outros estados específicos de aplicativo que podem ser exibidos, como, por exemplo, se uma mensagem eletrônica foi lida ou não. Apenas certifique-se de que a apresentação do estado não está dificultando a identificação do tipo por parte do usuário e vice-versa.

Cor

A cor pode ser dividida em três componentes, tendo como base a percepção visual. São elas: matiz (ou seja, vermelho, azul, marrom, etc.), saturação e intensidade. No entanto, não use componentes diferentes para representar diferentes atributos, pois isso dificultará a percepção por parte do usuário.

O matiz pode ser usado para representar tipos ou atributos com um conjunto limitado de possíveis valores. Entretanto, é melhor usar um ícone nesse caso, pois o ícone pode ser projetado para que o usuário compreenda qual valor ele representa, embora não haja nenhum mapeamento intuitivo como esse entre conteúdo de cores e (a maioria dos tipos de) valores. Sendo assim, caso nenhum ícone intuitivo seja encontrado, o matiz pode ser usado no lugar dos ícones. Se você tiver muitos ícones de tipo, outra alternativa é usar o matiz para categorizar esses ícones (de forma que alguns ícones com significado semelhante apareçam em vermelho, alguns com outro significado apareçam em azul, etc.).

A saturação pode ser usada para representar um atributo com um intervalo de valores, mas isso resultará em uma interface de usuário não-amigável e inoportuna. O uso de uma saturação diferente confundirá a visão e o uso de uma saturação alta é ainda mais inconveniente.

A intensidade é o componente de cor mais usável. Esse componente pode ser usado para representar um atributo com um intervalo de valores e é tão oportuno que pode ser usado também para atributos de importância secundária. Para que a intensidade seja conveniente, você não deve partir da intensidade zero (branco) para a intensidade completa (preto), mas apenas da intensidade baixa (cinza claro) para a intensidade alta (cinza escuro). Nos sistemas em que os usuários criam a maioria dos objetos, é muito útil apresentar os objetos de acordo com a validade (por exemplo, o período de tempo desde a última mudança). Isso ajuda os usuários a identificarem o objeto com o qual eles querem trabalhar (que geralmente é o objeto que apresenta o "tempo desde a última mudança" mais curto). Portanto, se você não tiver um atributo de intervalo de valores que realmente precise ser apresentado ao usuário, apresente o atributo 'validade'.

Geralmente, a cor é usada para tornar os ícones esteticamente mais atrativos. Isso ajuda o usuário a fazer rapidamente a distinção entre os ícones. Se você fornecer ícones com várias cores, provavelmente não usará a cor para outras finalidades.

Como algumas pessoas não conseguem identificar as cores e nem todas as telas as aceitam, não use a cor como único meio de mostrar informações essenciais. Por outro lado, o uso bem planejado e oportuno das cores torna a interface esteticamente mais atrativa.

Identificação

O usuário deve ser capaz de identificar cada objeto de forma exclusiva. Às vezes, as outras dimensões visuais são suficientes para a identificação, mas nem sempre. Exibir um nome dentro do ícone ou próximo a ele é a técnica mais popular de suporte à identificação. A vantagem dos nomes é que uma área muito pequena da tela pode exibir um grande número de nomes diferentes.

É melhor se um nome puder ser gerado a partir de um valor de atributo (que normalmente é textual). A alternativa é deixar que os usuários especifiquem os nomes ao criarem os objetos. Porém, isso leva tempo e, portanto, reduz a usabilidade.

Às vezes, você pode modelar o ícone para que o nome possa ser inserido dentro dele. Isso economiza área da tela e fornece uma indicação mais forte do relacionamento entre o ícone e o nome. No entanto, isso pode gerar os seguintes problemas:

  • o meio do ícone deve estar vazio (no local onde o nome aparece);
  • o comprimento dos nomes varia, o que significa que a extensão horizontal do ícone dependerá do tamanho do nome ou que alguns nomes terão de aparecer truncados;
  • a largura do ícone deve ser muito maior que a altura, já que todo texto de tamanho razoável é muito mais longo que largo.

Conseqüentemente, é mais comum que o nome seja exibido abaixo ou à direita do ícone. A vantagem é que isso ocupa menos área na tela, mas a desvantagem é que o objeto (ícone + nome) se torna mais largo do que alto. Se você não tiver espaço suficiente para exibir o nome por completo (o que pode acontecer, pois você geralmente identifica um ícone sem nomeá-lo), poderá exibi-lo através de janelas pop-up que só aparecerão quando o cursor estiver acima do ícone.

A fonte do nome pode ser usada para exibir um atributo de escolha limitada, caso você possa localizar um mapeamento entre os valores de fonte e de atributo (por exemplo, você pode usar negrito ou itálico para distinguir o objeto ou enfatizar sua importância). Na maioria dos casos, porém, não é apropriado usar a fonte, pois isso é inoportuno e raramente intuitivo.

Se você mostrar o nome (ou qualquer outro texto que o usuário tenha permissão para alterar), ofereça suporte à edição do nome diretamente na janela primária. A alternativa seria o usuário solicitar uma operação de renomeação e inserir o novo nome, ou abrir a janela de propriedades e editar nela o nome. Editar o nome diretamente na janela primária não só é mais rápido, como também suporta o princípio de "o local onde você o vê é onde você o altera".

Localização e Seleção Avançadas Início da página

Se o grupo de objetos que deve ser alterado/operado for composto de modo que o usuário possa expressar critérios de seleção identificando-os, a ferramenta de pesquisa da janela primária poderá solucionar o problema selecionando sempre todas as correspondências de critério.

Existem duas maneiras possíveis de gerenciar a pesquisa:

  • Todos os objetos aos quais os critérios de pesquisa se aplicam são selecionados na janela primária. Se você não puder garantir que todos os objetos localizados serão mostrados simultaneamente na janela primária (porque eles podem estar muito distantes), poderá exibir uma lista de acertos na janela de pesquisa. Após uma pesquisa, o usuário especifica critérios de pesquisa adicionais ou executa uma operação nos objetos selecionados. A vantagem dessa abordagem é que ela permite que o usuário solicite uma determinada operação em todos os objetos, de acordo com os critérios de pesquisa.
  • Você fornece um botão "Pesquisar" na janela de pesquisa que seleciona o próximo objeto de acordo com os critérios de pesquisa e rola o conteúdo da janela primária para que esse objeto fique visível. Após uma pesquisa, o usuário pode executar uma operação no objeto selecionado e, em seguida, continuar a pesquisa seqüencialmente pelos objetos de acordo com os critérios de pesquisa. A vantagem dessa abordagem é que o usuário pode ver cada objeto localizado que esteja próximo a ele (na janela primária, e não em uma lista de acertos separada).

Em muitos casos, você precisará combinar os dois casos, por exemplo, incluindo um botão "Selecionar Tudo" na janela de pesquisa seqüencial ou um botão "Exibir Próximo" na janela de pesquisa paralela.

Classificação Início da página

Um exemplo de classificação pode ser o modo como o sistema organiza todos os objetos: verticalmente, em ordem alfabética por nome ou de acordo com o valor de um atributo. Em seguida, o usuário procura os objetos através da rolagem. Esse é o suporte mais simples à navegação, no que diz respeito à implementação e à operação do usuário. A classificação funciona melhor quando o usuário sabe o nome do objeto (ou o atributo que classificamos de acordo com esse objeto). Um exemplo de um sistema que deve ser implementado dessa maneira é um catálogo telefônico. Em geral, a janela primária deve ter uma operação para alterar a ordem de classificação e/ou os critérios.

Herança Controlada por Usuário Início da página

Um exemplo de herança controlada por usuário são os editores WYSIWYG, nos quais você define a qual "estilo" pertence cada parágrafo e como esse estilo (ou seja, cada caractere pertencente a esse estilo) deve ser apresentado.

Uma desvantagem, se compararmos a uma ferramenta de pesquisa, é que a herança controlada por usuário suporta apenas a mudança de atributos (e, provavelmente, associações) para objetos múltiplos, mas não a execução de operações. Além disso, a herança controlada por usuário gera uma sobrecarga, pois o usuário deve definir e manter explicitamente os grupos (ou seja, os estilos disponíveis). Ela é também um conceito mais complicado.

No entanto, se os critérios de pesquisa não puderem ser especificados para os objetos ou se o usuário precisar fazer mudanças relativas nos valores de atributo (como duplicar esse valor, por exemplo), a herança controlada por usuário pode ser uma solução.

Para que a herança controlada por usuário seja útil, a natureza da classe deve permitir que os objetos sejam categorizados em grupos (com o mesmo significado lógico para o usuário) nos quais a maioria dos valores de atributo seja idêntica.

Uma vantagem, se compararmos com uma ferramenta de pesquisa, é que a herança controlada por usuário suporta a substituição (por exemplo, alterar o valor de atributo, mas somente se ele não tiver sido explicitamente definido no objeto). Além disso, a herança controlada por usuário pode permitir que o usuário faça definições de valor de atributo mais genéricas e, portanto, sofisticadas (por exemplo, herdar a fonte desse estilo, mas aumentá-la em dois pixels). A herança controlada por usuário é particularmente útil quando os grupos não possuem critérios de pesquisa de fácil especificação.

A classe para a qual você suportará a herança controlada por usuário pode herdar a si própria, ou você pode criar uma nova classe cuja finalidade seja ser herdada. Fazer com que a classe herde a si própria é um pouco mais eficaz, pois o mesmo objeto pode ser usado tanto para herdar como para fazer o que foi originalmente planejado para o objeto, como ser uma fatura, ser uma conta, etc. Isso resultará em uma menor quantidade de classes para o usuário (e o sistema) gerenciar. Por outro lado, a criação de uma nova classe da qual herdar tem a vantagem de ser mais fácil de compreender, pois a herança é claramente separada da operação normal da classe. A criação de uma nova classe é a melhor solução na maioria dos casos, especialmente se os usuários não tiverem muita experiência com computadores e modelos orientados a objetos. A nova classe criada deve herdar preferencialmente a si própria, a fim de suportar os vários níveis de herança.

Na maioria dos sistemas, como o usuário não sabe com antecedência exatamente como os grupos de herança devem ser estruturados, é comum que ele tenha de alterar o grupo de herança de determinados objetos. Crie uma operação para isso.

Se você decidir suportar a herança controlada por usuário no sistema, analise quais elementos (atributos, associações, classe) precisam ser herdados e suporte a herança somente para esses elementos. Isso resultará em uma forma mais fácil, embora menos genérica de gerenciar a funcionalidade, tanto para usuários como para desenvolvedores. Modele os elementos que devem ser herdados em sua nova classe. Muitos atributos serão modelados tanto na classe herdante como na classe herdada. Lembre-se de que a herança controlada por usuário tem como objetivo economizar o tempo do usuário, e não o seu. Se a classe herdar a si própria, isso quer dizer que tudo será herdável.

Decida se o usuário realmente precisa criar novos objetos da classe herdada ou se o sistema pode fornecer um número suficiente de objetos. Proibir o usuário de criar novos objetos diminuirá significativamente a flexibilidade da herança, mas, por outro lado, facilitará sua operação.

Além disso, decida se as mudanças em atributos numéricos nos objetos herdantes devem ser interpretadas como referentes ao valor herdado ou como fixas. Por exemplo, digamos que o objeto herde o tamanho de fonte 12 e que o usuário a altere para 14. Por interpretação relativa, o sistema memorizará o tamanho de fonte do objeto como valor herdado +2, ou seja, se o tamanho de fonte do objeto herdado for alterado, o tamanho de fonte do objeto herdante também será alterado. Se você suportar interpretação relativa, isso deve ser anotado no atributo do objeto herdado (pois esse é o local que você consultará quando quiser examinar a herança). É importante que a interpretação relativa seja apresentada ao usuário (por exemplo, "tamanho de fonte: 12+2=14,", em vez de simplesmente "tamanho de fonte: 14Você pode explorar os cenários para localizar situações em favor da interpretação relativa ou fixa. Talvez você precise suportar as duas.

Como a herança controlada por usuário destina-se apenas a usuários intermediários e avançados, você deve projetá-la de modo que não interfira no uso normal (por exemplo, quando o usuário não utilizar a herança). Caso contrário, os usuários inexperientes ficarão intimidados.

Lembre-se de que a herança controlada por usuário que você constrói tem como objetivo facilitar a vida do usuário. Ela não tem de ser genérica ou absoluta, mas sim usável.

Hierarquias de Navegação Início da página

Uma hierarquia de navegação permite que o usuário (ou, possivelmente, o sistema) categorize os objetos em janelas primárias ou composições, que são organizadas hierarquicamente. As hierarquias de navegação asseguram que o usuário só tenha de pesquisar uma ou algumas categorias. Isso reduz o número de objetos a serem exibidos em um determinado momento. Uma desvantagem é que o usuário (geralmente) tem de gerenciar a categorização. Como exemplo dessa técnica, podemos citar os navegadores de arquivos; o motivo para a existência de diretórios ou pastas é ajudar o usuário a localizar arquivos.

Gerenciamento de Janelas Início da página

O tamanho e a posição da janela geralmente são totalmente controlados pelo usuário. Entretanto, você pode reduzir a sobrecarga do uso de janelas ao permitir que o sistema influencie no tamanho e na posição das janelas.

Quanto maior for uma janela primária, mais os objetos poderão ser mostrados; em compensação, maior quantidade da área da tela será ocupada. Normalmente, uma janela primária deve mostrar o maior número de objetos possível, mas sem utilizar a área da tela desnecessariamente.

  • Aumente cada janela primária o suficiente para que todos os objetos possam ser mostrados, mas não permita que seu tamanho ultrapasse o da tela. Aumente cada janela primária o suficiente para exibir os objetos por inteiro, mas evite áreas que não mostrem nada de útil, como as margens em uma editoração eletrônica. Mesmo que você tenha espaço para exibir essas áreas vazias, elas podem ocultar outros aplicativos.
  • Lembre-se de que um usuário redimensiona entre sessões. Se o número de objetos aumentar, aumente o tamanho da janela para que todos os objetos fiquem visíveis, a menos que sua altura já ocupe toda a tela ou o usuário tenha escolhido um tamanho menor que o padrão. Se o número de objetos diminuir, diminua também o tamanho, a menos que o usuário tenha escolhido um tamanho maior que o padrão. Essa regra garante que você seguirá o conceito das operações de redimensionamento do usuário.

Uma possível limitação em relação ao tamanho de uma janela primária surgirá se você precisar utilizar o aplicativo em paralelo com outros. Nesse caso, maximize o tamanho padrão da janela para metade da tela (em oposição à tela cheia).

Defina a posição padrão de uma janela primária de modo que ela oculte os outros aplicativos o mínimo possível. Se você tiver de ocultar algumas janelas, escolha as que não são utilizadas há mais tempo e tente deixar pelo menos uma pequena parte da janela visível para que o usuário possa ativá-la com facilidade.

Uma desvantagem na aplicação das regras acima é que isso irá tirar parte do controle do usuário (o sistema redimensionará uma janela sem ser solicitado a fazê-lo e não memorizará o reposicionamento do usuário entre as sessões). Portanto, se você aplicar essas regras, deve permitir que o usuário as desative (através de um controle).

O tamanho e a posição das janelas secundárias devem ser definidos de forma a não ocultar sua janela primária, nem outras janelas secundárias. Se for inevitável que elas ocultem a janela primária correspondente, assegure-se de que os objetos selecionados ficarão visíveis. Ocultar elementos essenciais, como os objetos selecionados, é uma falha comum de usabilidade em janelas secundárias.

No caso das janelas primárias que não sejam as principais, aplique a regra de dimensionamento do último parágrafo.

As caixas de diálogo, no entanto, devem ser dispostas de forma a ocultar a janela ativa. Como elas costumam ser temporárias e pequenas, o usuário normalmente não precisa ver a janela ativa enquanto a caixa de diálogo está aberta. Colocar as caixas de diálogo sobre a janela ativa garante que o usuário as reconhece e diminui a necessidade de movimentação do mouse, visto que normalmente o cursor já está sobre a janela ativa.

No caso das janelas de propriedades, o número de atributos determina o tamanho. Se o tamanho for grande demais (aproximadamente 1/4 da tela), use mais tabulações.

Informações sobre Sessão Início da página

Todas as configurações de aplicativo devem ser salvas entre as sessões (o usuário não precisa especificá-las). O tamanho e a posição das janelas, a visão que está selecionada e a posição das barras de rolagem também são configurações que devem ser salvas. Quando os usuários reiniciam um aplicativo, ele deve apresentar a aparência exata que tinha quando foi fechado pela última vez. O motivo disso é que, geralmente, ao iniciarem uma sessão, a primeira ação dos usuários é retornar ao ponto em que estavam quando encerraram a sessão pela última vez.

Ajuda On-line Início da página

A ajuda on-line é uma parte importante do sistema. Um sistema de ajuda bem projetado deve ser capaz, até mesmo, de substituir os manuais do usuário na maioria dos sistemas. A maioria dos projetos despende esforços consideráveis na elaboração e produção de manuais, quando é de conhecimento de todos que a maioria dos usuários nunca os utiliza. Em vez disso, é recomendável que esses esforços sejam direcionados para produzir um bom sistema de ajuda.

Existe uma série de possíveis ferramentas de ajuda que você deve levar em consideração:

  • Ajuda por assunto: é a mais importante ferramenta de ajuda. Ela permite que o usuário digite um assunto ou procure um assunto existente e fornece ajuda sobre eles. A solução é criar um índice de ajuda grande, com uma boa quantidade de sinônimos. Lembre-se: o usuário pode não saber o termo correto quando estiver precisando de ajuda.
  • Ajuda por objeto: é uma ajuda contextual. Ela exibe um texto que explica uma parte (objeto) específica da interface do usuário. O usuário solicita a ajuda contextual e, em seguida, seleciona a parte da interface do usuário sobre a qual precisa de ajuda. Este tipo de ajuda deve ser suportado em todas as partes da interface do usuário, caso isso seja utilizável. Outra alternativa é fornecer ajuda implícita em janelas pop-up, uma forma condensada de ajuda contextual que o sistema apresenta adjacente ao cursor quando o usuário se detém sobre ele por alguns segundos. A vantagem da ajuda implícita em janelas pop-up é que ela não interfere na operação normal da interface do usuário.
  • Área de mensagem: é uma área (geralmente na janela principal) em que o sistema imprime "comentários" não solicitados sobre as ações do usuário. Ela deve ser opcional, se fornecida.
  • Assistentes: é uma técnica popular que você deve pensar em fornecer quando o usuário solicitar ajuda sobre como fazer algo. Um assistente conduz o usuário por uma tarefa (não-trivial) usando uma técnica "controlada manualmente". Ele mostra texto descritivo juntamente com operações (botões) que permitem ao usuário realizar as partes da tarefa explicadas no texto. Outra alternativa utilizada pelo assistente é fazer perguntas e, com base nas respostas do usuário, realizar automaticamente a tarefa. Os assistentes são excelentes para tarefas não-triviais e pouco utilizadas.

A necessidade de ajuda contextual e de assistentes provavelmente é identificada durante o teste de uso. Se, durante esse teste, os usuários não compreenderem as diferentes partes da interface do usuário, é sinal de que há necessidade de ajuda contextual. Se eles tiverem dificuldades para executar uma determinada tarefa, é sinal de que há necessidade de assistentes.

O problema de muitos sistemas de ajuda é que eles são escritos para usuários inexperientes (gastando um tempo enorme para explicar o óbvio) ou para especialistas (manuais de referência que partem do pressuposto que o usuário sabe quase o mesmo que o programador que desenvolveu o aplicativo). Na maioria dos sistemas, a maior parte dos usuários está em um nível intermediário. Escreva o texto da ajuda para eles.

Recurso Desfazer Início da página

Este recurso é muito útil, embora geralmente seja difícil implementá-lo. Ele permite que os usuários aprendam mais rápido, pois não ficam com receio de destruir o trabalho. Este recurso também reduz o risco de perda de informações. Outra solução para evitar a perda de informações é exigir que o usuário confirme todas as operações que podem resultar em perda. Essa solução, porém, não costuma ser muito satisfatória, pois gera uma sobrecarga de interação considerável e os usuários logo se acostumam a realizar a confirmação mecanicamente, tornando-a inadequada.

Uma opção ambiciosa é fornecer o recurso de desfazer em vários níveis de desfazer/refazer. No entanto, o primeiro nível de desfazer é o recurso de maior usabilidade.

Agente de Macro Início da página

Se você fornecer macros, pode ser bastante útil utilizar um agente que monitore continuamente as ações do usuário em busca de seqüências repetitivas de interação. Assim que uma seqüência repetitiva de interação é encontrada, o agente cria uma macro para ela (depois de solicitar a permissão do usuário). Digamos que o usuário tenha utilizado o recurso"Sublinhado" em dois parágrafos de texto e, nessas duas vezes, ele também tenha alterado a cor do texto para azul imediatamente depois de solicitar o "Sublinhado". Nesse caso, o agente perguntaria se o usuário gostaria de utilizar uma macro que executasse as duas funções, "Sublinhado" e "Definir a cor como azul", no parágrafo de texto selecionado. Em caso afirmativo, o agente criaria essa macro e um botão (ou item de menu) que executasse a macro.

Se o usuário selecionar um objeto durante o registro, esse procedimento normalmente deve ser interpretado como uma especificação "delta", ou seja, qual objeto foi selecionado em relação à seleção anterior (como "selecionar próximo", "selecionar primeiro filho", etc.).

Se você deve ou não interpretar a mudança dos atributos de um objeto como uma especificação delta (por exemplo, interpretando a mudança de um valor de atributo de 12 para 14 como um aumento de 2, em vez de uma definição como 14) não é uma decisão assim tão óbvia. Interpretá-la como uma especificação delta geralmente é mais eficaz, pois a mudança de um atributo para um valor fixo em vários objetos pode ser realizada através da seleção de vários objetos e da abertura de uma janela de atributo para eles, na qual você poderá definir o atributo (como 14) de uma vez por todas.

Destaque Dinâmico Início da página

As associações entre as classes são quase sempre bidirecionais, o que significa que, na interface real do usuário, a associação é mostrada nos dois objetos. Se um usuário, com foco no objeto A, puder ver que A está associado ao objeto B, o inverso também será interessante para o usuário (ou seja, ao se concentrar no objeto B, o usuário poderá ver que B está associado a A). A associação normalmente é mostrada nas janelas de propriedades dos objetos, identificando o objeto associado pelo nome.

Em geral, é complicado visualizar as associações entre objetos em uma janela primária. Visualizar as associações como setas ou linhas costuma levar a um "ninho de serpentes". Uma maneira agradável de visualizar as associações é destacar todos os objetos associados quando o cursor estiver sobre um objeto da associação. Um exemplo disso pode ser observado quando as notas de rodapé são associadas aos caracteres em um editor de texto e, conseqüentemente, destacadas quando o cursor está sobre o caractere associado.

Copyright  © 1987 - 2001 Rational Software Corporation


Exibir o Rational Unified Process usando quadros

Rational Unified Process