Você está na página 1de 5

2.

Fundamentos de Estruturao de Software


Neste captulo so descritos sucintamente os mecanismos bsicos que utilizamos
para organizar o nosso conhecimento e administrar a complexidade do mundo em
que vivemos. So apresentados os conceitos de processo simblico, abstrao,
hierarquias, agregados, classes e tipos.
2.1. Introduo
Sistemas computacionais so, essencialmente, ferramentas para ampliar a capacidade da
nossa mente, assim como os sistemas eletromecnicos estendem nossa capacidade fsica.
Qualquer sistema eletromecnico, por mais complexo e potente que seja, projetado e
construdo a partir de um conjunto limitado de mecanismos relativamente simples, tais como
dnamos, motores, alavancas, engrenagens, roldanas e correias. De forma anloga, os
sistemas computacionais modernos empregam um conjunto limitado de mecanismos
bsicos, inspirados no modo como organizamos o nosso conhecimento e dos processos
mentais que empregamos na resoluo de problemas, que so objetos de estudo das
chamadas cincias cognitivas. Nas sees seguintes iremos apresentar alguns desse
mecanismos fundamentais.
2.2. Processo Simblico

" O processo mediante o qual os seres humanos podem arbitrariamente


fazer com que certas coisas representem outras, pode-se chamar de
processo simblico." [Hayakawa63]
O processo simblico assimilado e desenvolvido desde os primeiros meses de vida de uma
criana, tornando-se to automtico quanto respirar. Esse processo est presente em todas
as formas de comunicao humana e a essncia da cultura de um povo. Logo que
nascemos recebemos um nome que nos representa ao longo de toda a nossa vida. A lngua,
as tradies religiosas, o sistema monetrio, o modo de vestir, so exemplos de traos
culturais que no existiriam sem esse processo.
As linguagens de programao de segunda gerao como Assembler, tambm chamadas
"linguagens simblicas", j ofereciam esse recurso fundamental: a possibilidade de se utilizar
smbolos para representar as instrues do processador e os endereos de memria dos
seus operandos.
2.3. Abstrao

"O processo de abstrair, isto , deixar caractersticas de fora, uma


comodidade indispensvel." [Hayakawa63]
O nome "Edson Arantes do Nascimento" representa uma pessoa em particular, natural de
Trs Coraes (MG) e que foi jogador do Santos Futebol Clube. Como acontece com os
nomes prprios em geral, h uma relao precisa entre o smbolo (o nome) e o objeto
concreto representado (a pessoa).
Quando nos referimos ao "Rei do Futebol" estamos destacando apenas as caractersticas
profissionais daquela mesma pessoa, deixando de fora (abstraindo) suas demais
caractersticas como a cidade onde nasceu e quantos filhos teve. Com isso estamos nos
distanciando da realidade, de infinita complexidade, para criar uma representao de uma
imagem simplificada dessa realidade. Subimos, portanto, um degrau numa escala de
abstrao crescente. Podemos prosseguir nesse sentido criando smbolos ainda mais
abstratos, de imagens cada vez mais simplificadas de um mesmo objeto concreto.

Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

Cap. 2 / Fundamentos de Estruturao de Software

As linguagens de programao de terceira gerao, tambm chamadas "de alto nvel", como
Fortran, COBOL e Algol, se caracterizavam por proporcionar ao programador nveis de
abstrao mais elevados que as linguagens de segunda gerao. Expresses aritmticas,
vetores e arquivos so algumas das abstrataes que simplificam enormemente o trabalho de
programao nessas novas linguagens quando comparadas, por exemplo, com Assembler.
2.4. Hierarquias Todo-Partes

"hierarquia. S. f. Fig. Srie contnua de graus ou escales, em ordem


crescente ou decrescente; escala." [Dicionrio Aurlio]
Outro recurso que utilizamos intuitivamente na tentativa de compreender uma realidade
complexa a decomposio de um todo em vrias partes menores, que sejam mais simples
de serem observadas e analisadas separadamente.
Para nos ajudar a entender o corpo humano, por exemplo, o dividimos em cabea, tronco e
membros. Cada uma dessas partes pode ser subdividida, sucessivamente, em partes
menores, como mos, dedos, falanges, ossos, clulas, etc ... Chamamos de agregao a
operao inversa, quando criamos uma nova abstrao (o agregado) a partir de um conjunto
de objetos relacionados (os componentes). Por exemplo, uma constelao formada por um
conjunto de estrelas espacialmente relacionadas.
Algumas linguagens de programao ainda de segunda gerao, como Macro Assembler, j
ofereciam recursos para decomposio de um todo em partes menores tanto na definio de
dados estruturados em registros ("structures") como na definio de estruturas de
procedimentos modulares ("procedures "). Esses recursos se tornaram amplamente
disponveis nas linguagens de terceira gerao.
2.5. Categorizao e Instanciao

