Você está na página 1de 55

Adaptado de

cba
• Os dois tipos fundamentais de abstração nas linguagens de
programação contemporâneas:

(ao menos ao programa chamador)


(modularidade)
<-- um tipo abstrato para uma pilha
(Se a linguagem não permite que os usuários
sobrecarreguem a atribuição, ela deve ser pré-definida.)
Ex. uma fila que pode armazenar elementos de qualquer tipo
• O projetista define se o tipo disponibilizará apenas as informações
de interface ou se o tipo será inteiramente disponível (perde a
propriedade de tipo abstrato nesse caso)
• O cliente é compilável apenas quando o pacote de especificação para o tipo
de dados abstrato tenha sido compilado e estiver presente.
• Para evitar isso é possivel usar os tipos primitivos limitados (limited private).
A principal diferença é que os objetos declarados por esse tipo não tem
operações pré-definidas
Pacote de
especificações
Pacote de
corpo
Cliente

with torna os nomes definidos visiveis

Definição de um dado a partir do tipo

Uso das operações


(descreve a interface)

; possuem
o mesmo nome da classe

; pode incluir operações delete para os membros ponteiros;


o nome é o mesmo da classe precedido por til (~)
Visíveis apenas para membros

Dinâmico do monte

Dinâmico da pilha
Visíveis para clientes

Aloca no monte

Libera alocação do monte


Cria uma instância da classe
Definimos apenas os protótipos
Aqui fazemos a inclusão dos protótipos

As implementações dos protótipos


(devido ao coletor de lixo implícito)
Construtor

Toda a declaração e definição


deve ocorrer em uma mesma
unidade sintática
Aqui definimos uma
propriedade para o
membro DegreeDays com
acesso de leitura e escrita
(é possível adicionar membros a qualquer
momento e remover métodos usando remove_method)
A definição do construtor
O instanciamento da classe
como o Ruby, por exemplo
Essas instanciações constroem duas versões de código fonte
diferentes de Generic_Stack em tempo de compilação
O tipo do elemento da pilha pode ser genérico
tornando a classe uma classe template

A modificação no construtor
permite tamanhos genéricos

Como em Ada, classes template em C++ são


instanciadas em tempo de compilação.
, podendo existir erros caso sejam feitas mudanças na
implementação que não tenham sido adequadas no cliente
, diferente dos arquivos separados do C

quando não há relação direta entre as classes


,
inclusive interfaces

• Os corpos dos pacotes usados podem ser compilados após o


programa cliente
, conforme necessidade

(manifesto)

Você também pode gostar