Livro: Fundamental de UML

Use Cases, pag: 13-29

Quando falamos sobre casos de uso, estamos essencialmente descrevendo como as pessoas interagem com um sistema. Imagine esses casos de uso como esboços detalhados, quase como pequenas histórias, que explicam como alguém utiliza um software para realizar tarefas específicas. Na modelagem de sistemas, utilizamos a UML (Linguagem de Modelagem Unificada) para representar essas interações em um diagrama de caso de uso.

Cada “caso” representa uma funcionalidade ou tarefa específica. Eles são como roteiros que incluem uma introdução rápida, as condições iniciais, os passos básicos e até algumas alternativas caso algo não siga o planejado. Isso ajuda a capturar de maneira clara o que o sistema precisa realizar.

Além disso, existem os cenários, que são basicamente variações dessas histórias. Os atores, que podem ser usuários reais, outros sistemas ou até o próprio sistema, desempenham papéis nessa história interativa. As relações representam as conexões entre esses atores e os casos de uso, enquanto as comunicações são as mensagens trocadas entre eles para realizar ações ou compartilhar informações.

Resumindo, casos de uso são como contar histórias sobre a interação das pessoas com o sistema, facilitando a comunicação entre a equipe de desenvolvimento, os clientes e outros interessados no projeto. É como criar uma narrativa interativa para garantir que todos compreendam o que o sistema deve fazer e como ele deve funcionar.

Interface de Aplicação Informática

pagina 21 até 40

Resumo

Resumo do Texto: Capítulo 2 – Utilizando Texto na Multimídia

O capítulo aborda a importância do texto em projetos multimídia, destacando que, mesmo em projetos visualmente ricos, o texto desempenha um papel fundamental na comunicação eficaz. Ao comparar o uso de figuras e símbolos, o autor destaca que palavras e símbolos, seja na forma falada ou escrita, têm a capacidade de transmitir significados compreensíveis de maneira ampla.

O texto é crucial em diferentes aspectos, desde títulos e cabeçalhos até menus e orientações de movimentação no projeto. A eficiência do texto é enfatizada ao facilitar a compreensão do público e direcioná-lo de maneira clara e imediata. O autor destaca a importância de minimizar a necessidade de suporte (como o botão “Ajuda”) para garantir uma experiência de usuário fluida.

Além disso, o texto explora a distinção entre fontes serif e sans serif. O método de categorização dessas fontes é descrito como universalmente compreendido, baseando-se em propriedades mecânicas e históricas. O autor explica que serifas são os pequenos arremates ou decorações no final de letras retocadas, e apresenta exemplos de fontes serif (como Times e Palatino) e sans serif (como Helvetica e Arial).

Em resumo, o texto destaca a importância do texto na multimídia, desde sua utilidade prática na orientação do público até a distinção entre fontes serif e sans serif como parte integrante do design de projetos.

Resumo do Texto: Designando Seu Texto

O texto aborda a importância de designar texto de maneira eficaz, levando em consideração o contexto do projeto. Em projetos interativos com o usuário, é destacada a necessidade de equilibrar a quantidade de informações na tela, evitando sobrecarregá-la. A orientação é oferecer informações suficientes para guiar o usuário em sua interação, sem tornar a tela confusa.

No caso de projetos de suporte ao público, a ênfase recai na apresentação ao vivo, sugerindo o uso de fontes grandes, poucas palavras e amplo espaço em branco para facilitar a compreensão das mensagens principais. A abordagem visa direcionar a atenção do público para o apresentador em vez de sobrecarregá-lo com texto na tela.

A limitação do espaço de trabalho em telas de computador é reconhecida, levando à necessidade de condensar mensagens de texto de maneira impactante e concisa. O texto destaca a importância das escolhas de design, como o tamanho da fonte e o número de cabeçalhos, relacionados à complexidade da mensagem e ao julgamento do designer

Em resumo, o texto enfatiza a necessidade de equilíbrio na apresentação de texto em projetos interativos, considerando a usabilidade para o usuário, e destaca estratégias específicas para otimizar a apresentação de informações em projetos de suporte ao público, reconhecendo as limitações do espaço em telas de computador.

Resumo do Texto: Use Menus para Movimentação

O texto destaca a importância do uso de menus em projetos de multimídia interativos, nos quais os usuários navegam por meio de teclas, cliques ou toques em telas sensíveis. Menus simples consistem em listas de texto de tópicos, nos quais o usuário seleciona um item para realizar uma ação. A prática de clicar em palavras na tela como uma ação intuitiva é reconhecida, e a função de clique é compreendida pelos usuários de computador.

O texto ressalta a evolução das interfaces gráficas e a familiaridade dos usuários com a função de clique. Em alguns casos, os itens do menu são simplificados para economizar espaço, mantendo a clareza da intenção para o usuário. A importância do texto é destacada para fornecer pistas sobre a posição e o salto para um menu, especialmente em projetos com múltiplos níveis de menus.

É enfatizada a utilidade de apresentar um texto interativo ou uma lista simbólica de ramificações para orientar os usuários durante a navegação. Evitar mais de dois níveis de retornos é aconselhado para evitar frustrações, e a sugestão é apresentar menus interativos ou pistas simbólicas para permitir que os usuários encontrem orientação em qualquer ponto do processo.o texto destaca a eficácia dos menus na movimentação do usuário em projetos multimídia, enfatizando a importância do texto, da clareza nas opções de movimentação e da orientação durante a navegação.

Resumo do Texto: Multimídia na Prática – Capítulo 2: Use Botões para Interação

O capítulo enfatiza o uso eficaz de botões na interação dentro de projetos de multimídia. A analogia é feita com a campainha de um prédio, onde a associação entre a campainha e seu contexto é essencial para evitar confusões. A autora compartilha uma experiência de infância, destacando como um simples botão próximo à porta era suficiente para chamar a atenção e fazer as coisas acontecerem.

Na multimídia, os botões são apresentados como objetos que desencadeiam ações quando acionados. Eles são projetados para serem ativados pelo cursor, mouse, tecla ou dedo, manifestando propriedades como vídeo reverso ou outros efeitos visuais. O texto ressalta que, embora os botões fornecidos pelo sistema de autoração sejam úteis, eles oferecem poucas oportunidades para ajustar o texto do rótulo. No entanto, ajustes de caracteres, vídeo reverso e inversão são automaticamente aplicados conforme necessário pelo sistema.

A importância do design de botões e da interação humana é mencionada, e é sugerido que, ao usar estilos comuns de botões, formatos e bordas, aumenta-se a probabilidade de os usuários compreenderem como interagir com esses elementos.

Resumo do Texto: Multimídia na Prática – Capítulo 2 (Parte 2)

O capítulo continua abordando a importância do texto na rotulação de botões em projetos de multimídia. O texto destaca a necessidade de garantir que as fontes selecionadas para os botões estejam disponíveis nos ambientes de execução do programa e fornece uma lista de fontes acompanhando o System 7 e o Windows 3.1 como sugestão.

É enfatizado que a fonte dos botões deve ser legível, com o tamanho do texto ajustado para proporcionar um espaço adequado entre a borda do botão e o texto. O texto sugere experimentar combinações de fontes, espaçamento e cores para obter uma boa aparência. A criação de botões personalizados a partir de mapas de bits ou objetos desenhados é considerada uma opção para maior flexibilidade, embora demande mais tempo.