"classe. S. f. Lg. Conjunto de objetos que se define pelo fato de tais


objetos, e s eles, terem uma ou mais caractersticas comuns."
[Dicionrio Aurlio]
Quando tentamos compreender o ambiente em que vivemos buscamos, intuitivamente,
identificar semelhanas e diferenas entre as diversas coisas que nos cercam. Percebemos,
por exemplo, que h uma semelhana entre o sangue e a gua, pois ambos escorrem entre
nossos dedos, asssim como percebemos que alguns animais podem voar e outros no.
Procuramos identificar caractersticas, como "escorre" ou "sabe voar", que nos ajudem a
distingir uma coisa da outra - a selecionar. Ao mesmo tempo juntamos - categorizamos - as
coisas que no conseguimos dintingir daquela forma, que consideramos semelhantes.
Criamos, assim, classes (ou categorias) que representam conjuntos de coisas com
caractersticas semelhantes, como por exemplo "lquido" e "ave".
Atravs dessas classes, simplificamos a nossa viso da realidade tratando coisas diferentes
como se fossem iguais, ou seja, abstraindo as diferenas entre elas. Com isso podemos
adotar uma maneira uniforme de agir ao enfrentar situaes diversas, sem dispender um novo
esforo de avaliao e planejamento. Por exemplo, se algo redondo, leve e macio se aproxima
ento deve ser "do tipo bola", portanto, chute-a de volta, no importando a cor, o cheiro ou o
que tenha dentro dela. bastante provvel que isso seja a coisa certa a fazer.
Uma classe, portanto, um conceito abstrato e totalmente arbitrrio. Um mesmo objeto
concreto pode ser visto como pertencente a classes diferentes, dependendo do ponto de vista,
da cultura e dos interesses de quem o faz.
Se estivermos interessados em estudar problemas cardacos relacionados com a prtica de
esportes, por exemplo, podemos criar a classe "jogador de futebol" para nos referirmos ao

Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

Cap. 2 / Fundamentos de Estruturao de Software

conjunto de pessoas que praticam aquela modalidade de esporte, nela incluindo tanto "O Rei
do Futebol" como qualquer "perna-de-pau" de fim de semana. Isso nos permite buscar
caractersticas comuns a um amplo conjunto de pessoas, como por exemplo a reao a um
determinado tratamento.
A linguagem de programao Simula-67 [Dahl70], derivada de Algol [Backus63], introduziu o
conceito de classes permitindo a definio de abstraes com caractersticas (atributos e
operaes) a serem aplicadas a um conjunto de objetos manipulados pelo programa
(instncias concretas da classe).
2.6. Generalizao e Especializao
Em nosso processo natural de categorizao empregamos duas outras operaes bsicas: a
generalizao e a especializao.
Atravs da especializao criamos uma nova classe para agrupar parte dos elementos de
uma classe j existente, que se diferenciam dos demais elementos dessa mesma classe. Por
exemplo: examinando os elementos da classe "carro" caracterizados como: meio de
transporte, automotor, sobre rodas, dispensa trilhos, para pessoas, uso individual ou familiar;
podemos identificar uma sub-classe "carro esportivo" abrangendo os elementos da classe
"carro" que se caracterizam por: potente e veloz. A subclasse tambm chamada de partio.
A generalizao opera no sentido inverso, criando uma nova classe, mais genrica, para
representar os elementos de duas ou mais classes existentes. Por exemplo: podemos
agrupar os elementos das classes "carro", "barco" e "metr" numa super-classe "veculo de
transporte de passageiros", que incluir todos os elementos que rena as caractersticas:
meio de transporte, automotor, para pessoas.
2.7. Hieraquias de Classes
Atravs das operaes de generalizao e especializao criamos inmeras hierarquias para
organizar o nosso conhecimento cientfico: as chamadas taxonomias.
Um cientista da natureza interessado num vegetal extico, por exemplo, procura identifica-lo
atravs de suas caractersticas observveis, tentando "encaix-lo" numa das classes mais
especializadas das taxonomias botnicas existentes. Caso isso no seja possvel, em se
tratando de um elemento com caractersticas significativamente distintas dos outros j
classificados, cria-se uma nova classe que includa numa das classes mais genricas
existentes e que lhe seja "mais prxima" (de menor diferena). Suponhamos que aquela planta
extica possua um grande nmero de caractersticas comuns aos elementos de uma classe
genrica denominada "Magnolifitas". Com isso o conhecimento que j se tem acumulado
sobre essa classe de vegetais, como suas aplicaes medicinais por exemplo, transferido
para a nova espcie encontrada e reduz -se a investigao s diferenas entre a nova espcie
e outras "Magnolifitas". Em outras palavras, a nova classe "herda" o que j conhecemos
sobre a super-classe.
Foram as primeiras linguagens de programao orientadas a objetos, como Smalltalk [], que
introduziram recursos para definio de hierarquias de classes e herana de comportamento.
2.8. O Conceito de Tipo

