Escolar Documentos
Profissional Documentos
Cultura Documentos
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"<
: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
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%
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<
!$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><
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<
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<
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<
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$%
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>%
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
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%
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><