Você está na página 1de 12

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 con unda os conceitos com PO! (Programao Orientada a !ventos) muito di undido com o Access 2.0 " (um ambiente baseado em Objetos), mas ao longo deste cap#tulo voc vai notar as sens#veis di erenas que e$istem entre esses dois conceitos% & POO e a PO! so acilmente con undidas, mas lembre'se a POO contm a PO! mas a PO! no contm a POO, um objeto pode e$istir mesmo que no e$ista nenhum evento associado a ele, mas um evento no pode e$istir se no houver um objeto a ele associado% Outra caracter#stica que pode causar con uso so ambientes Orientados a Objetos e ambientes (aseados em Objetos% !m ambiente Orientado a Objetos consegue'se criar e manipular objetos enquanto que o (aseado em Objetos no possivel a criao de objetos apenas a sua manipulao% & POO um conceito desenvolvido para acilitar o uso de c)digos de desenvolvimento em inter aces gr icas% *endo 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% & POO atraiu muitos adeptos principalmente pelo pouco uso de c)digo que o projeto (di erente de sistema) carrega no programa onte, ao contrrio das linguagens mais antigas como o Clipper87 " muito utili+ado no inal da dcada de ,- e in#cio da dcada de ,-% O resultado desta .limpe+a/ no c)digo resulta que a manuteno do projeto torna'se muito mais simples%

Orientao a Objeto
&ntes de comearmos a alar realmente de linguagem orientada a objetos e necessrio que voc possua os conceitos bsicos da orientao a objetos, so eles0

Objeto ' qualquer estrutura modular que a+ parte de um produto% 1ma janela por e$emplo, um objeto de uma casa, de um carro ou de um so t2are com inter ace gr ica para o usurio%

Atributos ' *o as caracter#sticas do objeto, como cor e tamanho, a janela, por e$emplo, tem atributos como o modelo, tamanho, abertura simples ou dupla, entre outros% Encapsulao ' um mecanismo interno do objeto .escondido/ do usurio% 1ma pessoa pode abrir uma janela girando a tranca sem precisar saber o que h dentro dela% Ao ' a operao e etuada pelo objeto% 3odas as janelas, por e$emplo, controlam a iluminao e temperatura ambiente, dependendo do seu design% Herana ' um objeto novo nem sempre criado do +ero% !le pode .herdar/ atributos e a4es de outros j e$istentes% 1m basculante herda atributos das janelas e das persianas% Polimorfismo ' a capacidade de objetos di erentes reagirem segundo a sua uno a uma ordem padro% O comando .abre/, por e$emplo, a+ um objeto entrar em ao, seja ele uma janela, uma porta ou uma tampa de garra a% Ligao ' quando um objeto conecta a sua ao a outro% 1m sensor de claridade, por e$emplo, ativa o acendimento automtico da iluminao de rua% Embutimento ' Permite a um objeto incorporar un4es de outros, como um liq5idi icador que m)i carne com a mudana do tipo da l6mina%

Object Pascal
Object Pascal uma linguagem Orientada a Objetos no pura mas h#brida por possuir caracter#sticas 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 $BASE entre outras linguagens a Object Pascal providncia uma migrao de orma natural o erecendo um produto de maior comple$ibilidade% Object Pascal ora a voc e$ecutar passos l)gicos isto torna mais cil o desenvolvimento no ambiente indo!s" de aplica4es livres ou que utili+am banco de dados do tipo Cliente"Ser#idor, trabalha com o uso de ponteiros para a alocao de mem)ria e todo o poder de um c)digo totalmente compilvel% &lm disso possibilita a criao e reutili+ao (vantagem de re'uso to sonhado com a Orientao a Objetos) de objetos e bibliotecas din6micas (D$na%ic &in' &ibraries ' 788)% Object Pascal contm todo o conceito da orientao a objetos incluindo encapsulamento, herana e polimor ismo% &lgumas e$tens4es oram inclu#das para acilitar o uso tais como conceitos de propriedades, particulares e p9blicas, e tipos de in orma4es em modo run'time, manuseamento de e$ce4es, e re erncias de classes% O resultado de toda esta juno a+ com que Object Pascal consiga suportar as acilidades de um bai$o n#vel de programao, tais como0 :ontrole e acesso das subclasses do indo!s" (&P;)< indo!s"<

