9
Universidade de São Paulo (USP) Instituto de Ciências Matemáticas e de Computação (ICMC) Programação Orientada a Objetos (SCC0204) 1ª Lista de Exercícios 1 - Em suas palavras, defina os seguintes termos: a. Classe b. Objeto c. Instanciação d. Atributo de objeto e. Método de objeto f. Atributo de classe ou atributos estáticas g. Construtor h. Método de classe ou métodos estáticos 2 - Sua tarefa é criar uma classe que contenha um Registro de Agenda. A tabela 1 descreve as informações que um Registro de Agenda deve conter: Tabela 1 – Informações do registro Crie os seguintes métodos: 1. Forneça todos os métodos assessores e modificadores necessários para todos os atributos. 2. Construtores. 3 - Crie uma classe Agenda que possa conter entradas de objetos tipo Registro de Agenda (utilize a classe criada no exercício 2). Devem ser oferecidos os seguintes métodos para a agenda: 1. Adicionar registro 2. Excluir registro 3. Visualizar registros 4. Modificar um registro 4 - Qual das seguintes afirmativas está correta? A. "X estende Y" é correto Se, e Somente se, X for uma classe e Y for uma interface. B. “X estende Y" é correto se, e somente se, X for uma interface e Y for uma classe. C. "X estende Y" é correto se X e Y forem ambos classes ou ambos interfaces.

lista01.pdf

Embed Size (px)

