5
Copyright © 2003, Cecília Rubira. Todos os direitos reservados. 2. Fundamentos de Estruturação de Software Neste capítulo são descritos sucintamente os mecanismos básicos que utilizamos para organizar o nosso conhecimento e administrar a complexidade do mundo em que vivemos. São apresentados os conceitos de processo simbólico, abstração, hierarquias, agregados, classes e tipos. 2.1. Introdução Sistemas computacionais são, essencialmente, ferramentas para ampliar a capacidade da nossa mente, assim como os sistemas eletromecânicos estendem nossa capacidade física. Qualquer sistema eletromecânico, por mais complexo e potente que seja, é projetado e construído a partir de um conjunto limitado de mecanismos relativamente simples, tais como dínamos, motores, alavancas, engrenagens, roldanas e correias. De forma análoga, os sistemas computacionais modernos empregam um conjunto limitado de mecanismos básicos, inspirados no modo como organizamos o nosso conhecimento e dos processos mentais que empregamos na resolução de problemas, que são objetos de estudo das chamadas ciências cognitivas. Nas seções seguintes iremos apresentar alguns desse mecanismos fundamentais. 2.2. Processo Simbólico " O processo mediante o qual os seres humanos podem arbitrariamente fazer com que certas coisas representem outras, pode-se chamar de processo simbólico." [Hayakawa63] O processo simbólico é assimilado e desenvolvido desde os primeiros meses de vida de uma criança, tornando-se tão automático quanto respirar. Esse processo está presente em todas as formas de comunicação humana e é a essência da cultura de um povo. Logo que nascemos recebemos um nome que nos representa ao longo de toda a nossa vida. A língua, as tradições religiosas, o sistema monetário, o modo de vestir, são exemplos de traços culturais que não existiriam sem esse processo. As linguagens de programação de segunda geração como Assembler, também chamadas "linguagens simbólicas", já ofereciam esse recurso fundamental: a possibilidade de se utilizar símbolos para representar as instruções do processador e os endereços de memória dos seus operandos. 2.3. Abstração "O processo de abstrair, isto é, deixar características de fora, é uma comodidade indispensável." [Hayakawa63] O nome "Edson Arantes do Nascimento" representa uma pessoa em particular, natural de Três Corações (MG) e que foi jogador do Santos Futebol Clube. Como acontece com os nomes próprios em geral, há uma relação precisa entre o símbolo (o nome) e o objeto concreto representado (a pessoa). Quando nos referimos ao "Rei do Futebol" estamos destacando apenas as características profissionais daquela mesma pessoa, deixando de fora (abstraindo) suas demais características como a cidade onde nasceu e quantos filhos teve. Com isso estamos nos distanciando da realidade, de infinita complexidade, para criar uma representação de uma imagem simplificada dessa realidade. Subimos, portanto, um degrau numa escala de abstração crescente. Podemos prosseguir nesse sentido criando símbolos ainda mais abstratos, de imagens cada vez mais simplificadas de um mesmo objeto concreto.

LivroJava Cap 02

Embed Size (px)

DESCRIPTION

LivroJava Capítulo 02

Citation preview

  • Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

    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.

  • 8 Cap. 2 / Fundamentos de Estruturao de Software

    Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

    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

  • Cap. 2 / Fundamentos de Estruturao de Software 9

    Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

    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.

  • 10 Cap. 2 / Fundamentos de Estruturao de Software

    Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

    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".

    Membro doConselho

    Conselheiro

    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.

  • Cap. 2 / Fundamentos de Estruturao de Software 11

    Copyright 2003, Ceclia Rubira. Todos os direitos reservados.

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