Passar por cima das mensagens de loop do =ensagens semelhantes as do indo!s"<

:)digo puro da linguagem Asse%bler%

:omo deu para perceber a base de toda a programao Delphi a linguagem Object Pascal, ento neste cap#tulo trataremos e$clusivamente deste tipo de programao%

Smbolos Especiais
& Object Pascal aceita os seguintes caracteres &*:;;0

8etras ' do &l abeto ;ngls0 A at Z e a at z% 7#gitos ' 7ecimal0 0 at 9 e >e$a7ecimal0 0 at 9 e A at F (ou a at f) (rancos ' !spao (A !"" #$) e todos os caracteres de controle A !""
A !"" #%), incluindo inal de linha e !nter (A !"" %#)% !speciais ' :aracteres0 & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : *#mbolos ' :aracteres0 +* ,* 3* // 1( (2 1/ /2 ))

(A !"" 0 at

O colchetes esquerdo ( - ) e equivalente ao 1/ e o colchetes direito ( . ) e equivalente a /2% & chave esquerda ( 7 ) e equivalente ao 1( e a chave direita ( 8 ) e equivalente a (2%

Palavras Reservadas
& Object Pascal se utili+a das seguintes palavras reservadas, no podendo as mesmas serem utili+adas ou rede inidas0
&nd &rra? &s &sm (egin :ase :lass :onst :onstructor 7estructor 7iv 7o 7o2nto !lse !nd !$cept !$ports @ile @innal? @or @unction Boto ; ;mplementation ;n ;nherited ;nitiali+ation ;nline ;nter ace ;s 8abel 8ibrar? =od Ail Aot Object O On Or PacCed Procedure Program Propert? Eaise Eecord Eepeat *et *hl *hr *tring 3hen 3o 3r? 3?pe 1nit 1ntil 1ses Dar Fhile Fith Gor

1ma outra lista a seguir, apresenta as diretivas que so utili+adas em conte$tos de identi icao de objetos0
&bsolute &bstract &ssembler &t :decl 7e ault 7?namic !$port !$ternal @ar @or2ard ;nde$ ;nterrupt =essage Aame Aear Aode ault Override Private Protected Public Published Eead Eesident *tored Dirtual Frite

Nmeros
H poss#vel de inir variveis e constantes de tipos de (nteiro ou )eal atravs de qualquer decimal ordinrio ( 0 a 9 ), mas a Object Pascal tambm aceita a notao >e$adecimal utili+ados com o pre i$o dollar ( 9 ) ou a notao cient# ica ( E )%

Constantes
1ma constante um identi icador com valor(es) i$o(s)% 1m bloco de declara4es constante possui a seguinte e$presso0 I7eclarao :onstanteJ I;denti icadorJ (K) IconstanteJ (<) & lista abai$o apresenta um conjunto de un4es que podem ser utili+adas para a declarao das constantes0
&b :hr >i >igh 8ength 8o 8o2 Odd Ord Pred Ptr Eound *i+eO *ucc *2ap 3runc

&lguns e$emplos para a de inio de :onstantes0


const =in K -< =a$ K L--< :entro K (=a$ ' =in) div M< (eta K :hr(MMN)< Aum8etras K Ord(OPO) ' Ord(O&O) Q L< =ensOla K O;nstruo invlidaO< =ens!rro K O !rro0 O Q =ensOla Q O% O< Pos!rr K R- ' 8ength(=ens!rro) div M< 8nL- K M%S-MNRN-,M,,T-TNURT< 8nL-E K L V 8nL-< 7igAumericos K IO-O%%O,OJ< 8etras&lpha K IO&O%%OPO, OaO%%O+OJ< &lphaAum K 8etras&lpha Q 7igAumericos<

Expresses
&s e$press4es em Object Pascal (como em qualquer linguagem) ormada por operadores e operandos< os operadores so divididos em quatro categorias bsicas0
Wnicos =ultiplicativos &dicionais Eelacionais X, Aot Y, V, div, mod, and, shl, shr, as Q, ', or, $or K, Z Y, Z, Y, Z K, Y K, in, is

&s e$press4es obdecem as regras bsicas de l)gica para a precedncia da e$ecuo das opera4es%

denti!icadores
;denti icadores podem ser constantes, tipos, variveis, procedures, un4es, unidades, programas e campos de registros% Ao e$iste limite de caracteres para o nome de um identi icador mas apenas os US primeiros caracteres so signi icantes (no podendo ser idntico ao nome das palavras reservadas)% O nome de um identi icador deve ser iniciado por 8etras ou o carcter underscore ( ; )% O resto ormado por 8etras, 7#gitos, carcter underscore (&*:;; [N@)% Ao permitido a utili+ao de espaos para a ormao do nome%

!$emplo de identi icadores vlidos0 @ormL, *?s1tils%*tr8en, 8abelL%:aption

with... do...;
7elimita um determinado bloco de declara4es para um identi icador espec# ico evitando a declarao deste identi icador% & sinta$e do comando 0 <"=H 7nome >o i>entifica>or8 ?O 7coman>os84% !$0
begin \ %%% comandos iniciais %%% ] @itA form% >o begin :aption 0K ^3este_< (order*t?le 0K bs*i+able< end< end<

!quivalente a @ormL%:aption !quivalente a @ormL%(order*t?le

array [ ... ] of ...;


7e ine um conjunto de variveis ou constantes de um mesmo tipo% & sinta$e do comando 0 arraB -7Cuanti>a>e >e ocorrencias8. of 7=ipo84% Os arra?s so controlados por trs un4es0
Funo 8o2 >igh *i+eO Dalor >e Eetorno Primeiro elemento &ponta para o 9ltimo elemento 3amanho do arra?

!$0
const t0 arraB -%//F0. of !Aar \ 7eclara N- elementos para o tipo :har ] var s 0 arraB-%//%00. of Eeal \ 7eclara L-- elementos para o tipo real ] ind0 ;nteger< begin or ;nd 0K Lo@(s) to HigA(s) do sI;ndJ 0K -< \ Pera os elementos do arra? * ] i izeOf (t) K ^:_ then e$it< \ *e o 9ltimo elemento do arra? 3 or ^:_ sai do bloco ] \ %%% outros comandos%%% ] end<

"eclaraes
7eclara4es descrevem a4es de um algor#tmo a serem e$ecutadas%

be in... end;
Prende um conjunto de declara4es em um bloco de comandos determinado% & sinta$e do comando 0 GEH"I 7coman>os8 EI?4% !$0
begin \ %%% comandos iniciais %%% ] begin \ %%% bloco L %%% ] en>< begin \ %%% bloco M %%% ] en>< \ %%% comandos inais %%% ] en><

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


!sta e$presso escolhe entre o resultado de uma condio booleana o caminho verdadeiro (then) ou also (else)% & sinta$e do comando 0 "F 7con>io8 =HEI 7bloco >e coman>os8 EL E 7bloco >e coman>os84% !$0
begin \ %%% comandos iniciais %%% ] if J , $ tAen \ %%% (loco verdadeiro %%% ] else \ %%% (loco also %%% ]4 end<

oto... ;
3rans ere a e$ecuo de um programa para o ponto determinado pelo Label% & sinta$e do comando 0 HO=O 7Label84% !$0
label primeiro< begin \ %%% comandos iniciais %%% ] i $ K M then goto primeiro4 \ %%% outros comandos %%% ] Primeiro3 \ %%% comandos do Primeiro %%% ] end<

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


