de determinado sistema ou programa. Um exemplo pratico de abstracao que podemos citar sao os numeros racionais. Analisando, podemos notar que os numeros racionais gerariam a primeira vista uma pequena complicacao na hora de implementa-los. Quando isso ocorre, facilita muito encontramos uma forma de considerar um arranjo de numeros e caracteres como uma abstracao (o numero racional). Seriam necessarias funcoes para realizar as operacoes entre eles, concatenacoes e etc. e a abstracao facilita isso. Pontos flutuantes sao exemplos de abstracoes de dados.Para todos se lembrarem do que vimos na aula (Schema e etc.), encontramos uma implementacao da abstracao de numeros racionais que segue:Funcao que constroi um numero racional a partir do numerador e do denominador.(defun racional (numerador denominador)(cons numerador denominador))Para sabermos qual e o numerador ou o denominador de um dado numero racional podemosdefinir:(defun numerador (racional)(car racional))(defun denominador (racional)(cdr racional))Assim, ja podemos escrever a funcao que calcula a soma de dois racionais, usando a formula.n1/d1 + n2/d2 = (n1*d2 + n2*d1) /d1*d2(defun +racional (r1 r2)(racional (+ (* (numerador r1) (denominador r2))(* (numerador r2) (denominador r1)))(* (denominador r1) (denominador r2))))Para simplificar a escrita de racionais, podemos definir uma funcao que escreve um racional de acordo com uma convencao qualquer.(defun escreve-racional (racional)(format t " a/ a" (numerador racional)(denominador racional)))Agora, ja podemos calcular a seguinte expressao:> (escreve-racional (+racional (racional 1 2)(racional 1 3)))RESULTADO = 5/6,,ENCAPSULAMENTO O encapsulamento, falando um pouco mais, e a tecnica ou metodo de manter dentro de cada modulo do sistema (ver modularidade em definicoes), os detalhes que so dizem respeito ao proprio. Cada modulo ou classe, so 'exporta' as definicoes necessarias a utilizacao dos servicos que se relacionam com o proprio. E como isso e feito? Segue para exemplificar, um script que encontramos em Java. O encapsulamento, pode ser usado em qualquer linguagem orientada a objetos. Alguns dos comandos usados sao muito comentados. Por exemplo public, private, protect, mas dependem da linguagem escolhida e claro. Para quem tem conhecimento da linguagem Java fica facil de entender. Quem nao possui, fica uma oportunidade de aprender um pouco mais:Sem o uso de encapsulamento:class NaoEncapsulado {//implicitamentamente ha modificador, mas nao e o mais restritivoint semProtecao;}public class TesteNaoEncapsulado {public static void main(String[] args) {NaoEncapsulado ne = new NaoEncapsulado(); //ne e uma instancia de NaoEncapsuladone.semProtecao = 10; //acesso direto ao atributoSystem.out.println("Valor sem protecao: " + ne.semProtecao); //acesso direto aos atributos ou nao estupor}}Com o uso de encapsulamento:class Encapsulado {//private e um modificador de acesso de restricao maximaprivate int comProtecao;public void setComProtecao(int comProtecao) {this.comProtecao = comProtecao;}public int getComProtecao() {return this.comProtecao;}}public class TesteEncapsulado {public static void main(String[] args) {Encapsulado e = new Encapsulado(); //"e" e uma instancia de Encapsulado//acesso direto a um atributo protegido implicara em erro de compilacaoe.comProtecao = 10;//deve-se acessar o atributos de forma indireta, encapsuladae.setComProtecao(10);System.out.println("Valor com protecao: " + e.getComProtecao());}}Referencias:Livro:Linguagens de Programacao SEBESTAWeb:http://www.wikipedia.orghttp://www.gia.ist.utl.pt/Lisp9596/node30.htmlIntegrantes: Lenir Raquel e Thiago Rangel.