Buscar

686611_Lista01

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Curso: Sistemas de Informação – Unidade São Gabriel 
Disciplina: Programação Modular – Período: 4º - Turno: Manhã 
Professor: Claudiney Vander Ramos 
Data de Entrega: 11/09/2013 
 
PRIMEIRA LISTA DE EXERCÍCIOS 
 
Parte 01 – Qualidade de Software; Modularidade; Acoplamento e Coesão 
 
1) Conforme discutido em sala de aula, um bom programa possui algumas 
características que são visíveis para seus usuários, sejam eles leigos ou 
programadores. Entre estas características, citamos: corretude, robustez, 
extensibilidade, reusabilidade, compatibilidade, eficiência, portabilidade, 
facilidade de uso, funcionalidade e segurança. Algumas destas características 
impõem pressões diametralmente opostas sobre o software. Por exemplo, 
quanto mais eficiente o software, menos portável ele tende a ser, pois a 
eficiência demanda cuidados específicos com o hardware onde o software será 
executado. 
Compare mais dois pares dentre estas características do bom software que 
tendem a lados opostos. Explique porque é difícil atender a ambas as 
características simultaneamente. 
 
2) O que é qualidade de software? 
 
3) Cite alguns critérios de qualidade. 
 
4) Alguns critérios têm mais importância do que outros? 
 
5) Explique os conceitos de acoplamento e coesão e descreva os níveis 
apropriados para um projeto cuja estrutura facilite a manutenção e o reuso. 
 
6) Cite alguns tipos de coesão e acoplamento? 
 
7) Dê um exemplo de acoplamento por controle. Como este acoplamento pode 
ser evitado? 
 
8) Considere que um módulo executa as seguintes tarefas: 1) computa dados 
complementares baseados em dados computados anteriormente; 2) produz um 
relatório de erros na estação de trabalho do usuário; 3) atualiza um banco de 
dados. Este módulo é coeso ? Ele poderia ser construído dessa forma e ser 
considerado bom? Justifique as respostas. 
 
9) Qual é o tipo de acoplamento mais alto? E o mais baixo ? Quando eles 
ocorrem ? Você consegue imaginar um cenário em que o acoplamento é zero ? 
 
10) Como os conceitos de acoplamento e portabilidade de software se 
relacionam ? Apresente um exemplo que sustente sua discussão. 
 
11) Por que a coesão de domínio misto pode ser ruim para um sistema OO? 
Exemplifique. 
 
12) Por que a coesão de instância mista pode ser ruim para um sistema OO? 
Exemplifique. 
 
13) Por que a coesão de papel misto pode ser ruim para um sistema OO? 
Exemplifique. 
 
14) Compare os efeitos nocivos de cada tipo de coesão mista (domínio, 
instância e papel), indicando as que oferecem maiores riscos para a qualidade 
de sistemas OO. 
 
15) Qual a relação entre coesão e manutenção ? 
 
16) Qual a relação entre acoplamento e manutenção ? 
 
17) Qual a relação entre coesão e reuso ? 
 
18) Qual a relação entre acoplamento e reuso ? 
 
19) Diga quais são as vantagens da modularização e explique cada uma delas. 
 
20) Quais são as vantagens de ter acoplamento fraco e coesão alta. 
 
21) Identifique os tipos de coesão apresentados abaixo e justifique: 
a) 
procedure inicializaDados() { 
 font = "times"; 
 windowSize = "200,400"; 
 xpto.nome = "desligado"; 
 xpto.tamanho = 12; 
 xpto.localização = "/usr/local/lib/java"; 
} 
b) 
public void faça(int flag) { 
 switch(flag) { 
 case ON: 
// coisas para tratar de ON 
break; 
 case OFF: 
// coisas para tratar de OFF 
break; 
 case FECHAR: 
// coisas para tratar de FECHAR 
break; 
 case COR: 
// coisas para tratar de COR 
break; 
 } 
} 
 
22) Identifique o tipo de acoplamento apresentado abaixo e justifique: 
public void setLampada(int valor) { 
 if(valor == ON) { 
// liga lampada 
 } else if(valor == 1) { 
// desliga lampada 
 } else if(valor == 2) { 
// pisca 
 } 
} 
 
