terça-feira, agosto 08, 2006

Aula 3

-> Propriedades da Orientação e Objeto

  • Encapsulamento
Encapsular significa esconder, na definição de uma classe os membros que representam a estrutura e o comportamento interno dos objetos da classe. Geralmente são escondidos todos os atributos enquanto os métodos são tornados publicos. Entretanto pode-se esconder também métodos bem como tornar públicos atributos. Tudo depende do projeto e do bom senso.

"Esconder um membro" em C++ significa declaralo na sessão privada(private) ou protegida(protected) da classe. Um membro privado só pode ser acessado em métodos da prórpia classe onde foi declarado. Membros protegidos podem ser acessados por métodos da própria classe e de classes derivadas publicamente da classe onde foi declarada. Membros públicos podem ser acessados por quaisquer métodos e definem a interface da classe.

Para um atributo privado ou protegido o acesso a este só pode ser efetuado por métodos quaisquer indiretamente, através de métodos declarados na classe do atributo chamados "setters" e "getters". Um setter é utilizado para atribuição de um novo valor para um atributo, enquanto um getter é utilizado para a obtenção de um valor.

Um atributo para o qual há um getter e um setter é uma propriedade do objeto. Embora aconselhável esconder um atributo, seu acesso por getters e setters(ou seja, funções) podem acrescentar ineficiência ao sistema. Em C++ tal ineficiência é evitada com o uso de métodos "in-line". Em uma mensagem na qual o método in-line é aclopado, não há um overhead(custo) de uma chamada de função. Ao invés disso o corpo do métodos é expandido em linha no local da mensagem. Com isso o código gerado fica maior dependendo do tamanho do corpo do método corrente, por isso, métodos in-line tem que ser criteriosamente usados. Em C++ todo método implementado dentro de sua classe é inline. Métodos implementados fora da classe tem que ser explicitamente declarados com a palavra inline. De fato o compilador tenta fazer o método in-line se possível ( Ou seja, nem todo método declarado in-line é efetivamente inline ).

As vantagens do encapsulamento são:
  1. Melhor organização do cógigo.
  2. Alterações em membros encapsulados de uma classe não são refletidas nos métodos de outros objetos usuários da classe(a não ser que essas alterações modifiquem a interface da classe).

  • Herança
Mecanismo através do qual um objeto de uma classe Y herda todos os membros de uma classe X. A classe X é chamada SuperClasse(ou classe Base em C++) e a classe Y é chamada SubClasse ou classe Derivada. Uma classe Base representa uma generalização, uma classe Derivada representa uma especialização. Em UML(Unified Modeling Language, Linguagem de Modelagem Unificada) a representação mais simples de uma classe é um retângulo com o nome da classe dentro. Um relacionamento do tipo generalização/especialização entre duas classes é expresso em UML através do seguinte diagrama de classe:
..__
| X |
../ ...|
..__
| Y |

Há quatro maneiras de uma classe Derivada especializar uma classe Base:
  1. Adicionando novos atributos
  2. Adicionando novos métodos
  3. Redefinindo a implementação de métodos herdados da classe Base
  4. Não fazendo nada
O grande benefício da herança é reutilização de código.
Obs. Ao contrário de Java, C++ admite herança multipla, isto é, uma classe pode ser Derivada de duas ou mais classes Bases.

  • Polimorfismo(várias formas)

0 comentários:

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Justin Bieber, Gold Price in India