You are on page 1of 13

Anlise e Projeto de Software Orientados

a Objeto
Lista de Exerccios
Lugares onde tem exerccios interessantes

Mastering Object-Oriented Design in C++, Horstmann, John Wiley, 1995.

http://gee.cs.oswego.edu/dl/oosdw3/index.html

http://www.eli.sdsu.edu/courses/spring99/cs535/assignments/index.html

http://www.eli.sdsu.edu/courses/fall97/cs535/assignments/index.html

http://www.eli.sdsu.edu/courses/fall97/cs535/pastExams.html

http://www.eli.sdsu.edu/courses/fall96/cs535/assignments/index.html

O Processo de Desenvolvimento de Software


1. Qual o objetivo principal de um Processo de Desenvolvimento de Software?
2. Qual diferena entre desenvolver um software com e sem um processo
adequado?
3. Nas suas palavras, defina o que significa Software de Qualidade.
4. Descreva brevemente as grandes etapas necessrias ao desenvolvimento de
software de qualidade.
5. Comente o que se entende pela frase seguinte: "Os requisitos devem falar dos
problemas e no das solues".
6. Comente o que se entende pela frase seguinte: "Os requisitos existem para
reduzir o espao de soluo".
7. Os produtos de informtica de hoje frequentemente exibem funcionalidades que
claramente sairam da cabea da equipe de desenvolvimento. Isso ruim?
bom? Comente.
8. Usando UML, qual o resultado de cada etapa do processo de
desenvolvimento?

9. O que deve fazer parte dos requisitos alm dos requisitos funcionais?
10. Escreva um pargrafo tpico que poderia fazer parte de um documento de
requisitos com respeito a cada um dos itens seguintes:

Sinopse do problema a ser resolvido

Como o usurio opera hoje e que problemas ele enfrenta

Ambiente tpico do usurio que usar o produto

Facilidade de uso necessria

Quem utilizar o produto

Hardware/software alvo para o produto

Qualidade

Desempenho

Segurana

Compatibilidade com outros produtos/verses e necessidades de


migrao

Necessidades de internacionalizao do produto ou de alguma de suas


partes

Suporte

Preo da soluo

Documentao

Uso de padres

Aspectos legais

Integrao com outros produtos

Packaging

12. Quem deve aprovar um documento de requisitos?


13. Argumente a favor ou contra a afirmao de que "Todo documento gerado no
processo de desenvolvimento deve ter um dono nico".

14. Quais so os objetivos principais do design de alto nvel (arquitetural)?


15. Por que um produto deve ter um nico projetista principal?
16. Por que o design de alto nvel se preocupar tanto com as interfaces entre
componentes?
17. Justifique a atividade de design de baixo nvel.
18. O documento de design de baixo nvel preparado por quantas pessoas?
19. Descreva como UML descreve a atividade de design de baixo nvel.
20. O que code review? Qual sua importncia?
21. Quais so os tipos de atividades de teste de software? Descreva cada atividade
em uma ou duas frases.
22. Por que existem tantos tipos de testes?
23. O que se perde quando testes no so automatizados?
24. O que scaffolding?
25. O que um plano de testes de unidade deve conter?
26. Como a funo main pode ser utilizada em Java para os propsitos de testes?
27. Que fase de testes pretende testar as interfaces entre mdulos?
28. D um exemplo de uma "funo" tpica que seria testada num teste de funo.
29. O que um plano de teste de funo deve tipicamente conter?
30. Explique a importncia de manter um histrico dos erros descobertos durante os
testes numa base de dados.
31. Quais tipos de testes podem ser considerados black box e quais podem ser
considerados white box?
32. Qual o motivo principal que explica a utilizao de testes de componentes?
33. O que um plano de teste de componente deve conter?
34. Como identificar um "componente" na atividade de teste de componentes?
35. O que um Total System Environment? Por que testar nessas condies?
36. Quem deve executar cada tipo de teste?

37. Qual a diferena entre testes de sistema e testes de regresso?


38. Descreve o que um teste alfa e como ele deve ser feito.
39. Quem deve ser responsvel pela conduo de um teste alfa?
40. O que um teste alfa deve testar?
41. Descreve o que um teste beta e como ele deve ser feito.
42. Quem deve ser responsvel pela conduo de um teste beta?
43. O que um teste beta deve testar?
44. O que diferencia um teste alfa de um teste beta?
45. O que so as Publicaes de um produto?
46. O que um Plano de Publicaes?

Introduo Linguagem de Programao Java


