Download - Lista Programação II

Transcript

3 - Defina uma classe Data com os dados: dia, ms e ano.13. Modifique o mtodo mostraData da classe Data (figura 8) para que o ms seja mostrado por extenso em vez de numeral (isto , quando o ms for 3, que o mtodo imprima maro, etc.)17. A classe Data (figura8) pode representar datas no-vlidas, com os valores de dia, ms e ano iguais a zero. Modifique o mtodo mostraData para que, se a data encapsulada no for vlida, uma mensagem Data Invlida seja impressa, em vez dos valores de dia, ms e ano23. Modifique o mtodo eIgual da classe Data (figura 8) para que uma data invlida seja considerada sempre diferente de qualquer outra33. Escreva, na classe Data, um mtodo duplicaData que receba como argumento uma outra instncia da classe Data, e duplique os valores dos campos da instncia passada como argumento para os campos encapsulados.36. Implemente a lgica correta de clculo de anos bissextos e dias no mtodo inicializaData da classe Data (figura 8) que tem uma abordagem simplista demais para verificar se o dia sendo usado vlido ou no: nessa operao ainda seria possvel passar a data 31/02/2000 e a operao iria considerar os valores passados como sendo vlidos. Modifique a operao dataValida para que esta considere o valor mximo que pode ser aceito como vlido, dependendo do ms, de forma que, para meses com 30 dias, o valor 31 para o dia seja considerado incorreto, e que para fevereiro o valor mximo seja calculado em funo de o ano ser bissexto ou no. Dica: Anos bissextos (tendo 29 dias em fevereiro) so divisveis por quatro, a no ser que sejam divisveis por 100. Anos que podem ser divididos por 400 tambm so bissextos. Dessa forma, 1964 e 2000 so bissextos, mas 1900 no bissexto. A operao de divisibilidade pode ser implementada pela funo mdulo, representada pelo sinal %, e comparada com zero: a expresso (1966 % 4) == 0 verdadeira, enquanto a expresso (1967 % 4) == 0 falsa.42. Uma das operaes que podemos efetuar com datas a comparao para ver se uma data ocorre antes de outra. O algoritmo para comparao muito simples, e seus passos esto abaixo. Nesse algoritmo, consideramos que dia1, ms1 e ano1 so os dados da primeira data, e que dia2, ms2 e ano2 so os dados da segunda data. 1. Se ano1 < ano2 a primeira data vem antes da segunda. 2. Se ano1 > ano2 a primeira data vem depois da segunda. 3. Se ano1 == ano2 e ms1 < ms2 a primeira data vem antes da segunda. 4. Se ano1 == ano2 e ms1 > ms2 a primeira data vem depois da segunda. 5. Se ano1 == ano2 e ms1 == ms2 e dia1 < dia2 a primeira data vem antes da segunda. 6. Se ano1 == ano2 e ms1 == ms2 e dia1 > dia2 a primeira data vem depois da segunda. 7. Se nenhum desses casos ocorrer, as datas so exatamente iguais.43. Escreva um mtodo vemAntes na classe Data (figura 8) que receba como argumento outra instncia da classe Data e implemente o algoritmo acima, retornando true se a data encapsulada vier antes da passada como argumento e false caso contrrio. Se as datas forem exatamente iguais, o mtodo deve retornar true.

Exerccio 3.17: Escreva o mtodo toString na classe Data, de forma que o ms seja mostrado por extenso em vez de numeral (veja o exerccio 13, lista anterior). Exerccio 3.18: Escreva o mtodo clona na classe Data, que retorne uma nova instncia que uma cpia da prpria data.Exerccio 4.1: Escreva um construtor para a classe Data que receba os valores correspondentes ao dia, ms e ano, e inicialize os campos da classe, verificando antes se a data vlida.Exerccio 4.13: Escreva outro construtor para a classe Data que receba uma instncia da prpria classe Data e use os dados desta para inicializar os campos. Veja tambm o exerccio 4.1Exerccio 5.1: Escreva, para a classe DataComFabrica (figura 8), um mtodo seteDeSetembro que se comporte como uma fbrica de instncias. Exerccio 5.2: Escreva, para a classe DataComFabrica (figura 8), um mtodo primeiroDoMs que se comporte como uma fbrica de instncias.