pascal-oo

download pascal-oo

of 64

Transcript of pascal-oo

  • Programao Orientada Objetos com Pascal

    CERTIFICADO DE REGISTRO

    N REGISTRO: 179.755 LIVRO : 304 FOLHA : 407

  • Sergio Santos 2

    Programao Orientada Objetos com Pascal

    PROCEDIMENTO E FUNO ............................................................................................3ESCOPO DE VARIVEIS...........................................................................................................3PROCEDIMENTOS ...................................................................................................................4

    FUNO ................................................................................................................................9FUNES RECURSIVAS .........................................................................................................10

    Exerccios: ......................................................................................................................11

    INTRODUO.....................................................................................................................17

    CONCEITOS BSICOS DA POO.......................................................................................18CLASSE ...............................................................................................................................18OBJETO ...............................................................................................................................18MENSAGEM .........................................................................................................................18MTODO..............................................................................................................................18HERANA ............................................................................................................................18ENCAPSULAMENTO ..............................................................................................................21

    COMPONENTES REUTILIZVEIS (BIBLIOTECAS UNIT) ..........................................21COMO CRIAR UMA UNIDADE................................................................................................21INTERFACE ......................................................................................................................21IMPLEMENTATION .........................................................................................................21COMO UTILIZAR ..................................................................................................................21AS CLASSES.........................................................................................................................22DEFINIES DA POO DO TURBO PASCAL ..............................................................................23

    Exemplo ..........................................................................................................................39

    INICIALIZANDO OBJETOS ..............................................................................................43

    Exerccio.........................................................................................................................46

    OBJETOS E MTODOS DINMICOS ..............................................................................47Exerccios .......................................................................................................................49

    VINCULAO TARDIA E POLIMORFISMO .................................................................50

    OBJETOS DINMICOS......................................................................................................53

    COMANDOS DE MANIPULAO DE ARQUIVOS ........................................................59

    UTILIZANDO ARQUIVOS COM OBJETOS ....................................................................61

    REFERNCIAS BIBLIOGRFICAS..................................................................................64

  • Programao Orientada Objetos com Pascal

    PROCEDIMENTO E FUNO

    Escopo de Variveis

    Diz-se que um bloco externo a outro, quando o segundo faz parte do primeiro.

    Neste sentido, uma varivel declarada em um bloco global para todos os blocos internos e localpara o prprio bloco.

    Podemos ter diversos bloco aninhados, conforme mostra a figura a seguir:

    P e Q internos a M M externos a P e Q

    A interno a P P externo a A

    B interno a A A externo a B

    R e S so internos a Q Q externo a R e S

    Conforme foi mostrado, uma varivel declarada dentro de um bloco s conhecida dentro destebloco.

    Se uma varivel A declarada em um bloco j foi declarada com mesmo nome num bloco maisexterno, a varivel ativa no bloco aquela declarada localmente. A varivel A deixa de ser global paraaquele bloco.

    M

    P

    A

    B

    QR

    S

    Nvel bloco

    0 M

    1 P, Q

    2 A, R, S

    3 B

  • Sergio Santos 4

    Programao Orientada Objetos com PascalProcedimentos

    Um procedimento um bloco precedido de um cabealho. Com isto ser possvel fazerreferncia ao bloco de qualquer ponto do algoritmo. A sintaxe da declarao ser:

    Procedimento ;

    incio

    C1;

    C2;

    C3;

    .

    .

    .

    Cn;

    fim; {}

    Exemplo:

    Procedimento TROCA;

    incio

    inteiro: AUX;

    AUX

    X;

    X

    Y;

    Y

    AUX;

    fim; {TROCA}

    A declarao de um procedimento deve vir sempre no incio do bloco em que estiver sendodeclarado (antes de qualquer comando executvel). Um procedimento s executado sob a chamada. Achamada no procedimento feita por um comando que se resume no nome do procedimento. O exemploa seguir esclarece a utilizao do procedimento TROCA declarado anteriormente. O que ser impressono algoritmo abaixo?

  • Sergio Santos 5

    Programao Orientada Objetos com Pascal

    incio

    inteiro: X, Y, A, B, C, D;

    Procedimento TROCA;

    incio

    inteiro: AUX, X;

    AUX X;

    X Y;

    Y AUX;

    fim; {TROCA}

    A 5;

    B 3;

    escreva(A, B);

    X A;

    Y B;

    TROCA;

    A X;

    B Y;

    escreva (A, B);

    C 4;

    D 9;

    escreva (C, D);

    X C;

    Y D;

    TROCA;

    C X;

    Y D;

    escreva (C, D);

    fim.

    Sero impressos:

    5 3

    3 5 e

    4 9

    9 4

  • Sergio Santos 6

    Programao Orientada Objetos com PascalNo exemplo anterior o procedimento TROCA foi utilizado duas vezes com o objetivo de trocar o

    valor das variveis A e B e depois C e D. O mesmo resultado poderia ser obtido de uma forma maiscompacta introduzindo-se parmetros no procedimento.

  • Sergio Santos 7

    Programao Orientada Objetos com Pascal

    A sintaxe mais geral para procedimentos ser:

    Procedimento ();

    incio

    C1;

    C2;

    C3;

    .

    .

    .

    Cn;

    fim; {nome do procedimento}

    A consiste na declarao dos tipos das variveis que compem alista de parmetros. No exemplo do procedimento TROCA, X e Y deixariam de ser variveis globais epassariam a fazer parte da lista de parmetros:

    Procedimento TROCA(X, Y);

    inteiro: X, Y;

    incio

    inteiro: AUX;

    AUX X;

    X Y;

    Y AUX;

    fim; {TROCA}

    Modifique, agora, o exemplo anterior adaptando-o ao novo procedimento.

    procedure TROCA (X, Y: integer);

    var AUX : integer;

    begin

    AUX := X;

    X := Y;

    Y := AUX;

    end;

  • Sergio Santos 8

    Programao Orientada Objetos com Pascal

    Tudo o que foi falado vale para o Pascal, incluindo nesta definio o conceito de passagem porvalor e por referncia, que abordaremos mais adiante.

    Sintaxe em Pascal:

    procedure NOME ();

    begin

    end;

  • Sergio Santos 9

    Programao Orientada Objetos com Pascal

    Funo

    Quando se necessitar atribuir o resultado da chamada de um procedimento a uma varivel,utilizar este resultado numa expresso aritmtica ou imprimir este resultado, necessrio que exista umparmetro de retorno na chamada do procedimento e este parmetro que ser utilizado.

    Por exemplo:

    ABS(-3,Y);

    X Y * 2;

    Seria mais conveniente se pudssemos escrever:

    X ABS(-3) * 2;

    Isto possvel utilizando um tipo especial de procedimento, denominado funo cuja sintaxe aseguinte:

    Funo (): ;

    ;

    incio

    ;

    C1;

    C2;

    C3;

    .

    .

    .

    ;

    Cn;

    fim;{}

    O procedimento ABS(X, Y) visto anteriormente poderia ser transformado na funo ABS(X), daseguinte maneira:

  • Sergio Santos 10

    Programao Orientada Objetos com Pascal

    Funo ABS(X): real;

    real: X;

    incio

    se X >= 0 ento ABS X;

    seno ABS -X;

    fim se;

    fim; {ABS}

    A chamada da funo , portanto, uma pseudovarivel, isto , depois de executada a chamada, ovalor calculado retornado no nome da funo, que passa a ser uma varivel da expresso.

    Funes Recursivas

    Existem casos em que um procedimento ou funo chama a si prprio. Diz-se ento que oprocedimento ou funo recursivo. Por exemplo, o fatorial de um nmero n pode ser definidorecursivamente, ou seja:

    Escreva aqui a funo FATORIAL recursiva em algoritmo.

    n! =

    n (n 1)!, se n >= 1

    1, se n = 0

    function ABS(X: real):real;

    begin

    if X > = 0 then ABS := X

    else ABS := X * -1;

    end;

  • Sergio Santos 11

    Programao Orientada Objetos com Pascal

    Exerccios:

    1) Escrever um procedimento para imprimir o cabealho:

    UNESA SISTEMA DE PROGRAMAO

    XX/XX/XX PG. 9999

    fornecer a DATA e o nmero da pgina como parmetros.

    2) Escrever uma funo que receba dois nmeros inteiros, positivos, e determine o produto dosmesmos, utilizando o seguinte mtodo de multiplicao:

    dividir sucessivamente o primeiro nmero por 2 at que se obtenha 1 como quociente;

    paralelamente, dobrar, sucessivamente, o segundo nmero;

    somar os nmeros da segunda coluna que tenham como correspondente na primeira colunaum nmero mpar. O total o produto procurado.

    Exemplo:

    9 x 6

    9 6 6

    4 12

    2 24

    1 48 + 48

    ---------

    54

    A seguir escrever um algoritmo que leia 10 pares de nmeros e calcule os respectivos produtos,usando a funo acima.

    3) Escrever uma funo que, ao analisar se um nmero recebido via parmetro est no intervalo 5< NMERO < 20, retorne o valor verdadeiro e falso em caso contrrio.

  • Sergio Santos 12

    Programao Orientada Objetos com Pascal4) Preparar um procedimento VOGAL para aceitar como parmetro uma cadeia de caracteres

    arbitrria e retornar uma cadeia contendo somente os caracteres alfabticos da cadeia original.Todos os brancos, sinais de pontuao, nmeros e caracteres especiais devem ser removidos.

    5) Nmeros palndromos so aqueles que escritos da direita para esquerda, tm o mesmo valor.Exemplo: 545; 97379; etc.

    Escrever uma funo que, recebendo como parmetro um nmero inteiro, retorne este nmeroescrito ao contrrio.

    A seguir, escrever um algoritmo que determine e imprima, usando a funo acima, todos osnmeros palndromos entre 1 e 1000.

    6) Faa um programa para imprimir uma tabela de capital acumulado, dado o valor do capitalinicial, da taxa de juros e do nmero de perodos. A frmula para o clculo do capital acumulado a seguinte:

    M = C x (1 + i/100)n

    Em que C = capital inicial

    i = taxa de juros

    n = nmero de perodos

    M = capital acumulado

    Por exemplo, se o capital inicial R$100,00, a taxa de 22% ao ms e o nmero demeses da aplicao igual a 6, teremos que calcular os valores:

    M1 = 100 x (1 + 22/100)1

    M2 = 100 x (1 + 22/100)2

    M6 = 100 x (1 + 22/100)6

    7) Faa um programa que contenha um procedimento (procedure) para verificar se um ano bissexto ou no. Utilize a seguinte regra:

    Um ano bissexto se divisvel por 4, mas no por 100, ou ento se divisvel por 400.

  • Sergio Santos 13

    Programao Orientada Objetos com PascalExemplo: 1988 bissexto porque 1988 divisvel por 4 mas no por 100

    2000 bissexto porque divisvel por 400.

    1900 no bissexto porque divisvel por 4 e por 100, mas no divisvelpor 400

    8) Em relao tabela abaixo, deseja-se calcular a somatria dos valores de x. Faa um programapara armazenar essa tabela numa matriz e determinar a soma desejada, servindo-se de umafuno para o clculo da soma. O programa deve tambm imprimir a tabela e a soma.

    1 2 3 4 5 6 7 8 9 10 A

    X 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.1 15,6

    Observe que: A = x = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 = 15.6

    9) Em relao a uma tabela dada, deseja-se calcular a somatria dos quadrados dos valores dados.Faa um programa que contenha uma funo para executar essa tarefa. A funo deve ter doisparmetros: a matriz e o nmero de elementos da matriz como em

    Function SomaXquadrado(X: matriz; N: integer): real;

    1 2 3 4 5 6 7 8 9 10

    X 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.1

    Deseja-se obter o valor de B:

    1 2 3 4 5 6 7 8 9 10

    X 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.1

  • Sergio Santos 14

    Programao Orientada Objetos com Pascal

    X2 0.01 0.04 0.09 0.16 0.25 0.36 0.49 0.64 0.81 1.21

    B = x2 = x12+x22+x32+ x42+x52+x62+ x72+x82+x92+ x102 = 4.06

    Acumule a soma de x2 em B. Observe que os valores de x2 no precisam ser armazenados

    10) Faa um programa que contenha um subprograma para imprimir o signo do zodacocorrespondente a uma data (dia/ms) qualquer.

    A tabela abaixo mostra o ltimo dia de cada ms e o signo correspondente.

    Ms ltimo dia Signo

    Jan 20 CAPRICRNIO

    Fev 19 AQURIO

    Mar 20 PEIXES

    Abr 20 RIES

    Mai 20 TOURO

    Jun 20 GMEOS

    Jul 21 CNCER

    Ago 22 LEO

    Set 22 VIRGEM

    Out 22 LIBRA

    Nov 21 ESCORPIO

    Dez 21 SAGITRIO

    De 22/dez a 31/dez CAPRICRNIO

    11) O dia da Pscoa o primeiro domingo depois da lua cheia que ocorre a partir do vigsimo-primeiro dia do ms de maro. Se a lua cheia ocorre num domingo, ento a Pscoa nodomingo seguinte. Ao clculo do dia da Pscoa deu-se o nome de Computus. Em 1800, CarlFriedrich Gauss, um dos maiores matemticos de todos os tempos, resumiu o clculo do dia daPscoa num frmula bastante simples. O processo de Gauss para determinar em que dia secomemora a Pscoa no ano X o seguinte:

  • Sergio Santos 15

    Programao Orientada Objetos com Pascal(1) Determine duas constantes M e N, pela tabela:

    ANO 1582-1699 1700-1799 1800-1899 1900-2099 2100-2229

    M 22 23 23 24 25

    N 2 3 4 5 6

    (2) Determine A = resto da diviso de Ano por 4

    (3) Determine B = resto da diviso de ano por 7

    (4) Determine C = resto da diviso de Ano por 19

    (5) Determine D = resto da diviso de (19 x C + M) por 30

    (6) Determine E = resto da diviso de (2 x A + 4 x B + 6 x D + N) por 7

    (7) O dia da Pscoa ocorre no dia (22 + D + E) de maro ou no dia (D + E 9) de abril.

    (8) Existem duas excees:

    Se D = 28 ou D = 29 e E = 6 ento o dia da Pscoa deve ser celebrado uma semana antes dodia calculado pela frmula.

    Faa um programa para determinar em que dia se comemora a Pscoa num ano qualquer.

  • Sergio Santos 16

    Programao Orientada Objetos com Pascal

    Programao Orientada Objeto

  • Sergio Santos 17

    Programao Orientada Objetos com Pascal

    INTRODUO

    A programao orientada para objeto uma nova disciplina do Desenvolvimento de Software.Ela apresenta uma estratgia diferenciada de organizar, planejar, conceitualizar, escrever, atualizar e fazermanuteno do software.

    As linguagens de alto nvel representam uma conexo inteligente entre o programador e ocomputador. Sua evoluo paralela s tcnicas e mtodos do Desenvolvimento do Software, sendoinspirada pelo anseio de criar componentes de softwares robustos e reutilizveis que reduzem os ciclos eo tempo da produo do software. Esta diminuio no tempo de produo ainda mais relevante quandouma equipe de programadores est trabalhando em um projeto de software.

    A histria das linguagens de programao reflete a evoluo de linguagens no-estruturadas paralinguagens estruturadas e destas para as orientadas ao objeto. A linguagem Pascal desempenha um papelde destaque na promoo da programao estruturada, tanto na rea profissional quanto na reaacadmica pena que a borland tenha cancelado a distribuio deste programa e das disciplinas deprogramao que a acompanham. O Pascal e outras linguagens estruturadas chamaram a ateno doprogramador e professores universitrios por serem linguagens organizadas e didticas, que alm deeconomizar tempo, permitem uma melhor programao, com cdigo robusto e reutilizvel, de fcillegibilidade, manutenibilidade, atualizao e acesso a bibliotecas de software.

    As linguagens estruturadas so linguagens procedurais, onde um programa particionado em umconjunto de procedimentos e funes. A seqncia de rotinas descreve como os dados so manipulados.Especificamente, o programador controla a interao entre o cdigo e os dados. O foco principal daslinguagens procedurais a rotina, enquanto o foco secundrio so os dados que esto sendo manipulados.

    Neste captulo, abordaremos uma introduo programao orientada para objeto. Procuro ser omais simples e didtico possvel, espero que o contedo aqui apresentado seja de grande valia para oestudante ou pesquisador.

  • Sergio Santos 18

    Programao Orientada Objetos com Pascal

    CONCEITOS BSICOS DA POO

    Classe

    Uma classe detalha os campos de dados de um objeto e os mtodos que atuam sobre os dados.As classes so parecidas com os tipos de dados em Pascal.

    Objeto

    Um objeto um membro de uma classe, similar tradicional varivel em Pascal.

    Mensagem

    Uma mensagem uma solicitao enviada a um objeto para chamar um de seus mtodos.

    Mtodo

    Um mtodo o procedimento ou funo chamado para atuar num objeto. Um mtodo definecomo uma mensagem deve ser executada.

    A POO (Programao Orientada a Objeto) permite uma abordagem mais simples para autilizao de dados usando objetos que respondem a mensagens. Esta abordagem demonstram uma noode que objetos em um programa so similares a alunos em uma sala de aula voc passa um exerccio ouum trabalho para um aluno ou um grupo de alunos (o objeto, neste caso) solicitando que lhe sejaapresentado uma soluo para um determinado problema. Supondo-se que o trabalho seja passado aoaluno ou grupo certo, ele responder usando sua experincia e recursos. O mtodo pelo qual o trabalho executado depende do objeto receptor (aluno). Os detalhes da resposta so transparentes ao professor(emissor da mensagem).

    Herana

    Uma outra caracterstica da POO a herana, um recurso que produz um grande efeito, que lhepermite criar subclasses. Cada subclasse recebe as caractersticas de sua classe-me (da mesma forma queum criana traz consigo caractersticas peculiares de seus pais). Uma subclasse acrescenta novosatributos s classes herdadas e pode tambm substituir qualquer atributo herdado. O Turbo Pascal, queimplementa o Object Pascal, permite apenas herana simples (tambm conhecida como linear). Este umesquema de herana simples onde cada subclasse tem apenas uma classe-me.

    A figura demonstra um exemplo de classe com suas subclasses. A subclasse O filha dasubclasse N, que filha da classe M. As subclasses P e Q so filhas da classe M. As classes N, P e Qherdam os vrios atributos da classe M. Os atributos de M no precisam ser redefinidos quando se declaraas subclasses N, P e Q apenas os novos atributos e os atributos anulados precisam ser declarados. Do

  • Sergio Santos 19

    Programao Orientada Objetos com Pascalmesmo modo, a subclasse O herda os atributos da subclasse N e da Classe M, e precisa declarar apenas osnovos atributos e os atributos cancelados. Isto ser melhor abordado mais adiante.

    Exemplo de uma Instituio de ensino e suas subclasses

    A herana influi muito significativamente na diminuio do cdigo do programa. Ela permiteevitar codificao repetidas e diminui o tempo de desenvolvimento do software.

    O grfico representa o caminho percorrido quando da chamada de um mtodo na Classe O.

    Classe M

    (Mantenedora)

    Classe N

    UniversidadeClasse Q

    Colgio de Aplicao

    Classe O

    Politcnico Classe P

    Administrao

  • Sergio Santos 20

    Programao Orientada Objetos com Pascal

    A procura de um mtodo que combine com a chamada nas classes hierarquicamente superiordemonstra a hereditariedade.

    CLASSE O

    EXECUTA OMTODO

    CLASSE N

    EXECUTA OMTODO

    CLASSE M

    EXECUTA OMTODO

    ERRO

    EXISTE O

    MTODO ?

    EXISTE O

    MTODO ?

    EXISTE O

    MTODO ?

    S

    N

    S

    N

    S

    N

  • Sergio Santos 21

    Programao Orientada Objetos com Pascal

    Encapsulamento

    Uma das principais caractersticas da POO o encapsulamento, pois evita que o programadorno precise acessar diretamente os campos de dados de um objeto. Para isto necessrio criar mtodosque sero os responsveis pelo tratamento de dados.

    Encapsulamento na verdade unir, numa nica estrutura, campos de dados e cdigos que agirosobre eles (mtodos). O grande benefcio do encapsulamento que o programador trabalha voltado nicae exclusivamente ao campo de dados que deseja atingir com seu cdigo.

    COMPONENTES REUTILIZVEIS (BIBLIOTECAS UNIT)

    Uma das ferramentas que possibilitam o encapsulamento de objetos a criao de Unidades(UNITS). Elas permitem que o programador empacote um conjunto de cdigos de procedimentos oufunes que executem uma determinada tarefa.

    Com esta possibilidade possvel compartimentalizar um determinado programa e reutiliz-loposteriormente em seus futuros projetos.

    Como Criar Uma Unidade

    Uma unidade composta por duas partes distintas: IMPLEMENTATION E INTERFACE.

    INTERFACE

    Este bloco conter os cabealhos dos procedimentos que faro parte da biblioteca (unidade) eque sero definidos na INTERFACE.

    IMPLEMENTATION

    o local onde sero codificados os procedimentos ou funes que foram declarados no blocoIMPLEMENTATION.

    Como Utilizar

    Aps ter sido criada, a sua utilizao bem simples, basta mencionar o nome da unidade nobloco USES e chamar um dos procedimentos ou funes no corpo principal do programa onde a unidadefora inserida.

    Para melhorar o entendimento do leitor, demonstro um cdigo muito importante para osprogramadores em Pascal. Este cdigo permite que o programador defina uma ou vrias molduras detamanhos diferentes em seus programas.

  • Sergio Santos 22

    Programao Orientada Objetos com PascalPara facilitar, criei uma unidade onde defino o cdigo para a impresso, na tela, de uma moldura.

    Na listagem a seguir ilustra a criao da unidade MOLDURA, repararem que no bloco interfacefoi declarado duas linhas uses crt e procedure mold(C1,L1,L2,C2: integer). No bloco implementation foradefinido o cdigo criado para a impresso da moldura na tela.

    unit moldura;

    interfaceuses crt;procedure mold(C1,L1,L2,C2:integer);

    implementationprocedure mold(C1,L1,L2,C2:integer);var X : byte;begin gotoxy(C1,L1);write(chr(201)); for X := (C1+1) to C2 do begin gotoxy(X, L1);write(chr(205)); gotoxy(X,L2);write(chr(205)); end; gotoxy(C1,L2);write(chr(200)); for X := (L1+1) to (L2-1) do begin gotoxy(C1, X);write(chr(186)); gotoxy(C2,X);write(chr(186)); end; gotoxy(C2,L1);write(chr(187)); gotoxy(C2,L2);write(chr(188));end;end.

    A chamada do Unit Crt se d devido ao uso do comando gotoxy, que um procedimentoexclusivo desta unidade.

    Para demonstrar a utilidade desta unidade apresentarei um programa mais adiante onde utilizei aunidade Moldura.

    As Classes

    Definir uma classe hierrquica significa estabelecer a classe principal e as subclasses quedefinem aperfeioamentos praticados na classe principal. A escolha da classe principal e das subclassesno uma tarefa das mais simples. A regra prtica a seguir a relao Um (Uma). Por exemplo, entreas seguintes classes: cadeira, cadeira de balano, cadeira universitria, cadeira de diretor e cadeira desecretria, fcil identificar a classe base cadeira. Uma cadeira de balano uma cadeira. Da mesma

  • Sergio Santos 23

    Programao Orientada Objetos com Pascalforma, uma cadeira de diretor tambm uma cadeira; portanto, cadeira de diretor uma subclasse decadeira.

    Definies da POO do Turbo Pascal

    O Turbo Pascal implementa de forma muito cuidadosa o Object Pascal. Asextenses das linguagens orientadas ao objeto so poucas, mas muito poderosas. Asintaxe geral para declarar uma classe mostrada aqui:

    Type

    = OBJECT | OBJECT ()

    End;

    Para se definir uma nova classe, utiliza-se a palavra-chave OBJECT. Na definio de umasubclasse, a palavra-chave OBJECT deve ser seguida do nome da classe-me entre parnteses. A lista decampos projetada da mesma maneira que os registros.

    Os cdigos dos procedimentos e funes no so definidos juntamente com seu cabealho nadeclarao da classe e sim mais adiante de uma maneira bem peculiar.

    Os conceitos bsicos da POO esto ilustrados na Listagem 1. Este programa define uma classede objetos que so conjuntos de caracteres. O Pascal aceita o tipo de dados sets (conjuntos) e implementaas operaes de unio, diferena e interseo de conjuntos. Alm disso, um programador consegue criarrotinas personalizadas para manipular conjuntos como lhe for mais conveniente. Usando as tcnicas deprogramao estruturada, todas as manipulaes de conjunto so implementadas de forma dividida. Oprograma da Listagem 1 apresenta uma classe de conjuntos de caracteres que encapsulam um campo dotipo conjunto e os mtodos que atuam sobre ele.

    Listagem 1. Programa CONJOBJ.PAS para ilustrar os conceitos bsicos da POO aplicada aoobjeto de conjunto de caracteres.

    Program Conjunto_De_Caracteres;Uses Crt;

    Type CarConj = Set of Char;Type

    ClcarConj = OBJECTCDConj : CarConj;CDMembro : Byte;

    Procedure Limpa;

  • Sergio Santos 24

    Programao Orientada Objetos com PascalProcedure EscreveConj;Procedure InsereMembro(Achar:char);Procedure EliminaMembro (Achar: char);Function MembroNoConj (Achar:char):boolean;

    End;

    Procedure CLCarConj.limpa;Begin

    CDConj := [];CDMembro := 0;

    end;

    Procedure CLCarConj.EscreveConj;const Aspas = ;

    var I : byte;

    begin

    write([);for I := 0 to 255 do

    if chr(I) in CDConj thenwrite(Aspas, chr(I), aspas,,);

    write(#8); {retrocesso}writeln(]);

    end;

    Procedure CLCarConj.InsereMembro (achar:char);begin

    if not(achar in CDConj) then beginCDConj := CDConj +[Achar];inc(CDMembro)

    end;

    end;

    procedure CLCarConj.EliminaMembro (Achar: char);begin

    if Achar in CDConj then beginCDConj := CDConj [Achar];Dec(CDMembro)

    end;

    end;

    function CLCarConj.MembroNoConj(Achar: char): Boolean;begin

    MembroNoConj := Achar in CDConj;end;

    procedure PressioneUmaTecla;

  • Sergio Santos 25

    Programao Orientada Objetos com Pascalvar Sai : char;

    begin

    writeln;

    write(Pressione qualquer tecla para continuar);sai := readkey;

    writeln;

    wtiteln;

    end;

    var CONJUNTO : CLCarConj;begin

    Clrscr;

    writeln(Testando objeto de conjunto genrico);CONJUNTO.LIMPA;

    CONJUNTO.InsereMembro(X);CONJUNTO.InsereMembro(y);CONJUNTO.InsereMembro(z);CONJUNTO.InsereMembro(+);writeln(O conjunto );CONJUNTO.EscreveConj;writeln;CONJUNTO.EliminaMembro(X);CONJUNTO.EliminaMembro(y);CONJUNTO.EliminaMembro(Z);Writeln(Depois de deletar X, y e Z, o conjunto );CONJUNTO.EscreveConj;writeln;

    writeln(O caractere P est noconjunto?,Conjunto.MembroNoConj(P));

    writeln(O caractere z est no conjunto? ,Conjunto.MembroNoConj(z));PressioneUmaTecla;

    end.

  • Sergio Santos 26

    Programao Orientada Objetos com Pascal

    O programa define a classe CLCarConj da seguinte maneira:

    CLCarConj = OBJECTCDConj : CarConj;CDMembro : Byte;

    Procedure Limpa;

    Procedure EscreveConj;Procedure InsereMembro(Achar:char);Procedure EliminaMembro (Achar: char);Function MembroNoConj (Achar:char):boolean;

    End;

    Existem dois campos de dados, a saber, CDConj e CDMembro. O campo CDConj toma nota doscaracteres que so membros do objeto de conjunto. O campo CDMembro armazena o tamanho doconjunto (nmero de membros). A classe CLCarConj define cinco mtodos para alterar o estado dosobjetos que so instncias da classe CLCarConj. O mtodo Limpa usado para inicializar e reinicializaro objeto. O mtodo EscreveConj exibe os membros do conjunto. O mtodo InsereMembro insere ummembro no-existente e atualiza o tamanho do conjunto. O mtodo EliminaMembro remove ummembro existente e diminui o tamanho do conjunto e retorna TRUE se o caracter Achar for membro, ouFALSE se este no for o caso.

    Ao analisar o cdigo relativo aos mtodos, observe o seguinte:

    A. Que o nome do mtodo precedido pelo nome da classe e pelo ponto que o operador deacesso. Esta uma exigncia para informar ao compilador sobre a propriedade dos mtodos.

    B. O programa cria o objeto CONJUNTO na seo de declarao VAR, exatamente comoqualquer outra varivel.

    C. As mensagens so enviadas ao objeto CONJUNTO usando o formato.. Por exemplo, a instruo CONJUNTO.Limpa interpretada comoenviar a mensagem Limpa ao objeto CONJUNTO. O objeto Conjunto respondeexecutando o mtodo CLCarConj.Limpa e limpando o conjunto de caracteres. Da mesmaforma, a instruo CLCarConj.InsereMembro(A); interpretada como enviar amensagem InsereMembro(A) ao objeto, qual o objeto CONJUNTO respondeexecutando o mtodo CLCarConj.InsereMembro e inserindo o caractere A no conjunto.

    O resultado do programa anterior o seguinte:

    Testando objeto de conjunto genricoO conjunto

  • Sergio Santos 27

    Programao Orientada Objetos com Pascal[X, y, z, +]

    Depois de deletar X, Y e Z, o conjunto

    [+,y, z]

    O caractere P est no conjunto ? FALSE

    O caractere z est no conjunto ? TRUE

    Pressione qualquer tecla para continuar

    O programa da listagem 1 lidou com uma nica classe e um nico objeto. A fora e aversatilidade da POO vm com a criao de uma hierarquia de classes. Para ilustrar este aspecto da POO,apresento um programa que insere subclasses de objetos representando maiores aprimoramentos da classebase CLCarConj:

    A. Uma subclasse de letras maisculas;

    B. Uma subclasse de dgitos;

    C. Uma subclasse de letras maisculas e minsculas;

    D. Uma subclasse dos caracteres especiais do teclado.

    A figura abaixo ilustra a hierarquia das vrias classes de conjuntos de caracteres.

    Conjunto de todos os caracteresASCII CHR(0) a CHR(255)

    Conjunto de todos os caracteresmaisculos A .. Z

    Conjunto de todos os dgitos 0 .. 9

    Conjunto de todos os caracteres doAlfabeto A..Z, a .. z

    Conjunto dos caracteres especiais doteclado

    @, #, %,

  • Sergio Santos 28

    Programao Orientada Objetos com PascalVamos analisar como cada subclasse criada. Lembre-se de que a classe base CLCarConj

    definida da seguinte maneira:

    CLCarConj = OBJECTCDConj : CarConj;CDMembro : Byte;

    Procedure Limpa;

    Procedure EscreveConj;Procedure InsereMembro(Achar:char);Procedure EliminaMembro (Achar: char);Function MembroNoConj (Achar:char):boolean;

    End;

    A primeira subclasse de CLCarConj o conjunto de letras maisculas e podemos cham-loSubLeMai. A diferena entre a subclasse SubLeMai e a sua classe base CLCarConj, se inicia nasfinalidades de seus campos de dados, no campo CDConj os elementos que sero armazenados, apesar deserem os mesmos, no tem os mesmos conceitos, pois so somente as letras maisculas que seroarmazenadas. J o campo CDMembro tem funo idntica a de sua classe base, logo perfeitamentepossvel a herana dos campos de dados. Verificamos, tambm que no necessrio a criao de novoscampos de dados.

    Os mtodos herdados satisfazem as suas necessidades, exceto o mtodoCLCarConj.InsereMembro e uma nova verso precisa ser definida, isto cancelar a antiga.

    Com base nesta anlise, a definio da classe SubLeMai a seguinte:

    SubLeMai = object (CLCarConj)

    Procedure InsereMembro (Achar : Char); {cancelar}

    End;

    Observe que Object(CLCarConj) usada para informar ao compilador que a classe SubLeMai uma subclasse de CLCarConj e no uma nova classe base. As instncias de SubLeMai tm acesso direto atodos os campos de dados e mtodos da classe base. A sobrescrio do mtodo InsereMembro a novaverso do mtodo herdado.

    A segunda subclasse de CLCarConj o conjunto de dgitos 0 a 9; chame-a Digitos. Do mesmomodo que em SubLetMai, os campos herdados, bem como, os seus mtodos, satisfazem subclasseSubDigito, menos CLCarConj.InsereMembro que deve ser redefinida. A declarao da subclasseSubDigito a seguinte:

    SubDigito = object (CLCarConj)

  • Sergio Santos 29

    Programao Orientada Objetos com PascalProcedure InsereMembro (Achar : char); {cancelar}

    End;

    O poder da herana fica evidente nesta declarao, que inclui um nico mtodo novo todo omais herdado da classe-me CLCarConj!

    A subclasse SubLeMai ser usada como base para a criao da subclasse SubAlfa, quearmazenar as letras maisculas e minsculas. Apesar dos campos de dados herdados da classe-meCLCarConj serem adequados, iremos inserir mais dois campos de dados CDLetMai, CDLetMin, queserviro para armazenar as quantidades de letras maisculas e minsculas, respectivamente.

    Como nas outras subclasses, devemos sobrescrever o mtodo InsereMembro. Como inserimosdois campos de dados, precisamos de um novo cdigo para o mtodo Limpa.

    A declarao da nova subclasse a que vemos a seguir:

    CAlfabeto = object(SubLeMai)FSubLeMa, fLetMin : byte;

    Procedure Limpa;

    Procedure InsereMembro (Achar : char); {cancelar}

    End;

    A listagem a seguir demonstra a eficincia da herana e a sobrescrio de mtodos, teste esteprograma e analise sua sada e voc poder comprovar esta eficincia.

    Procure entender o porque da sobrescrio de mtodos, faa-se as seguintes perguntas: O Pascalno se confunde como nomes de mtodos parecidos?; De que maneira so tratados os campos de dadosdas classes?.

    Listagem 2. Programa SCONJOBJ.PAS, que demonstra a hierarquia de classes, a herana e asobrescrio de mtodos herdados

    Program Testa_Conjunto;uses Crt;

    Type CarConj = set of Char; CLCarConj = object CDConj : CarConj; CDMembro : Byte;

    Procedure Limpa;

    Procedure EscreveConj;

  • Sergio Santos 30

    Programao Orientada Objetos com Pascal Procedure InsereMembro(Achar:char); Procedure EliminaMembro(Achar:char); Function MembroNoConj (Achar:char): boolean; end;

    SubLeMa = object(CLCarConj) Procedure InsereMembro(Achar:char); {Sobrescrever} end;

    SubDigito = object(CLCarConj) Procedure InsereMembro(Achar:Char); {Sobrescrever} end;

    SubAlfa = object(SubLeMa) CDSubLeMa, CDLetMin : byte;

    Procedure Limpa; {Sobrescreve} Procedure InsereMembro(Achar:char); {sobrescreve} end;

    SubCarEsp = object(CLCarConj) Procedure InsereMembro (achar:char); {sobrescreve} end;

    Const

    ALFA : CarConj = ['A'..'Z','a'..'z']; MAIUS: CarConj = ['A'..'Z']; CDIGITOS : CarConj = ['0'..'9'];

    procedure CLCarConj.Limpa;begin

    CDConj := []; CDMembro := 0;

    end;

    Procedure SubAlfa.Limpa;

    begin

    SubLeMa.limpa;

    CDSubLeMa := 0;

    CDLetMIn := 0;

    end;

  • Sergio Santos 31

    Programao Orientada Objetos com PascalProcedure CLCarConj.EscreveConj;const Aspas = ' " ';

    var I : byte;

    begin

    write('[ '); for I := 0 to 255 do

    if chr(I) in CDConj then write(Aspas, chr(I), Aspas, ','); write(#8); writeln(']'); writeln('O conjunto tem ',CDMembro, ' elemento(s)');end;

    Procedure CLCarConj.InsereMembro(Achar:Char);begin

    if not (Achar in CDConj) then begin CDConj := CDConj + [Achar]; inc(CDMembro); end;

    end;

    Procedure SubAlfa.InsereMembro(Achar:Char);begin

    if not(Achar in CDConj) and (Achar in Alfa) then begin CDConj := CDConj + [Achar]; inc(CDMembro); if Achar in Maius then

    inc(CDSubLeMa) else

    inc(CDLetMin); end;

    end;

    Procedure SubLeMa.InsereMembro(Achar:char);begin

    if not(Achar in CDConj) and (Achar in Alfa) and (Achar inMaius) then begin

    CDConj := CDConj + [AChar]; inc(CDMembro); end;

    end;

  • Sergio Santos 32

    Programao Orientada Objetos com Pascal

    Procedure SubDigito.InsereMembro(Achar:char);begin

    if not(Achar in CDConj) and (Achar in CDigitos) then begin CDConj := CDConj + [AChar]; inc(CDMembro); end;

    end;

    Procedure SubCarEsp.InsereMembro(Achar:char);begin

    if not(Achar in CDConj) and not(Achar in Alfa) and not(Acharin Maius) and not(Achar in CDigitos) then begin

    CDConj := CDConj + [AChar]; inc(CDMembro); end;

    end;

    Procedure CLCarConj.EliminaMembro(Achar:char);begin

    if Achar in CDConj then begin CDConj := CDConj - [Achar]; Dec(CDMembro); end;

    end;

    Function CLCarConj.MembroNoConj(Achar:char):boolean;begin

    MembroNoConj := Achar in CDConj;end;

    Procedure PressioneUmaTecla;

    var Sai : char;

    begin

    writeln;

    write('Pressione uma tecla para dar nova entrada '); sai := readkey;

    writeln;

    writeln;

    end;

  • Sergio Santos 33

    Programao Orientada Objetos com Pascalvar

    OBJCONJ : CLCarConj; OBJLetras : SubAlfa;

    OBJMai : SubLeMa;

    OBJDigito : SubDigito;

    OBJSimbolo : SubCarEsp;

    op, op1 : byte;

    let :char;

    begin

    OBJConj.Limpa; ObJMai.Limpa;

    ObjLetras.limpa; OBJDigito.Limpa;

    OBJSimbolo.Limpa;

    repeat

    clrscr;

    gotoxy(6,5);writeln('para sair escolha digite 5'); gotoxy(6,10);writeln('ENTRE COM UMA DAS OPCOES ABAIXO'); gotoxy(7,15);write('1 - Inclusao de caracteres'); gotoxy(7,16);write('2 - Eliminacao de caracteres'); gotoxy(7,17);write('3 - Consulta de caracteres'); gotoxy(7,18);write('4 - Mostrar Caracteres'); gotoxy(7,19);read(op); clrscr;

    case op of

    1:begin

    op := 0;

    gotoxy(7,15);write('1 - Inclusao no conjunto Global'); gotoxy(7,16);write('2 - Inclusao no conjunto dos

    Maiusculos'); gotoxy(7,17);write('3 - Inclusao no conjunto de letras

    Maiusculas e Minusculas'); gotoxy(7,18);write('4 - Inclusao no conjunto de

    Caracteres especiais'); gotoxy(7,19);write('5 - Inclusao no conjunto de

    Digitos'); gotoxy(7,20);readln(op1); case op1 of

    1: begin

    clrscr;

    write;

    Gotoxy(5,4);write('Qual o Caracter? ');

  • Sergio Santos 34

    Programao Orientada Objetos com Pascal Gotoxy(5,5);read(let); OBJConj.InsereMembro(Let); end;

    2: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); gotoxy(5,5);read(let); OBJMai.InsereMembro(Let);

    OBJLetras.InsereMembro(Let); end;

    3: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); gotoxy(5,5);read(let); OBJLetras.InsereMembro(Let);

    OBJMai.InsereMembro(Let); end;

    4: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); gotoxy(5,5);read(let); OBJSimbolo.InsereMembro(Let); end;

    5: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); gotoxy(5,5);read(let); OBJDigito.InsereMembro(Let); end;

    end;

    end;

    2 : begin

    gotoxy(7,15);write('1 - Eliminacao no conjuntoGlobal');

    gotoxy(7,16);write('2 - Eliminacao no conjunto dosMaiusculos');

    gotoxy(7,17);write('3 - Eliminacao no conjunto deletras Maiusculas e Minusculas');

    gotoxy(7,18);write('4 - Eliminacao no conjunto deCaracteres especiais');

  • Sergio Santos 35

    Programao Orientada Objetos com Pascal gotoxy(7,19);write('5 - Eliminacao no conjunto de

    Digitos'); gotoxy(7,20);readln(op1); case op1 of

    1: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); gotoxy(5,5);read(let); OBJConj.EliminaMembro(Let); end;

    2: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); gotoxy(5,5);read(let); OBJMai.EliminaMembro(Let); end;

    3: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); gotoxy(5,5);read(let); OBJLetras.EliminaMembro(Let); end;

    4: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); gotoxy(5,5);read(let); OBJSimbolo.EliminaMembro(Let); end;

    5: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? ); gotoxy(5,5);read(let); OBJDigito.EliminaMembro(Let); end;

    end;

    end;

    3: begin

    gotoxy(7,15);write('1 - Consulta no conjunto Global'); gotoxy(7,16);write('2 - Consulta no conjunto dos

    Maiusculos');

  • Sergio Santos 36

    Programao Orientada Objetos com Pascal gotoxy(7,17);write('3 - Consulta no conjunto de letras

    Maiusculas e Minusculas'); gotoxy(7,18);write('4 - Consulta no conjunto de

    Caracteres especiais'); gotoxy(7,19);write('5 - Consulta no conjunto de

    Digitos'); gotoxy(7,20);readln(op1); case op1 of

    1: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); read(let); Gotoxy(5,7);write('O caracter ',let,' esta no

    conjunto ? ', OBJConj.MembroNoConj(Let)); readln;readln;

    end;

    2: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); read(let); Gotoxy(5,7);write('O caracter ',let,' esta no

    conjunto ? ', OBJMai.MembroNoConj(Let)); readln;readln;

    end;

    3: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); read(let); Gotoxy(5,7);write('O caracter ',let,' esta no

    conjunto ? ', OBJletras.MembroNoConj(Let)); readln;readln;

    end;

    4: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? '); read(let); Gotoxy(5,7);write('O caracter ',let,' esta no

    conjunto ? ', OBJSimbolo.MembroNoConj(Let)); readln;readln;

    end;

    5: begin

    clrscr;

    Gotoxy(5,4);write('Qual o Caracter? ');

  • Sergio Santos 37

    Programao Orientada Objetos com Pascal read(let); Gotoxy(5,7);write('O caracter ',let,' esta no

    conjunto ? ', OBJDigito.MembroNoConj(Let)); readln;readln;

    end;

    end;

    end;

    4: begin

    gotoxy(7,15);write('1 - Mostra o conjunto Global'); gotoxy(7,16);write('2 - Mostra o conjunto dos

    Maiusculos'); gotoxy(7,17);write('3 - Mostra o no conjunto de letras

    Maiusculas e Minusculas'); gotoxy(7,18);write('4 - Mostra o conjunto de Caracteres

    especiais'); gotoxy(7,19);write('5 - Mostra o conjunto de Digitos'); gotoxy(7,20);readln(op1); case op1 of

    1: begin

    clrscr;

    Gotoxy(5,4);write('O conjunto e '); OBJConj.EscreveConj; readln;readln;

    end;

    2: begin

    clrscr;

    Gotoxy(5,4);write('O conjunto e '); OBJMai.EscreveConj; readln;readln;

    end;

    3: begin

    clrscr;

    Gotoxy(5,4);write('O Conjunto e'); OBJLetras.EscreveConj; write(A quantidade de letras maisculas ,

    ObjLetras.CDLetMai); write(A quantidade de Letras minsculas ,

    ObjLetras.CDLetMin); readln;readln;

    end;

    4: begin

    clrscr;

  • Sergio Santos 38

    Programao Orientada Objetos com Pascal Gotoxy(5,4);write('O conjunto e '); OBJSimbolo.EscreveConj; readln;readln;

    end;

    5: begin

    clrscr;

    Gotoxy(5,4);write('O conjunto e '); OBJDigito.EscreveConj; readln;readln;

    end;

    end;

    end;

    end;

    until op = 5;

    end.

  • Sergio Santos 39

    Programao Orientada Objetos com PascalExemplo

    O programa a seguir contm um vetor de string com 30 posies e executa os seguintesmtodos:

    1. l um nome para cada posio do vetor;

    2. o nome digitado ser convertido para maisculo;

    3. para cada nome digitado, ser ser mostrado na tela a relao dos nomes j includosjuntamente com o nmero da posio que ele ocupa no vetor;

    4. a remoo de um nome do vetor feito a partir do nmero da posio que ele ocupa no vetor.

    5. Aps a remoo, o vetor dever ser reorganizado, no podendo ficar nenhum elemento embranco entre duas posies do vetor;

    6. aps a reogarnizao dever ser atualizada a lista na tela.

    program exemplo;uses crt, moldura;var PegNom : string; Op, P : byte;type v = array [1..30] of string; vetnomObj = object Nome : v; I : integer; procedure inicio; procedure PegaNome; procedure ConverteNome(Nom:string); procedure IncluiNOme (Nom : string); procedure Mostra; function InibeRemocao : boolean; procedure Remocao (posi : byte); procedure Arranjo (PosiSai : byte); end;procedure vetnomObj.Inicio;var ind : byte;begin for ind := 1 to 30 do nome[ind] := ' '; i := 1;end;

  • Sergio Santos 40

    Programao Orientada Objetos com Pascalprocedure vetnomObj.PegaNome;begin window(5,20,40,24); gotoxy(1,1); write('Entre com um nome --> '); gotoxy(2,2); read(PegNom); window(1,1,80,25);end;Procedure vetnomObj.ConverteNome(nom:string);var is : byte;begin for is := 1 to length(nom) do pegnom[is] := upcase(nom[is]);end;

    Procedure vetnomObj.IncluiNOme (nom:string);var il : byte;begin if (i = 1) and (nome[1] = ' ') then nome[1] := nom else for il := 2 to 30 do if nome[il] = ' 'then begin nome[il] := nom; exit; end;end;procedure vetnomObj.Mostra;var ind:byte; col, ino:byte;begin lowvideo; clrscr; mold(1,1,17,40); mold(42,1,17,79); mold(1,19,24,79); ind:=1; col:=3; ino:= 2; while (ind

  • Sergio Santos 41

    Programao Orientada Objetos com Pascal if nome[1] = ' ' then InibeRemocao := true else InibeRemocao := false;end;

    procedure vetnomObj.remocao(posi:byte);begin nome[posi] := ' ';end;procedure vetnomObj.Arranjo(posisai:byte);var ind : byte;begin ind := posisai + 1; while (ind

  • Sergio Santos 42

    Programao Orientada Objetos com Pascal write('Entre com a Posicao '); read(p); vetornome.remocao(p); vetornome.arranjo(p); end else begin textcolor(4); highvideo; gotoxy(5,21); write('Nao existem nomes pararemocao'); write(chr(7)); delay(1500); lowvideo; textcolor(15); end; window(1,1,80,25); end; end; vetornome.mostra; until op=0;end.

  • Sergio Santos 43

    Programao Orientada Objetos com Pascal

    INICIALIZANDO OBJETOS

    O Turbo Pascal e outras variaes de Pascal Objeto no aceitam a inicializao automtica deobjetos. Em Turbo Pascal, os objetos estticos so automaticamente criados e removidos, exatamentecomo as variveis estticas. No entanto, o processo de inicializao de campos de dados exigido namaioria das aplicaes, para evitar que valores inadequados sejam inseridos nos campos de dados de umaclasse. fcil diagnosticar e remediar um erro de omisso de um nico mtodo de inicializao. Oremdio no to simples quando vrios mtodos contribuem para a inicializao de um objeto.

    No caso de um nico mtodo de inicializao, pode-se empregar um campo do tipo string aoqual se atribui a constante INICIALIZADA (ou qualquer outra string que possa ser diferenciada dosdados no vlidos) quando o mtodo de inicializao evocado. Todos os outros mtodos podemprocurar pela string INICIALIZADA no campo de inicializao CDSituao. Geralmente, o mtodo encerrado quando a string no for INICIALIZADA. A listagem a seguir contm um programa que criaum vetor dinmico. A definio de classe inclui o campo de dados CDSituao para reportar o status dainicializao. O mtodo Incio usado para alocar o tamanho do vetor dinmico, uma etapa necessria. Omtodo Enche preenche o vetor com um valor. Este mtodo examina o campo CDSituao. SeCDSituao for NO INICIADA, o vetor dinmico ser criado usando um tamanho default (supondo-seque esta ao seja aceitvel na aplicao) e depois ser preenchido com nmeros.

    Listagem Programa DEVEINIC.PAS para testar a inicializao obrigatria.

    Program Teste_de_Inicializao;Uses Crt;{$R-}CONST TAM_INICIAL = 100;TYPE

    UmElemVetor = array [1..1] of real;UmElemPtr = ^UmElemVetor;VetorDin = Object

    CDSituao : string;CDTamMax : Word;CDVetPtr : UmElemPtr;Procedure Incio (PTamMax : word);Function PegaTam : word;Procedure Enche (X : Real);Procedure Remove;

    End;Procedure VetorDin.Incio(PTamMax : Word)Begin

    CDMaxTam := PTamMax;If CDMaxTam < 1 then

    CDTamMax := TAM_INICIAL;GetMem (CDVetPtr, CDTamMax * SizeOf(real));CDSituao := INICIALIZADA;

    End;Function VetorDin.PegaTam:Word;

  • Sergio Santos 44

    Programao Orientada Objetos com PascalBegin

    PegaTam := CDTamMax;End;Procedure VetorDin.Enche (X : Real);Begin

    If CDSituao INICIALIZADA thenIncio(TAM_INICIAL);

    For I := 1 to CDTamMax doCDVetPtr^[I] := X;

    End;Procedure VetorDin.Remove;Begin

    If CDSituao = INICIALIZADA then beginFreeMem (CDVetPtr, TamMax * SizeOf(Real));CDSituao := NO INICIADA;

    End;End;Var A : VetorDin;

    X : Real;Sai : char;

    BeginClrScr;X := 100.0;A.Enche(X); {inicializa no tamanho default}Writeln (Vetor dinmico preenchida com , X:4:0,

    s);Writeln(O Tamanho do vetor dinmico ,

    A.PegaTam);A.Remove;Writeln;Write(Pressione qualquer tecla para encerrar o

    programa);Sai := readkey;

    End.

  • Sergio Santos 45

    Programao Orientada Objetos com Pascal

    No caso de vrios mtodos de inicializao, uma array de flags boolean usado para certificarque cada mtodo seja chamado para preparar o objeto.

    Sobre o Programa

    Diretivas de compilao

    Erros durante a execuo Verificao da Faixa {$R} Quando esta opo ativada, geradoum cdigo que verifica subscritos de cadeia e de array e condies fora da faixa referentes a tiposescalares de dados. Quando esta opo desativada, esse cdigo no gerado e o seu programa se tornamenor. Esses tipos de erro so difceis de detectar, de forma que voc deve manter essa diretiva no seucdigo at que ele esteja depurado.

    Function SizeOf(Varivel Var):word

    Retorna o nmero de bytes exigido por uma varivel ou um tipo de dados.

    Procedure GetMem (Var P : pointer; I: Integer);

    Reserva a quantidade de bytes especificada em I na pilha e armazena o endereo inicial navarivel P.

    Procedure FreeMem(Var P: pointer; I : integer);

    Libera a quantidade de bytes especificada em I, corresponde rea de memria de pilha,associada varivel P, que deve ter sido previamente alocada por GetMem.

  • Sergio Santos 46

    Programao Orientada Objetos com PascalExerccio

    1. Construa um programa em Pascal que calcule o valor futuro de um investimento com base novalor presente, a taxa de juros e o nmero de perodos do investimento. O programa deveconter uma classe que empregue um mtodo separado de inicializao. A frmula para oclculo do valor futuro a seguinte:

    M = C X (1 + I / 100)N

    em que C = Valor Presente

    I = Taxa de Juros

    n = nmeros de perodos

    M = Valor Futuro

  • Sergio Santos 47

    Programao Orientada Objetos com Pascal

    OBJETOS E MTODOS DINMICOS

    Os objetos e os mtodos que vimos at aqui so estticos. O Turbo Pascal tambm incrementaobjetos dinmicos. Os objetos estticos so compilados em cdigo de mquina que roda mais rpido doque o dos objetos dinmicos. Por outro lado, os objetos dinmicos oferecem mais flexibilidade nomomento da execuo e suportam o polimorfismo.

    Os mtodos estticos so caracterizados quando de sua chamada, pois estas so combinadasdurante a sua compilao. J nos mtodos virtuais, estas chamadas so combinadas durante a execuo nomomento que efetuada a chamada.

    Os principais veculos dos objetos dinmicos so os mtodos virtuais. A palavra-chaveVIRTUAL colocada em uma instruo separada depois de cada declarao de mtodo virtual. Osmtodos virtuais precisam ser acompanhados de construtores, que so mtodos dedicados inicializaode objetos com mtodos virtuais. A palavra-chave CONSTRUCTOR substitui a palavra PROCEDUREquando da declarao de um construtor. O nome sugerido para os construtores INCIO. O Turbo Pascaltambm utiliza destrutores que anulam os efeitos dos construtores. Sua tarefa executar uma limpezanos campos de dados. O nome sugerido para os destrutores LIMPA.

    necessrio seguir algumas regras para declarao de mtodos virtuais:

    1. Se um mtodo declarado virtual em uma classe, ele precisa ser declaradovirtual em todas as classes descendentes.

    Type r = objectA, B : byte;constructor INICIO;procedure SOMA(L, S : byte); VIRTUAL;destructor LIMPA;

    end; r1 = object (r)

    procedure SOMA (L, S : byte); VIRTUAL;end;

  • Sergio Santos 48

    Programao Orientada Objetos com Pascal

    2. A declarao de um mtodo virtual em uma subclasse pode sobrescrever ummtodo no-virtual na(s) classe(s) hierarquicamente superior.

    Type r = objectA, B : byte;constructor INICIO;procedure SOMA(L, S : byte);destructor LIMPA;

    end; r1 = object (r)

    procedure SOMA (L, S : byte); VIRTUAL;end;

    3. Os mtodos virtuais precisam ter a mesma lista de parmetros em cadaclasse onde ela for usada.

    Errado:

    Type r = objectA, B : byte;constructor INICIO;procedure SOMA(L, S : byte); VIRTUAL;destructor LIMPA;

    end; r1 = object (r)

    procedure SOMA (L : byte); VIRTUAL;end;

    Certo:Type r = object

    A, B : byte;constructor INICIO;procedure SOMA(L, S : byte); VIRTUAL;destructor LIMPA;

    end; r1 = object (r)

    procedure SOMA (L, S : byte); VIRTUAL;end;

    4. Os mtodos virtuais podem ser herdados.

    Type r = objectA, B : byte;constructor INICIO;procedure SOMA(L, S : byte); VIRTUAL;destructor LIMPA;

  • Sergio Santos 49

    Programao Orientada Objetos com Pascalend;

    r1 = object (r) end;

    As regras para utilizao de construtores so:

    1. imprescindvel chamar um construtor antes de que se envie uma mensagem virtual umobjeto. Sob pena de cancelamento da execuo do programa.

    2. Mltiplos construtores permitem vrias maneiras de inicializar um objeto.

    3. Os construtores podem ser herdados.

    As regras para utilizao de destrutores so:

    1. Um destrutor deve ser chamado para que haja limpeza adequada dos campos dados.

    2. Mltiplos destrutores permitem vrias maneiras de remover um objeto.

    3. Os destrutores podem ser herdados.

    4. Destrutores virtuais so permitidos.

    Exerccios

    1. Existe diferena entre objetos estticos e objetos dinmicos?

    2. Se a resposta anterior for sim, quais?

    3. Qual a palavra-chave colocada para indicar que um mtodo virtual?

    4. O que um construtor?

    5. O que um destrutor?

  • Sergio Santos 50

    Programao Orientada Objetos com Pascal

    VINCULAO TARDIA E POLIMORFISMO

    Polimorfismo significa a capacidade que um objeto tem de responder a um comando oumensagem de maneira peculiar a ele prprio. A mensagem em si no propriedade de nenhuma classeespecfica. O melhor exemplo do polimorfismo a vinculao tardia de mtodos no momento daexecuo. Para entender polimorfismo e vinculao tardia, considere a hierarquia de classes mostrada nafigura abaixo. A figura mostra uma classe NOME com dois mtodos, NOM1 e NOM2, tal que NOM1chama NOM2. Uma mensagem NOM1 enviada a um objeto da classe NOME, chamemo-lo ObNomA,executa os mtodos NOME.NOM1 e NOME.NOM2. A figura tambm mostra a classe NOME2 comosubclasse de NOME com o mtodo NOM2 sobrescrito. Quando uma mensagem NOM1 enviada a umobjeto da classe NOME2, chamemo-la ObNomB, a seqncia de mtodos executados ser a seguinte:

    1. O sistema em execuo pega a mensagem ObNomB.NOM1 e tenta encontrar um mtodocoincidente entre aqueles da classe NOME2.

    2. A ao acima no obtm sucesso e o sistema recorre ao exame dos mtodos da classe-meNOME. A busca eficaz desta vez e o cdigo do mtodo NOME.NOM1 usado.

    3. Uma vez que o mtodo NOME.NOM1 chama o mtodo NOME.NOM2, o sistema emexecuo precisa resolver a chamada. Ele primeiro volta aos mtodos da subclasse NOME2(a classe cuja instncia recebeu a mensagem original) e tenta localizar um mtodo NOM2.

    4. A busca obtm xito e o sistema emprega o cdigo de NOME2.NOM2 para resolver achamada de ObNomB.NOM1.

    Na ausncia da vinculao tardia, o sistema em execuo teria inserido incorretamente (do pontode vista da lgica do programa) o cdigo do mtodo NOME.NOM2 para resolver a chamada feita pelomtodo NOME.NOM1.

    O programa-exemplo ilustra como funciona a vinculao tardia. A classe CLNOME declara umconstrutor Incio e dois mtodos, BoasVindas e PegNome. A classe SUBNOME, uma classe-filha deCLNOME, emprega um mtodo PegNome virtual para pedir que voc fornea o nome utilizando uma

    NOME NOME2 (NOME)

    NOM1

    NOM2NOM2

    NOM1 chama NOM2

  • Sergio Santos 51

    Programao Orientada Objetos com Pascalfrase diferente. A subclasse SUBNOME tambm utiliza o construtor herdado Incio. A parte principal doprograma envia a mensagem BoasVindas s instncias de ambas as classes A e B. Por causa davinculao tardia, as mensagens enviadas exibem dois prompts diferentes.

    O programa VINCTARD.PAS ilustra o efeito da vinculao tardia.

    Program Teste_de_Vinculao_Tardia;

    Uses Crt;

    Type

    CLNOME = OBJECT

    CDNome : STRING;

    CONSTRUCTOR Incio;

    PROCEDURE BoasVindas;

    PROCEDURE PegNome; VIRTUAL;

    End;

    SubNome = OBJECT(CLNOME)

    PROCEDURE PegNome; VIRTUAL;

    End;

    CONSTRUCTOR CLNOME.Incio;

    Begin

    cdNome := ;{Inicializar o campo Nome em uma string nula}

    End;

    PROCEDURE CLNOME.PegNome;

    Begin

    WRITE(Seu nome, por favor? );

    READLN(cdNome); WRITELN;

    End;

    PROCEDURE CLNOME.BoasVindas;

    Begin

    PegNome;

    WRITELN(Ol , cdNome, , como vai?);

    WRITELN;

    End;

    PROCEDURE SubNome.PegNome;

    Begin

  • Sergio Santos 52

    Programao Orientada Objetos com PascalWRITE(Digite seu nome -> );

    READLN(cdNome); WRITELN;

    End;

    Var

    A: CLNOME;

    B: SubNome;

    Sai: char;

    Begin

    Clrscr;

    {inicializa objetos}

    A.Incio;

    B.Incio;

    {Envia a mensagem BoasVindas aos objetos A e B}

    A.BoasVindas;

    B.BoasVindas;

    Writeln;

    Write(Pressione qualquer tecla para encerrar o programa);

    SAI := READKEY;

    End.

    Modifique o programa retirando a palavra virtual dos procedimentos PegNome e veja o queacontece.

    Aps ter visto a nova execuo retire a palavra Virtual somente do primeiro procedimentoPegNome, execute o programa e veja a resposta obtida.

  • Sergio Santos 53

    Programao Orientada Objetos com Pascal

    OBJETOS DINMICOS

    New

    Sintaxe: New(Var P: Pointer);

    Aloca memria na pilha para o ponteiro P. Depois de alocar memria, a varivel tratadacomo P.

    Dispose

    Sintaxe: Dispose(P: Pointer);

    Libera memria da pilha alocada para uma varivel de ponteiro. A funo Dispose usadajunto com o comando New.

    Para utiliz-las com objetos as funes citadas sofrem uma pequena modificao.

    A instruo NEW pode incluir o nome de um construtor (juntamente com a lista de argumentosdo construtor) como segundo parmetro, conforme mostra a sintaxe geral a seguir:

    New(, ());

    Da mesma forma, o procedimento DISPOSE pode incluir o nome de um destrutor, conformemostra a sintaxe geral a seguir:

    Dispose(,());

    A listagem a seguir contm um programa simples que ilustra um objeto dinmico. O programaimplementa uma pilha usando uma vetor dinmico. Os valores randmicos das coordenadas de tela socolocados e tirados da pilha. O tamanho da vetor determinado no momento da execuo. Uma vezestabelecido, permanece fixo. Consequentemente, a pilha que baseada na vetor dinmico, tambm temtamanho fixo. O programa define a classe Cursor da seguinte maneira:

  • Sergio Santos 54

    Programao Orientada Objetos com PascalCursor = Object

    Posicao : VetorPtr;CDTam, CDIndice : word;CDChamIni : Boolean;Constructor Inicio (dTam : word);Function InsereXY (Xloc, Yloc : byte):

    boolean;Function RemoveXY : Boolean;Destructor Retira;

    End;

    O campo de dados Posio, um ponteiro dinmico para um vetor de registros do tipo Ponteiroque armazenam as coordenadas do cursor. O campo de dados CDTam armazena o tamanho do vetordinmico usado para implementar a pilha. O campo de dados CDIndice toma nota da altura da pilha. Ocampo de dados CDChamIni usado para sinalizar se o construtor Inicio foi ou no chamado.

    O programa define um construtor e um destrutor para alocar e desalocar os dados dinmicos,respectivamente. Os mtodos InsereXY e RemoveXY so usados para inserir e remover as coordenadasdo cursor. Estes mtodos retornam TRUE quando obtm xito, e FALSE em caso de falha.

    O programa emprega as seguintes instrues para criar e remover o ponteiro para o objeto e seuvetor dinmico:

    New (A, Inicio(Teste_Tam)); {para criar}

    Dispose(A, Retira);{para remover}

    Observe que um circunflexo usado depois do identificador A quando do envio das mensagensInsereXY e RemoveXY, j que A um ponteiro formal do Pascal. O programa exibe a string Aqui emcinco locais aleatrios da tela.

    Program Objetos_Dinmicos;Uses Crt;

    {-$R}const Tamanho = 5;

    type

    Ponteiro = record

    x, y : byte;

    end;

    UmElemPont = array[1..1] of Ponteiro;VetorPtr = ^UmElemPont;

    Cursor = ObjectPosicao : VetorPtr;CDTam, CDIndice : word;

  • Sergio Santos 55

    Programao Orientada Objetos com PascalCDChamIni : Boolean;Constructor Inicio (dTam : word);Function InsereXY (Xloc, Yloc : byte): boolean;Function RemoveXY : Boolean;Destructor Retira;

    End;

    Posi = ^Cursor;

    CONSTRUCTOR Cursor.Inicio (dTam:word);begin

    GetMem(Posicao, dTam);CDTam := dTam;

    CDIndice := 0;

    CDChamIni := True;

    end;

    Destructor Cursor.Retira;

    begin

    FreeMem(Posicao,CDTam);CDTAm := 0;

    CDIndice := 0;

    CDChamIni := False;

    end;

    Function Cursor.InsereXY(Xloc, Yloc : byte): boolean;begin

    if (not CDChamIni) or (CDIndice = CDTam) thenbegin

    InsereXY := False;

    Exit

    end

    else

    Inc(CDIndice);if Not(Xloc in [1..80]) then Xloc := 1;if not(Yloc in [1..25]) then Yloc := 1;Posicao^[CDIndice].X := Xloc;Posicao^[CDIndice].Y := Yloc;InsereXY := True;

    end;

    Function Cursor.RemoveXY:Boolean;

    begin

  • Sergio Santos 56

    Programao Orientada Objetos com PascalIf CDChamIni and (CDIndice > 0 ) then beginGotoXY(Posicao^[CDIndice].X,

    Posicao^[CDIndice].Y);Dec(CDIndice)

    end

    else

    RemoveXY := False;

    end;

    Var

    A : Posi;

    I : Byte;

    Sai : Char;

    Begin

    New(A,Inicio(Tamanho)); {Alocar Espao}ClrScr;

    Randomize;

    While A^.InsereXY(Random(80), Random(25)) do;While A^.RemoveXY do Begin

    write(Aqui!!!);delay(1000);

    end;

    Dispose(A, Retira); {Desaloca espao}GotoXY(1,24);ClrEol;

    Writeln;

    Write(Pressione qualquer tecla para encerrar);sai := Readkey;

    end.

  • Sergio Santos 57

    Programao Orientada Objetos com Pascal

    ARQUIVOS COM OBJETOS

    Arquivo ou File um conjunto de informaes que podem ser conservadaspermanentemente em memria secundria, como disco ou disquete, sem que seucontedo seja extinto no momento de desligar o computador. integrado por vrioselementos do tipo RECORD, e seu grande proveito est associado ao fato de o usuriopoder acessar qualquer dado nele cadastrado, atravs de programas delineados com este

    intuito.

    O Turbo Pascal oferece trs tipos bsicos de arquivos em disco: arquivos detexto; arquivos com tipo definido; e arquivo sem tipo definido.

    Para facilitar nosso entendimento irei fixar-me em Arquivos com tipo definido.

    Para gerar o arquivo contendo vrios registros do tipo ilustrado no esquema anterior (RECORDRegistro) pode-se aventar o seguinte tipo de cabealho no programa:

    Program ArquivoObjeto;Uses Crt;

    Type

    Registro = RECORD

    Nome : string[30];Endereco : string[40];Telefone: string[15];

    end;

    Arquivo = file of Registro;

    Aps termos criado nosso registro, este passar a ser o objeto de nosso estudo, podemos, agoradefinir uma classe que encapsule este objeto, juntamente com seus mtodos.

    ClassReg = Object

    DadosPessoais : array [1..100] of Registro;

    procedure CriaArquivo;

    Nome Endereo Telefone

  • Sergio Santos 58

    Programao Orientada Objetos com Pascalprocedure MostraArquivo;

    procedure IncluiRegistro;

    end;

    Precisamos associar um nome para que o Turbo reconhea o nosso registro, o

    arquivo e a classe.

    Var

    A : ClassReg;

    RegA, RegB : Arquivo;

    Sai : char;

    UltReg : integer;

    Os nomes dos campos do registro-objeto DadosPessoais do arquivo Arquivo so formados poruma combinao do identificador-objeto DadosPessoais do registro-objeto com cada campo desejado,separados por um ponto, ou se desejar, utilizando o comando with do, como j vimos em aulasanteriores.

    DadosPessoais[1]nome, representando o campo nome

    DadosPessoais[1]Endereco, representando o campo endereo

    DadosPessoais[1]Telefone, representando o campo telefone

    ou

    with DadosPessoais[1] dobegin

    Nome

    Endereco

    Telefone

    end;

  • Sergio Santos 59

    Programao Orientada Objetos com Pascal

    COMANDOS DE MANIPULAO DE ARQUIVOS

    O Turbo Pascal dispe de uma srie de funes e procedimentos que permitem gerar, atualizar econsultar arquivos.

    ASSIGN

    utilizado para associar o nome dado ao arquivo no programa Turbo com o designado pararepresent-lo no disco ou disquete. Ambos so escolhidos pelo desenvolvedor.

    No exemplo: Assign (RegA, Teste.dat);

    O nome do arquivo :

    RegA no programa Turbo

    Teste.dat na unidade de disco ou disquete.

    Aps o ASSIGN, qualquer aluso ao arquivo externo feita atravs de seu nome no programaTurbo, como o caso de RegA para designar a entrada de Teste.dat.

    RESET

    Deixa o arquivo externo pronto para ser lido, a partir de seu registro inicial.

    Exemplo: Reset (RegA);

    REWRITE

    O procedimento REWRITE prepara um arquivo externo para ser gravado. Aps a sua execuo,o primeiro registro do arquivo, que sempre o de nmero zero, fica disponvel para ser escrito. Se jhouver algum cadastro com o mesmo nome do que aparece no Rewrite, o antigo destrudo.

    Exemplo: Rewrite (RegA);

    EOF

    End Of File uma funo incumbida de situar o ltimo registro de um arquivo. Ela tem meios deverificar se o usurio mandou ler alguma coisa situada aps o fim do cadastro.

    Exemplo: while not eof(RegA) do

  • Sergio Santos 60

    Programao Orientada Objetos com PascalCLOSE

    Serve para encerrar a manipulao de um arquivo e levar ao sistema operacional refernciasatualizadas sobre ele.

    Exemplo: Close(RegA);

    READ

    L arquivos em disco ou disquetes, cuja forma geral :

    read(nome do arquivo, nome do registro);

    Exemplo: read(RegA, DadosPessoais[I]);

    WRITE

    Quando se tratar de gravao de informaes em disco ou disquetes sua sintaxe a seguinte:

    Write (nome do arquivo, nome do registro);

    Exemplo: write (RegA, DadosPessoais[ I ]);

    FILESIZE

    Funo que gera um nmero inteiro, que simboliza a quantidade de registros gravados em umarquivo.

    Exemplo: Filesize(RegA);

    SEEK

    Procedimento que permite localizar determinado registro num arquivo em disco ou disquete.

    seek (nome do arquivo, NUM);

    onde Num o nmero do registro desejado.

    Supondo como exemplo:

    K := Filesize(RegA) 1;

  • Sergio Santos 61

    Programao Orientada Objetos com Pascaltem-se que:

    Seek (RegA, K);

    situa o ltimo registro do cadastro RegA, pois o primeiro deles o de nmero zero.

    UTILIZANDO ARQUIVOS COM OBJETOS

    A seguir apresento um pequeno programa, cuja finalidade criar um arquivo de registro, sendoeste registro objeto em uma classe. O programa permite, incluir novos registros no arquivo. Atente para omtodo de incluso de registro e repare que neste mtodo abri dois arquivos, um com reset e o outro comrewrite.

    program ArquivoObjeto;uses crt;type Registro = record Nome : string[30]; Endereco : string[40]; Telefone : string[15]; end; arquivo = file of Registro; ClassReg = object DadosPessoais : array [1..100] of Registro; procedure CriaArquivo; procedure MostraArquivo; procedure IncluiRegistro; end; var A : ClassReg; RegA,RegB : arquivo; sai : char; ultReg : integer; procedure ClassReg.CriaArquivo; var i : integer; begin assign(RegA,'Teste.dat'); rewrite(RegA); with DadosPessoais[1] do begin nome := Rosane Santos ; Endereco := 'Barra'; Telefone :='99992111'; end; write(RegA,DadosPessoais[1]); with DadosPessoais[2] do begin nome := 'Sergio Santos'; Endereco := 'Estacio de Sa - Barra'; Telefone :='96789061'; end;

  • Sergio Santos 62

    Programao Orientada Objetos com Pascal write(RegA,DadosPessoais[2]); with DadosPessoais[3] do begin nome := 'Portela'; Endereco := Centro'; Telefone :='55167000'; end; write(RegA,DadosPessoais[3]); close(RegA); end;

    {*********************************************}

    procedure ClassReg.MostraArquivo; var i,j : integer; begin clrscr; i := 1; Assign(RegA,'Teste.dat'); Reset(RegA); while not eof(RegA) do begin read(RegA,DadosPessoais[i]); with DadosPessoais[i] do begin writeln(Nome,' ',Endereco,' ',Telefone); end; inc(i); end; ultReg := i; close(RegA); end;

    {****************************************}

    procedure ClassReg.IncluiRegistro; var IncNome : String[30]; IncEnd : String[40]; IncTel : String[15]; i,j : integer; begin assign(RegA,'Teste.dat'); assign(RegB,'TesteB.dat'); reset(RegA); rewrite(RegB); j:=1; i :=ultreg; read(RegA,DadosPessoais[j]); while not eof(RegA) do begin write(RegB,DadosPessoais[j]); inc(j); read(RegA,DadosPessoais[j]); end; write(RegB,dadosPessoais[j]); Close(RegA);

  • Sergio Santos 63

    Programao Orientada Objetos com Pascal Write('Entre com um nome ... '); readln(IncNome); write('Entre com um endereco ... '); readln(IncEnd); write('Entre com um Telefone ... '); readln(IncTel);

    with DadosPessoais[i] do begin nome := IncNome; Endereco := IncEnd; Telefone := IncTel; end; write(RegB,DadosPessoais[i]); close(RegB); reset(RegB); rewrite(RegA); j := 1; read(RegB,DadosPessoais[j]); while not eof(RegB) do begin write(RegA,DadosPessoais[j]); inc(j); read(RegB,DadosPessoais[j]); end; write(RegA,DadosPessoais[j]); Close(RegB); close(RegA); end;

    {*****************************************}

    Begin clrscr; sai := ' '; a.CriaArquivo; a.MostraArquivo; repeat if sai #13 then a.IncluiRegistro; a.MostraArquivo; writeln; writeln('Pressione QQ tecla para continuar ou Enter parasair...'); sai := readkey; until sai = #13; end.

  • Sergio Santos 64

    Programao Orientada Objetos com Pascal

    REFERNCIAS BIBLIOGRFICAS

    FORBELLONE, Andr Luiz Villar, EBERSPCHER, Henri Frederico. Lgica de Programao: AConstruo de Algoritmos e Estruturas de Dados. So Paulo: Makron Books. 1993.

    TERADA, Routo, SETZER, Valdemar W. Introduo Computao e Construo de Algoritmos. SoPaulo: Makron Books, 1992.

    WIRTH, Niklaus. Algoritmos e Estrutura de Dados. Rio de Janeiro: PHB, 1989.

    GUIMARES, ngelo de Moura, LAGES, Newton Alberto de Castilho. Algoritmos e Estruturas deDados. Rio de Janeiro: LTC, 1994.

    OBRIEN, Stephen. Turbo Pascal 6 Completo e Total. So Paulo: Makron Books, 1993.

    BARBOSA, Lisbete Madsen. Pascal II. So Paulo: McGraw Hill, 1990

    TREMBLAY, Jean-Paul, BUNT, Richard B. Cincia dos Computadores: uma abordagem algortmica.Trad. Moacir de Souza Prado; ver. tc. Joo Pedro Perotti. So Paulo: McGraw-Hill, 1983.

    JAMSA, Kris. Turbo Pascal 4: Guia de referncia bsica. trad. Lars Erik Gustav Unonius. ver. tec. FlvioSilva Gianini. So Paulo: McGraw-Hill, 1988.

    TERADA, Routo. Desenvolvimento de algoritmos e estruturas de dados. So Paulo: McGraw-Hill,Makron, 1991.