Você está na página 1de 5

Nome: Maria Fernanda Leonel Bertelli - RA: 2503530

1º Lista de Exercícios

1) Por que falamos que Java é totalmente aderente às técnicas de Orientação a


Objetos?
Java é totalmente aderente às técnicas de Orientação a Objetos porque
podemos facilmente aplicar os conceitos de abstração, atributos, classes,
objetos, etc.

2) Explique o que é e como se utiliza o processo de “abstração”.


Abstração é a observação do mundo real e a extração de um componente dele,
o qual você consegue usar no mundo computacional. Utiliza-se o processo de
abstração da seguinte forma:
1. Identificação de um “objeto” no mundo real a fim de utilizá-lo no mundo
computacional (tudo vai girar em torno dele no programa), como, por
exemplo, uma pessoa;
2. Atribuições para a pessoa: características desse objeto. Por exemplo:
pessoas possuem CPF, RG, endereço, etc.

3) Quais são os artefatos produzidos na programação orientada a objetos?


Classe, objeto, método e atributo.

4) O que é um “tipo primitivo” de dados?


São dados do tipo Char, Int, Double, etc, que já são conhecidos pelo Sistema
Operacional.

5) O que é um “tipo abstrato” de dados?


É um tipo de dado construído e idealizado pelo próprio programador. Ou seja,
não é previamente conhecido pelo Sistema Operacional.

6) Explique o que é o “Garbage Collector”. Como este recurso pode dinamizar o


funcionamento do sistema?
É um recurso que permite que os programas Java realizem o gerenciamento de
memória de forma automática. Este recurso pode dinamizar o funcionamento do
sistema porque ele exclui os objetos que não estão mais sendo utilizados pelo
programa e, então, libera espaço na memória que pode ser posteriormente
utilizado.

7) Considerando o modo Shell (linhas de comando) do sistema operacional


Windows, como se faz para:

7.a) Compilar um código fonte Java;


É necessário digitar “javac NomeDoPrograma.java”. Nesse momento, um
arquivo.class é gerado (ByteCode).

7.b) Fazer com que a J.V.M. (Máquina Virtual Java) execute uma
aplicação Java.
Para isso, basta digitar “java NomeDoPrograma”. Esse comando faz com
que a JVM execute a aplicação.
8) O que é o “ByteCode”?
É um código que é executado sobre a J.V.M., ou seja, como se ele fosse “nativo”
da linguagem Java.

9) Explique o que é a característica “Portabilidade”. Como isto é possível com


aplicações Java? Para esta resposta relacione 4 “personagens” deste cenário: o
código fonte (arquivo .java), o byteCode (arquivo .class), o Sistema Operacional
e a JVM (Java Virtual Machine).
Portabilidade é a capacidade que Java tem em funcionar em qualquer
máquina, independentemente de Sistema Operacional ou Hardware. Em
aplicações Java, isso é possível por meio do diálogo entre o Sistema Operacional
e a Linguagem Java no momento de compilação e execução de um código fonte.
Isso acontece, primeiramente, quando o usuário decide compilar uma
aplicação Java, digitando “javac NomeDoPrograma.java”. Com isso, um
programa byteCode (arquivo.class) é gerado. Depois disso, é preciso executar o
código. Em Java, isso é feito da seguinte forma: “java NomeDoPrograma”. A
palavra java na frente do programa faz com que seja criada, automaticamente,
a J.V.M, a qual possui suas próprias instruções e executa o código, independente
de Sistema Operacional, quando requisitado pelo usuário.

10) Justifique a afirmação que diz que “a segurança em Java se dá em dois


níveis: proteção de hardware e proteção de software”.
Proteção de hardware: pelo fato de Java não implementar “ponteiros”,
garante a integridade no gerenciamento da memória principal. O que evita que
inadvertidamente o “programador” aloque um espaço que já está sendo utilizado
por outra aplicação.
Proteção de software: as API ́s (Interfaces para Programação de
Aplicações), fornecidas na “bibliotecas” nativas de Java, durante sua instalação
foram testadas inúmeras vezes. Dessa forma, a margem de erros foi reduzida
durante a construção de uma aplicação.

