Exercícios de Programação Orientada ao Objeto
Exercícios:
1. O que devemos fazer no processo de abstração?2. Por que uma classe é uma abstração?
3. Qual a mudança de paradigma da abordagem estruturada para a orientada a objetos?
4.Quais são os 3 pilares da Programação Orientada ao Objeto?
4. Qual a diferença entre uma classe e um objeto?
5. O que é encapsulamento?
6. Como identificar classes e objetos necessários para resolver um problema?
7. O que é coesão?
8. Por que uma classe deve ter alta coesão?
9. Por que as operações de uma classe devem ter alta coesão?
10. Qual a relação entre abstração, classe e coesão?
11. Qual a diferença entre um objeto e a instância de uma classe?
12. O que significa um objeto ter uma identidade única?
13. O que representa a palavra reservada this em Java?
14. Como explicar o estado de um objeto?
15. Objetos com estados iguais representam um mesmo objeto?
16. Em quais situações o estado de um objeto é modificado?
17. Quando devemos utilizar variáveis globais?
18. Por que os atributos devem ser privados?
19. Qual a relação de atributos privados com encapsulamento e ocultamento de informação (information hiding)?
20. Quando um atributo deve ser público?
21. O que define o comportamento de um objeto?
22. Todas as operações devem ser públicas (explique)?
23. Quando uma operação pode ser privada?
24. O que é a assinatura de uma operação?
25. O que você entende por interface no contexto de uma classe?
26. Qual a diferença entre criar um objeto e instanciar um objeto?
27. Para quem devemos pedir a criação de um novo objeto?
28. Para quem devemos pedir a destruição de um objeto (pense de modo geral, sem considerar especificamente a linguagem Java)?
29. Qual a diferença entre uma classe abstrata e uma classe concreta?
30. Por que (e/ou quando) utilizamos classes abstratas?
31. Na linguagem Java, como os objetos são destruídos?
32. Como o Garbage Collector sabe que ele pode destruir um objeto?
33. O que é code smell (ou bad smell)?
34. O que é polimorfismo?
46. Qual a limitação do Polimorfismo?
49. O que é o Polimorfismo de sobreposição?
50. O que é o Polimorfismo de Sobrecarga?
51. O que é o Polimorfismo de inclusão ou de subclasse?
52. Qual a diferença entre ligação prematura/estática e ligação tardia/dinâmica?
53. Como é a ligação tardia em Java?
35. Qual a vantagem de utilizar polimorfismo?
36. Qual a diferença entre operação e método?
37. O que são as características e comportamentos dos objetos?
38. Quais os valores referentes a visibilidade das caraterísticas/comportamentos dos objetos?
39. O que são construtores e destrutores?
40. O que é a operação de classe ou operação static e qual a sua limitação?
41. Qual a diferença entre Constante e ReadOnly?
42. Qual a diferença entre Autoboxing e Unboxing?
43. Qual o ponto negativo de Autoboxing e Unboxing?
43. Qual o ponto negativo de Autoboxing e Unboxing?
43. qual a diferença entre superclasse e subclasse ou classe filha?
44. O que é o type casting e como utilizar?
45. O que é o instanceof em Java?
47. Como comparar dois objetos em Java?
48. O que acontece se uma classe for final em Java?
49. O que acontece se um método for final?
50. O que é o método toString() em Java?
51. Quais são as limitações do uso de herança?
52. Classes abstratas precisam ter pelo menos uma operação abstrata?
53. Uma operação abstrata já torna a classe abstrata?
54.Uma classe abstrata pode ter construtor?
55. O que é uma operação abstrata?
50. O que é o método toString() em Java?
51. Quais são as limitações do uso de herança?
52. Classes abstratas precisam ter pelo menos uma operação abstrata?
53. Uma operação abstrata já torna a classe abstrata?
54.Uma classe abstrata pode ter construtor?
55. O que é uma operação abstrata?
RESPOSTAS:
1. O que devemos fazer no processo de abstração?
Identificar os aspectos essenciais, ignorando as características menos importantes ou acidentais. Não deve-se analisar o "todo" e, sim analisar as partes para entender o "todo" para isso ignora-se os detalhes e parte para o nível mais alto de um problema.
2. Por que uma classe é uma abstração?
3. Qual a mudança de paradigma da abordagem estruturada para a orientada a objetos?
Cada programa tem a sua variável;
É mais fácil identificar erros no código;
Composição e interação entre objetos;
Problema do mundo real resolvido num modelo computacional;
Reutilização de código;
4.Quais são os 3 pilares da Programação Orientada ao Objeto?
-Herança;
-Encapsulamento;
-Polimorfismo;
4. Qual a diferença entre uma classe e um objeto?
Classe: é um modelo para a criação de objetos e define atributos e operações comuns a todos os objetos.
Objetos: São instanciados a partir da classe, utilizando-se dos atributos e métodos da classe.
5. O que é encapsulamento?
São medidas a serem seguidas para haver a privacidade, sigilo e segurança do ESTADO DO OBJETO (implementações das operações do objeto).
6. Como identificar classes e objetos necessários para resolver um problema?
7. O que é coesão?
Coesão é quando os elementos de um módulo fazem sentido, portanto está relacionado ao princípio da responsabilidade única, ou seja, os métodos só fazem uma única função, cujo o nome da operação já deve dizer o que essa função faz.
8. Por que uma classe deve ter alta coesão?
Pois, ela garante que a classe tenha um princípio da responsabilidade única, havendo assim uma alta coesão na classe.
9. Por que as operações de uma classe devem ter alta coesão?
Pois garante que as operações executem apenas um serviço/função, cujo a sua assinatura já deve dizer o que se faz nela.
10. Qual a relação entre abstração, classe e coesão?
A relação entre os três é que eles possuem o principio da responsabilidade unica.
11. Qual a diferença entre um objeto e a instância de uma classe?
Nenhuma diferença, pois cada objeto é uma instancia da classe.
12. O que significa um objeto ter uma identidade única?
13. O que representa a palavra reservada this em Java?
É uma referência ao parâmetro de entrada, que é igual ao atributo que recebe o valor desse parâmetro.
14. Como explicar o estado de um objeto?
É a implementação das operações (métodos) nos objetos. São os valores dos atributos.
15. Objetos com estados iguais representam um mesmo objeto?
Não, pois cada objeto possui um único valor, independente de seus atributos terem os mesmos valores.
16. Em quais situações o estado de um objeto é modificado?
Quando se altera um ou mais valores dos atributos do objeto.
17. Quando devemos utilizar variáveis globais?
Nunca! Pois permite o acesso indevido a ela, não sabendo quem (método) acessou e a alterou.
18. Por que os atributos devem ser privados?
Pois evita-se que os objetos de outras classes acessem-o, caso não seja privado quebra o encapsulamento, ou seja, permitindo outras classes acessarem esses atributos sem terem permissão.
19. Qual a relação de atributos privados com encapsulamento e ocultamento de informação (information hiding)?
Com essa relação é que existe a orientação ao objeto, essas características da pergunta são essenciais para que haja o encapsulamento das informações não permitindo outras classes manipularem os atributos diretamente que não sejam de sua classe, sendo possível somente através por métodos.
20. Quando um atributo deve ser público?
Nunca, pois quebra os requisitos essenciais da programação orientada a objetos, assim permitiria outras classes manipularem diretamente atributos que não sejam delas.
21. O que define o comportamento de um objeto?
Os métodos da classe que o objeto foi instanciado.
22. Todas as operações devem ser públicas (explique)?
Não, pois pode haver classes que algum método só pertence a ela.
23. Quando uma operação pode ser privada?
Quando só quem pode manipular ela é a própria classe, assim não permitindo outras classes o manipularem.
24. O que é a assinatura de uma operação?
-Nome da operação;
-Visibilidade;
-Parâmetros;
-Tipo de retorno;
25. O que você entende por interface no contexto de uma classe?
Toda classe tem uma interface. É a forma de acesso a classe, ou seja, são as operações públicas da classe, onde acessamos o objeto através da interface.
26. Qual a diferença entre criar um objeto e instanciar um objeto?
Nenhuma.
27. Para quem devemos pedir a criação de um novo objeto?
Para a classe em que queira instanciar, através de seu construtor.
28. Para quem devemos pedir a destruição de um objeto (pense de modo geral, sem considerar especificamente a linguagem Java)?
29. Qual a diferença entre uma classe abstrata e uma classe concreta?
Classe abstrata: é uma classe que não instancia objetos, muito utilizada na superclasse dentro de herança, ou seja, não faz sentido sozinha, pois é incompleta para ser utilizada.
Classe concreta: é uma classe em que instancia objetos.
30. Por que (e/ou quando) utilizamos classes abstratas?
Utilizamos classes abstratas, pois quando a super classe for muito genérica, não faz sentido instanciar objetos a partir dela, já que ela é a menos especializada, assim as subclasses que são mais especializadas instanciam seus objetos.
Utilizamos classes abstratas quando não quisermos instanciar objetos a partir dela.
31. Na linguagem Java, como os objetos são destruídos?
A linguagem de programação Java possui gerenciamento automático de memória, onde os objetos são destruídos automaticamente após a execução do programa. Tudo isso é feito pela ferramenta Garbage Collector que é da JVM (Java Virtual Machine).
32. Como o Garbage Collector sabe que ele pode destruir um objeto?
O Garbage Collector destrói o objeto automaticamente após o termino dele no escopo do programa, sem precisar fazer isso manualmente, já que essa ferramenta é nativa da JVM (Java Virtual Machine).
33. O que é code smell (ou bad smell)?
34. O que é polimorfismo?
Polimorfismo é o princípio pelo qual entidades de tipos diferentes podem ser acessadas através de uma única interface.
35. Qual a vantagem de utilizar polimorfismo?
-Reduz a necessidade de condicionais no programa;
Exemplo: podemos executar a mesma operação em diferentes objetos sem nenhum tipo de verificação
-Permite escalabilidade, pois novos métodos podem ser adicionados sem impactar no código existente;
Exemplo: criar uma nova subclasse não afeta o loop, uma vez que esta classe também herda seus métodos;
-Oferece uniformidade na interface
Exemplo: usuários não precisam conhecer detalhes de cada implementação dos métodos, mas a assinatura é garantida, ou seja, condiz com que o método faz;
2. Por que uma classe é uma abstração?
3. Qual a mudança de paradigma da abordagem estruturada para a orientada a objetos?
Cada programa tem a sua variável;
É mais fácil identificar erros no código;
Composição e interação entre objetos;
Problema do mundo real resolvido num modelo computacional;
Reutilização de código;
4.Quais são os 3 pilares da Programação Orientada ao Objeto?
-Herança;
-Encapsulamento;
-Polimorfismo;
4. Qual a diferença entre uma classe e um objeto?
Classe: é um modelo para a criação de objetos e define atributos e operações comuns a todos os objetos.
Objetos: São instanciados a partir da classe, utilizando-se dos atributos e métodos da classe.
5. O que é encapsulamento?
São medidas a serem seguidas para haver a privacidade, sigilo e segurança do ESTADO DO OBJETO (implementações das operações do objeto).
6. Como identificar classes e objetos necessários para resolver um problema?
Inicialmente abstrai-se o objeto; de um conjunto de objetos cria-se um conjunto de classes relacionadas, de um conjunto de classes cria-se uma biblioteca de classes.
7. O que é coesão?
Coesão é quando os elementos de um módulo fazem sentido, portanto está relacionado ao princípio da responsabilidade única, ou seja, os métodos só fazem uma única função, cujo o nome da operação já deve dizer o que essa função faz.
8. Por que uma classe deve ter alta coesão?
Pois, ela garante que a classe tenha um princípio da responsabilidade única, havendo assim uma alta coesão na classe.
9. Por que as operações de uma classe devem ter alta coesão?
Pois garante que as operações executem apenas um serviço/função, cujo a sua assinatura já deve dizer o que se faz nela.
10. Qual a relação entre abstração, classe e coesão?
A relação entre os três é que eles possuem o principio da responsabilidade unica.
11. Qual a diferença entre um objeto e a instância de uma classe?
Nenhuma diferença, pois cada objeto é uma instancia da classe.
12. O que significa um objeto ter uma identidade única?
Significa que reúne atributos e métodos, ou seja, reúne as propriedades do objeto e as reações as excitações que sofre.
A identidade é uma propriedade que permite identificar univocamente um objeto. Os objetos se distinguem por sua própria existência, independente de seu conteúdo. Dois objetos são distintos mesmo que todos os seus atributos sejam iguais, ou seja, existe um único identificador para cada objeto.
13. O que representa a palavra reservada this em Java?
É uma referência ao parâmetro de entrada, que é igual ao atributo que recebe o valor desse parâmetro.
14. Como explicar o estado de um objeto?
É a implementação das operações (métodos) nos objetos. São os valores dos atributos.
15. Objetos com estados iguais representam um mesmo objeto?
Não, pois cada objeto possui um único valor, independente de seus atributos terem os mesmos valores.
16. Em quais situações o estado de um objeto é modificado?
Quando se altera um ou mais valores dos atributos do objeto.
17. Quando devemos utilizar variáveis globais?
Nunca! Pois permite o acesso indevido a ela, não sabendo quem (método) acessou e a alterou.
18. Por que os atributos devem ser privados?
Pois evita-se que os objetos de outras classes acessem-o, caso não seja privado quebra o encapsulamento, ou seja, permitindo outras classes acessarem esses atributos sem terem permissão.
19. Qual a relação de atributos privados com encapsulamento e ocultamento de informação (information hiding)?
Com essa relação é que existe a orientação ao objeto, essas características da pergunta são essenciais para que haja o encapsulamento das informações não permitindo outras classes manipularem os atributos diretamente que não sejam de sua classe, sendo possível somente através por métodos.
20. Quando um atributo deve ser público?
Nunca, pois quebra os requisitos essenciais da programação orientada a objetos, assim permitiria outras classes manipularem diretamente atributos que não sejam delas.
21. O que define o comportamento de um objeto?
Os métodos da classe que o objeto foi instanciado.
22. Todas as operações devem ser públicas (explique)?
Não, pois pode haver classes que algum método só pertence a ela.
23. Quando uma operação pode ser privada?
Quando só quem pode manipular ela é a própria classe, assim não permitindo outras classes o manipularem.
24. O que é a assinatura de uma operação?
-Nome da operação;
-Visibilidade;
-Parâmetros;
-Tipo de retorno;
25. O que você entende por interface no contexto de uma classe?
Toda classe tem uma interface. É a forma de acesso a classe, ou seja, são as operações públicas da classe, onde acessamos o objeto através da interface.
26. Qual a diferença entre criar um objeto e instanciar um objeto?
Nenhuma.
27. Para quem devemos pedir a criação de um novo objeto?
Para a classe em que queira instanciar, através de seu construtor.
28. Para quem devemos pedir a destruição de um objeto (pense de modo geral, sem considerar especificamente a linguagem Java)?
29. Qual a diferença entre uma classe abstrata e uma classe concreta?
Classe abstrata: é uma classe que não instancia objetos, muito utilizada na superclasse dentro de herança, ou seja, não faz sentido sozinha, pois é incompleta para ser utilizada.
Classe concreta: é uma classe em que instancia objetos.
30. Por que (e/ou quando) utilizamos classes abstratas?
Utilizamos classes abstratas, pois quando a super classe for muito genérica, não faz sentido instanciar objetos a partir dela, já que ela é a menos especializada, assim as subclasses que são mais especializadas instanciam seus objetos.
Utilizamos classes abstratas quando não quisermos instanciar objetos a partir dela.
31. Na linguagem Java, como os objetos são destruídos?
A linguagem de programação Java possui gerenciamento automático de memória, onde os objetos são destruídos automaticamente após a execução do programa. Tudo isso é feito pela ferramenta Garbage Collector que é da JVM (Java Virtual Machine).
32. Como o Garbage Collector sabe que ele pode destruir um objeto?
O Garbage Collector destrói o objeto automaticamente após o termino dele no escopo do programa, sem precisar fazer isso manualmente, já que essa ferramenta é nativa da JVM (Java Virtual Machine).
33. O que é code smell (ou bad smell)?
34. O que é polimorfismo?
Polimorfismo é o princípio pelo qual entidades de tipos diferentes podem ser acessadas através de uma única interface.
35. Qual a vantagem de utilizar polimorfismo?
-Reduz a necessidade de condicionais no programa;
Exemplo: podemos executar a mesma operação em diferentes objetos sem nenhum tipo de verificação
-Permite escalabilidade, pois novos métodos podem ser adicionados sem impactar no código existente;
Exemplo: criar uma nova subclasse não afeta o loop, uma vez que esta classe também herda seus métodos;
-Oferece uniformidade na interface
Exemplo: usuários não precisam conhecer detalhes de cada implementação dos métodos, mas a assinatura é garantida, ou seja, condiz com que o método faz;
36. Qual a diferença entre operação e método?
Operação: é a assinatura de um método, onde possui o nome da operação, visibilidade, parâmetros e o tipo de retorno.
Método: é a implementação da operação, ou seja, a construção da operação.
37. O que são as características e comportamentos dos objetos?
As características são os estados dos atributos.
Os comportamentos são os métodos;
38. Quais os valores referentes a visibilidade das caraterísticas/comportamentos dos objetos?
Os valores são:
-Private (somente a classe em que declarou o atributo ou método private tem acesso a eles);
-Protect (as subclasses tem acesso aos atributos/métodos da classe mãe, não fere o encapsulamento);
-Public (qualquer classe que esteja ou não no package tem acesso ao método);
39. O que são construtores e destrutores?
Construtores: é uma função chamada para fazer a inicialização da classe e é feita quando se instancia um objeto.
Destrutores: é uma função chamada para fazer a limpeza de memória alocada pelas variáveis do programas, após o escopo de duração do objeto se encerrar.
40. O que é a operação de classe ou operação static e qual a sua limitação?
É uma função que é comum à todos os objetos da classe, ou seja, é invocada pela classe e não pelo objeto.
Limitação: utiliza apenas atributos da classe.
41. Qual a diferença entre Constante e ReadOnly?
Constante: Inicializada em tempo de compilação;
ReadOnly: Inicializada em tempo de execução, após essa inicialização não se pode alterar ela mais. Em Java o ReadOnly equivale ao "final";
42. Qual a diferença entre Autoboxing e Unboxing?
Autoboxing:
Conversão automáica (pelo compilador) do tipo primitio para um objeto Wrapper.
Converte a variavel do tipo primitivo para um objeto;
É mais lento que o Unboxing;
Exemplo: int para Integer, double para Double.
Unboxing:
Processo inverso de conversão (pelo compilador) do objeto Wrapper para o tipo primitivo.
Converte o objeto do tipo Wrapper para uma variável do tipo primitivo;
43. Qual o ponto negativo de Autoboxing e Unboxing?
Caso estiver realizando algum processamento matemático crítico, evite utilizar classes wrapper. Autoboxing e unboxing impactam negativamente no desempenho.
43. qual a diferença entre superclasse e subclasse ou classe filha?
Classe mãe: é a classe mais genérica, em que as subclasses herdam seus atributos e métodos.
Classe filha: é classe mais especializada, ou seja, menos generalizada.
44. O que é o type casting e como utilizar?
É a possibilidade de forçar o uso do objeto para o compilador;
Usado em polimorfismo;
Independente do objeto, o compilador enxerga ele como se fosse da classe (interface comum);
Não é adequado, pois quebra o paradigma do polimorfismo, tendo que comparar os objetos com vários "if's", caso você vá instanciando mais objetos, terá cada vez mais "if's";
Como utilizar: (((nomeDaClasse)(objeto)).método());
45. O que é o instanceof em Java?
É uma forma de fazer um teste.
Ele verifica se o objeto real é uma instância da classe.
46. Qual a limitação do Polimorfismo?
A interface para ser comum tem que ser menor que a representação dos outros objetos;
49. O que é o Polimorfismo de Sobreposição?
É quando utiliza-se um método da superclasse que é comum a todas as subclasses, com isso, a superclasse só possui a sua assinatura (para ter a mesma assinatura tem que ter os tipos dos parâmetros iguais e a quantidade de parâmetros iguais, o tipo do retorno pode ser diferente), e cabe as subclasses implementar esse código em seu/seus método(s), sendo a implementação diferente entre as subclasses, mas com a mesma assinatura da classe mãe;
Para isso, esse método comum a todas as subclasses tem que ser declarado na superclasse como abstrato, não permitindo implementação na classe mãe, e sendo obrigatoriamente implementado nas subclasses.
Exemplo em UML:
50. O que é o Polimorfismo de Sobrecarga?
É quando utiliza-se vários métodos com o mesmo nome, mas com a assinatura diferente (retorno de tipos diferentes, parâmetros de tipos diferentes e quantidade de parâmetros diferentes); -Várias maneiras de se fazer alguma coisa utilizando um mesmo método; -Sobrecarrega um método;
Exemplo em UML:
51. O que é o Polimorfrismo de inclusão ou de subclasse?
-É quando as subclasses compartilham a interface herdada da classe mãe;
-Com isso, cria-se uma nova classe em que são adicionados objetos da classe filha, normalmente utiliza um array do tipo da classe mãe para guardar esses objetos nessa classe nova que é comum a todas as subclasses;
-Portanto temos a ligação tardia (late binding) ou ligação dinâmica (dinyamic binding),pois oss métodos invocados serão conhecidos apenas em tempo de execução, ou seja, se eu chamo um getName() do objeto da SubClass1, ele que será invocado. Já se eu chamo o objeto da SubClass2 ele que será invocado, ou seja, as SubClasses invocadas chamam seus próprios métodos
52. Qual a diferença entre ligação prematura/estática e ligação tardia/dinâmica?
Ligação prematura (early binding) ou ligação estática (static binding):
-É quando o método a ser invocado é definido durante a compilação do programa;
Ligação tardia (late binding) ou ligação dinâmica (dynamic binding):
-É quando o método a ser invocado é definido somente em tempo de execução do programa;
-Mecanismo necessário para o polimorfismo;
53. Como é a ligação tardia em Java?
-É o comportamento padrão;
-Métodos "final" não podem ser redefinidos e o polimorfismo não se aplica;
-Métodos "private" são implicitamente declarados como "final";
Utilizando o "equals()" ou "==";
O "==" compara os endereços de memória;
Já o "equals()" compara o valor;
48. O que acontece se uma classe for final em Java?
Todos os objetos são imutáveis, ou seja, não pode-se alterar seus valores.
49. O que acontece se um método for final?
Quer dizer que o método não pode ser redefinido nas outras classes;
50. O que é o método toString() em Java?
É um método em que converte o estado de um objeto (atributos) para String;
51. Quais são as limitações do uso de herança?
-As subclasses são altamente acopladas com suas superclasses;
-As classes sempre precisam ser utilizadas em conjunto;
-Mudanças na superclasse impactam diretamente o comportamento de todas as subclasses;
-É necessário ter conhecimento do negócio a ser modelado para evitar o efeito io-io;
-Polimorfismo de inclusão só é possível dentro da hierarquia de herança;
52. Classes abstratas precisam ter pelo menos uma operação abstrata?
Não, elas podem ou não possuir operações abstratas.
53. Uma operação abstrata já torna a classe abstrata?
Sim!
54.Uma classe abstrata pode ter construtor?
Sim, mas não pode ser instanciada;
55. O que é uma operação abstrata?
É uma operação que só possui assinatura e não possui método (implementação), ou seja, não possui código.
Sua implementação é delegada para as subclasses.


Comentários
Postar um comentário
Obrigado pelo contato, retornarei o mais breve possível!