O capítulo passa a tratar da importância do design de botões, destacando que o desenho e o rótulo dos botões devem ser tratados como um projeto de arte industrial, pois fazem parte da experiência do usuário.

Além disso, o texto aborda a leitura de texto na tela do computador, observando que é mais lenta e difícil em comparação com a leitura em papel. Sugere-se a apresentação de apenas alguns parágrafos de texto por página, utilizando fontes legíveis e preferindo campos para leitura em vez de grandes blocos de texto.

Em resumo, o texto continua explorando elementos práticos no design de multimídia, focando na rotulação de botões, escolha de fontes e design para uma experiência de usuário eficaz.

MULTIPLATAFORME A quantidade de texto que caberá em um campo normal- mente será limitada pela memória. Na maioria dos sistemas Macintosh, este limite é de 32 K; sob o Windows normal- mente é de 64 K. Se o seu texto exceder este limite (32 K permitem aproximadamente 4.000 palavras de 8 caracteres), você precisará for- necer outro mecanismo para a paginação do documento. Em alguns sistemas, há uma degradação significativa de performance ao serem passadas quantidades grandes de texto em um campo de rolagem. Portrait Versus Landscape A orientação mais alta do que larga, que é comum em impressões tradicionais, simplesmente não pode ser apresentada em um monitor que é mais largo do que alto e que fornece somente a resolução padrão de 640 x 480 pixéis. (A orientação mais alta do que larga é chamada portrait e nos Estados Unidos possui o tamanho de 8,5 x 11 polegadas. Internacionalmente, o tamanho padrão e A4, cuja medida é de 8,27 x 11,69 polegadas. A orientação mais larga do que alta é chamada landscape.) Reduzir uma página de texto portrait de 11 pole- gadas para 480 pixéis da altura do monitor produziria a imagem ilegível de um rastro de pés de galinha. Se você estiver trabalhando com um bloco de texto mais alto do que a tela do monitor do computador, existem quatro soluções possíveis: 16°C Registo Colocar o texto em um campo de rolagem. Colocar o texto em um campo exclusivo na janela de um projeto onde o usuário pode mover-se para cima ou para baixo por meio de um comando. Isto é mais apropriado quando você precisa apresentar texto com quebras de página idênticas ao documento impresso. Quebrar o texto em dois campos que se ajustem ao tamanho das páginas do monitor e designar botões de controle para movimentar- se por estas páginas. ►Designar o seu projeto de multimídia para um monitor especial que seja mais alto do que largo (portrait). Como estes tipos de monitores são caros, eles são usados para impressões e layouts tipográficos. faça resumoChatGPT

Resumo do Texto: Multiplataforme

O texto aborda considerações práticas relacionadas à quantidade de texto em projetos multimídia e questões de apresentação em diferentes plataformas.

Destaca-se que a capacidade de texto em um campo geralmente é limitada pela memória do sistema, com limites específicos em diferentes plataformas (32 K para sistemas Macintosh e 64 K para sistemas Windows). Se o texto exceder esses limites, é necessário fornecer mecanismos adicionais para a paginação do documento, pois grandes quantidades de texto em um campo de rolagem podem degradar significativamente o desempenho em alguns sistemas.

A discussão sobre as orientações Portrait (mais alta que larga) e Landscape (mais larga que alta) destaca a limitação de apresentar uma orientação Portrait em monitores que têm uma resolução padrão de 640 x 480 pixels. Propõem-se quatro soluções para lidar com blocos de texto mais altos do que a tela do monitor:

  1. Colocar o texto em um campo de rolagem.
  2. Colocar o texto em um campo exclusivo na janela do projeto, permitindo ao usuário mover-se para cima ou para baixo por meio de um comando.
  3. Quebrar o texto em dois campos ajustados ao tamanho das páginas do monitor, com botões de controle para navegação.
  4. Designar o projeto para um monitor especial mais alto do que largo (portrait), embora essa opção seja cara e mais comumente usada para impressões e layouts tipográficos.

Em resumo, o texto aborda as limitações de quantidade de texto em projetos multimídia e a necessidade de considerar as orientações de apresentação em diferentes plataformas, oferecendo soluções práticas para otimizar a experiência do usuário.

Resumo do Texto: Multiplataforme

O texto aborda considerações práticas relacionadas à quantidade de texto em projetos multimídia e questões de apresentação em diferentes plataformas.

Destaca-se que a capacidade de texto em um campo geralmente é limitada pela memória do sistema, com limites específicos em diferentes plataformas (32 K para sistemas Macintosh e 64 K para sistemas Windows). Se o texto exceder esses limites, é necessário fornecer mecanismos adicionais para a paginação do documento, pois grandes quantidades de texto em um campo de rolagem podem degradar significativamente o desempenho em alguns sistemas.

A discussão sobre as orientações Portrait (mais alta que larga) e Landscape (mais larga que alta) destaca a limitação de apresentar uma orientação Portrait em monitores que têm uma resolução padrão de 640 x 480 pixels. Propõem-se quatro soluções para lidar com blocos de texto mais altos do que a tela do monitor:

  1. Colocar o texto em um campo de rolagem.
  2. Colocar o texto em um campo exclusivo na janela do projeto, permitindo ao usuário mover-se para cima ou para baixo por meio de um comando.
  3. Quebrar o texto em dois campos ajustados ao tamanho das páginas do monitor, com botões de controle para navegação.
  4. Designar o projeto para um monitor especial mais alto do que largo (portrait), embora essa opção seja cara e mais comumente usada para impressões e layouts tipográficos.

O texto aborda as limitações de quantidade de texto em projetos multimídia e a necessidade de considerar as orientações de apresentação em diferentes plataformas, oferecendo soluções práticas para otimizar a experiência do usuário.

Resumo do Texto: Multimídia na Prática – Capítulo 2 (Parte 3)

O capítulo aborda estratégias para manter a atenção do visualizador ao apresentar texto na tela em projetos multimídia. Sugere-se animar o texto de tópicos, movimentá-lo ou “montar” um cabeçalho com um caractere de cada vez para garantir interesse e envolvimento. Além disso, destaca a eficácia de utilizar vídeo reverso para destacar pontos importantes, ressaltando a importância de evitar o exagero nos efeitos especiais para não perder a eficácia.

A utilização de símbolos e ícones na multimídia é discutida como uma forma eficiente de transmitir mensagens significativas. Os símbolos, como a lata-de-lixo do Macintosh ou o cursor ampulheta do Windows, são apresentados como elementos gráficos que carregam significados específicos. O texto destaca que, apesar de os símbolos pertencerem ao mundo da arte gráfica, na multimídia, é essencial tratá-los como texto, pois também carregam significados importantes.

Os ícones são mencionados como representações simbólicas comuns em interfaces gráficas de muitos sistemas operacionais de computador. Embora o texto seja mais eficiente para transmitir mensagens precisas, figuras, ícones, imagens em movimento e sons são mais facilmente lembrados pelos usuários. A multimídia permite a combinação de texto e ícones, juntamente com cores, som, imagens e vídeo, para aumentar o impacto e o valor da mensagem.

Por fim, destaca-se que, embora as palavras sejam compartilhadas por milhões, os símbolos específicos para um projeto de multimídia precisam ser aprendidos, semelhante à aprendizagem de uma língua estrangeira.