Os exerccios abaixo foram retirados dos captulos 1 a 4 do livro Data Structures and
Problems Solving Using Java, Weiss, Addison-Wesley, 1998.

Captulo 1: Primitive Java


1. Que extenses so usadas para arquivos contendo cdigo fonte e codigo
compilado em Java?
2. Descreva os trs tipos de comentrios utlizados em programa Java.
3. Quais so os oito tipos primitivos em Java?
4. Qual a diferena entre os operadores * e *=?
5. Explique a diferena entre os operadores de incrementao pr-fixados e psfixados.
6. Descreva os trs tipos de laos em Java.
7. Descreva todos os usos do comando break. O que um comando break com
rtulo?
8. O que feito pelo comando continue?
9. O que sobrecarga de mtodos?
10. Descreva a chamada por valor.

11. Suponha que b tenha valor 5 e c tenha valor 8. Qual o valor de a, b e c aps
cada linha no seguinte fragmento de programa:
a
a
a
a

=
=
=
=

b++
b++
++b
++b

+
+
+
+

c++;
++c;
c++;
++c;

12. Qual o resultado de true && false || true?


13. No seguinte fragmento de programa, fornea um exemplo para o qual o lao
for no seja equivalente ao lao while:
for( init; test; update ) {
statements
}

init;
while( test ) {
statements
update;
}
14. Quais so as possveis sadas do seguinte programa?
public class WhatIsX {
public static void f( int x ) { /* body unknown */
public static void main( String [] args ) {
int x = 0;
f( x );
System.out.println( x );
}
}

15. Escreva um comando while que seja equivalente ao seguinte fragmento for.
Por que isso seria til?
for( ; ; )
statement
16. Escreva um programa para gerar as tabuadas de adio e multiplicao para
nmeros de um nico dgito (as tabuadas que alunos do primeiro grau esto
acostumados a ver).
17. Escreva dois mtodos estticos. O prmeiro deve retornar o mximo entre trs
inteiros e o segundo deve retornar o mximo entre quatro inteiros.
18. Escreva um mtodo esttico que receba um ano como parmetro e retorne true
se o ano for bissexto e false caso contrrio.
19. Escreva um programa para determinar todos os pares de inteiros positivos, (a,
b), tais que a < b < 100 e (a^2 + b^2 + 1)/(ab) seja inteiro.
20. Escreva um mtodo que imprima a representao do seu parmetro inteiro como
nmero Romano. Assim, se o parmetro for 1998, a sada MCMLXLVIII.
21. Suponha que voc queira imprimir nmeros entre colchetes formatados como
segue: [1][2][3], e assim por diante. Escreva um mtodo que receba dois
marmetros: howMany e lineLength. O mtodo deve imprimir nmeros de
1 at howMany no formato j mencionado, mas no deve imprimir mais do que
lineLength caracteres numa mesma linha. Ele no deveria iniciar um [ se o
] correspondente no couber na linha.
22. No problema seguinte usando aritmtica decimal, cada uma das dez letras
diferentes recebe o valor de um dgito. Escreva um programa que descubra todas
as possveis solues (uma daas quais est mostrada).
MARK

A=1 W=2 N=3 R=4 E=5

9147

+ALLEN

L=6 K=7 I=8 M=9 S=0

+16653

-----

-----

WEISS

25800

Captulo 2: References
23 Liste as diferenas principais entre tipos de referncia e tipos primitivos.
24 Liste cinco operaes que podem ser aplicadas a um tipo de referncia.
25 Descreva como excees funcionam em Java.

26 Liste as operaes bsicas que podem ser aplicadas a strings.


27 Se x e y tm valores 5 e 7, respectivamente, qual sa sada do seguinte
fragmento:
System.out.println( x + ' ' + y );
System.out.println( x + " " + y );
6. Um checksum um inteiro de 32 bits que obtido pela soma dos caracteres
Unicode contidos num arquivo (permitimos um overflow silencioso, embora um
overflow silencioso seja improvvel se todos os caracteres forem ASCII). Dois
arquivos idnticos possuem o mesmo checksum. Escreva um programa para
calcular o checksum de um arquivo cujo nome dado como argumento da linha
de comando.
7. Escreva um mtodo que retorne true se String str1 for um prefixo de
String str2. No use qualquer uma das rotinas especiais de pesquisa em
strings com exceo de charAt.
8. Escreva um programa que imprima na sada o nmero de caracteres, palavras e
linhas nos arquivos cujos nomes so dados como argumentos da linha de
comando.
9. Implemente um programa de cpia de arquivos de texto. Inclua um teste para ter
certeza de que os arquivos fonte e destino seja diferentes. Voc ter que ler um
livro de referncia java para aprender como fazer sada para arquivos.

Captulo 3: Objects and Classes


1. O que significa esconder informao? O que encapsulao? COmo Java d
suporte a estes conceitos?
2. Explique as sees pblicas e privadas da classe.
3. Descreva o papel do construtor.
4. Qual o resultado quando uma classe no prov um construtor?
5. O que significa acesso package friendly?
6. Como a sada feita para uma classe ClassName?
7. D as duas formas de diretivas de importao que permitem que longPause
seja usado sem ter que mencionar o nome do package Supporting.
8. Por que classes no podem ser declaradas como privadas?

9. Um cadeado de segredo tem as seguintes propriedades bsicas: o segredo (uma


sequncia de 3 nmeros) est escondido; o cadeado pode ser aberto ao fornecer
o segredo; e o segredo pode ser alterado, mas apenas por algum que saiba o
segredo atual. Projete uma classe com mtodo pblico open e changeCombo
(mude segredo) e campos de dados privados que armazenem o segredo. O
segredo deve ser inicializado no construtor. Desabilite a cpia de cadeados de
segredo.
10. Escreva uma classe que d suporte a nmeros racionais. Os campos devem ser
duas variveis do tipo long, uma armazenando o numerador e a outra o
denominador. Armazene o nmero racional sempre na forma reduzida, isto ,
com o numerador sempre no-negativo. Inclua um conjunto razovel de
construtores; os mtodos add, subtract, multiply, e divide; tambm
inclua toString, equals, compareTo (que se comporta como o mtodo
semelhante da classe String). Tenha certeza que toString se comporte
corretamente caso o denominador seja zero.
11. Implemente uma classe Date simples. Voc deve ser capaz de representar
qualquer data de 1 de janeiro de 1800 at 31 de dezembro de 1500; subtrair
datas; incrementar uma data por um nmero de dias; e comprar duas datas
usando equals e compareTo. Uma data representada internamente como o
nmero de dias desde uma data inicial, que, neste caso, o incio de 1800. Isto
faz com que todos os mtodos com exceo dos construtores e toString
triviais.
A regra para anos bissextos que um ano bissexto se for divisvel por 4 e no
for divisvel por 100 a no ser que seja divisvel por 400. Desta forma, 1800,
1900 e 2100 no so anos bissextos mas 2000 o . O construtor deve verificar a
validade da data e toString tambm. Uma data pode estar errada se uma
operao de incrementao ou uma subtrao a deixar fora de faixa.
Quando voc tiver terminado a especificao, voc poder passar
implementao. A parte difcil a converso entre a representao interna e a
representao externa de uma data. O que segue um possvel algoritmo.
Use dois arrays que so campos estticos. O primeiro array,
daysTillFirstOfMonth contm o nmero de dias at o primeiro dia de
cada ms num ano no-bissexto. Isto , ele contm 0, 31, 59, 90, e assim por
diante. O segundo array, daysTillJan1, contm o nmero de dias at o incio
de cada ano, iniciando com firstYear. Isto , ele contm 0, 365, 730, 1095,
1460, 1826, e assim por diante j que 1800 no bissexto mas 1804 o . Seu
programa ode inicializar este array uma nica vez usando um inicializador
esttico. Voc pode ento usar o array para converter da representao interna
para a representao externa.
12. Implemente uma classe de nmero complexo. Lembre que um nmero complexo
consiste de uma parte real e uma parte imaginria. Fornea as mesma operaes
da classe Rational, quando isso fizer sentido (por exemplo, compareTo no

faz sentido). Adicione mtodo de acesso para extrair a parte real e a parte
imaginria.
13. Implemente uma classe completa IntType que tenha um conjunto
razoavelmente completo de construtores, add, subtract, multiply,
divide, equals, compareTo e toString. Implemente IntType usando
um array suficientemente grande. Para esta classe, a operao difcil a diviso
seguida de perto da multiplicao.

Captulo 4: Inheritance
1. Quais membros de uma classe herdada podem ser usados na classe derivada?
Quais membros se tornam pblicos para os usurios da classe derivada?
2. O que composio?
3. Explique polimorfismo.
4. Explique binding (amarrao) dinmico.
5. O que um mtodo final?
6. Considere o programa abaixo para testar a visibilidade:
public class Base {
public int bPublic;
protected int bProtect;
private int bPrivate;
// Public methods omitted
}
public class Derived extends Base {
public int dPublic;
private int dPrivate;
// Public methods omitted
}
public class Tester {
public static void main( String [] args ) {

Base b = new Base();


Derived d = new Derived();
System.out.println( b.bPublic + " " + b.bProtect + " "
+ b.bPrivate + " " + d.dPublic + " "
+ d.dPrivate );
}
}
a. Quais acessos so legais?
b. Coloque main como mtodo de Base. Que acessos so legais?
c. Coloque main como mtodo de Derived. Que acessos so legais?
d. Como essas respostas mudam se a palavra protected for removida na classe
Base?
e. Escreva um construtor de trs parmetros para Base. Em seguida, escreva um
construtor de cinco mtodos para Derived.
f. A classe Derived consiste de cinco inteiros. Quais esto acessveis classe
Derived?
g. Um mtodo na classe Derived passado para um objeto de classe Base. Quais
entre os membros do objeto podem ser acessados pela classe Derived?
7. Qual a diferena entre uma classe final e outras classes? Para que classes finais
so usadas?
8. O que um mtodo abstrato?
9. O que uma classe abstrata?
10. O que uma interface? Como uma interface difere de uma classe abstrata? Que
membros podem estar numa interface?
11. Como so implementados algoritmos genricos em java?
12. Escreva mtodos genricos min e max, cada um dos quais aceita dois
parmetros do tipo Comparable. Ento use esses mtodos com tipo
MyInteger.
13. Escreva mtodos genricos min e max, cada um dos quais aceita um array do
tipo Comparable. Ento use esses mtodos com tipo MyInteger.
14. Para o exemplo Shape (do livro) modifique readShape e main atirando (?) e
capturando uma exceo (em vez de criar um crculo de raio zero) ao detectar
um erro de entrada.

15. Modifique a classe Shape (do livro) para que passe a usar um algoritmo de
ordenao genrico.
16. Um SingleBuffer tem os mtodos get e put: o SingleBuffer
armazena um item nico e um membro de dados que indica se o
SingleBuffer est logicamente vazio. Um put pode ser aplicado apenas a
um buffer vazio, e ele insere um item no buffer. Um get pode ser aplicado
somente num buffer no vazio, e ele remove e retorna o contedo do buffer.
Escreva uma classe genrica para implementar SingleBuffer. Defina uma
exceo para sinalizar erros.
17. Reescreva a hierarquia Shape (do livro) de forma a armazenar a rea como
membro de dados e faa com que seja calculado pelo construtor de Shape. Os
construtores das classes derivadas devem calcular uma rea e passar o resultado
para o mtodo super. Faa com que area seja um mtodo final que apenas
retorne o valor deste membro de dados.
18. Adicione o conceito de uma posio hierarquia Shape (do livro) pela incluso
de coordenadas como membors de dados. Ento acrescente um mtodo
distance.
19. Escreva uma classe abstrata para Date e sua classe derivada
GregorianDate.
20. Implemente uma hierarquia de pagadores de impostos que consista de uma
interface TaxPayer e das classes SinglePayer e MarriedPayer que
implementem a interface.

Exemplo maior de Programao: O Jogo Mancala de Arnow e Weiss


1. De vrias formas, a implementao do Jogo de Mancala de Arnow e Weiss tem
falhas. Identifique essas falhas e explique por que so falhas.
2. Reescreva o programa do Jogo de Mancala de forma a remover as falhas.
3. Repita para a verso applet.

Os Exerccios do Livro: "UML Toolkit"


"Os exerccios apresentados aqui permitiro que voc comece a utilizar a UML
imediatamente.Eles esto divididos em categorias de Anlise e Projeto/Construo. A
primeiraq categoria lista novos requisitos do sistema; eles devem ser analizados,
projetados e implementados no sistema. A segunda categoria contm mudanas tcnicas
e melhorias que afetam principalmente o projeto e a implementao. [...] observe que
alguns [exerccios] s podem ser feitos nos modelos de anlise e projeto. [...]
O exerccio inicial serve para voc se familiarizar com Rational Rose [...]. Inicie a
ferramenta, abra o modelo de anlise ou de projeto, e brinque com o modelo. Examine

as diferentes views, os diferentes diagramas, e as especificaes; em seguida, imprima o


modelo completo.

Exerccios de Anlise
1. Introduza funcionalidade para informar um usurio com uma reserva pendente
quando um item do ttulo reservado retorna biblioteca. O usurio com a reserva
mais antiga deve ser avisado primeiro.
2. Introduza funcionalidade para informar uma pessoa sobre o vencimento de um
emprstimo.
3. Estenda o sistema de forma a remover reservas depois de um dado tempo.
4. Estenda o tratamento de ttulos para que eles possam ser colocados em diferentes
categorias e para adicionar a cada ttulo informao definida pelo usurio (ex.
um resenha sobre um livro).
5. Estenda o sistema para gerenciar a aquisio de novos itens.
6. Introduza regras no sistema de biblioteca para limitar emprstimos. Por
exemplo, permita apenas cinco reservas por pessoa ou dez emprstimos por
pessoa. Faa com que a definio das regras seja simples.
7. Insira uma classe genrica para imprimir listas e cartas; por exemplo, listas de
ttulos e itens para fins de inventrio e cartas para usurios sobre reservas e
emprstimos.
8. Estenda o modelo com uma conexo Internet de forma que usurios possam
pesquisar ttulos e itens num site da World Wide Web.
9. No modelo atual, a administrao de servios feita usando objetos da interface
do usurio que fazem aes nos objetos do domnio (business objects). Mude a
arquitetura para que classes de objetos de controle (classes que tratam um
servio especfico do incio at o fim) sejam usadas. Um exemplo de uma classe
de objeto de controle coletaria estatsticas sobre a situao atual da biblioteca - o
nmero de usurios, ttulos, itens e emprstimos atuais - e imprimiria os
resultados numa janela.
10. Refaa o modelo de biblioteca para dar suporte integrao de outras bibliotecas
que utilizem o mesmo sistema. Isto significa que uma biblioteca deveria ser
capaz de pesquisar um ttulo ou item numa outra biblioteca. Uma biblioteca deve
poder tomar um item emprestado atravs do envio de uma mensagem para a
biblioteca detentora de um item, a qual aciona os procedimentos de emprstimo
e devolve o item via correio para a biblioteca original. Mostre um diagrama de
implantao (deployment) para este novo sistema.

Exerccios de Projeto e Construo

11. Adicione as classes "Book Title" e "Magazine Title" ao projeto e adicione alguns
novos atributos adequados a cada uma das classes. Faa com que a classe
existente "Title" seja abstrata e tenha certeza de que as novas classes possam ser
armazenadas de forma persistente.
12. Mude a janela "Browse All" para permitir que um usurio clique duas vezes num
ttulo ou num usurio nas list-boxes abrindo imediatamente assim a janela de
atualizao correta.
13. Mude o projeto da pesquisa de objetos para aceitar metacaracteres ("wild cards")
para pesquisar ttulos, autores ou usurios (ex. "UML*" localiza todos os ttulos
iniciando com "UML").
14. Mude o projeto da pesquisa de objetos para manusear resultados mltiplos de
pesquisa (correntemente, apenas o primeiro casamento retornado). O nmero
de "sucessos" deve ser informado e o usurio deve poder escolher entre os
registros resultantes.
15. Adicione na interface do usurio um toolbar contendo botes para escolher
funes especficas.
16. Melhore o desempenho do banco de dados atravs da reutilizao de registros
removidos de um arquivo e atravs do uso de um arquivo de ndices quando uma
pesquisa mais eficiente de um objeto especfico pode ser realizada (atualmente, a
pesquisa sequencial).
17. Mude o projeto do Database Package para utilizar um banco de dados relacional
em vez da soluo atual usando arquivos. Sero necessrias novas classes no
Database Package. Tente no mudar a interface para a classe Persistent, de forma
a no afetar o resto da aplicao.
18. Mude a interface do usurio para que a aplicao utilize uma nica janela; desta
forma, a janela principal muda de acordo com a funo sendo realizada.
19. Adicione uma nova classe utilitria para criar um log utilizvel por todas as
partes da aplicao para logar mensagens de depurao ou de rastreio de sua
operao. O tipo de informao mantida no log deve ser configurvel atravs da
interface do usurio.
20. Remova a necessidade de usar as operaes read() e write() numa classe
persistente. Alternativamente, use uma soluo pela qual uma classe mantm
meta-dados (dados sobre si mesma - i.e., uma descrio dos seus atributos), para
que uma classe de banco de dados possa perguntar a um objeto persistente
desconhecido sobre seus atributos e valores destes atributos e ento armazenlos num banco de dados. Uma nova classe Metadata deve ser definida e um
objeto de meta-dados deve ser agregado por todas as classes persistentes.
[Jacques: em vez da soluo proposta, sugiro fazer a mesma coisa usando o
conceito de JavaBeans].

You might also like