"tipo. S. m. Coisa que rene em si os caracteres de uma clase."


[Dicionrio Aurlio]
Como vimos nas sees anteriores, uma classe uma abstrao que representa um conjunto
finito e bem determinado de elementos. A classe "animal", por exemplo, representa o conjunto
de todos os animais j existentes sobre a face da terra. Ainda que o seu nmero seja
desconhecido com preciso esse conjunto finito e bem determinado.

Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

10

Cap. 2 / Fundamentos de Estruturao de Software

Em muitas situaes, porm, no queremos nos referir a um conjunto determinado de


elementos mas sim a um elemento hipottico, sem especificarmos precisamente qual. Textos
legais e regulamentos so exemplos de tais situaes, como no aviso: "Ao convidado do scio
no permitida a prtica de atividades esportivas nas dependncias do clube." A expresso
"convidado do scio" utilizada para representar uma pessoa ainda indeterminada. Mesmo
no havendo convidados no clube aquela frase permanece vlida e permite formularmos
hipteses e anteciparmos concluses como: "se eu for convidado no poderei nadar na
piscina".
Em situaes como essa empregamos uma nova abstrao que um modelo idealizado para
representar um elemento indeterminado. Estamos abstraindo (deixando de fora) os elementos
do mundo real e criando um elemento imaginrio - o tipo - que poder, posteriormente, ser
substitudo por um elemento concreto.
Freqentemente definimos tipos associados a determinadas classes, num relao biunvoca.
Considere, por exemplo, a frase "O associado dever tirar a foto na secretaria do clube dentro
do horrio de funcionamento". Podemos presumir que h uma relao direta entre o tipo
"associado" e a classe "scio": qualquer elemento da classe "scio" pode ocupar o lugar de
"associado". Se Joo pertence classe scio ento Joo associado e, conseqentemente,
Joo dever tirar a foto na secretaria do clube dentro do horrio de funcionamento.
Essa relao biunvoca entre uma classe e um tipo no , porm, sempre necessria.
Analisando a frase "O Conselho Deliberativo ser dirigido por um Presidente, escolhido entre
seus membros por voto da maioria", por exemplo, podemos identificar um conjunto
determinado de pessoas, que formam a classe "membro do Conselho". Podemos definir ainda
dois tipos de pessoas: o tipo "Conselheiro", que representa um elemento qualquer daquela
classe, e o tipo "Presidente", que representa um elemento em especial daquela mesma
classe. Temos, assim, de um lado uma hierarquia de tipos onde "Presidente" um sub-tipo
de "Conselheiro" e, de outro lado, uma nica classe "membro do Conselho".
<<supertipo>>

Conselheiro
<<classe>>

Membro do
Conselho
<<subtipo>>

Presidente

FIg. 2.8 - Exemplo de Hierarquia de Tipos


Alguns autores no fazem essa distino entre classe e tipo, utilizando os dois termos como
sinnimos. O mesmo ocorre em algumas importantes linguagens de programao orientadas
a objetos, como C++. As linguagens mais modernas, como Java, j oferecem recursos
distintos para definio de hierarquias de classes e de tipos.
2.9. Referncias
J. F. Sowa. Conceptual Structures. Addison-Wesley. 1984.
S. I. Hayakawa. A Linguagem no Pensamento e na Ao. Livraria Pioneira Editora. SP. 1963.

Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

Cap. 2 / Fundamentos de Estruturao de Software

11

Aurlio B. H. Ferreira. Dicionrio Aurlio Bsico da Lngua Portuguesa. Editora Nova Fronteira
S/A. 1988.

Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

Você também pode gostar