O texto explora estratégias visuais para manter o interesse do público em projetos multimídia, enfatizando a importância de símbolos e ícones, além de oferecer insights sobre a combinação eficaz de elementos visuais e textuais.

Resumo: Símbolos na Multimídia Interativa

O texto apresenta diversos símbolos, desde o universal “PARE” até os doze signos do zodíaco, enfatizando que, embora alguns sejam amplamente conhecidos, outros podem ser menos familiares.

O HyperCard, lançado em 1987, promoveu uma fase de experimentação criativa na criação de símbolos de movimento por artistas gráficos. No entanto, a falta de compreensão por parte dos usuários levou à conclusão de que é mais seguro combinar símbolos com dicas de texto para garantir um entendimento adequado.

Apesar de alguns esforços no passado, poucos símbolos emergiram como um léxico aceitável de pistas de movimento na multimídia interativa que dispensa o texto.

Em resumo, os símbolos na multimídia interativa podem ser eficazes quando combinados com dicas de texto para garantir uma compreensão clara por parte dos usuários.

Resumo: Hipertexto

O hipertexto é um conceito em que o texto, ao invés de residir em páginas impressas, é armazenado em um computador, permitindo a aplicação das poderosas capacidades de processamento da máquina. Nesse contexto, palavras, seções e ideias são interligadas, proporcionando ao usuário a capacidade de navegar pelo texto de maneira não linear, rápida e intuitiva.

Os sistemas de hipertexto possibilitam a busca eletrônica em todo o texto de um livro, a localização de referências para palavras específicas e a visualização imediata das páginas onde essas palavras foram encontradas. Além disso, é possível criar pesquisas complexas usando operadores booleanos como AND, OR, NOT e BOTH para encontrar ocorrências de várias palavras relacionadas em um determinado parágrafo ou página. Documentos inteiros também podem ser vinculados a outros documentos, ampliando ainda mais a acessibilidade e a interconexão de informações.

O hipertexto possibilita uma experiência de leitura digital dinâmica, permitindo aos usuários explorar, pesquisar e interagir com o conteúdo de maneira flexível e eficiente.

Resumo: Utilizando Hipertexto

O texto explora a defesa ativa de pesquisas e inovações para a implementação de sistemas de hipertexto por figuras como Vannevar Bush e Ted Nelson. Nelson argumenta que a estrutura do pensamento não é linear e que os sistemas de hipertexto baseados na mente humana podem revolucionar a relação com a literatura e a expressão de ideias.

A teoria de pensamento associativo propõe que as pessoas estão mais acostumadas com o pensamento linear, sendo facilmente dominadas pela liberdade oferecida pelo caos dos gigabytes não lineares. O texto destaca a importância de fornecer marcadores de localização, menus de texto e símbolos aos usuários de sistemas não lineares como um lembrete prático.

O autor questiona se a visão de Vannevar Bush sobre o funcionamento da mente está correta, opinando que os processos mentais e a memória humana são simples. O texto finaliza mencionando que programas especiais para o gerenciamento de informações e hipertexto foram desenvolvidos para apresentar texto, imagens eletrônicas e outros elementos na forma de bancos de dados. Bancos de dados de hipertexto utilizam índices próprios para otimizar a velocidade de acesso, sendo essenciais para o desempenho eficiente desses sistemas.

Resumo: Hipertexto em Sistemas Multimídia

O texto explora o uso histórico de sistemas de hipertexto comerciais, projetados para lidar com grandes volumes de informações. Esses sistemas exigem licenças caras e capacidade de armazenamento significativa, muitas vezes utilizando CD-ROMs e discos rígidos dedicados. Ferramentas de índice de hipertexto, disponíveis para Macintosh e Windows, são detalhadas no Capítulo 16.

O autor sugere uma abordagem mais simples para projetos multimídia, conectando vínculos entre palavras importantes. Isso envolve colocar essas palavras em vídeo reverso no texto, permitindo que um clique do mouse leve o usuário a tópicos específicos do menu. Apesar de limitar a movimentação do usuário, essa técnica pode passar despercebida, permitindo ao criador manter o controle sobre os caminhos de navegação.

O texto destaca a interação do usuário como uma parte crucial do projeto multimídia quando incorpora hipertexto. Quando a interação e a referência cruzada são combinadas em um sistema de movimentação não linear, a multimídia evolui para hipermídia.

Resumo: Acústica do Som na Multimídia

O texto aborda a acústica do som na multimídia, explicando que o som é criado por vibrações no ar, semelhantes às ondas geradas por uma pedra jogada em uma lagoa. Quando essas ondas atingem os ouvidos, são percebidas como som. O som se propaga a aproximadamente 1.207 km por hora no nível do mar. As ondas sonoras variam em intensidade (volume, medido em decibéis) e frequência (pitch, medido em Hertz).

O som é considerado o elemento mais sensível da multimídia, capaz de transmitir significados e emoções, desde sussurros até gritos. A utilização adequada do som pode ser a diferença entre uma apresentação multimídia mediana e uma espetacular. O texto destaca a importância do controle do volume, uma vez que níveis elevados podem danificar a audição.

A acústica, definida como a ciência do som, é mencionada, e a intensidade do som é medida em decibéis. O texto destaca a necessidade de equilíbrio e controle ao incorporar elementos sonoros em projetos multimídia.

Resumo: Sons em Sistemas de Multimídia

O texto aborda o uso de sons em sistemas de multimídia, destacando a disponibilidade imediata de beeps e avisos do sistema no Macintosh e no Windows assim que o sistema operacional é instalado. No Macintosh, há várias opções de sons para indicar erros ou avisos, como Droplet, Indigo Quack, Simple Beep, Sosumi e Wild Eep. No Windows 3.1, os sons do sistema incluem Chimes, Chord, Ding, e Tada, podendo ser designados para eventos específicos do sistema.

Resumo: Som Digitalizado

Destaca o processo de digitalização de som, que envolve a captura e armazenamento de amostras de som em forma digital. Isso pode ser feito a partir de diversas fontes, como microfones, gravações de fitas, programas de rádio, CDs e outras fontes pré-gravadas. A taxa de amostragem e o tamanho da amostra são cruciais para a qualidade do som digitalizado. As frequências de amostragem comuns são 44,1 kHz, 22,05 kHz e 11,025 kHz, enquanto os tamanhos de amostragem podem ser de 8 ou 16 bits. Quanto maior a taxa e o tamanho da amostra, melhor a resolução e a fidelidade do som capturado. O texto também aborda a quantização, processo de arredondamento para o número inteiro mais próximo, e destaca a importância desses parâmetros na reprodução precisa e fiel do som digitalizado.

Resumo – Páginas: 11 a 20 (após a introdução)