23) Examine as descrições funcionais dos módulos a seguir e determine o tipo 
de coesão de cada módulo. 
a) Um módulo para inicializar variáveis e abrir arquivos utilizados. 
b) Uma função que inicializa dados de um pagamento e emite o recibo de 
processamento de um pedido. 
c) Uma função que gera um recibo de pedido, relatório de venda e nota fiscal. 
d) Uma função que gera um recibo de pagamento de um pedido. 
e) Uma função que realiza a leitura e ordenação de um vetor x. 
f) Uma função que ordena um vetor x. 
 
 
Parte 02 – Orientação por Objetos 
 
1. Definir os conceitos de classe, objeto, herança, e polimorfismo. 
2. Qual é a diferença entre public, protected, and private? 
3. O que é uma classe abstrata? Para que ela é usada? 
4. O que é uma interface? Para que ela é usada? 
5. O que é um método abstrato? 
6. O que é uma classe fechada (sealed)? 
7. Criar uma classe base, Telefone, e uma classe TelefoneEletronico derivada de 
Telefone. Em Telefone, crie um membro protected TipoDoTelefone do tipo string, e 
um método public Ring( ) que imprime uma mensagem como: "Tocando o 
<TipoDoTelefone>." Em TelefoneEletronico, o construtor deve ajustar (set) o 
TipoDoTelefone para "Digital". No método Run( ), chamar o método Ring( ) no 
TelefoneEletronico para testar a herança. 
8. Estender o Exercício 1 para ilustrar um método polimórfico. Faça a classe derivada 
sobrescrever (override) o método Ring( ) para exibir uma mensagem diferente. 
9. Alterar a classe Telefone para abstrata, e tornar Ring( ) um método abstrato. Derivar 
duas novas classes de Telefone: TelefoneDigital e TelefoneTalk. Cada uma das 
classes derivadas deve ajustar (set) TipoDoTelefone, e sobrescrever (override) o 
método Ring( ). 
10. Crie a classe ContaDePoupanca. Use a variável static taxaDeJurosAnual para 
armazenar a taxa de juros de todos os correntistas. Cada objeto da classe contém 
uma variável de instância private saldoPoupanca, indicando a quantidade que o 
poupador possui atualmente depositada. Forneça o método CalcularJuroMensal 
para calcular os juros mensais, multiplicando saldoPoupanca por 
taxaDeJurosAnual, dividindo por 12; esses juros devem ser acrescidos a 
saldoPoupanca. Forneça um método static AlterarTaxaDeJuros que configure 
taxaDeJurosAnual para um novo valor. Escreva um programa driver para testar a 
classe ContaDePoupanca. Instancie dois objetos ContaDePoupanca, poupador1 e 
poupador2, com saldos de R$2000,00 e R$3000,00, respectivamente. Configure 
taxaDeJurosAnual como 4% e, em seguida, calcule os juros mensais e imprima os 
novos saldos para cada um dos poupadores. Depois, configure taxaDeJurosAnual 
como 5%, calcule os juros do próximo mês e imprima os novos saldos para cada um 
dos poupadores. 
 
11. Escreva um aplicativo de console que implemente um quadrado. A classe 
Quadrado deve conter uma propriedade de instância Lado que possua assessores 
get e set para dados private. Forneça dois construtores: um que não receba 
argumentos e outro que receba um comprimento lado com valor. Escreva uma 
classe de aplicativo que teste a funcionalidade da classe Quadrado. 
 
12. Alguns programadores preferem não utilizar acesso protected, pois ele quebra o 
encapsulamento da classe base. Discuta as vantagens relativas do uso do acesso 
protected em relação a insistir no uso de acesso private na classe base. 
 
13. Como o polimorfismo lhe permite programar “genericamente” em vez de 
“especificamente”? Discuta as principais vantagens da programação feita 
“genericamente”. 
 
14. Discuta os problemas da programação com lógica switch. Explique por que o 
polimorfismo pode ser uma alternativa eficaz ao uso de lógica switch. 
 
15. Faça distinção entre herdar serviços e herdar implementação. Como as hierarquias 
de herança projetadas para herdar serviços diferem daquelas projetadas para herdar 
implementação?

Outros materiais