terça-feira, 29 de setembro de 2009

Questionário Conceitos Básicos em Orientado ao Objeto

Questionário de Conceitos Básicos

1)Defina Objeto, explicando estado, comportamento e ciclo de vida.
Objeto é uma representação de um elemento qualquer do mundo real. Possui um estado, representado pelos seus dados, e comportamentos que são métodos que manipulam os dados. Um objeto tem um ciclo de vida que é iniciado no momento em que é instanciado, em seguida este objeto sofrerá modificações em seu estado e por fim será destruído quando não houver mais referências para ele.

2)Defina Classe, fazendo uma correlação com Objeto.
Classe pode ser entendida como “Fábrica de Objetos”, pois é nela onde definimos os atributos e métodos de um objeto e é através dela que instanciamos os objetos. Uma classe é uma entidade estática, enquanto que um objeto possui um ciclo de vida e pode se relacionar com outros objetos. No momento que um objeto é instanciado, este herda todas as características definidas na classe (dados e comportamentos). Durante seu ciclo de vida o objeto sofre alterações em seu estado. Este objeto instanciado é único. Mesmo que exista outro objeto do mesmo tipo e com o mesmo estado, são objetos diferentes, com ciclos de vida próprios.

3)Explique os seguintes conceitos:

a. Encapsulamento
É a técnica de esconder ou proteger informações. Para que exista comunicação o objeto disponibiliza uma interface de comunicação. Exibi-se, portanto, o “o quê” o objeto faz, abstraindo o “como” é realizado. Assim, para se utilizar este objeto é necessário conhecer apenas seu conjunto de assinaturas, ou seja, a sua interface de comunicação. Os detalhes de implementação são encapsulados, elevando o nível de abstração.

b. Sobrecarga
Um método é identificado através de sua assinatura, ou seja, seu nome e parâmetros. A sobrecarga ocorre quando temos dois ou mais métodos em uma mesma classe com nomes iguais, porém com parâmetros diferentes.

c. Método Construtor
É um método especial que possui uma assinatura diferenciada, pois possui obrigatoriamente o mesmo nome da classe, não possui retorno (nem mesmo void) e pode ser no instante em que o objeto é instanciado. Neste momento podem ser definidos os valores iniciais dos atributos do objeto.

d. Polimorfismo
É a situação em que um método de mesma assinatura é implementado em pelo menos duas classes diferentes que estendem da mesma superclasse possui comportamentos diferenciados.

4) Sobre herança de classe explique os conceitos:

a. Classe Abstrata e Método Abstrato
Uma Classe Abstrata é uma classe que serve de padrão para a criação de outras classes. Um método abstrato é um método não implementado na classe abstrata que será implementado obrigatoriamente na subclasse que herda da classe abstrata. Ambos os conceitos auxiliam na organização e estruturação do esquema de classes e métodos do projeto. Uma classe abstrata é definida quando se quer garantir que não haja instancias desta classe, como por exemplo, no esquema de classes Conta, ContaCorrente e ContaPoupanca, onde não devem existir instâncias de Conta, apenas de ContaCorrente e ContaPoupanca.

b. Generalização/Especialização
A Generalização consiste no agrupamento de características comuns a um determinado grupo de classes em uma única superclasse. Especialização é a operação oposta consistindo na definição de características específicas em cada subclasse. No exemplo utilizado no capítulo 2.2, a classe Pessoa generaliza características comuns a PessoaFísica e PessoaJurídica.

c. Subclasse x Superclasse
São os atores da herança. A superclasse generaliza características comuns das subclasses e comumente são definidas como classes abstratas (podem ser definidas como classes abstratas ou classes concretas). Cada subclasse herda as características da superclasse e realiza a especialização, implementando suas características específicas. Vale ressaltar que sem a generalização e especialização a herança não faria sentido.