Citation preview

  • Universidade de So Paulo (USP)Instituto de Cincias Matemticas e de Computao (ICMC)

    Programao Orientada a Objetos (SCC0204)

    1 Lista de Exerccios

    1 - Em suas palavras, defina os seguintes termos:a. Classeb. Objetoc. Instanciaod. Atributo de objetoe. Mtodo de objetof. Atributo de classe ou atributos estticasg. Construtorh. Mtodo de classe ou mtodos estticos

    2 - Sua tarefa criar uma classe que contenha um Registro de Agenda. A tabela 1 descreve as informaes que um Registro de Agenda deve conter:

    Tabela 1 Informaes do registro

    Crie os seguintes mtodos:1. Fornea todos os mtodos assessores e modificadores necessrios para todos os atributos.2. Construtores.

    3 - Crie uma classe Agenda que possa conter entradas de objetos tipo Registro de Agenda (utilize a classe criada no exerccio 2). Devem ser oferecidos os seguintes mtodos para a agenda:1. Adicionar registro2. Excluir registro3. Visualizar registros4. Modificar um registro

    4 - Qual das seguintes afirmativas est correta?

    A. "X estende Y" correto Se, e Somente se, X for uma classe e Y for uma interface.B. X estende Y" correto se, e somente se, X for uma interface e Y for uma classe.C. "X estende Y" correto se X e Y forem ambos classes ou ambos interfaces.

  • D. "X estende Y" correto para todas as combinaes de X e Y sendo classes e/ou interfaces.

    5 Quais das seguintes opes de declarao so vlidas? (Marque todas as corretas).

    6 - Dado dois arquivos em pacotes diferentes A e B. Explique o resultado do seguinte trecho de cdigo abaixo:

    8 - Dado:

  • Qual opo, inserida na linha 9, ir compilar? (Marque todas as corretas)A. Beagle b2 = (Beagle) dogl;B. Beagle b3 = (Beagle) dog2;C. Beagle b4 = dog2;D. Nenhuma das instrues acima ir compilar.

    9 - Dado:

    Quais opes so verdadeiras? (Marque todas as corretas)A. Woop -um Hmpf e tem-um Zing.B. zing -um Woop e tem-um Hmpf.C. Hmpf tem-um Woop e Woop -um Zing.D. Woop tem-um Hmpf e Woop -um Zing.

    10 - Quais afirmativas so verdadeiras? (Marque todas as corretas)

    A. Os relacionamentos Tem-Um sempre dependem da herana.B. Os relacionamento Tem-Um sempre dependem das variveis de instncias.C. Os relacionamento Tem-Um sempre precisam de pelo menos dois tipos de classes.D. Os relacionamento Tem-Um sempre dependem do polimorfismo.E. Os relacionamento Tem-Um sempre t6m acoplamento forte.

    11 - Imagine que tenha uma classe FabricaDeCarro e quero garantir que s existe um objeto desse tipo em toda a memria. No existe uma palavra chave especial para isto em java, ento teremos de fazer nossa classe de tal maneira que ela respeite essa nossa necessidade. Como fazer isso?

    12 - Modele um funcionrio. Ele deve ter o nome do funcionrio, o departamento onde trabalha, seu salrio (double), a data de entrada no banco (String), seu RG (String) e um valor booleano que indique se o funcionrio ainda est ativa na empresa no momento ou se j foi mandado embora. Voc deve criar alguns mtodos de acordo com sua necessidade. Alm deles, crie um mtodo bonifica que aumenta o salrio do funcionrio de acordo com o parmetro passado como argumento. Crie, tambm, um mtodo demite, que no recebe parmetro algum, s modifica o valor booleano indicando que o funcionrio no trabalha mais aqui. A idia aqui apenas modelar, isto , s identifique que informaes so importantes e o que um funcionrio faz. Desenhe no papel tudo o que um Funcionrio tem e tudo que ele faz.

    13 - Transforme o modelo acima em uma classe Java. Teste-a, usando uma outra classe que tenha o main. Voc deve criar a classe do funcionrio chamada Funcionrio, e a classe de teste voc pode nomear como quiser. A de teste deve possuir o mtodo main.

  • 14 - Crie um mtodo mostra(), que no recebe nem devolve parmetro algum e simplesmente imprime todos os atributos do nosso funcionrio. Dessa maneira, voc no precisa ficar copiando e colando um monte de System.out.println() para cada mudana e teste que fizer com cada um de seus funcionrios,

    15 - Construa dois funcionrios com o new e compare-os com o = =. E se eles tiverem os mesmos atributos? Para isso voc vai precisar criar outra referncia.

    16 - Construa dois funcionrios com o new e compare-os com o ==. E se eles tiverem os mesmos atributos? Para isso voc vai precisar criar outra referncia

    17 - Em vez de utilizar uma String para representar a data, crie uma outra classe, chamada Data. Ela possui 3 campos int, para dia, ms e ano. Faa com que seu funcionrio passe a us-la.

    18 - Qual o propsito da palavra-chave new? Explique o que acontece quando essa palavra-chave utilizada em um aplicativo.

    19 - Explique por que uma classe pode fornecer um mtodo set e um mtodo get para uma varivel de instncia.

    20 - Crie uma classe chamada Employee que inclui trs partes de informaes como variveis de instncia um primeiro nome (tipo String). um sobrenome (tipo String) e um salrio mensal (double). Sua classe deve ter um construtor que inicializa as trs variveis de instncia. Fornea um mtodo set e um get para cada varivel de instncia. Se o salrio mensal no for positivo. configure-o como 0.0. Escreva um aplicativo de teste chamado EmployeeTest que demonstra as capacidades da classe Employee. Crie dois objetos Employee e exiba o salrio anual de cada objeto. Ento a cada Employee um aumento de 10% e exiba novamente o sa1rio anual de cada Employee.

    21 - Crie uma c1asse chamada Date que inclui trs informaes como variveis de instncia um ms (tipo int), um dia (tipo int) e um ano (tipo int). Sua classe deve ter um construtor que inicializa as trs variveis de instncia e assumir que os valores fornecidos so corretos. Fornea um mtodo set e um get para cada varivel de instncia. Fornea um mtodo displayDate que exibe o ms, o dia e o ano separados por barras normais(/). Escreva um ap1icativo de teste chamado DateTest que demonstra as capacidades da classe Date

    22 - Uma empresa quer transmitir dados por telefone, mas esta preocupada com a possibi1idade de seus telefones estarem grampeados. Ela pediu para voc escrever um programa que criptografe os dados de modo que estes possam ser transmitidos mais seguramente. Todos os dados so transmitidos como inteiros de quatro digitos. Seu aplicativo deve ler um inteiro de quatro digitos inserido pelo usurio e criptograf-lo desta maneira: Substitua cada digito pelo resultado da adio de 7 ao dgito e obtendo o resto depois da diviso do novo valor por 10. Troque ento o primeiro dgito pelo terceiro e o segundo digito pelo quarto. Ento imprima o inteiro criptografado. Escreva um aplicativo

  • separado que receba entrada de um inteiro de quatro digitos criptografado e o descriptografe para formar o nmero original.

    23 - O mximo divisor comum (MDC) de dois inteiros o maior inteiro que divisvel por cada um dos dois nmeros. Escreva um mtodo mdc que retorna o mximo divisor comum de dois inteiros. Incorpore o mtodo a um aplicativo que l dois valores do usurio e exibe o resultado.

    24 - (Triplas de Pitgoras) Um tringulo retngulo pode ter lados cujos comprimentos so todos inteiros. O conjunto de trs valores inteiros para os comprimentos dos lados de um tringulo retngulo chamado de tripla de Pitgoras. Os comprimentos dos trs lados devem satisfazer a relao de que a soma dos quadrados de dois dos lados igual ao quadrado da hipotenusa. Escreva um aplicativo para localizar todos os triplos de Pitgoras para sidel, side2 e a hypotenuse, todos no maiores que 500. Utilize um loop for triplamente aninhado que tenta todas as possibilidades. Esse um mtodo de computao de fora bruta.

    25 - (Pesquisa de rvore binria) Escreva o mtodo binaryTreeSearch, que tenta localizar um valor especificado em um objeto rvore de pesquisa binria. O mtodo deve aceitar como um argumento uma chave de pesquisa a ser localizada. Se o n contendo a chave de pesquisa for localizado, o mtodo deve retornar uma referncia a esse no; caso contrrio, ele deve retornar uma referncia nula.

    26 - Como o polimorfismo promove extensibilidade?

    27 - Discuta quatro maneiras de atribuir referncias de superc1asse e de subclasse a variveis de superclasse e a tipos de subclasse.

    28 - Escreva uma hierarquia de herana para as classes Quadriltero, Trapzio, Paralelogramo, Retngulo e Quadrado. Utilize Quadrilateral como a superclasse da hierarquia. Faa a hierarquia o mais profunda (isto , com muitos nveis) possvel. Especifique as variveis de instncia e os mtodos para cada classe. As variveis de instncia private de Quadrilateral devem ser os pares de coordenadas x-y para os quatro pontos que delimitam o Quadriltero. Escreva um programa que instancia objetos de suas classes e gera sada da rea de cada objeto (exceto Quadriltero).

    29 - Desenhe uma hierarquia de herana para alunos universitrios semelhante a hierarquia ilustrada no cdigo abaixo. Utilize Aluno como a superclasse da hierarquia, ento herde Al uno com as classes AlunoDeGraduacao e AlunoGraduado. Continue a estender a hierarquia o mais profundo (isto , com muitos nveis) possvel. Por exemplo. Primeiranista, Segundanista, Terceiranista e Quartanista poderiam estender AlunoDeGraduaao; e AlunoDeDoutorado e AlunoDeMestrado poderiam ser subclasses de AlunoGraduado. Depois de desenhar a hierarquia, discuta os relacionamentos entre as classes.

    30 - Modifique o programa de jogo de dados no trecho de cdigo abaixo para permitir apostas. Inicialize a varivel bankBalance como $1.000. Pea ao jogador para inserir um wager (urna aposta). Verifique se wager menor que ou igual a bankBalance e, se no o

  • for, faa o usurio reinserir o wager ate um wager vlido ser inserido. Depois que um wager correto foi inserido, execute um jogo de dados. Se o jogador ganhar, aumente bankBalance por wager e exiba o novo bankBalance. Se o jogador perder, diminua bankBalance por wager, exiba o novo bankBalance, verifique se bankBalance tornou-se zero e, se tiver ocorrido, exiba a mensagem Sorry. You busted! [Desculpe, mas voc faliu.] . Enquanto o jogo se desenvolve, exiba vrias mensagens para criar uma conversa, como Oh, you re going for broke, huh? [Oh, parece que voc vai quebrar, hein?] ou Awcmon, take a chance! [Ah, vamos l, d uma chance para sua sorte!] ouYou re up big. Nows the time to cash in your chips! [Voc est montado na grana. Agora hora de trocar essas fichas e embolsar o dinheiro!]. Implemente a conversa como um mtodo separado que escolhe aleatoriamente a string a exibir.

  • 31 - (Jogo da velha) Crie uma classe TicTacToe que permitir escrever um programa completo para reproduzir o jogo da velha. A classe contm um array bidiniensional privado 3 por 3 de inteiros. O construtor deve inicializar a grade vazia com todos como zero. Permita dois jogadores humanos. Para onde quer que o primeiro jogador se mova, coloque um 1 no quadrado especificado; coloque um 2 no local para o qual o segundo jogador se mover. Todo movimento deve ocorrer em um quadrado vazio. Depois de cada jogada, determine se o jogo foi ganho e se aconteceu um empate. Se voc se sentir motivado. modifique seu programa de modo que o computador faa o movimento para um dos jogadores. Alm disso, permita que o jogador especifique se quer ser o primeiro ou o segundo. Se voc se sentir excepcionalmente motivado. desenvolva um programa que jogue o Tic-Tac-Toe tridimensional em uma grade 4 por 4 por 4. [Nota: Esse um projeto desafiador que pode consumir muitas semanas de esforo!]

  • 32 (Oito rainhas) Outro problema difcil para fs de xadrez o problema das oitos rainhas, que pede o seguinte: possvel colocar oito rainhas em um tabuleiro de xadrez vazio de modo que nenhuma rainha esteja atacando qualquer outra (isto , sem que duas rainhas estejam na mesma linha. na mesma coluna ou na mesma diagonal)? (Dica: possvel atribuir um valor para cada quadrado do tabuleiro de xadrez para indicar quantos quadrados de um tabuleiro de xadrez vazio so eliminados se uma rainha for colocada nesse quadrado). Uma vez que esses nmeros de eliminao so colocados em todos os 64 quadrados, uma heurstica apropriada poderia ser como segue: coloque a prxima rainha no quadrado com o menor nmero de eliminao. Por que essa estratgia intuitivamente atraente?

    33 - (Crivo de Eratstenes) Um nmero primo qua1quer inteiro maior que um que igualmente divisvel apenas si mesmo e 1. O crivo de Eratstenes um mtodo de localizar nmeros primos. Ele opera como segue:

    a) Crie um array boolean de tipo primitivo com todos os elementos inicializados como true. Os elementos do array com ndices primos permanecero true. Todos os outros elementos do array por fim so configurados como false.

    b) Iniciando com o indice de array 2, determine se um dado elemento true. Se for, faa um loop pelo restante do array e configure como false cada elemento cujo indice mltiplo do ndice para o elemento com valor true. Ento continue o processo com o prximo elemento com valor true. Para o indice de array 2, todos os elementos alm do elemento 2 no array que tiverem ndices mltiplos de 2 (ndices 4, 6, 8, 10 etc.) sero configurados como false; para o ndice de array 3, todos os elementos alm do elemento 3 no array que tiverem ndices mltiplos de 3 (ndices 6, 9, 12, 15 etc.) sero configurados como false; e assim per diante.

    Quando esse processo for concludo, os elementos de array que ainda forem true indicam que o indice um nmero primo. Esses ndices podem sei exibidos. Escreva um aplicativo que utiliza um array de 1000 elementos para determinar e exibir os nmeros primos entre 2 e 999. Ignore elementos de array 0 e 1.

    43 - (Crculos Concntricos utilizando o mtodo drawArc) Escreva um aplicativo que desenha uma srie de oito crculos concntricos. Os crculos devem ser separados por 10 pixels. Utilize o mtodo Graphics drawArc.

    44 - (Tringulos aleatrios) Escreva um aplicativo que exibe tringulos gerados aleatoriamente em cores diferentes. Cada tringulo deve ser preenchido com uma cor diferente. Utilize a classe GeneralPath e o mtodo fill da classe Graphics2D para desenhar os tringulos.

    45 - (Grfico de torta) Escreva um programa que insere quatro nmeros e os dispem em um grfico de torta. Utilize a classe Arc2D.Double e o mtodo fill da classe Graphics2D para realizar o desenho. Desenhe cada pedao da torta em uma cor separada.