1.1)O que é um algoritmo?
Para quem não viu um conceito sobre algoritmo pode ficar um
pouco assustado porque é uma palavra relacionada um pouco
mais com coisas computacionais, mas não se limita só ali. Para
fazer um bolo ou outras coisas são necessários alguns passos que
temos a seguir para realizar a tarefa, e daí surge o algoritmo que é
uma sequência de passos ordenados e finitos.
1.2) Linguagens de programação
Existe várias linguagens de programação como Java, C#, PHP,
Python entre outras que podemos implementar os algoritmos,
mas apenas falaremos de Java por alguns motivos sendo um os
recursos técnicos disponíveis fornecendo assim o que é preciso
para criação de programas com boa qualidade.
O Java é a linguagem mais requerida pelo mercado de trabalho.
Isso significa que um bom programador Java tem 12 mais chances
de se colocar no mercado do que um outro bom programador em
qualquer uma das outras linguagens.
1.3) Instalando o Java
Para tornar possível a execução do seu algoritmo feito em Java é
necessário preparar um ambiente e para isso tens de fazer a
instalação do Java Developtment Kit conhecido como o JDK que é
mais um software que contem consigo várias ferramentas que nos
ajudam a criar nossos programas na linguagem Java.
Para a instalação do JDK você vai precisar visitar o site da Oracle –
empresa que mantém o Java – e fazer o download:
http://www.oracle.com/technetwork/java/javase/downloads/
1.4) O famoso “Olá mundo!”
Como o costume de muita outra linguagem o primeiro programa
é a impressão do texto “Olá Mundo”, então com Java já instalado,
cria uma no computador onde ficará guardado os programas, com
a extensão “.java” que é a do Java.
Após nomear o arquivo deves ter muito cuidado, pois iremos usar
esse nome dentro do nosso programa. Agora, veja o conteúdo
inicial do arquivo OlaMundo.java:
public class OlaMundo {
public static void main(String[] args) {
}
}
O “public static void main”, é o ponto de entrada em nosso
programa, ou seja, tudo que estiver dentro do bloco delimitado
pelas chaves será executado ao rodar o nosso pequeno programa.
Feito isso, vamos incluir agora a linha responsável pela impressão
do texto “Olá Mundo!”. Impressão essa que será feita na tela
(terminal). Veja como vai ficar:
public class OlaMundo {
public static void main (String [] args) {
System.out.println(“Olá Mundo!”);
}
}
A única instrução que temos em nosso programa “Olá Mundo” é a
impressão do próprio texto “Olá Mundo!”. Impressão essa que é
feita com o auxílio do comando System.out.println. O final da
instrução, deves colocar um sinal “;” (ponto e vírgula), pois, toda
instrução Java precisa encerrar com esse sinal.

Resumo Capítulo 1 – Projetando sistemas que melhorem o desempenho humano

No primeiro capítulo discutiu-se como sistemas devidamente projetados podem melhorar a performance humana.

1. Interação humano computador: uma ciência multidisciplinar.

Para desenvolver sistemas com tais características é necessário entender não somente como o computador funciona, mas também como o ser humano “funciona”. Assim, cientistas da computação juntaram-se a psicólogos dando início as atividades de pesquisa na área de interação humano computador.

2. Maximizando o desempenho humano

Uma interface interativa de alta qualidade resulta de um planeamento cuidadoso, sensibilidade às necessidades dos utilizadores e testes rigorosos. Uma interface bem projetada permite que o utilizador se concentre nas suas tarefas, entretenimento ou pesquisa. O padrão militar dos EUA para o Design de Engenharia Humana estabelece metas, incluindo alcançar a performance necessária, minimizar a qualificação e o tempo de treinamento do utilizador, assegurar a confiabilidade homem-máquina adequada à tarefa e facilitar a padronização entre sistemas.

3. Engenharia de Sistemas

3.1. Funcionalidade adequada

É importante saber que este ponto é um “top down”, ou seja, o projetista primeiro identifica as tarefas do jeito que os utilizador definem, em seguida deve “quebra-la” em partes menores para entender os pormenores da atividade para em seguida, aplicar seus conheci- mentos de tecnologia para implementa-la da maneira que pareça mais natural para aquele que vai utiliza-la no dia a dia.

Dentre essas tarefas, as mais complicadas de se modelar são aquelas em que os utilizadores tem realizar em situação de emergência na qual ele estará estressado, com pouco tempo para realiza-la e não poderá errar.
Outra coisa muito importante é projetar ações que possam ser reversíveis, ou seja, se o utilizador errou não tem problema, basta que ele comande a ação de reversão e o sistema volta a posição anterior.

3.2 Confiabilidade, disponibilidade e segurança

O utilizador precisa confiar no sistema.

O sistema precisa sempre estar disponível.

O conceito de segurança está ligado ao de disponibilidade. Um sistema
com pouca segurança tem muito mais probabilidade de se tornar indisponível.

Os três conceitos aparecem listados juntos nesse tópico pois suas ocorrências em um determinado nível podem tornar o sistema inviável, não interessando quão bom seja o projeto de sua interface

3.3 Padronização, consistência, integração, portabilidade

Pequenas diferenças entre aplicações irritam o utilizador, aumentam o tempo de aprendizado e a incidência de erros. Assim a padronização refere-se a características comuns entre as interfaces tanto entre programas de uma
mesma aplicação como entre diferentes aplicações.

Consistência refere-se a sequências de ações comuns, termos, unidades,
leiautes, cores, tipografias utilizadas em uma aplicação. A consistência é por si só um forte fator determinante de sucesso ou fracasso de um projeto.

O conceito de integração está ligado à transferência automática de dados entre sistemas distintos. Por exemplo, o sistema de compras pode estar
integrado ao de pagamento.

Já a Portabilidade diz respeito ao potencial de se converter dados e
compartilhar interfaces entre vários sistemas e equipamentos de diferentes
tipos. Hoje em dia essa característica está bem valorizada devido às tecnologias de computação nas nuvens a informação está disponível aos usuários
onde quer que eles estejam (desde tenham acesso à internet) e em vários
dispositivos diferentes (desktops, tablets, smartphones, etc).

3.4 Cronogramas e orçamentos

Cronogramas atrasados e orçamentos estourados têm uma alta probabilidade
de impactar negativamente os projetos de sistemas interativos.

4. Critério para se medir a qualidade interfaces humano-computador

É preciso ter critérios e métricas para que tenhamos algum indicativo sobre a qualidade do projeto de interface de sistemas interativos que estamos propondo ou avaliando. Shneiderman (Shneiderman; Plaisant, 2005) propôs cinco fatores,
que veremos a seguir.

4.1 Tempo para aprender

Os sistemas tem de ter medida simples e diretas, sistemas fácies de se aprender demandam menos treinamento e treinamento custa tempo e dinheiro.

O tempo para aprender também pode ser, por si só, fator determinante para um produto ou mesmo para a empresa que o concebeu. Um exemplo atual é a Google. Quanto tempo se leva para aprender a fazer uma pesquisa na internet usando o buscador deles? Basta alguém ver outra pessoa a faze-lo, não mais que poucos minutos. O que poucos sabem é que nem sempre foi assim. Os primeiros programas de pesquisa na internet (Figura 1) eram cheios de opções e isso complicava a vida de novos utilizadores.

Figura 1 – Programa de pesquisa na internet

4.2 Performance

É medida em tempo gasto pelo utilizador típico em realizar uma atividade bem
representativa do domínio da aplicação.

4.3 Taxas de erro

Erros podem causar grandes prejuízos. Perdas que podem envolver vidas, recursos financeiros, imagem, oportunidade, mercado. Outros erros podem ser facilmente corrigidos e sua ocorrência se deve ao fato de que o usuário busca
naturalmente a realização de tarefas de forma acelerada.

Existem várias técnicas para melhorar a relação performance/erro que aprendi e iremos ver no decorrer do resumo deste livro.

4.4 Tempo de retenção

Essa métrica diz respeito ao tempo que utilizador mantém o conhecimento de
como usar a aplicação. O tempo de retenção está relacionado com o tempo
de aprendizado e à freqüência de uso.