11) Explique como aplicamos o conceito de “Modularidade” em Java. Na


resposta desta questão deve-se tratar dos conceitos sobre “Acoplagem” e
“Coesão”.
O conceito de modularidade pode ser aplicado por meio da acoplagem. A
acoplagem é quando fazemos classes mais específicas, as quais vão ser
utilizadas de acordo com um serviço que só elas podem fazer. Isso é o contrário
da coesão, pois um programa coeso é quando temos uma classe sozinha, a qual
possui várias funcionalidades dentro dela. Geralmente, é aconselhável buscar a
coesão, mas nem sempre é possível.

11.a) Como esta característica pode ajudar na questão da


“Manutenibilidade”?
A acoplagem, apesar de não ser o ideal, permite que você corrija um erro
sem ter que prejudicar o restante do código. Logo, é mais fácil fazer
manutenções na aplicação.

12) Para servem os objetos:


12.a) this;
Ele serve para apontar ao membro da própria classe. Esse membro pode
ser um método ou um atributo.
12.b) super.
Ele serve para utilizar um método original da classe mãe, apontando ao mesmo
na classe filha.

13) Usando Java, dê um exemplo que contemple as respostas das questões 12.a
e 12.b.
Em anexo.

14) Dentre os conceitos de sustenta a Orientação a Objetos, explique:

14.a) Encapsulamento:
Técnica que se usa para gerenciar as Trocas de Mensagem entre os
objetos, permitindo ou restringindo a comunicação entre as partes (ou todo) do
objeto.
14.a.i) Seus níveis (explique cada um dos três níveis);
+public (pode ser acessado por todos);
-private (pode ser acessado somente pela classe a qual o atributo está
declarado);
#protected (pode ser acessado pela própria classe que o atributo foi
declarado e pela classe que estende a que possui o atributo do tipo protected).

14.a.ii) Como o Encapsulamento pode nos ajudar na padronização,


segurança e “manutenibilidade” no desenvolvimento de sistemas;
O encapsulamento padroniza o tipo de troca de mensagem, já que se for
private, public ou protected, os objetos terão que se comunicar de maneira
constante e igual, sempre respeitando o tipo de encapsulamento. Além disso,
permite segurança, pois se o objeto for private, por exemplo, significa que ele
não pode ser usado em outra classe, apenas naquela a qual ele pertence. Já a
manutenibilidade diz respeito a facilidade de poder mudar o tipo de troca de
mensagens entre objetos, por exemplo: se você quiser que os objetos totalmente
encapsulados (private) se comuniquem mais abertamente e possam ser
chamados em subclasses, é só fazer que ele seja do tipo public.

14.b) Herança:
Herança é um mecanismo que permite criar uma nova classe a partir de
uma que já existe, se aproveitando das características existentes da classe que
vai ser estendida. Uma classe que herda outra (classe filha) precisa,
obrigatoriamente, ser um “tipo de” da classe que está sendo herdada (classe
Mãe). Por exemplo: pudim de leite e mousse de maracujá são um tipo de
sobremesa.

14.b.i) Explique os conceitos que “Generalização” e “Especialização”;


Generalização é quando temos uma entidade geral, como: Médico é uma
entidade geral. Especialização é como o próprio nome diz: “ESPECIALIZADA”,
como: Médico Pediatra, Médico Oftalmologista, etc. No mundo computacional,
isso poderia ser representado quando temos uma classe geral e outras classes
que fazem algum serviço específico, ou seja, especialistas em algo.
14.b.ii) Como o mecanismo de Herança pode nos ajudar na padronização,
segurança e “manutenibilidade” no desenvolvimento de sistemas;
A herança ajuda na padronização porque permite a reutilização de
atributos e eventos da classe mãe e que vão precisar ser reutilizados na classe
filha. Além disso, também é mais seguro porque a classe filha vai ser UM TIPO
DA classe mãe, o que significa que não tem como a aplicação ter o risco de “se
perder” do seu propósito original. E, por fim, é mais fácil realizar manutenções
pois, supondo que existe alguma funcionalidade que não saiu conforme o
esperado, podemos mudá-la na classe mãe porque essa alteração vai servir para
o restante do código.