:onsiste de uma lista de declara4es que sati+ a+ a condio de um seletor de e$press4es, se nenhuma parte da lista satis i+er ao seletor e$ecuta os comandos do sub'comando else% Para o

seletor sero vlidos os tipos de inidos, tipo ;nteiros ou 8ong;nt% & sinta$e do comando 0 !A E 7seletor8 OF 7EJpresso %83 7coman>o >a eJpresso %84 7EJpresso $83 7coman>o >a eJpresso $84 7EJpresso n83 7coman>o >a eJpresso n8 EL E 7coman>o84 en>4% !$0
begin \ %%% comandos iniciais %%% ] case J of %3 \ %%% (loco para $ K L %%% ] $0 #3 \ %%% (loco para $ K M ou G K S%%% ] K//L3 \ %%% (loco para T ZK $ ZK U %%% ] else \ %%% (loco para $ Z L ou $ Y U %%% ] 4 en>4 end<

repeat... until;
Eepete um determinado bloco de declara4es at a condio booleana do subcomando until ser satis eita% & sinta$e do comando 0 EEPEA= 7coman>os84 until 7con>io84% !$0
begin \ %%% comandos iniciais %%% ] $ 0K -< repeat $ 0K $ Q L until 1J * $24 end<

for... to !downto"... do...;