4.5 Satisfação subjetiva

Essa métrica diz respeito à experiência que o utilizador tem ao utilizar uma aplicação para realizar determinado tipo de tarefa.

5. Porque devemos construir sistemas interativos
de qualidade

O interesse crescente na área de IHC advém da tomada de consciência dos
prejuízos que sistemas mal projetados podem acarretar. Schneiderman identificou quatro tipos de sistemas que mais se beneficiam das questões debatidas nesse texto: Sistemas de missão crítica, sistemas industriais e comerciais, aplicações de escritório e domésticas, e sistemas colaborativos.

5.1 Sistemas de Missão Crítica

Exemplos desse tipo são: controle de tráfego aéreo, usinas nucleares (Figura 2), suporte ao voo, operações policiais e militares. Erros cometidos por utilizador desses sistemas podem levar à morte de pessoas. O tempo de treinamento para aplicações desse grupo é normalmente longo e objetiva a performance livre de erros.

Figura 2 – Sala de controlo

5.2 Sistemas Industriais e Comerciais

Nessa categoria temos sistemas bancários, de seguradoras, de controle de
estoque, controle de reservas de hotel, de passagens aéreas e de telemarketing (Figura 3). São características apreciadas nesse tipo de aplicação: baixa Sdemanda por treinamento, velocidade de operação e baixas taxas de erro.

Figura 3 – Sala de telemarketing

5.3. Aplicações de escritório, para uso doméstico e de entretenimento

Nesse grupo destacamos: processadores de texto, máquinas de autoatendimento, video games, pacotes educacionais, correio eletrônico e teleconferência. Esse tipo de aplicação, facilidade de aprendizado e uso, baixas
taxas de erro e satisfação subjetiva são as mais apreciadas.

Figura 4 – Crianças a jogar video game

5.4. Sistemas exploratórios, de apoio à criação e sistemas colaborativos

Nos grupos de sistemas exploratórios temos navegadores de internet, processadores de texto colaborativos, uso de estatística para formação de hipóteses, sistemas de apoio à criação.

6. Acomodando a diversidade humana

A diversidade das habilidades, formação, motivação, personalidade e estilos
de trabalho entre humanos constitui um enorme desafio aos projetistas de
sistemas interativos.

6.1 Habilidades físicas e ambientes de trabalho

Pessoas tem diferentes habilidades perceptivas, cognitivas, e motoras. Assim
um dos grandes desafios da área é o projetar interfaces que acomodem essas
diferenças. A título de ilustração, os parâmetros utilizados para
o projeto de teclados incluem a distância entre as teclas, o tamanho delas, a
pressão que deve ser exercida para ser ativada, etc. . Esses parâmetros satisfazem uma boa parte da população enquanto deixa uma fatia de fora.

6.2 Diferenças de personalidade

Uma das diferenças de estilo mais importantes entre utilizadores advém do seu
gênero.

6.3 Diferenças culturais

A medida em que o processo de globalização avança, mais se faz necessário
entender como construir produtos que possam ser utilizados por pessoas de
outros países e de outras culturas.

6.4 Acessibilidade
As tecnologias da informação e comunicação estão cada vez mais presentes
em atividades profissionais, nos lares, no entretenimento e na interação social.

Por isso mesmo, elas se apresentam como um importante mecanismo
de inclusão social para aqueles com algum tipo de deficiência.

Figura 5 – Notebook com mouse ótico

6.5 Usuários da terceira idade

O grupo de usuários da “maior idade” tem muito a se beneficiar com o uso
das tecnologias da informação e comunicação. Essas tecnologias permitem
que essas pessoas façam coisas sem sair de casa, como pagar as contas do
mês, fazer compras, etc.

7. Linhas de pesquisa em IHC

Como discutido brevemente, a computação oferece ao psicólogos a oportunidade de entender processos cognitivos e estruturas de memória em humanos.

Entretanto, não são somente os psicólogos que exercem e sofrem influência nessa área multi-disciplinar. Foi indentificado também a colaboração de
cientistas da informação, de negócios, educadores, antropólogos e sociólogos. Várias linhas de pesquisa nasceram a partir dessa colaboração. A seguir
discutimos uma série de linhas de pesquisa na área IHC.

7.1 Especificação e implementação da interação

As ferramentas modernas de construção de interface são de extrema utilidade
e aumentam sobremaneira a produtividade.

7.3 Dispositivos de entrada e apresentação de dados

Esses incluem telas de alta resolução sensíveis ao toque, “stylus”, canetas,
voz, gestos, mouse, luvas e joysticks.

7.4 Assistência online

Um dos grandes desafios para a área de IHC é a construção de sistemas
interativos que propiciem o treinamento “just-in-time”, ou seja, que permita aos
usuários o treinamento durante o uso. Em outras palavras, permitir que os
usuários aprendam a utilizar o sistema a medida em que vai se utilizando dele.

7.5 Exploração da informação

om a disponibilização crescente de conteúdo multimedia quer seja na internet, que seja em bases de dados corporativas ou científicas, aumenta a demanda por ferramentas e estratégias que permitam aos usuários filtrar, selecionar, re-estruturar suas informações rapidamente sem medo de desorientação ou de ficarem perdidos.

A “information visualization” ou simplesmente “infovis” é o nome da sub-área de IHC que estuda essas ferramentas e técnicas. Entre as técnicas preferidas estão: Grandes telas, apontamento direto, grafos, caledogramas, dendogramas e mapas de temperatura.

Resumo do livro

Página 27 até 33

SISTEMA OCTAL

O sistema octal é composto por 8 (oito) valores, ou seja, “0, 1, 2, 3, 4, 5, 6, 7”. Pra converter o sistema octal para binário, a regra é a seguinte: separe os números em octal e verifique os seus valores coluna dos valores em binário (quadro anterior), lembrando que teremos que ter 3 (três) dígitos em cada valor binário.

Exemplo: Converteremos o número octal 4402 para binário. No quadro o número 4 em octal representa o 100 binário, o 0 representa o 0 binário (iremos acrescentar mais dois dígitos para ficar com três) que ficará 000 e o 2 representa o 10 binário que ficará 010. O Resultado da conversão será o valor em binário: 100100000010.

Conversão de binário para decimal. Para isso, seguiremos a mesma ideia que aprendemos na conversão de binário para decimal, ou seja, devemos pegar cada um dos algarismos que compõem nosso número octal e multiplicá-los pela base 8 (octal) elevado ao expoente 0, 1, 2, 3 e assim sucessivamente conforme a quantidade de algarismos que temos.

 Representação de como efetuar a conversão da base octal para decimal

Agora fazemos a adição entre todos os resultados obtidos, que teríamos (4 x 80) + (6 x 81) + (7 x 82), que é igual a 4 + 48 + 448 que totaliza 500. Então podemos afirmar que o número octal 764 representa o número 500 em decimal.

Conversão de octal para hexadecimal. Para isso, precisaremos de duas regras. A primeira regra será pegar cada número octal e transformá-lo em número binário como visto anteriormente em grupos de 3 (três) dígitos. Depois dessa conversão, faz-se necessário agrupar os números binários em grupos de 4 (quatro) algarismos da direita para a esquerda. A cada grupo observa-se o seu valor correspondente em hexadecimal no quadro.

