Professional Documents
Culture Documents
PROGRAMAO I
Universidade Federal de Lavras
Departamento de Cincia da Computao
5 }
tamMax = tamanho-1;
topo = -1;
5 }
private:
Tipo *pilhaPtr;
int tamMax;
int topo;
public:
11
12
tamMax = 99;
13
topo = -1;
14
//Construtor parametrizado
Pilha(int tamanho){
17
18
tamMax = tamanho - 1;
19
topo = -1;
20
21
23
24
25
26
pilhaPtr[++topo] = elemento;
}
29
if (topo != -1)
30
topo--;
31
32
33
34 };
Construes de Encapsulamento
Quando o tamanho de um subprograma ultrapassa a fronteira
de algumas poucas mil linhas de cdigo, dois problemas
prticos se tornam evidentes.
1. Do ponto de vista do programador, tal programa no impe um
nvel adequado de organizao para mant-lo intelectualmente
gerencivel.
2. Recompilao. Para programas pequenos, a recompilao do
programa completo aps cada modificao no custosa. Para
programas grandes, o custo da recompilao significativo se
todo o programa precisa ser recompilado a cada modificao.
Construes de Encapsulamento
A soluo para esses problemas organizar os programas em
colees de cdigo e dados logicamente relacionados, cada
uma podendo ser compilada sem a recompilao do resto do
programa.
Um encapsulamento tal coleo.
Encapsulamento so colocados em bibliotecas e
disponibilizados para reuso em programas alm daqueles para
os quais eles foram escritos.
Construes de Encapsulamento
Subprogramas Aninhados
Em linguagens que permitem subprogramas aninhados, os
programas podem ser organizados por definies de
subprogramas aninhadas dentro de subprogramas maiores que
os usam.
Isso pode ser feito em Ada, Fortran 95, Python e Ruby.
Esse mtodo de organizar programas no ideal. Logo, mesmo
nas linguagens que o possuem, ele no usado como uma
construo de organizao de encapsulamento primria.
Construes de Encapsulamento
Encapsulamento em C
C no fornece um suporte forte para tipos abstratos de dados,
apesar de tipos abstratos de dados poderem ser simulados.
Em C, uma coleo de funes e definies de dados
relacionados pode ser colocada em um arquivo, que pode ser
compilado independentemente.
A interface para esse arquivo, incluindo os dados, tipos e
declaraes de funes, colocado em um arquivo chamado
arquivo de cabealho.
Construes de Encapsulamento
Encapsulamento em C
As definies completas das funes precisam aparecer apenas
no arquivo de implementao.
Quando o programa em questo precisa ser utilizado, o arquivo
de cabealho includo no cdigo cliente usando uma
especificao de pr-processador #include.
A especificao #include tambm documenta o fato de que
o programa cliente depende do arquivo de implementao.
Essa abordagem separa a especificao e a implementao de
um encapsulamento.
Construes de Encapsulamento
Encapsulamento em C++
C++ fornece dois tipos de encapsulamento:
Arquivos de cabealho e de implementao podem ser
definidos como em C;
Arquivos de cabealhos de classes e definies de classes
podem ser definidas.
Em funo da complexa interao dos templates C++ e da
compilao separada, os arquivos de cabealho das bibliotecas
template de C++ geralmente incluem a definio completa dos
recursos.
Construes de Encapsulamento
Encapsulamento em C++
Quando classes que no contm templates so usadas para
encapsulamento, o arquivo de cabealho de classe tem apenas
os prottipos das funes membros, com as definies das
funes fornecidas fora da classe em um arquivo de cdigo.
Isso separa claramente a interface da implementao.
Nomeando Encapsulamentos
Existe um outro tipo de encapsulamento necessrio para
construir grandes programas: um encapsulamento de
nomeao.
Um grande programa pode ser escrito por muitos
desenvolvedores. Isso requer que as unidades lgicas do
programa sejam independentes, embora ainda assim seja
possvel trabalhar em conjunto.
Nomeando Encapsulamentos
Um grande programa escrito por muitos desenvolvedores
tambm cria um problema de nomeao:
Como desenvolvedores trabalhando independentemente criam
nomes para suas variveis, mtodos ou classes sem
acidentalmente usar nomes j em uso por outro programador
em uma parte diferente do mesmo sistema de software?
Encapsulamento de nomeao definem escopos de nome que
ajudam a evitar conflitos.
Nomeando Encapsulamentos
Nomeando Encapsulamentos
Espaos de nomes em C++
C++ inclui uma especificao, namespace, que ajuda os
programas a gerenciarem o problema de espao de nomes
globais.
Um programador pode colocar cada biblioteca em seu prprio
espao de nomes e qualific-los no programa com o nomes do
espao de nomes quando eles so usados fora desse espao.
Exemplo:
1
namespace MinhaPilha{
//Declaraes de uma estrutura pilha
2
3
Nomeando Encapsulamentos
Espaos de nomes em C++
Um cdigo cliente pode ganhar acesso aos nomes no espao de
nomes de uma biblioteca de trs maneiras.
1. Qualific-los a partir da biblioteca com o nome do espao de
nomes. Exemplo:
MinhaPilha::topo
2. Usar a diretiva using para nomes especficos. Exemplo:
using MinhaPilha::topo;
que torna apenas o nome topo visvel.
Nomeando Encapsulamentos
Espaos de nomes em C++
3. Usar a diretiva using para qualificar todos os nomes de um
espao de nomes. Exemplo:
using namespace MinhaPilha;
Nomeando Encapsulamentos
Pacotes em Java
Java inclui uma construo de encapsulamento de nomeao: o
pacote.
Pacotes podem conter mais de uma definio de classe, e as
classes em um pacote so parcialmente visveis umas as outras.
Parcial aqui significa que as entidades pblicas ou protegidas
definidas em uma classe em um pacote, ou que no tenham um
especificador de acesso, so visveis para todas as outras classes
no pacote.
Nomeando Encapsulamentos
Pacotes em Java
Os recursos definidos em um arquivo so especificados como
em um pacote em particular com uma declarao de pacote,
como em:
package MinhaPilha;
Nomeando Encapsulamentos
Pacotes em Java
Java fornece a declarao import, que permite referenciar os
nomes definidos em um pacote. Por exemplo:
import MinhaPilha.*;
Para acessar apenas um nome do pacote, ele pode ser dado na
declarao de importao, como em:
import MinhaPilha.topo;