Linguagens Orientadas a Objetos

Esta matéria é um resumo do capítulo 13 de ‘‘Linguagens de Programação’’, segunda edição, de Allen B. Tucker e Robert E. Noonan.

Tipos de Dados Abstratos

A abstração de dados compreende a noção de estender tipos primitivos, e suas operações, além da sua capacidade.

Isto é alcançado através da combinação de tipos primitivos e operações válidas através de uma entidade composta de tipos primitivos e operações básicas.

Encapsulamento:

Encapsulamento é um mecanismo que permite que constantes logicamente relacionadas, tipos, variáveis, métodos, entre outros, sejam agrupados em uma nova entidade. Exemplos incluem procedimentos, pacotes e classes.

Uma linguagem orientada a objetos tem o poder de encapsular, entre outros, variáveis e métodos. Além de definir o escopo de visibilidade destes elementos.

O Modelo Objeto

Em uma linguagem orientada a objetos, a preocupação central é a definição de objetos. Suas ideias centrais são o uso de encapsulamento, visibilidade e herança.

Classes:

Uma classe é uma declaração de tipo que encapsula constantes, variáveis e funções para manipulação dessas variáveis.

Cliente:

Um cliente de uma classe C é qualquer outra classe ou um método que declara ou usa um objeto da classe C.

Composição (Agregação):

Uma classe C_1 é uma composição (ou agregação) de uma classe C_2 , se C_1 contém objetos do tipo C_2.

OBS: Nesta matéria estamos tratando composição e agregação como a mesma coisa, mas não são exatamente a mesma coisa. Um detalhe difere as duas:

  • Em uma agregação a classe C_2 existe independente da classe C_1.

  • Em uma composição se a classe C_1 for destruída, não existe sentido para a classe C_1 existir.

Herança:

Supondo-se que uma subclasse simples D estende uma classe C, dizemos que a subclasse D herda todas as variáveis de instância e os métodos de C, incluindo construtores e destruidores.

Linguagem Orientada a Objetos:

Uma linguagem é orientada a objetos se ela suporta um mecanismo de encapsulamento com ocultamento de informação para definir tipos de dados abstratos, métodos virtuais e herança.

Métodos Virtuais:

Um método vitual é um método cujo comportamento pode ser redefinido por uma outra classe, através da herança.

Polimorfismo:

Em linguagens orientadas a objetos, polimorfismo refere-se à ligação tardia de uma chamada a uma ou várias diferentes implementações de um método em uma hierarquia de herança.

Classe Abstrata:

Uma classe abstrata é uma classe declarada como abstrata ou que tem um ou mais métodos abstratos.

Método Abstrato:

Um método abstrato é um método que não contém código além de sua assinatura.

Interface:

Uma interface encapsula uma coleção de constantes e assinaturas de métodos abstratos. Uma interface não pode incluir variáveis, construtores ou métodos não-abstratos.