Exemplo: Converter o número octal 1057 para hexadecimal. Primeiramente separar cada número e encontrar o seu correspondente binário no quadro de conversão, lembrando que neste momento devemos ter 3 (três) dígitos binários. O número 1 em octal está representado por 1 em binário onde serão acrescidos mais 2 (dois) dígitos para completar os 3 (três) dígitos necessários ficando 001. O número 0 em octal é representado pelo 000 em binário já acrescido os outros dois dígitos. O número 5 em octal representa o número 101 (não é necessário acrescentar mais dígitos pois já possui os 3 requeridos) e o número 7 em octal representa o número 111. Teremos o valor 001000101111 como representação binária do número 1057 octal. O próximo passo será separar este valor em binário em grupos de 4 dígitos da direita para a esquerda, ou seja, 0010 0010 1111. De posse deste grupo de valores, basta olhar no quadro de conversão (Quadro) para verificar os valores correspondentes em hexadecimal. O número 0010 representa o número 2 em hexadecimal, o número 1111 representa o F então o número resultante dessa conversão será 2 2 F em hexadecimal.

SISTEMA DECIMAL

A conversão de um número decimal para binário envolve divisões sucessivas do decimal por 2.

Como exemplo, iremos converter o número decimal 1985 em binário. O procedimento deve ser o seguinte: dividir o número decimal por 2. Caso o resultado seja exato, aquela divisão terá resto 0 (zero), se não for exato terá resto 1 (um). Esse valor deve ser anotado da direita para a esquerda ou como mostrado no quadro. Deve-se dividir o número até que o quociente da divisão seja igual a 0 (zero).

O resultado obtido é juntar o resultado de baixo para cima, onde o resultado é o seguinte número binário: 11111000001.

SISTEMA HEXADECIMAL E PREFIXOS BINÁRIOS

O sistema hexadecimal possui dezesseis representações sendo elas: “0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F”. De todos os sistemas numéricos apresentados nesta unidade para representar os dados, o sistema hexadecimal é o que apresenta o maior número de recursos. Neste sistema os numerais de 10 a 15 são representados por letras. Assim a letra A = 10, B = 11, C = 12, D = 13, E =14 e F = 15.

Conversão de base hexadecimal em base binária. Para converter um valor hexadecimal em um número binário, é necessário pegar cada um dos algarismos que fazem parte do valor hexadecimal e fazer a conversão individualmente.

O exemplo mostra o número hexadecimal A57F. Para converter basta separar cada número hexadecimal e verificar no quadro anterior qual o valor em binário correspondente. Assim, o número hexa A é igual a 1010 em binário, o número 5 é igual a 0101 (era 101 e foi incluído o 0 para ficar com 4 dígitos), o número 7 é igual a 0111 (era 111 e foi incluído o 0 para ficar com 4

dígitos) e o número F é igual a 1111 em binário. Então o valor em binário do número hexadecimal A57F é 1010010101111111.

É comum utilizar os chamados prefixos binários para organizar as quantidades de bits de alguma informação. Os prefixos binários abreviam a forma de escrever as quantidades de bits e Bytes, sendo bastante úteis quando lidamos com uma quantidade muito alta.

O quadro a seguir apresenta alguns dos prefixos binários que podem ser utilizados, com suas respectivas representações e quantidades equivalentes

Resumo das paginas 11 à 16 do livro Interação Humana e computador

Após a leitura das paginas acima mencionadas concluímos que a  importância da interface em sistemas interativos, sendo a única maneira pela qual os usuários avaliam o sistema. Vai além da estética da tela, abrangendo questões como tempo de resposta, dificuldade de uso, entre outros. A colaboração entre cientistas da computação e psicólogos na área de interação humano-computador é vantajosa, resultando em avanços significativos na computação, como redes sociais e interfaces gestuais.

A nova geração de aplicativos prioriza a interatividade, superando o modelo WIMP (Windows, ícones, Menus e Pointers). Interfaces multimodais, que envolvem vários sentidos, substituindo assim a predominância da visão. Smartphones e a computação em nuvem expandem a acessibilidade e a portabilidade. O texto aborda a maximização do desempenho humano em interfaces interativas de alta qualidade, destacando objetivos como alcançar a performance desejada, minimizar o tempo de treinamento e garantir confiabilidade homem-máquina. A engenharia de sistemas é discutida, focando a funcionalidade, confiabilidade, disponibilidade, segurança, padronização, consistência, integração, portabilidade, cronogramas, orçamentos e critérios de qualidade.

No final, são apresentados cinco critérios para medir a qualidade das interfaces humano-computador, destacando o tempo necessário para aprender a usar o sistema como um fator crucial.

Resumo do Livro : Como Aprender Design de Interfaces

Página 1 a 20 #Resumo1

O autor, Gabriel Silvestri, compartilha sua experiência de transição de Designer Gráfico para se interessar mais por design de interfaces. Ele sentia a necessidade de aprender a criar as partes visuais das interfaces que admirava no dribbble. Para isso, ele se dedicou a um período intensivo de estudos, consumindo conteúdos em inglês sobre Design de Interfaces, já que no Brasil não encontrava materiais específicos sobre o assunto.

O eBook começa abordando algumas dúvidas comuns sobre UI Design. O autor oferece insights sobre salários para diferentes níveis de experiência, e aconselha que o tamanho de tela a ser utilizado em um projeto depende da preferência do designer. Ele também destaca a importância de não começar a criar uma interface preocupando-se imediatamente com aspectos visuais, como cores e tipografia. Em vez disso, enfatiza a necessidade de passar por outras etapas do processo criativo antes de abordar a estética.

Silvestri alerta contra o foco excessivo em aprender apenas softwares de UI Design, enfatizando que, embora seja importante, dominar os princípios básicos é fundamental. Ele menciona que todas as ferramentas essenciais têm funcionalidades similares e o verdadeiro diferencial está nos princípios de UI Design. O autor também destaca a diferença entre UX e UI Design, enfatizando que UX envolve pesquisa, usabilidade e estratégia, enquanto UI está mais relacionado à parte visual e estética das interfaces.

livro : design dia-a-dia

pagina 8 á 11

1ºResumo

AS FRUSTRAÇÕES OCULTAS DOS OBJETOS DO DIA-A-DIA

Antes de escrever este livro, eu era um cientista cognitivo, interessado em saber como funciona a mente humana. Estudei a percepção, memória e aten- ção humanas. Pesquisei em detalhe como as pessoas aprendiam e como desempenhavam atividades especializadas. Ao longo do tempo, acabei por me interessar pelo erro humano, na esperança de que meu conhecimento acerca do erro oferecesse maneiras de ensinar as pessoas a evitar erros. Mas então ocorreu o acidente na usina de energia nuclear de Three Mile Island nos Estados Unidos, e eu fazia parte do grupo de cientistas sociais e comportamen- tais convocados para determinar por que os operadores da sala de controle central tinham cometido erros tão terríveis. Para minha surpresa, concluímos que a culpa não era deles, a culpa era da concepção e desenho do projeto do controle central. De fato, os painéis de controle de muitas usinas geradoras de energia pareciam ter sido deliberadamente projetados para causar erros.