14.b.iii) Explique o conceito de “Reusabilidade”. Como este é aplicado no


mecanismo de Herança e, ainda, como esta possibilidade nos ajuda no
dinamismo da codificação.
A reusabilidade é quando você pode fazer uso de algo que já existe, sem
precisar fazer do zero tudo de novo. Ela pode ser aplicada na herança porque
quando a classe B estende a classe A, tudo que está dentro da classe A pode
ser reutilizado na classe B: seus atributos e métodos. Isso ajuda no dinamismo
da aplicação porque você economiza tempo, o código fica mais seguro e a
manutenção do mesmo também.

14.c) Polimorfismo:
É a capacidade de se assumir diferentes formas.

14.c.i) Sobrecarga;
Métodos com o mesmo nome, mesma classe, mas com assinaturas diferentes.

14.c.ii) Sobrescrita;
Métodos com a mesma assinatura em classes distintas mas envolvidas num
mecanismo de Herança.

14.c.iii) Coerção.
Quando a implementação de um método envolvido num mecanismo de herança
é obrigatória.

15) Construa um programa para exemplificar as respostas das questões 14.a,


14.b e 14.c.
Em anexo.

16) Explique o que são trocas de mensagens? Como isso acontece?


Comunicação entre objetos. Isso acontece por meio quando invocamos os
métodos de um objeto por outro objeto.

17) O que é um “método construtor”? Qual sua importância? Faça um código


que demonstre sua explicação.
Capacidade de se criar objetos de uma classe em outra. Ele é importante pois
por meio dele, podemos receber os parâmetros para o funcionamento da
aplicação. O código está em anexo.

18) Explique o que são como e quando utilizamos:


18.a) Classe abstrata;
É um tipo de classe que só pode ser herdada, mas não instanciada. É
utilizada por meio da nomenclatura “abstract” na frente do nome da classe e,
dessa forma, é benéfica fazer o uso dela quando não queremos usar a classe
modelo para criar objetos, apenas suas classes filhas.

18.b) Método abstrato;


É um método que não possui um corpo na classe abstrata, mas que deve
ser implementado pelas classes filhas. Utilizamos esse método por meio da
nomenclatura "abstract" na frente do nome do método e, claro, ele deve ter corpo
nas classes que estendem a classe abstrata. Fazemos o uso dele quando
queremos que as classes filhas façam uma mesma tarefa (método abstrato).

18.c) Classe final;


Impede a herança de uma classe. Utiliza-se por meio da palavra “final” na
frente da assinatura da classe. Utilizamos a classe final quando queremos que o
conceito dela seja aplicado, ou seja, que a classe em questão não possa ser
herdada.

18.d) Atributo final;


Impede a alteração de um atributo. Utiliza-se por meio da palavra “final”
na frente do atributo. Utilizamos o atributo final quando queremos que o conceito
dele seja aplicado, ou seja, que o atributo não possa ser alterado.

18.e) Método final.


Impede a sobrescrição de um método. Utiliza-se por meio da palavra
“final” na frente da assinatura do método. Utilizamos o método final quando
queremos que o conceito dele seja aplicado, ou seja, que o método não possa
ser sobrescrito.

19) Dentro da tecnologia Java, explique o que é a estrutura de dados “Interface”.


Quando a utilizamos?
Interface é uma classe abstrata, a qual possui somente a declaração dos
métodos nela, ou seja, não possuem corpo. Utilizamos essa estrutura quando
queremos que uma classe tenha um método específico para ela, já que o método
da Interface pode assumir diferentes "corpos" em cada tipo de classe e as
necessidades dela.

Você também pode gostar