;ncrementa em L uma determinada varivel inteira, repetindo um bloco de comandos, at que esta atinja o valor inal do intervalo, o subcomando >o@nto reali+a o incremento reverso% & sinta$e do comando 0 FOE 7MariaMel8 3* 7Malor inicial8 to 1>o@nto2 7Malor final8 >o 7bloco >e coman>os84% !$0
begin \ %%% comandos iniciais %%% ] for i 3* % to %0 >o \ %%% :omandos & %%% ] for s 3* %0 >o@nto % >o \ %%% :omandos (%%% ] end<

!$ecuta o Icomandos &J para i K L,M,S,T,N,U,`,R,, e L !$ecuta o Icomandos (J para i K L-,,,R,`,U,N,T,S,M e L

while... do...;
Eepete um bloco de comandos enquanto que determinada condio booleana seja satis eita% & sinta$e do comando 0 <H"LE 7con>io8 ?O 7bloco >e coman>os84% !$0
begin \ %%% comandos iniciais %%% ] @Aile i 3* % >o Eepete o I(loco de comandosJ enquanto i K L \ %%% (loco de comandos %%% ] end<

brea#; ou continue...;
O comando breaN interrompe um bloco de repetio for, @Aile ou repeat saindo do bloco% & sinta$e do comando 0 GEEAO4 enquanto que o comando continue retorna a primeira instruo do bloco de repetio for, @Aile ou repeat% & sinta$e do comando 0 !OI="IPE4% !$0
begin \ %%% comandos iniciais %%% ] or i 0K L to L- do begin i i K R then breaN4 \%%% comandos &%%%] i i K N then continue4 \%%% comandos ( %%%] end< \%%% comandos : %%%] end<

*alta para os Icomandos :J Eetorna para o comando for pulando os Icomandos (J

#locos de Procedimentos o$ %$nes


&s procedures ou un4es so declaradas na seo de tipos de declara4es (abai$o do comando tBpe) pertencendo ao objeto ou serem do tipo public (p9blicas ' e$ecutadas por outras unidades) ou priMate (particulares ' restritas a unidade local)%

Procedure
proce>ure 7cabealAo84 Mar 7>eclarao >as MariQMeis84 7bloco >e coman>os84

O cabealho da procedure composto pelo nome do procedimento e variveis que sero recebidas (ou modi icadas atravs da declarao Mar0 e$0 procedure teste(Mar $0string)<)%
procedure soma(a,b0 integer)< var c0 integer< begin c 0K a Q b< end<

;n#cio enviando as variveis & e ( do tipo inteiro% 7eclarao de variveis locais% :orpo do procedimento%

$unction
function 7cabealAo8 3 7resulta>o84 Mar 7>eclarao >as MariQMeis84 7bloco >e coman>os84

&s un4es se di erem dos procedimentos pela obrigatoriedade do retorno de um resultado, podendo este resultado ser retornado pela declao0 7nome >a funo8 3* Malor ou result 3* Malor%
unction soma(a,b0 integer) 0 integer< begin soma 0K a Q b< end<

;n#cio enviando as variveis & e ( do tipo inteiro% :orpo do procedimento% ou result 0K a Q b<

aunto com o Delphi 2.0 vem o manual de Object Pascal em ormato /HLP, caso a linguagem seja novidade para voc aconselho que voc d uma boa olhada (o Delphi *.0 tra+ o

mesmo manual, mas em ormato /P?F), mas no se preocupe com o que oi e$plicado acima j est mais do que su iciente para uma boa iniciali+ao com o Delphi% 3udo o que vimos a cima o que normalmente temos em outras linguagens comuns, mas o caracteri+a realmente a linguagem Orientada em Objetos o trabalho e a manipulao com os mesmos%

Caractersticas de Objetos
=as a inal de contas, o que um objeto b :omo oi dito anteriormente, um objeto qualquer tipo de elemento, ou componente, que envolva dados e c)digo dentro de um 9nico pacote% 1ma vantagem de programar na POO e quanto a +eran,a dos objetos, este mtodo a+ com que seja poss#vel um objeto ^@ilho_ poder herdar todas as caracter#sticas e conte9dos de um objeto ^Pai_% 3irando um pouco do Pascal da geladeira (a partir do Pascal verso `%- a Borland tornou poss#vel a utili+ao simpli icada de todo o conceito de POO) aqui vai um c)digo completo de declarao de dois objetos, o primeiro chamado de 3Pai e o segundo de 3 ilho0
3Pai K object Aome0 P!Aar4 constructor ;nit (P0 P:har)< >estructor ?one< proce>ure =udaAome(P0 P:har)< proce>ure *ho2Aame< en>< 3@ilho K object(3Pai) proce>ure =udaAome(P0 P:har)< en><

O segundo objeto 3@ilho herda do objeto 3Pai o ponteiro varivel Iome, a constructor "nit, o >estructor ?one e a proce>ure Ao@Iame, apenas a proce>ure Ru>aIome ter o uncionamento como uma caracter#stica 9nica para cada objeto% O Delphi possui in9meros .pais/ (classes de objetos) prontos para serem usados por voc, tais como0
=Form0 :entro das aplica4es Delphi, utili+ados na criao de janelas, cai$as de dilogo entre outros% =Renu0 Eesponsvel pela concepo de menus e menu popup% =Gutton!ontrol0 *impli ica o re inamento do controle da janela serve de base para os componentes como0 (ot4es, :hecC (o$ e Eadio (o$%

Pro ra%ando co% objetos Delphi


cuando iniciado o Delphi, criado automaticamente um novo projeto e um objeto ormulrio (derivado da classe =Form) para o suporte dos demais objetos% !$plorando o !ditor de :)digos (Code Editor) voc poder observar a declarao do novo objeto da classe -.or% que oi produ+ido automaticamente com a criao do novo ormulrio% !$aminando o conte9do deste c)digo criado para o objeto, teremos0

unit 1nitL< interface

&bertura de uma nova unidade Par6metros do obejetos


1so de outras unidades

uses *?s1tils, Fin3?pes, FinProcs, =essages, :lasses, Braphics, :ontrols, @orms, 7ialogs< tBpe 3@ormL K class(3@orm) priMate / Pri#ate declarations 0 public / P1blic declarations 0 en>< Mar @ormL0 3@ormL< implementation /2) 3.D.40 en>%

& declarao do objeto inicia aqui

&qui o inal da declarao

&tribui a varivel @ormL as caracter#sticas do objeto 3@ormL


;n#cio da parte a ser implementada

7iretiva de compilao que agrega o desenho da tela (em


%7@=) com o mesmo nome da unidade @inal da parte implementada

1m novo tipo de objeto -.or%*, declarado derivado da classe -.or%5 que tambm um outro objeto% Eelembre um objeto um tipo de elemento capa+ de guardar dados e c)digo dentro de um 9nico pacote% &t agora, o tipo -.or%* no contm campos ou mtodos, isso acontecer com a adio de alguns componentes neste objeto% Observando o c)digo, notamos que e$iste uma varivel declarada com o nome .or%* para o novo tipo de objeto -.or%*0
Mar @ormL0 3@ormL<

.or%* a chamada de inst6ncia ao tipo -.or%*% !sta varivel re ere'se ao ormulrio em si, aonde ser adicionado componentes e desenhado a inter ace entre o computador e o usurio que or operar o sistema% H sempre notado declara4es de uma ou mais inst6ncias re eridas ao tipo de objeto% @uturamente ser mostrado o poder deste tipo de declara4es quando alarmos sobre janela =7; (41ltiple Doc1%ent (nter6ace ' ;nter ace de documento m9ltiplos) gerenciando vrias .janelas ilhas/, no permitindo que estas .janelas ilhas/ saiam do espao criado pela .janela pai/% &dicionando alguns componentes ao ormulrio, veremos como o Delphi completar a aplicao escrevendo automaticamente o c)digo, e permitindo que ao inal tornar'se' poss#vel a compilao (lembra'se do Clipper", com /ESE), e$ecuo e distribuio da aplicao% !m nosso ormulrio, colocaremos um boto que, em tempo de e$ecuo, ao ser dado um clique com o mouse sobre este objeto, o ormulrio mude sua cor% &perte a tecla F%$ para retornar a viso do ormulrio e na palheta de objetos ( Co%ponnent Pallete) clique no objeto (b1tton locali+ado na pgina Standard) e clique no ormulrio% Aa janela da Object (nspector clique na pgina E#ents e clique duas ve+es sobre a ao OnClic' e insira o seguinte c)digo0

proce>ure 3@ormL%(uttonL:licC(*ender0 3Object)< begin @ormL%:olor 0K clBreen< en><

Eeparando no c)digo completo da aplicao, veremos0


unit 1nitL< interface uses *?s1tils, Fin3?pes, FinProcs, =essages, :lasses, Braphics, :ontrols, @orms, 7ialogs< tBpe 3@ormL K class(3@orm) (uttonL0 3(utton< proce>ure (uttonL:licC(*ender0 3Object)< priMate / Pri#ate declarations 0 public / P1blic declarations 0 en>< Mar @ormL0 3@ormL< implementation /2) 3.D.40 proce>ure 3@ormL%(uttonL:licC(*ender0 3Object)< begin @ormL%:olor 0K clBreen< en>< en>%

1m novo dado oi aqui inserido 7eclarado um novo mtodo

O c)digo do novo mtodo

O novo objeto -.or%* agora apresenta um campo B1tton* ' o boto que voc adicionou ao ormulrio% -B1tton e o tipo do objeto, e B1tton* o objeto boto propriamente dito% :om o tempo voc colocar novos componentes ao ormulrio% Eode o projeto, clicando no boto ()1n), d um clique no boto e veja o que acontece% Pare a aplicao echando a janela com Alt&FK% *) por curiosidade, salve este arquivo, eche'o e abra o arquivo 78(-*.D.4 (com a opo File d Open File///) notaremos que o Delphi criou um arquivo com todas as propriedades dos objetos criados e que a declarao do objeto Form% engloba todos os outros, no4es de Encapsulamento%

&eno%eando os objetos e os co%ponentes


Doc sempre deve utili+ar a janela do Object (nspector para renomear os objetos criados% Por e$emplo, o nome padro do ormulrio e .or%* mude a propriedade 8a%e para f!ores% O Delphi se encarregar de mudar qualquer re erncia que e$istia ao .or%*% !nto o c)digo apresentar a seguinte modi ica4es0
unit 1nitL< interface uses *?s1tils, Fin3?pes, FinProcs, =essages, :lasses, Braphics, :ontrols, @orms, 7ialogs< tBpe 3 :ores K class(3@orm) (uttonL0 3(utton< proce>ure (uttonL:licC(*ender0 3Object)< priMate / Pri#ate declarations 0 public / P1blic declarations 0 en>< Mar :ores0 3 :ores< implementation /2) 3.D.40 proce>ure 3 :ores%(uttonL:licC(*ender0 3Object)< begin @ormL%:olor 0K clBreen< en>< en>%

&qui oi modi icado

&qui oi modi icado

&qui oi modi icado &qui no eee

O Delphi modi icar apenas os c)digos gerados automaticamente pfr ele% Os c)digos para a ao OnClic' oram gerados por voc e o Delphi no os modi icar% :abe a voc a manuteno neste caso% ;sto oi ideali+ado para preservar o conte9do original do seu c)digo%
proce>ure 3 :ores%(uttonL:licC(*ender0 3Object)< begin :ores%:olor 0K clBreen< en><

Você também pode gostar