Meu interesse por acidentes me conduziu ao estudo de desenvolvimento de procedimentos centrados no ser humano que pudessem eliminar esses problemas. Passei um ano de licença para viagem de estudos em Cambridge, na Inglaterra, na mundialmente famosa Unidade de Psicologia Aplicada do Conselho de Pesquisa Médica, e me vi continuamente achando graça e ao mesmo tempo frustrado pela maquinaria do prédio. Era difícil descobrir que interruptor controlava qual lâmpada. As portas eram mais um quebra-cabeça: algumas tinham de ser empurradas, outras puxadas, e pelo menos uma precisava ser corrida para o lado, contudo não havia pistas para a pessoa desavisada

Comecei a observar como as pessoas lidavam com os numerosos dispositivos que povoam nossas vidas. Em anos mais recentes, meus estudos se expandiram de modo a incluir a segurança na aviação, instalações de fábricas complexas, erro médico e uma ampla variedade de produtos de consumo, tais como sistemas de entretenimento e computadores domésticos. Em todas essas situações as pessoas quase sempre se vêm nervosas e confusas. Pior, a responsabilidade por acidentes sérios é, com frequência, atribuída a “erro humano”. Contudo a análise cautelosa dessas situações mostra que o desenho de projeto ou a instalação do equipamento contribuíram de maneira significativa para os problemas. A equipe de design de projeto não dedicou atenção suficiente às necessidades daqueles que usariam o equipamento, de modo que confusão ou erro eram quase inevitáveis. Quer fosse o fogão de cozinha ou a usina de energia nuclear, o automóvel ou a aeronave, o termostato ou o com- pautador, os mesmos problemas estavam presentes. Em todos os casos, defeitos no design provocaram o erro humano.

Minhas frustrações, enquanto estava na Inglaterra, levaram-me a escrever O design do dia-a-dia, mas os problemas com que me deparei são universais e encontrados no mundo inteiro. Quando escrevi este livro, era um cientista pesquisador, interessado nos princípios da cognição. Mas me descobri cada 1 vez mais fascinado pela maneira como esses princípios podiam ser aplicados para melhorar a vida quotidiana, minimizar erros e acidentes.

O TÍTULO DO LIVRO: UMA LIÇÃO DE DESIGN

Este livro foi publicado sob dois títulos. O primeiro título, The Psychology of Everyday Things [A psicologia dos objetos do dia-a-dia], foi muitíssimo aprecia- do por meus amigos do mundo acadêmico. O segundo título, O design do dia-a-dia, foi mais significativo e transmitiu melhor o conteúdo do livro. O editor da edição em brochura me explicou que, nas livrarias, os títulos são o que os leitores vêem enquanto seus olhos vagueiam pelas prateleiras, exami- nando rapidamente as lombadas. Eles confiam no título para descrever o livro. Também aprendi que a palavra “psicologia” fazia com que o livro fosse colocado nas prateleiras das seções de psicologia das livrarias, que atraíam leitores que se interessavam por pessoas e por relacionamentos humanos e não por objetos e nossos relacionamentos com eles. Leitores interessados em design nunca pensariam em procurar na seção de psicologia. Fui a livrarias e observei como as pessoas folheavam livros. Conversei com compradores e com vendedores de livros. Meu editor estava certo: eu realmente precisava trocar a palavra “psicologia” por “design”. Ao dar o título para meu livro, eu havia cometido a falta de ter a mesma imprevidência que resulta em todas aquelas coisas impossíveis de usar no dia-a-dia! Minha primeira escolha de títu- lo tinha sido a de um designer egocêntrico, escolhendo a solução que me agra- dava sem levar em consideração seu impacto sobre os leitores. De modo que O design do dia-a-dia se tornou o título, permanecendo nesta nova edição.

LIÇÕES APRENDIDAS COM O DESIGN DO DIA-A-DIA

Quando você tem dificuldade com uma coisa qualquer – quer seja descobrir se deve puxar ou empurrar uma porta ou os caprichos arbitrários do compu- tador e da indústria eletrônica moderna, não é sua culpa. Não ponha a culpa em si mesmo, ponha a culpa no designer. A falha é da tecnologia ou, mais precisamente, do design.

Quando vemos um objeto pela primeira vez, de que modo aprendemos a usá-lo? Como administramos as dezenas de milhares de objetos, muitos dos quais só encontramos uma única vez? Essa pergunta foi o que me impulsionou a escrever O design do dia-a-dia. A resposta, determinei rapidamente, era que a aparência do dispositivo ou aparelho deveria dar as indicações de importância.

crítica necessárias para sua operação apropriada – o conhecimento tem de estar ao mesmo tempo na cabeça e no mundo.

Na época em que escrevi O design do dia-a-dia, essa idéia era considera- da estranha. Hoje em dia, contudo, o conceito é mais amplamente aceito. Muitos na comunidade do design compreendem que o design deve transmi- tir a essência da operação do aparelho; a maneira como ele funciona, as ações possíveis que podem ser executadas; e, através do retorno de informações, exa- tamente o que ele está fazendo em qualquer dado momento. O design é na ver- dade um ato de comunicação, o que significa ter um profundo conhecimento e compreensão da pessoa com quem o designer está se comunicando.

Embora O design do dia-a-dia aborde numerosos tópicos, três acabaram por se destacar como sendo críticos:

1. Não é sua culpa: Se existe alguma coisa que caiu no gosto do público, é esta idéia simples: quando as pessoas têm dificuldade com alguma coisa, a culpa não é delas é do design. Toda semana me chega uma carta ou mensa- gem de correio eletrônico de alguém me agradecendo por tê-lo libertado de seu sentimento de incompetência.

2. Princípios de design: Tenho por regra não criticar alguma coisa a menos que eu possa oferecer uma solução. O design do dia-a-dia contém vários prin- cípios de design importantes, ferramentas poderosas para que designers se certifiquem de que seus produtos sejam compreendidos e usáveis. Os princí- pios, é claro, são explicados neste livro, mas para dar-lhes idéia do que encon- trarão, aqui está uma pequena lista dos mais importantes. Observem que todos eles são de fácil compreensão, mas poderosos.

• Modelos conceituais. A mente humana é um maravilhoso órgão de com- preensão e conhecimento – estamos sempre tentando encontrar significado nos acontecimentos ao nosso redor. Uma das maiores de todas as frustrações é tentar aprender como fazer alguma coisa que parece completamente arbitraria, inconstante e caprichosa. Pior, quando nos falta a compreensão, temos a tendência de errar.

3º resumo do livro .

                                              35 á 44       

Esse problema é muito mais grave do que aparenta; o tipo de erro que pode surgir é de difícil interpretação.

O menor dos problemas seria ter o comportamento da versão antiga do Hibernate.

 Mais grave é quando há métodos novos no JAR mais recente; a interface Session do Hibernate antigo seria carregada, e quando sua aplicação APP-nova invocar um método que só existe na versão nova, NoSuchMethod Error será lançado! Isso causa uma enorme dor de cabeça, pois o desenvolvedor fica confuso ao ver que o código compilou perfeitamente, mas durante a execução a JVM indica que aquele método não existe.

NoSuchMethodError é um forte indicador de que o código foi compilado esperando uma versão diferente de uma biblioteca que a encontrada em tempo de execução, provavelmente por causa de os jars estarem espalhados e compartilhados.

O comportamento da aplicação pode ser mais errático; imagine que a aplicação APP-nova utiliza diretamente uma classe do Hibernate que só existe na versão mais nova, como a TypeResolver. Carregamento de classes e classloader hell Casa do Código Essa confusão é similar ao DLL Hell, frequentemente chamado de Classloader hell na plataforma Java.

