Baixe o app para aproveitar ainda mais
Prévia do material em texto
58 17.5 Usando um exemplo de componente que implementa um tipo de dados abstrato, como uma pilha ou uma lista, mostre por que geralmente é necessário estender e adaptar componentes para reutilização. Tomemos, por exemplo, um componente de pilha. Isso fornecerá operações básicas comuns a todas as pilhas, como Inicializar (criar uma pilha), Empurrar (um item na pilha), Retirar (um item da pilha), Tamanho (o número de itens atualmente na pilha), e talvez outros. No entanto, cada aplicativo usará pilhas de maneiras diferentes e, portanto, poderá exigir versões diferentes dessas operações e operações adicionais. Por exemplo, considere uma operação de navegação gráfica que permite aos usuários navegar em uma biblioteca digital. A biblioteca está dividida em áreas e o identificador de cada área aponta para os livros dessa área. Quando o usuário entra em uma área, seu identificador é colocado em uma pilha e retirado da pilha quando ele sai dessa área e volta para a área anterior. Assim, o topo da pilha sempre se refere aos livros da área atual. No entanto, existe um requisito para fornecer um recurso onde o usuário possa visualizar todas as áreas visitadas e isso requer uma operação de pilha adicional que forneça acesso a todos os elementos da pilha. Isso então deve ser adicionado ao componente da pilha. Também requer que a operação Pop seja modificada para que, quando um item for retirado da pilha, ele seja adicionado a uma lista de 'áreas visitadas' que possa ser exibida em conjunto com os elementos atuais da pilha. 17.6 Explique por que é difícil validar um componente reutilizável sem o código-fonte do componente. De que forma uma especificação formal de componente simplificaria os problemas de validação? A validação de componentes sem código-fonte é muito difícil porque não há como avaliar como o componente lida com exceções (e isso raramente é definido em uma especificação de componente). O único método de validação que pode ser usado é o teste de caixa preta, portanto, técnicas estáticas não podem ser usadas. As especificações dos componentes raramente são completas e isso aumenta os problemas dos testes de caixa preta. As especificações formais ajudariam porque definiriam com precisão o que o componente deveria fazer e seu comportamento real poderia ser comparado com a especificação. No entanto, as especificações formais raramente cobrem todas as exceções e não ajudam nos testes de desempenho, confiabilidade ou outras características não funcionais. 17.8 Usando exemplos, ilustre os diferentes tipos de adaptadores necessários para suportar composição sequencial, composição hierárquica e composição aditiva.
Compartilhar