Please wait
Trabalho apresentado ao currículo da Disciplina de Programação de Computadores 2
\documentclass[12pt, a4paper, oneside, portuguese, brazil, english]{article}
%\usepackage[ansinew]{inputenc}
%\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[portuguese]{babel}
\PassOptionsToPackage{pdftex}{graphicx}
\usepackage{graphicx}
\usepackage{epstopdf}
\usepackage{subfig}
%%%%%%%%%%%%%%
\usepackage{listings}
\usepackage{color}
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\definecolor{bg}{rgb}{0.95,0.95,0.95}
\lstset{
language=Octave, % the language of the code
basicstyle=\footnotesize, % the size of the fonts that are used for the code
numbers=left, % where to put the line-numbers
numberstyle=\tiny\color{gray}, % the style that is used for the line-numbers
stepnumber=1, % the step between two line-numbers. If it's 1, each line
% will be numbered
numbersep=5pt, % how far the line-numbers are from the code
%backgroundcolor=\color{bg}, % choose the background color. You must add \usepackage{color}
showspaces=false, % show spaces adding particular underscores
showstringspaces=false, % underline spaces within strings
showtabs=false, % show tabs within strings adding particular underscores
frame=single, % adds a frame around the code
rulecolor=\color{black}, % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. commens (green here))
tabsize=4, % sets default tabsize to 2 spaces
captionpos=b, % sets the caption-position to bottom
breaklines=true, % sets automatic line breaking
breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
title=\lstname, % show the filename of files included with \lstinputlisting;
% also try caption instead of title
keywordstyle=\color{blue}, %blue % keyword style
commentstyle=\color{dkgreen}, %dkgreen % comment style
stringstyle=\color{mauve}, %mauve % string literal style
escapeinside={\%*}{*)}, % if you want to add a comment within your code
morekeywords={*,...} % if you want to add more keywords to the set
}
%%%%%%%%%%%%%%
\begin{document}
\pagestyle{empty}
\sffamily
\noindent
\begin{center}
\includegraphics[scale=.7]{LogoCEFET}
\vfill
\Large
%CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS\\
Centro Federal de Educação Tecnológica de Minas Gerais\\
%CAMPUS VII - UNIDADE TIMÓTEO - Engenharia da Computação\\
Campus VII - Unidade Timóteo - Engenharia da Computação\\
\end{center}
\vfill
\begin{center}
\huge\bfseries
Lista 01 - Programação de Computadores II
\vfill
\LARGE\bfseries
Aluno: Egmon Pereira
\end{center}
\begin{center}
\Large
Orientador: Prof. Douglas Nunes de Oliveira\\
\vfill\vfill
\large
Timóteo, Maio de 2016
\end{center}
\pagebreak
\begin{enumerate}
\item Qual é o padrão de nomeação de variáveis utilizado em praticamente todo o mundo?
\begin{itemize}
\item[a)] Esta pergunta deseja que você esteja apto a responder se o nome de uma variável é todo maiúsculo ou minúsculo.
\item[R:] \textit{Primeiro define se a variável é padrão, private, protecte ou public, em seguida se retorno, ou seja, se inteira, String, char, etc., e o nome deve começar com letra minúscula e caso seja nome composto, a primeira letra do segundo nome deve ser maiúscula, ex: private int variavelComposta;}
\end{itemize}
\item Criar uma classe Conta com os atributos: número da agencia, número da conta e saldo.
\item[] \lstinputlisting[language=Java]{Lista01/ContaEx2.java}
\item Criar um objeto de Conta e alterar os valores de seus atributos.
\item[] \lstinputlisting[language=Java]{Lista01/ContaEx3.java}\pagebreak
\item Uso do operador \textit{new.Conta c = new Conta();}
\begin{itemize}
\item[I.] Qual a função/relação do new com a criação de um objeto?
\item[R:] \textit{Quando declaramos uma variável para associar a um objeto, na verdade, essa variável não guarda o objeto, e sim uma maneira de acessá-lo, chamada de referência. A palavra $new$ instancia uma Classe. \\ O $new$ , depois de alocar a memória para esse objeto, devolve uma "$flecha$", isto é, um valor de referência. Quando você atribui isso a
uma variável, essa variável passa a se referir para esse mesmo objeto.}
\item[II.] O que ocorre na memória?
\item[R:] \textit{Na memória é separado um espaço, uma posição, para que Java possa acessá-lo quando necessário.}
\item[III.] Onde está o objeto?
\item[R:] \textit{Na memória.}
\item[IV.] A variável c não é o objeto, o que ela é então?
\item[R:] \textit{$c$ é uma variável referência, apesar de, depois de um tempo, os programadores Java falarem "Tenho um objeto $c$ do tipo Conta", mas apenas para encurtar a frase "Tenho uma referência $c$ a um objeto do tipo Conta".}
\item[V.] Como então eu altero o atributo saldo, do objeto criado, usando o código: $c.saldo = 40$?
\item[R:] \textit{Ao utilizarmos o "." para navegar, o Java vai acessar a Conta que se encontra naquela posição de memória, e não uma outra.}
\end{itemize}
\item Tente escrever com suas palavras o que é uma classe e o que é um objeto no paradigma de desenvolvimento orientado a objetos.
\item[R:] \textbf{Classe} - É um conjunto de objetos com características comuns. \\\textbf{Objeto} - É um elemento da uma classe. \pagebreak
\item Quantos objetos e variáveis são criadas nos códigos abaixo; desenhe uma
representação de cada variável e cada objeto na memória; especifique um endereço
qualquer para cada objeto:
\begin{itemize}
\item[I.] $\lbrace $\\ \textit{Conta c1 = new Conta(); \\Conta c2 = new Conta();}\\ $\rbrace$
\item[R:] \textit{2 objetos e 1 variável \\ c1 = Conta@1540e19d e c2 = Conta@677327b6} \\ \includegraphics[scale=1]{Lista01/fg1}
\item[II.] $\lbrace $\\ \textit{Conta c1 = new Conta(); \\Conta c2 = c1;\\} $\rbrace$
\item[R:] \textit{1 objetos e 2 variáveis \\ c1 = c2 = Conta@677327b6} \\ \includegraphics[scale=1]{Lista01/fg2}
\end{itemize}\pagebreak
\item[] \textbf{Pense em comportamentos que uma conta bancária deve ter: sacar passando um valor,
depositar passando algum valor, obter saldo. É desta forma que se define os métodos.}
\item Crie os métodos da classe Conta definida no exercício anterior.
\item[] \lstinputlisting[language=Java]{Lista01/ContaEx7.java} \pagebreak
\item Crie um código para testar esta classe. Crie um objeto, imprima o seu saldo, faça um deposito, imprima o seu saldo, faça um saque e imprima o seu saldo.
\item[] \lstinputlisting[language=Java]{Lista01/ContaEx8.java}
\item[] \lstinputlisting[language=Java]{Lista01/ContaEx9.java}
\item[] \lstinputlisting[language=Java]{Lista01/ContaEx10.java}
\item Afirmando que uma boa prática é criar uma método de leitura e escrita para cada um dos atributos. E que os métodos de leitura de atributos começam com a palavra get e os métodos de escrita começam com a palavra set. Exemplo: getNome() e setNome(String nome). Crie um método de leitura e escrita para cada atributo da classe Conta. Faça isto sem usar o gerador de código da IDE de desenvolvimento.
\item[] \lstinputlisting[language=Java]{Lista01/ContaEx11.java}
\item Toda vez que crio um método e declaro uma variável com o mesmo nome do
atributo da classe ocorre o sombreamento: \\ \textit{public class Aluno$\lbrace$\\ String nome = "Douglas";\\ public void setNome(String nome) $\lbrace$\\ nome = nome;$\rbrace$\\$\rbrace$}\\ Caso uma classe Aluno possua o atributo "nome" e o código abaixo seja executado: \\ \textit{public class TesteMain$\lbrace$\\ public static void main(String [] args) $\lbrace$ \\Aluno a = new Aluno();\\ a.setNome("Nunes"); \\System.out.println(a.nome); $\rbrace$ \\$\rbrace$}\\ O que será impresso em tela?
\item[R:] \textit{Será impresso apenas o nome: Douglas} \\A impressão indica que não houve alteração no atributo nome, porque?
\item[R:] \textit{Porque o apontamento da memória é diferente, pois o nome Nunes foi colocado em outro endereço de memória instanciado pelo set} \\Como resolver o problema encontrado?\pagebreak
\item[R:] No código: \\public void setNome(String nome) $\lbrace$ \\ nome = nome;\ $\rbrace$ \\deve ser acrescentado o "this", ficando: \\ public void setNome(String nome) $\lbrace$ \\ this.nome = nome;\\ $\rbrace$ \\e também o deve ser acrescentado o código: \\public String getNome()$\lbrace$ \\ return nome; $\rbrace$\\
\item[] \textbf{Na apostila da Caelum, nos exercícios do capítulo 4, fazer os exercícios 1 ao 9.}
\item Modele um funcionário. Ele deve ter o nome do funcionário, o departamento onde trabalha, seu salário ( double ), a data de entrada no banco ( String ) e seu RG ( String ). \\Você deve criar alguns métodos de acordo com sua necessidade. Além deles, crie um método recebeAumento que aumenta o salario do funcionário de acordo com o parâmetro passado como argumento. Crie também um método calculaGanhoAnual , que não recebe parâmetro algum, devolvendo o valor do salário multiplicado por 12. \\A ideia aqui é apenas modelar, isto é, só identifique que informações são importantes e o que um funcionário faz. Desenhe no papel tudo o que um Funcionario tem e tudo que ele faz.
\item[R:] \textbf{Funcionário}\\
- nome do funcionário String;\\
- departamento String;\\
- salário double;\\
- entrada String\\
- RG String\\
-----------------------------------------------\\
+ recebeAumento(); void\\
+ calculaGanhoAnual(); double\\ \pagebreak
\item Transforme o modelo acima em uma classe Java. Teste-a, usando uma outra classe que tenha o main . \\Você deve criar a classe do funcionário com o nome Funcionario , mas pode nomear como quiser a classe de testes, contudo, ela deve possuir o método main.
\item[]
\lstinputlisting[language=Java]{Lista01/Funcionario.java}
\pagebreak
\lstinputlisting[language=java]{Lista01/Ex02.java}
\textbf{TELA:}\\
run:\\
Salário Inicial: R\$1.234,66\\
Salário Com Aumento: R\$2.469,32\\
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)\\
\item Crie um método mostra(), que não recebe nem devolve parâmetro algum e simplesmente imprime todos os atributos do nosso funcionário. Dessa maneira, você não precisa ficar copiando e colando um monte de $System.out.println()$ para cada mudança e teste que fizer com cada um de seus funcionários, você
simplesmente vai fazer:
\item[R:] \textit{A Saída foi diferente, pois não foram comparados os atributos, mas sim os objetos, que são diferentes, pois possuem diferentes endereços de memória.}\\
\item Construa dois funcionários com o new e compare-os com o $==$. E se eles tiverem os mesmos atributos? Para isso você vai precisar criar outra referência:
\item[R:] \textit{A Saída foi igual, pois não foi criado um objeto diferente, mas usado o mesmo para f1 e f2.}
\item Crie duas referências para o mesmo funcionário, compare-os com o == . Tire suas conclusões. Para criar duas referências pro mesmo funcionário; \\O que acontece com o if do exercício anterior?
\item[R:] \textit{Por que na 3 criamos dois objetos diferentes. E na 4 ao invés da variável receber um novo endereço, recebeu um endereço que já existia.}\\
\item Modele e implemente uma classe chamada ParDeDados, composta por dois dados de seis lados e um método rolar. Crie uma classe TestaParDeDados com um método main que irá "lançar" (rolar) um objeto ParDeDados múltiplas vezes contando o número de vezes que aparece o número 6 em ambos os dados.
\item[] \lstinputlisting[language=Java]{Lista01/ContaEx16.java}
\item Através da manipulação genética, biólogos criaram uma bactéria que come lixo. Esta consome o dobro de seu peso em lixo por hora. O peso da bactéria é constante (\textit{cerca de 10 picogramas}), o lixo é totalmente metabolizado. De 3 em 3 horas cada bactéria se dividem em duas. Uma bactéria vive apenas 25 horas e depois morre. \\Modele a classe Bacteria. Ela deve representar adequadamente o estado de uma bactéria (\textit{tempo de vida, lixo metabolizado, etc}). Deve ter métodos para retornar quanto lixo ela comeu, simular a passagem de uma hora (reduzindo o seu tempo de vida) e retornar o
tempo de vida restante.\\ Crie uma classe Colonia que representa uma colônia de bactérias (vetor). A classe Colonia deve ter métodos que: simula a passagem de horas (das bactérias), retorna a quantidade de bactérias existentes e o total de lixo consumido. Faça um programa de teste que simula a passagem de N horas.
\item[] \lstinputlisting[language=Java]{Lista01/Bacterias.java}
\item[] \lstinputlisting[language=Java]{Lista01/Colonia.java}\pagebreak
\item[] \textbf{Exercícios para entender herança, reescrita e polimorfismo.}
\item Criar as classes "Pessoa", "Funcionario", e "Cliente".
\item[] \lstinputlisting[language=Java]{Lista01/Pessoa2.java}
\item[] \lstinputlisting[language=Java]{Lista01/Funcionario2.java}
\item[] \lstinputlisting[language=Java]{Lista01/Cliente2.java}
\item Funcionário tem os atributos nome, cpf e rg, que são comuns com a
classe Cliente.
\item[] \lstinputlisting[language=Java]{Lista01/Funcionario2b.java}
\item Criar 3 variáveis do tipo Pessoa. \\ \textit{Pessoa p1 = new Pessoa();\\ Pessoa p2 = new Funcionario(); \\Pessoa p3 = new Cliente();}
\item[] \lstinputlisting[language=Java]{Lista01/Empresa2.java}
\item Verificar se houve erro em umas das linhas da atividade 4. Se houve ou
não erros, porque?
\item[] \lstinputlisting[language=Java]{Lista01/Empresa2b.java}\pagebreak
\item Criar duas variáveis dos tipos: Funcionario e Cliente:\\ \textbf{Funcionario f = new Pessoa();\\ Cliente c = new Pessoa();}
\item[] \lstinputlisting[language=Java]{Lista01/Empresa2c.java}
\item As linha da atividade 6 ocorreram erros? Porque?
\item[] \lstinputlisting[language=Java]{Lista01/Empresa2d.java}
\item Porque as linhas abaixo não apresentam erros se o método toString()
não existe em nenhuma das classes. \\ \textit{Pessoa p = new Pessoa();\\ Funcionario f = new Funcionario();\\ Cliente c = new Cliente();\\ Sout(f.toString());\\ Sout(c.toString());\\ Sout(p.toString());}
\item[R:] Não há erro, pois o "\textit{toString}" é um método herdado do "\textit{Object}".
\item Todas as classes herdam de Object?
\item[R:] Sim
\item Se uma classe Endereco for declarada abaixo:\\ \textit{public class Endereco$\lbrace$ \\//Atributos \\//Métodos $\rbrace$} \\
Esta classe está herdando de alguma outra classe? Porquê?
\item[R:] Não, pois para herdar de outra classe seria necessário o código ser reescrito da seguinte forma:\\ \textit{public class Endereco extends NomeDaClasseHerdada$\lbrace$ \\//Atributos \\//Métodos $\rbrace$}
\item Declarar um vetor de 3 posições do tipo Pessoa. Instanciar 2 objetos de
Funcionario e 1 de Cliente. Colocar suas referencias no vetor. Percorrer o
vetor imprimindo o atributo nome de cada um dos objetos.
\item[] \lstinputlisting[language=Java]{Lista01/Empresa2e.java}
\item[] \lstinputlisting[language=Java]{Lista01/Pessoa2e.java}
\item[] \lstinputlisting[language=Java]{Lista01/Funcionario2e.java}
\item[] \lstinputlisting[language=Java]{Lista01/Cliente2e.java}
\pagebreak
\textbf{Exercícios para entender herança e construtores.}
\item Alterar a classe Pessoa da atividade anterior. Criar um construtor que receba como
parâmetro: nome, cpf e rg. Desta forma ignorando o construtor padrão.
\item[] \lstinputlisting[language=Java]{Lista02/Pessoa.java}
\item Ocorreu algum erro nas classes filhas? Porque?
\item[R:] Sim. Porque nas classes filhas não estão sendo chamdados os parâmetros do \textit{Construtor}.
\item Corrigir o problema, alterando as classes filhas de Pessoa. Visto que o construtor
padrão (fornecido pelo Java) das filhas não atendem.
\item[] \lstinputlisting[language=Java]{Lista02/Cliente.java}
\item[] \lstinputlisting[language=Java]{Lista02/Funcionarios.java}
\item A classe Funcionário possui codFuncionario, criar dois construtores: um recebendo
nome, CPF e RG; outro recebendo codfuncionario, nome, CPF e RG.
\item[] \lstinputlisting[language=Java]{Lista02/Funcionarios1.java}
\item Idem à atividade 4 porém envolvendo a classe Cliente.
\item[] \lstinputlisting[language=Java]{Lista02/Cliente1.java}
\item Conceitualmente, Pessoa ou Cliente ou Funcionário pode herdar de Endereço? Ou
Endereço pode herdar de Pessoa ou Cliente ou Funcionário? Porque?
\item[R:] Não. Porque \textbf{Endereco} não é uma \textbf{Pessoa}, nem um \textbf{Cliente} e nem um \textbf{Funcionarios}. Analogamente, \textbf{Pessoa}, \textbf{Cliente} e \textbf{Funcionários} não são \textbf{Endereco}.
\item Se a relação da classe Endereco com Pessoa, Cliente ou Funcionario não é de herança,
então qual é a relação?
\item[R:] Relação de Composição.
\item Como resolver em Orientação a Objetos para Cliente e Funcionário possuir endereço.
Codifique.
\item[R:] Basta instanciar as Classes \textbf{Funcionarios} e \textbf{Cliente}:
\item[] \lstinputlisting[language=Java]{Lista02/Funcionarios2.java}
\item[] \lstinputlisting[language=Java]{Lista02/Cliente2.java}
\pagebreak
\textbf{Classes Abstratas, Interfaces e tratamento de exceções.}
\item Crie uma hierarquia de animais cujo ancestral em comum é a classe abstrata \textbf{Animal}. Algumas subclasses da classe animal implementarão a interface chamada \textbf{AnimalDeEstimacao}. Treinaremos com variações destes animais, seus métodos e polimorfismo.
\item[36.1] Crie a classe Animal, que é a superclasse abstrata de todos os animais;
\item[a.] Declare um atributo inteiro protected com o nome numeroDePernas, que armazena o
número de pernas do animal;
\item[b.] Declare um atributo protected do tipo String representando o nome do animal;
\item[c.] Defina um construtor protected que inicia o atributo numeroDePernas;
\item[d.] Declare o método abstrato comer;
\item[e.] Declare o método concreto caminhar que exibe uma mensagem do tipo "\textbf{Anda com
<numero> pernas.}";
\item[36.2] Crie métodos \textbf{get/set} conforme diagrama. Crie a classe Aranha.
\item[a.] A classe Aranha herda da classe Animal;
\item[b.] Defina um construtor que chama o construtor da superclasse para especificar que todas
aranhas possuem 8 pernas;
\item[c.] Implemente o método comer. Crie a interface \textbf{AnimalDeEstimacao} especificada no diagrama \textbf{UML}.
\item[36.3] Crie \textbf{classe Gato} que herda de \textbf{Animal} e implementa \textbf{AnimalDeEstimacao}.
\item[a.] Defina um construtor que recebe um parâmetro do tipo String que especifica o nome do
gato. Este construtor deve chamar o construtor de sua superclasse para especificar que
todos gatos possuem 4 pernas.
\item[b.] Defina outro construtor que não recebe parâmetros. Dentro deste construtor chame o
construtor anterior (utilizando a palavra reservada this) e passe uma string vazia como
argumento.
\item[c.] Implemente o método da interface \textbf{AnimalDeEstimacao}.
\item[d.] Implemente o método \textbf{comer}.
\item[36.4] Crie a classe \textbf{Peixe} que herda de \textbf{Animal}. Reescreva os métodos de \textbf{Animal} para especificar que \textbf{Peixe} não anda e não possui \textbf{pernas}
\item[36.5] Crie um programa chamado \textbf{TestaAnimais}. Dentro do método \textit{main}, crie e manipule instâncias das classes criadas acima. Inicie com:
\item[] Peixe p = new Peixe();
\item[] Gato g = new Gato(?Tom?);
\item[] Animal a = new Peixe();
\item[] Animal ab = new Aranha();
\item[] AnimalDeEstimacao ae = new Gato();
Experimente utilizar:
\item[a.] Chamando métodos em cada objeto,
\item[b.] Fazendo "\textbf{casting}" de objetos (conversões),
\item[c.] utilizando polimorfismo, e
\item[d.] utilizando super para chamar métodos da superclasse.
\item[] \lstinputlisting[language=Java]{Lista02/Animal.java}
\item[] \lstinputlisting[language=Java]{Lista02/AnimalDeEstimacao.java}
\item[] \lstinputlisting[language=Java]{Lista02/Aranha.java}
\item[] \lstinputlisting[language=Java]{Lista02/Gato.java}
\item[] \lstinputlisting[language=Java]{Lista02/Peixe.java}
\item[] \lstinputlisting[language=Java]{Lista02/TesteAnimais.java}
\pagebreak
\item Crie um programa que receba 2 números inteiros e imprima o resultado da divisão do
primeiro pelo segundo. O programa deverá tratar algumas exceções (não deixando o
programa finaliza com erro) como : o usuário entrar com valores não inteiros e ocorrência de
divisão por zero.
\item[] \lstinputlisting[language=Java]{Lista02/Divisao.java}
\end{enumerate}
\begin{center}
\Large
\textit{"Nenhum homem diz "}Deus não existe\textit{", a não ser aquele que tem interesse em que ele não exista" (Agostinho)}
\end{center}
\end{document}
Our gallery is the easiest way to put your LaTeX templates, examples and articles online. Just create a free project and use the publish menu. It only takes a couple of clicks!
The LaTeX templates, examples and articles in the Overleaf gallery all come from our amazing community.
New content is added all the time. Follow us on twitter for the highlights!