Em algumas configurações de classloaders diferentes, que carregam classes de diretórios em comum, pode aparecer um ClassCastException curioso e de difícil discernimento.

Se uma referência a um objeto do tipo Produto for passada como argumento para um método que recebe um objeto também deste tipo, mas esta classe tiver sido carregada por um classloader diferente, a exceção será lançada.

O desenvolvedor ficará confuso ao ver uma ClassCastException em uma invocação de método em que nem mesmo há um casting. Isso acontece porque, como vimos, em tempo de execução a identidade de uma classe não é apenas seu fully qualified name, mas também o classloader que a carregou.

Assim, uma classe com mesmo nome, mas carregada por classloaders diferentes, é outra. Isto é chamado de runtime identity e muito importante para permitir que containers tenham mais de uma versão da mesma classe na memória (como o exemplo das Sessions de diferentes versões do Hibernate.

A arquitetura tradicional dificulta que uma aplicação sobrescreva algum componente do Container classloader, mas esse modelo invertido (padrão no Tomcat, por exemplo) permite esse cenário.

 A ordem de resolução das classes passa a ser: primeiro o Bootstrap, depois as classes da aplicação e depois as compartilhadas do Container.

Criando seu ClassLoader Podemos instanciar a URLClassLoader para carregar classes a partir de um conjunto dado de URLs.

 Isto indica que seu parent classloader será o bootstrap diretamente.

Elas serão carregadas em ambos os casos pelo bootstrap classloader (representado pelo null), pois não há como evitar que esse classloader seja consultado em razão da questão de segurança já discutida.

 Ao remover o null do construtor, o URLClassLoader terá como parent o classloader que carregou o código sendo executado (o Application classloader), fazendo com que o carregamento da classe seja delegado para este, antes de ser tentado pelo nosso URLClassLoader.

Carregamento de classes e classloader hell Casa do Código O parent classloader será sempre consultado antes de o classloader de hierarquia “mais baixa” tentar carregar uma determinada classe.

 Lembre-se de que este é o motivo pelo qual jogar os JARs na variável de ambiente CLASSPATH pode acabar escondendo versões diferentes da mesma classe que estejam ao alcance de classloaders mais “baixos” na hierarquia.

Caso elas fossem incluídas dentro da biblioteca padrão, qualquer outro projeto que necessitasse delas em uma versão diferente (tanto mais atual quanto mais antiga) teria sempre a versão do rt.jar Para contornar o problema, a Sun colocou as classes que seriam do pacote org.apache para dentro de com.sun.org.apache.

Sem dúvida uma maneira deselegante, mas que evitou o problema de versionamento.

Este problema tornou-se ainda mais frequente.

 Nesses dois casos, para contornar o problema, utilizamos o recurso de endorsed JARs.

 Através da linha de comando (-Djava.endorsed.dirs), você especifica diretórios que devem ter prioridade na procura de classes antes que o diretório ext do Java SE seja consultado.

É uma forma de o administrador do sistema dizer que confia em (endossa) determinados JARs. Alguns servidores de aplicação possuem um diretório especial onde você pode jogar os JARs a serem endossados.

É comum aparecerem problemas com OutOfMemoryError, acusando que este espaço se esgotou, dado um número muito grande de classes carregadas.

 Em particular, isso ocorre facilmente depois de alguns hot deploys em um container.

 Toda classe carregada tem uma referência para o seu classloader, assim como todo classloader referencia todas as classes carregadas por ele.

 Isso para que possa devolver sempre a mesma classe no caso de outra invocação subsequente para o mesmo full qualified name, agindo como uma factory que cacheia suas instanciações. Esse relacionamento bidirecional entre Class e ClassLoader faz com que os objetos Class só sejam coletados pelo garbage collector junto com o classloader inteiro e todas as outras classes associadas.

Logo, a única maneira de um objeto Class ser coletado é se todas as referências para todas as classes do seu classloader forem liberadas também.

 Ao realizar o hot deploy de uma aplicação, o próprio container libera as referências das classes antigas, possibilitando a coleta do classloader do contexto.

Isso deveria ser suficiente para que o contexto fosse inteiramente liberado da memória, mas, na prática, outro classloader acima daquele da WebApplication segura referências para classes da aplicação.

O carregamento de um único driver JDBC é capaz de segurar na memória o contexto inteiro de uma aplicação que não é mais necessária.

 Na prática, é quase impossível uma aplicação Java conseguir evitar esses leaks de classloaders, por isso em algum momento surgem os OutOfMemoryError frequentes nos hot deploys, sendo mais um motivo para evitá-los em produção.

Todo o paradigma da orientação a objetos, seus princípios e boas práticas procuram trazer esses benefícios para o design.

 Ao pensar no sistema como um todo, outras questões de mais alto nível surgem, em especial aquelas que tratam da forma como os objetos se relacionam e sua organização dentro e entre sistemas.

Ao relacionar dois objetos distintos, deve-se levar em conta as boas práticas que serão discutidas nesse capítulo, como a diminuição do acoplamento entre objetos.

 Programe voltado à interface, não à implementação ao trabalhar com coleções, escolher a implementação certa para cada caso é uma tarefa difícil.

Cada uma delas, como ArrayList, LinkedList ou HashSet, é melhor 3.1. Programe voltado à interface, não à implementação Casa do Código para resolver determinas categorias de problemas.

 Pode ser muito arriscado escrever todo o código da aplicação dependente de uma decisão antecipada.

 Apesar disso, grande parte dos desenvolvedores opta por sempre utilizar ArrayList desde o início sem critério algum.

O problema em realizar uma mudança como esta, de implementação, é que todo código que usava o retorno do método como ArrayList quebra, mesmo que só usássemos métodos que também existem definidos em HashSet.

Seria preciso alterar todos os lugares que dependem de alguma forma desse método.

Mas sempre há também informações semânticas implícitas na utilização desse método, e que não são expostos através da assinatura.

Um exemplo de acoplamento semântico está em depender da informação de que uma List permite dados duplicados, enquanto um Set garante unicidade dos elementos.

Como problemas no acoplamento sintático são encontrados em tempo de compilação, os semânticos somente o são em execução, daí um motivo da importância de testes que garantam o comportamento esperado.

 Desta forma, alterar a implementação torna-se sempre muito mais custoso, caracterizando o alto acoplamento que tanto se procura evitar.

 Para minimizar esse problema, é possível usar um tipo de retorno de método mais genérico, que contemple diversas implementações possíveis, fazendo com que os usuários do método não dependam em nada de uma implementação específica.

Usar interfaces Java é um grande benefício nestes casos, pois ajuda a garantir que nenhum código dependa de uma implementação específica, pois interfaces não carregam nenhum detalhe de implementação.

A escolha da interface ideal vai depender do que você quer permitir que o código invocador possa utilizar e realizar na referência retornada.

Programe voltado à interface, não à implementação Casa do Código de elementos que essa coleção possui, nem os elementos de maneira aleatória através de um índice.

 Devemos procurar um balanço entre o desacoplamento e a necessidade do nosso código.

 Esta é a ideia do Princípio de Segregação de Interfaces: clientes não devem ser forçados a depender de interfaces que não usam.

Uma implementação de lista, MeuProprioArrayList, feita pelo desenvolvedor é provavelmente mais instável que a interface List, já que as forças que a impedem de mudar são fracas (não há outras classes utilizando essa implementação).