d. Overridden (reescrever)
É o “mecanismo” que permite a especialização na herança de classes. Ocorre quando uma subclasse reimplementa (reescreve) um determinado método da superclasse. Por exemplo, havendo um método getConsumo() na superclasse Transporte, e uma subclasse CarroBiodiesel que estende Transporte, esta poderá reescrever o método getConsumo() para atender suas necessidades específicas.

5) Qual a importância na definição primeiramente da interface da classe para depois efetuar a sua realização, ou seja, implementação do conteúdo interno da classe?
Na etapa de projeção do sistema é muito mais simples definir o “o quê” será realizado e não o “como”. Consequentemente programa-se para a interface, e não para o conteúdo (que estará encapsulado), favorecendo o baixo acoplamento do código e uma modularização mais intuitiva. Este nível de abstração permite. Redução da complexidade...

6) Qual a relação entre abstração e encapsulamento?

A abstração consiste na supressão de detalhes não relevantes ao código. De forma similar o encapsulamento consiste na supressão de informações e na disponibilidade de uma interface de comunicação. Ao se realizar o encapsulamento atingimos a abstração de detalhes de implementação, pois é necessário conhecer apenas o conjunto de assinaturas (interface) do objeto, não havendo a necessidade de se preocupar com o algoritmo ou tipos utilizados no interior daquele componente.

7) No projeto de uma classe o que deve ser especificado e em que ordem?
Primeiro devemos especificar o “o quê” deve ser feito, as classes e suas finalidades. Somente então se começa a pensar em “como” deve ser feito.

8) Qual o objetivo, no projeto de uma classe, de defini-la como abstrata? E como seria o uso desta classe no contexto do programa OO?
Uma classe abstrata é utilizada no relacionamento de herança de classes e tem o objetivo de servir de molde para outras classes. Assim, assume o papel de superclasse onde reuni as características comuns de suas subclasses. No projeto podem existir classes que não devem gerar instancia de objetos, por exemplo, a classe Pessoa, no caso da relação Pessoa, PessoaFisica e PessoaJuridica vista no capítulo 2.2. Para o projeto não faz sentido que existam instâncias da classe Pessoa, como ela foi definida como abstrata a coerência está garantida.

9) Como você identificaria se um método é polimórfico?
Quando um método é assinado na superclasse e reescrito em subclasses diferentes, com implementações diferentes. Isto caracteriza que este método apresenta comportamentos específicos a depender do objeto utilizado, ou seja, é um método que possui várias formas de execução.

10) O que define a assinatura de um método? E em que situação acontece a sobrecarga de métodos?
A assinatura de um método é definida pelo nome do método e os parâmetros passados (tipos e quantidade).

11) Explique como os objetos colaboram em um programa OO.
A colaboração é realizada através da troca de mensagens entre os objetos.

12) Sobre abstração indique o V ou F. Caso F explique.

(V) É uma técnica para controlar a complexidade pela ênfase em características essenciais e pela supressão de detalhes.

(V) Para construção de modelos é importante desconsiderar alguns aspectos do mundo real, visando controlar a complexidade.

(V) Com a abstração vamos modelar somente o que é relevante para o contexto do sistema.

(V) Por exemplo, como os detalhes ficam internos e escondidos no objeto Pessoa podemos entender que este objeto pode possuir qualquer característica de uma Pessoa do mundo real.

(F) No projeto de uma Classe não existe a necessidade do uso da técnica de abstração. Assim, devemos projetá-la com os seus atributos, métodos e interface.

Desta maneira seria impossível realizar a implementação de uma classe. Os objetos do mundo real contêm uma infinidade de atributos e métodos, e somente através da abstração de características irrelevantes podemos construir nossos sistemas.

13) Quais as conseqüências de um projeto que possui uma boa delegação de responsabilidades para suas unidades e seus objetos?
Um contexto como este caracteriza que os elementos do sistema apresentam um alto nível de coesão. Como conseqüência, possuímos classes mais fáceis de serem compreendidas, pois possuem finalidades específicas e bem definidas.

Um comentário: