Você está na página 1de 13

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 1

Captulo I
Conceito de Programao Orientada a Objeto
Para compreendermos melhor a novo ambiente de desenvolvimento da Borland o Delphi necessrio que voc, aprenda e, tenha em mente os conceitos de POO (Programao Orientada a Objetos), no confunda os conceitos com POE (Programao Orientada a Eventos) muito difundido com o Access 2.0 (um ambiente baseado em Objetos), mas ao longo deste captulo voc vai notar as sensveis diferenas que existem entre esses dois conceitos. A POO e a POE so facilmente confundidas, mas lembre-se a POO contm a POE mas a POE no contm a POO, um objeto pode existir mesmo que no exista nenhum evento associado a ele, mas um evento no pode existir se no houver um objeto a ele associado. Outra caracterstica que pode causar confuso so ambientes Orientados a Objetos e ambientes Baseados em Objetos. Em ambiente Orientado a Objetos consegue-se criar e manipular objetos enquanto que o Baseado em Objetos no possivel a criao de objetos apenas a sua manipulao. A POO um conceito desenvolvido para facilitar o uso de cdigos de desenvolvimento em interfaces grficas. Sendo a Borland, uma das primeiras a entrar neste novo conceito, possui suas principais linguagens de programao (tais como Object Pascal e C++), totalmente voltadas para este tipo de programao. A POO atraiu muitos adeptos principalmente pelo pouco uso de cdigo que o projeto (diferente de sistema) carrega no programa fonte, ao contrrio das linguagens mais antigas como o Clipper87 muito utilizado no final da dcada de 90 e incio da dcada de 90. O resultado desta limpeza no cdigo resulta que a manuteno do projeto tornase muito mais simples.

Orientao a Objeto
Antes de comearmos a falar realmente de linguagem orientada a objetos e necessrio que voc possua os conceitos bsicos da orientao a objetos, so eles: Objeto - qualquer estrutura modular que faz parte de um produto. Uma janela por exemplo, um objeto de uma casa, de um carro ou de um software com interface grfica para o usurio. Atributos - So as caractersticas do objeto, como cor e tamanho, a janela, por exemplo, tem atributos como o modelo, tamanho, abertura simples ou dupla, entre outros. Encapsulao - um mecanismo interno do objeto escondido do usurio. Uma pessoa pode abrir uma janela girando a tranca sem precisar saber o que h dentro dela.

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 2

Ao - a operao efetuada pelo objeto. Todas as janelas, por exemplo, controlam a iluminao e temperatura ambiente, dependendo do seu design. Herana - um objeto novo nem sempre criado do zero. Ele pode herdar atributos e aes de outros j existentes. Um basculante herda atributos das janelas e das persianas. Polimorfismo - a capacidade de objetos diferentes reagirem segundo a sua funo a uma ordem padro. O comando abre, por exemplo, faz um objeto entrar em ao, seja ele uma janela, uma porta ou uma tampa de garrafa. Ligao - quando um objeto conecta a sua ao a outro. Um sensor de claridade, por exemplo, ativa o acendimento automtico da iluminao de rua. Embutimento - Permite a um objeto incorporar funes de outros, como um liqidificador que mi carne com a mudana do tipo da lmina.

Object Pascal
Object Pascal uma linguagem Orientada a Objetos no pura mas hbrida por possuir caractersticas de programao no s visual mas tambm escrita, para os programadores que j conhecem tcnicas de estruturas de programao, com o C, Basic, Pascal ou xBASE entre outras linguagens a Object Pascal providncia uma migrao de forma natural oferecendo um produto de maior complexibilidade. Object Pascal fora a voc executar passos lgicos isto torna mais fcil o desenvolvimento no ambiente Windows de aplicaes livres ou que utilizam banco de dados do tipo Cliente/Servidor, trabalha com o uso de ponteiros para a alocao de memria e todo o poder de um cdigo totalmente compilvel. Alm disso possibilita a criao e reutilizao (vantagem de re-uso to sonhado com a Orientao a Objetos) de objetos e bibliotecas dinmicas (Dynamic Link Libraries - DLL). Object Pascal contm todo o conceito da orientao a objetos incluindo encapsulamento, herana e polimorfismo. Algumas extenses foram includas para facilitar o uso tais como conceitos de propriedades, particulares e pblicas, e tipos de informaes em modo run-time, manuseamento de excees, e referncias de classes. O resultado de toda esta juno faz com que Object Pascal consiga suportar as facilidades de um baixo nvel de programao, tais como: Controle e acesso das subclasses do Windows (API); Passar por cima das mensagens de loop do Windows ; Mensagens semelhantes as do Windows ; Cdigo puro da linguagem Assembler.

Como deu para perceber a base de toda a programao Delphi a linguagem Object Pascal, ento neste captulo trataremos exclusivamente deste tipo de programao.

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 3

Smbolos Especiais
A Object Pascal aceita os seguintes caracteres ASCII:
Letras - do Alfabeto Ingls: A at Z e a at z. Dgitos - Decimal: 0 at 9 e HexaDecimal: 0 at 9 e A at F (ou a at f) Brancos - Espao (ASCII 32) e todos os caracteres de controle ASCII (ASCII 0 at ASCII 31), incluindo final de linha e Enter (ASCII 13). Especiais - Caracteres: + - * / = < > [ ] . , ( ) : ; ^ @ { } $ # Smbolos - Caracteres: <= >= := .. (* *) (. .) //

O colchetes esquerdo ( [ ) e equivalente ao (. e o colchetes direito ( ] ) e equivalente a .). A chave esquerda ( { ) e equivalente ao (* e a chave direita ( } ) e equivalente a *).

Palavras Reservadas
A Object Pascal se utiliza das seguintes palavras reservadas, no podendo as mesmas serem utilizadas ou redefinidas:
And Array As Asm Begin Case Class Const Constructor Destructor Div Do Downto Else End Except Exports File Finnaly For Function Goto If Implementation In Inherited Initialization Inline Interface Is Label Library Mod Nil Not Object Of On Or Packed Procedure Program Property Raise Record Repeat Set Shl Shr String Then To Try Type Unit Until Uses Var While With Xor

Uma outra lista a seguir, apresenta as diretivas que so utilizadas em contextos de identificao de objetos:
Absolute Abstract Assembler At Cdecl Default Dynamic Export External Far Forward Index Interrupt Message Name Near Nodefault Override Private Protected Public Published Read Resident Stored Virtual Write

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 4

Nmeros
possvel definir variveis e constantes de tipos de Inteiro ou Real atravs de qualquer decimal ordinrio ( 0 a 9 ), mas a Object Pascal tambm aceita a notao Hexadecimal utilizados com o prefixo dollar ( $ ) ou a notao cientfica ( E ).

Constantes
Uma constante um identificador com valor(es) fixo(s). Um bloco de declaraes constante possui a seguinte expresso: [Declarao Constante] [Identificador] (=) [constante] (;) A lista abaixo apresenta um conjunto de funes que podem ser utilizadas para a declarao das constantes:
Ab Chr Hi High Length Lo Low Odd Ord Pred Ptr Round SizeOf Succ Swap Trunc

Alguns exemplos para a definio de Constantes:


const Min = 0; Max = 100; Centro = (Max - Min) div 2; Beta = Chr(225); NumLetras = Ord('Z') - Ord('A') + 1; MensOla = 'Instruo invlida'; MensErro = ' Erro: ' + MensOla + '. '; PosErr = 80 - Length(MensErro) div 2; Ln10 = 2.302585092994045684; Ln10R = 1 / Ln10; DigNumericos = ['0'..'9']; LetrasAlpha = ['A'..'Z', 'a'..'z']; AlphaNum = LetrasAlpha + DigNumericos;

Expresses
As expresses em Object Pascal (como em qualquer linguagem) formada por operadores e operandos; os operadores so divididos em quatro categorias bsicas:
nicos Multiplicativos Adicionais Relacionais @, Not >, /, div, mod, and, shl, shr, as +, -, or, xor =, < >, <, >, < =, > =, in, is

As expresses obdecem as regras bsicas de lgica para a precedncia da execuo das operaes.

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 5

Identificadores
Identificadores podem ser constantes, tipos, variveis, procedures, funes, unidades, programas e campos de registros. No existe limite de caracteres para o nome de um identificador mas apenas os 63 primeiros caracteres so significantes (no podendo ser idntico ao nome das palavras reservadas). O nome de um identificador deve ser iniciado por Letras ou o carcter underscore ( _ ). O resto formado por Letras, Dgitos, carcter underscore (ASCII $5F). No permitido a utilizao de espaos para a formao do nome.

Exemplo de identificadores vlidos: Form1, SysUtils.StrLen, Label1.Caption


with... do...;
Delimita um determinado bloco de declaraes para um identificador especfico evitando a declarao deste identificador. A sintaxe do comando : WITH {nome do identificador} DO {comandos};. Ex:
begin { ... comandos iniciais ... } with form1 do begin Caption := Teste; BorderStyle := bsSizable; end; end;

Equivalente a Form1.Caption Equivalente a Form1.BorderStyle

array [ ... ] of ...;


Define um conjunto de variveis ou constantes de um mesmo tipo. A sintaxe do comando : array [{quantidade de ocorrencias}] of {Tipo};. Os arrays so controlados por trs funes:
Funo Low High SizeOf Valor de Retorno Primeiro elemento Aponta para o ltimo elemento Tamanho do array

Ex:
const t: array [1..50] of Char { Declara 50 elementos para o tipo Char } var s : array[1..100] of Real { Declara 100 elementos para o tipo real } ind: Integer; begin for Ind := Low(s) to High(s) do s[Ind] := 0; { Zera os elementos do array S } if SizeOf(t) = C then exit; { Se o ltimo elemento do array T for C sai do bloco } { ... outros comandos... } end;

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 6

Declaraes
Declaraes descrevem aes de um algortmo a serem executadas.

begin... end;
Prende um conjunto de declaraes em um bloco de comandos determinado. A sintaxe do comando : BEGIN {comandos} END;. Ex:
begin { ... comandos iniciais ... } begin { ... bloco 1 ... } end; begin { ... bloco 2 ... } end; { ... comandos finais ... } end;

if... then... else...;


Esta expresso escolhe entre o resultado de uma condio booleana o caminho verdadeiro (then) ou falso (else). A sintaxe do comando : IF {condio} THEN {bloco de comandos} ELSE {bloco de comandos};. Ex:
begin { ... comandos iniciais ... } if x > 2 then { ... Bloco verdadeiro ... } else { ... Bloco falso ... }; end;

goto... ;
Transfere a execuo de um programa para o ponto determinado pelo Label. A sintaxe do comando : GOTO {Label};. Ex:
label primeiro; begin { ... comandos iniciais ... } if x = 2 then goto primeiro; { ... outros comandos ... } Primeiro: { ... comandos do Primeiro ... } end;

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 7

case... of... else... end;


Consiste de uma lista de declaraes que satizfaz a condio de um seletor de expresses, se nenhuma parte da lista satisfizer ao seletor executa os comandos do sub-comando else. Para o seletor sero vlidos os tipos definidos, tipo Inteiros ou LongInt. A sintaxe do comando : CASE {seletor} OF {Expresso 1}: {comando da expresso 1}; {Expresso 2}: {comando da expresso 2}; {Expresso n}: {comando da expresso n} ELSE {comando}; end;. Ex:
begin { ... comandos iniciais ... } case x of 1: { ... Bloco para x = 1 ... } 2, 3: { ... Bloco para x = 2 ou X = 3... } 4..6: { ... Bloco para 4 <= x <= 6 ... } else { ... Bloco para x < 1 ou x > 6 ... }; end; end;

repeat... until;
Repete um determinado bloco de declaraes at a condio booleana do subcomando until ser satisfeita. A sintaxe do comando : REPEAT {comandos}; until {condio};. Ex:
begin { ... comandos iniciais ... } x := 0; repeat x := x + 1 until (x = 2); end;

for... to (downto)... do...;


Incrementa em 1 uma determinada varivel inteira, repetindo um bloco de comandos, at que esta atinja o valor final do intervalo, o subcomando downto realiza o incremento reverso. A sintaxe do comando : FOR {variavel} := {valor inicial} to (downto) {valor final} do {bloco de comandos};. Ex:
begin { ... comandos iniciais ... } for i := 1 to 10 do { ... Comandos A ... } for s := 10 downto 1 do { ... Comandos B... } end;

Executa o [comandos A] para i = 1,2,3,4,5,6,7,8,9 e 10 Executa o [comandos B] para i = 10,9,8,7,6,5,4,3,2 e 1

while... do...;
Repete um bloco de comandos enquanto que determinada condio booleana seja satisfeita. A sintaxe do comando : WHILE {condio} DO {bloco de comandos};. Ex:

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 8

begin { ... comandos iniciais ... } while i := 1 do Repete o [Bloco de comandos] enquanto i = 1 { ... Bloco de comandos ... } end;

break; ou continue...;
O comando break interrompe um bloco de repetio for, while ou repeat saindo do bloco. A sintaxe do comando : BREAK; enquanto que o comando continue retorna a primeira instruo do bloco de repetio for, while ou repeat. A sintaxe do comando : CONTINUE;. Ex:
begin { ... comandos iniciais ... } for i := 1 to 10 do begin if i = 8 then break; {... comandos A...} if i = 5 then continue; {... comandos B ...} end; {... comandos C ...} end;

Salta para os [comandos C] Retorna para o comando for pulando os [comandos B]

Blocos de Procedimentos ou Funes


As procedures ou funes so declaradas na seo de tipos de declaraes (abaixo do comando type) pertencendo ao objeto ou serem do tipo public (pblicas - executadas por outras unidades) ou private (particulares - restritas a unidade local).

Procedure
procedure {cabealho}; var {declarao das variveis}; {bloco de comandos};

O cabealho da procedure composto pelo nome do procedimento e variveis que sero recebidas (ou modificadas atravs da declarao var, ex: procedure teste(var x:string);).
procedure soma(a,b: integer); var c: integer; begin c := a + b; end;

Incio enviando as variveis A e B do tipo inteiro. Declarao de variveis locais. Corpo do procedimento.

Function
function {cabealho} : {resultado}; var {declarao das variveis}; {bloco de comandos};

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 9

As funes se diferem dos procedimentos pela obrigatoriedade do retorno de um resultado, podendo este resultado ser retornado pela declao: {nome da funo} := valor ou result := valor.
function soma(a,b: integer) : integer; begin soma := a + b; end;

Incio enviando as variveis A e B do tipo inteiro. Corpo do procedimento. ou result := a + b;

Junto com o Delphi 2.0 vem o manual de Object Pascal em formato .HLP, caso a linguagem seja novidade para voc aconselho que voc d uma boa olhada (o Delphi 1.0 traz o mesmo manual, mas em formato .PDF), mas no se preocupe com o que foi explicado acima j est mais do que suficiente para uma boa inicializao com o Delphi. Tudo o que vimos a cima o que normalmente temos em outras linguagens comuns, mas o caracteriza realmente a linguagem Orientada em Objetos o trabalho e a manipulao com os mesmos.

Caractersticas de Objetos
Mas afinal de contas, o que um objeto ? Como foi dito anteriormente, um objeto qualquer tipo de elemento, ou componente, que envolva dados e cdigo dentro de um nico pacote. Uma vantagem de programar na POO e quanto a Herana dos objetos, este mtodo faz com que seja possvel um objeto Filho poder herdar todas as caractersticas e contedos de um objeto Pai. Tirando um pouco do Pascal da geladeira (a partir do Pascal verso 7.0 a Borland tornou possvel a utilizao simplificada de todo o conceito de POO) aqui vai um cdigo completo de declarao de dois objetos, o primeiro chamado de TPai e o segundo de Tfilho:
TPai = object Nome: PChar; constructor Init (P: PChar); destructor Done; procedure MudaNome(P: PChar); procedure ShowName; end; TFilho = object(TPai) procedure MudaNome(P: PChar); end;

O segundo objeto TFilho herda do objeto TPai o ponteiro varivel Nome, a constructor Init, o destructor Done e a procedure ShowName, apenas a procedure MudaNome ter o funcionamento como uma caracterstica nica para cada objeto. O Delphi possui inmeros pais (classes de objetos) prontos para serem usados por voc, tais como:
TForm: Centro das aplicaes Delphi, utilizados na criao de janelas, caixas de dilogo entre outros.

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 10

TMenu: Responsvel pela concepo de menus e menu popup. TButtonControl: Simplifica o refinamento do controle da janela serve de base para os componentes como: Botes, Check Box e Radio Box.

Programando com objetos Delphi


Quando iniciado o Delphi, criado automaticamente um novo projeto e um objeto formulrio (derivado da classe TForm) para o suporte dos demais objetos. Explorando o Editor de Cdigos (Code Editor) voc poder observar a declarao do novo objeto da classe TForm que foi produzido automaticamente com a criao do novo formulrio. Examinando o contedo deste cdigo criado para o objeto, teremos:
unit Unit1; interface

Abertura de uma nova unidade Parmetros do obejetos


Uso de outras unidades

uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} end.

A declarao do objeto inicia aqui

Aqui o final da declarao

Atribui a varivel Form1 as caractersticas do objeto TForm1


Incio da parte a ser implementada

Diretiva de compilao que agrega o desenho da tela (em


.DFM) com o mesmo nome da unidade Final da parte implementada

Um novo tipo de objeto TForm1, declarado derivado da classe TForm, que tambm um outro objeto. Relembre um objeto um tipo de elemento capaz de guardar dados e cdigo dentro de um nico pacote. At agora, o tipo TForm1 no contm campos ou mtodos, isso acontecer com a adio de alguns componentes neste objeto. Observando o cdigo, notamos que existe uma varivel declarada com o nome Form1 para o novo tipo de objeto TForm1:
var Form1: TForm1;

Universidade Estcio de S

Prof. Vera Lcia Dias

Pag. 11

Form1 a chamada de instncia ao tipo TForm1. Esta varivel refere-se ao formulrio em si, aonde ser adicionado componentes e desenhado a interface entre o computador e o usurio que for operar o sistema. sempre notado declaraes de uma ou mais instncias referidas ao tipo de objeto. Futuramente ser mostrado o poder deste tipo de declaraes quando falarmos sobre janela MDI (Multiple Document Interface - Interface de documento mltiplos) gerenciando vrias janelas filhas, no permitindo que estas janelas filhas saiam do espao criado pela janela pai. Adicionando alguns componentes ao formulrio, veremos como o Delphi completar a aplicao escrevendo automaticamente o cdigo, e permitindo que ao final tornar-se- possvel a compilao (lembra-se do Clipper , com .EXE), execuo e distribuio da aplicao. Em nosso formulrio, colocaremos um boto que, em tempo de execuo, ao ser dado um clique com o mouse sobre este objeto, o formulrio mude sua cor. Aperte a tecla F12 para retornar a viso do formulrio e na palheta de objetos (Componnent Pallete) clique no objeto (button localizado na pgina Standard) e clique no formulrio. Na janela da Object Inspector clique na pgina Events e clique duas vezes sobre a ao OnClick e insira o seguinte cdigo:
procedure TForm1.Button1Click(Sender: TObject); begin Form1.Color := clGreen; end;

Reparando no cdigo completo da aplicao, veremos:


unit Unit1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM}

Um novo dado foi aqui inserido Declarado um novo mtodo

Universidade Estcio de S

Prof. Vera Lcia Dias


O cdigo do novo mtodo

Pag. 12

procedure TForm1.Button1Click(Sender: TObject); begin Form1.Color := clGreen; end; end.

O novo objeto TForm1 agora apresenta um campo Button1 - o boto que voc adicionou ao formulrio. TButton e o tipo do objeto, e Button1 o objeto boto propriamente dito. Com o tempo voc colocar novos componentes ao formulrio. (Run), d um clique no boto e veja o que Rode o projeto, clicando no boto acontece. Pare a aplicao fechando a janela com Alt+F4.

S por curiosidade, salve este arquivo, feche-o e abra o arquivo UNIT1.DFM (com a
opo File | Open File...) notaremos que o Delphi criou um arquivo com todas as propriedades dos objetos criados e que a declarao do objeto Form1 engloba todos os outros, noes de Encapsulamento.

Renomeando os objetos e os componentes


Voc sempre deve utilizar a janela do Object Inspector para renomear os objetos criados. Por exemplo, o nome padro do formulrio e Form1 mude a propriedade Name para fCores. O Delphi se encarregar de mudar qualquer referncia que existia ao Form1. Ento o cdigo apresentar a seguinte modificaes:
unit Unit1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs; type TfCores = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var fCores: TfCores; implementation

Aqui foi modificado

Aqui foi modificado

Universidade Estcio de S
{$R *.DFM}

Prof. Vera Lcia Dias

Pag. 13

procedure TfCores.Button1Click(Sender: TObject); Aqui foi modificado begin Form1.Color := clGreen; Aqui no !!! end; end.

O Delphi modificar apenas os cdigos gerados automaticamente pr ele. Os cdigos para a ao OnClick foram gerados por voc e o Delphi no os modificar. Cabe a voc a manuteno neste caso. Isto foi idealizado para preservar o contedo original do seu cdigo.
procedure TfCores.Button1Click(Sender: TObject); begin fCores.Color := clGreen; end;

Você também pode gostar