Documente Academic
Documente Profesional
Documente Cultură
Programao Com
Delphi
Edberto Ferneda
.
Parte
I
Ambiente Integrado de
Desenvolvimento
IDE
O Ambiente DELPHI
O ambiente de desenvolvimento do Delphi possui as caractersticas IDE (Integrated
Developer Environment Ambiente Integrado de Desenvolvimento).
Janela Principal
A janela principal controla o funcionamento do Delphi. atravs dessa janela que
mantemos o Delphi aberto, que identificamos qual projeto est ativo, que executamos os
comandos de compilao, entre outras funcionalidades. Esta janela pode ser dividida em
trs partes:
Menu Principal: contm as opes de utilizao do DELPHI;
Barra de Ferramentas: contm botes que agilizam determinadas funes do
DELPHI;
Menu Principal
Assim como toda aplicao Windows, no menu principal esto presentes os comandos
de abertura, criao, compilao, configurao do ambiente e chamadas a ferramentas
auxiliares como, por exemplo, o Image Editor.
File
Abrir, salvar, fechar e imprimir projetos e arquivos, e acrescentar novos formulrios ou
Units ao projeto que est aberto.
Comando
Descrio
New
Abre a caixa de dilogo New Items que contm novos itens que
podem ser criados.
New Application
New Form
Open
Reopen
Save
Save As
Save Project As
Save All
Close
Close All
Use Unit
Add to Project
Exit
Edit
Comandos para manipular textos e componentes em tempo de projeto.
O Ambiente DELPHI
Comando
Descrio
Undelete (Undo)
Redo
Cut
Copy
Paste
Delete
Select All
Align To Grid
Bring To Front
Send To Back
Align
Size
Scale
Tab Order
Creation Order
Lock Controls
Add to interface
Search
Localiza texto, erros, objetos, units, variveis e smbolos no Code Editor.
Comando
Descrio
Find
Find In File
Replace
Search Again
Repete a procura.
Incremental Search
Go to Line Number
Find Error
Browse Symbol
View
Apresenta (ou esconde) diferentes elementos do ambiente Delphi e abre janelas do
depurador de cdigo (debugger).
Comando
Descrio
Project Manager
Project Source
Object Inspector
Alignment Palette
Browser
Breakpoints
Call Stack
Watches
Threads
Modules
Component List
Window List
Toggle Form/Unit
Units
Forms
Type Library
SpeedBar
Component Palette
Project
Permite adicionar ou remover novos mdulos em um projeto, bem como compil-lo;
Comando
Descrio
Add to Project
Add To Repository
Compile
Build All
Syntax Check
Information
Web Deploy
Options
Run
Apresenta opes de execuo e depurao do projeto.
Comando
Descrio
Run
Parameters
Register ActiveX
O Ambiente DELPHI
Step Over
Trace Into
Run To Cursor
Program Pause
Program Reset
Add Watch
Add Breakpoint
Evaluate/Modify
Component
Permite a criao ou instalao de novos componentes no DELPHI.
Comandos
Descrio
New Component
Install Component
Install Packages
Configure Palette
Database
Possui ferramentas que permitem criar, modificar e visualizar Consultas e Tabelas de
Banco de Dados.
Comandos
Descrio
Explore
SQL Monitor
Form Wizard
Tools
Permite visualizar e alterar configuraes de ambiente, modificar a lista de programas
externos ao Delphi.
Comandos
Descrio
Environment Options
O Ambiente DELPHI
Repository
Configure Tools
Image Editor
Database Desktop
Workgroups
Configura o controle de verses em projetos envolvendo vrios programadores. O
controle de verses do Delphi feito pelo Intersolv PVCS Version Manager 5.1.
Comandos
Descrio
Help
Ajuda do DELPHI.
Comando
Descrio
Contents
Keyword Search
What's New
Getting Started
Developing Applications
About
Barra de Ferramentas
A barra de ferramentas contm as principais opes do menu principal e utilizada para
acessar os comandos de forma mais rpida.
O conjunto de botes da barra de ferramentas pode ser personalizada pressionando-se o
boto direito do mouse sobre ela e escolhendo-se a opo Properties no menu.
Paleta de Componentes
Componentes so programas que representam os botes, os ComboBoxes, as tabelas.
Etc. Cada pgina apresenta um conjunto de cones que representam as classes cujos
objetos que sero utilizados nos formulrios das aplicaes.
Para adicionar componentes em um formulrio basta seleciona o componente e em
seguida posiciona-lo no formulrio.
Os componentes podem ser Visuais ou No-Visuais. Os componentes visuais so
aqueles que podem ser redimensionados e aparecem no formulrio quando o projeto
est sendo executado.
Os componentes No-Visuais so visveis apenas em tempo de edio e no podem ser
redimensionados.
Todo componente Delphi um objeto que pertence a uma classe pr-definida. Em sua
maioria um componente possui Propriedades, Mtodos e Eventos.
Propriedades so dados relativos a um determinado componente, e que determinam
suas caractersticas visuais e seu estado. Por exemplo, o tamanho de um boto, se uma
tabela est aberta ou fechada.
Eventos so trechos de programas (procedures) que so executados em resposta a uma
determinada ao. Essa ao pode ser o clique do mouse sobre um boto da interface, a
excluso de um registro em uma tabela, o fechamento de um formulrio, etc.
Mtodos so procedimentos ou funes que executam uma determinada operao. Os
mtodos esto associados a um determinado objeto e so declarados na classe que este
objeto pertence. Por exemplo, existem mtodos para abrir tabelas, fechar formulrios,
excluir registros, etc.
O Object Inspector
A janela Object Inspector contm propriedades e eventos dos componentes inseridos em
um formulrio e tambm do prprio formulrio. A janela do Object Inspector possui um
ComboBox e est dividida em duas pginas.
O Ambiente DELPHI
O Form Designer
Um formulrio (FORM) a janela onde o desenvolvedor constri sua aplicao. A
partir de um formulrio que se estabelece a interao usurio-computador, atravs de
botes, rtulos e outros componentes, estabelecendo-se funes, mtodos ou eventos
que sero ativados. Os componentes so dispostos na rea til do FORM.
O Ambiente DELPHI
O Code Editor
A janela Code Editor (Editor de Cdigo), onde se desenvolve o programa fonte.
neste editor que se encontra a estrutura sinttica propriamente dita da Linguagem. Cabe
ressaltar, no entanto, que boa parte do cdigo escrito gerado automaticamente.
No topo do editor de cdigo encontra-se um controle de mltiplas pginas, onde cada
pgina corresponde a um mdulo do programa (Unit). Geralmente as Units esto
relacionadas aos formulrios da aplicao. A cada vez que se adiciona um novo
formulrio na aplicao, o Delphi adiciona tambm uma nova pgina ao editor de
cdigo.
O Ambiente DELPHI
O Ambiente DELPHI
10
Biblioteca de Classes
Por ser uma linguagem de programao orientada a objetos o DELPHI possui uma
biblioteca de classes denominada de VCL (Visual Component Library), para
auxiliar na construo de programas.
A biblioteca de classes do DELPHI pode ser visualizada no Browser (comando
View|Browser do menu principal).
No DELPHI existem as classes visveis e as no visveis.
As classes no-visveis oferecem controles especializados que no so possveis ou
necessrios atravs da interface visual. As classes no visveis mais comuns so a
TApplication, a TScreen e a TPrinter.
Classes No-Visveis
TApplication
Quando se inicia um projeto em DELPHI, automaticamente criada uma varivel
Application que do tipo TApplication. Esta classe permite a interao de sua
aplicao com o Windows.
A atribuio de valores s propriedades do TApplication pode ser feita apenas em
tempo de execuo, ou durante o desenvolvimento do projeto na opo do menu
Project - Options.
Os principais mtodos da classe TApplication so:
Run(): faz com que a aplicao seja executada. Este comando colocado
automaticamente no cdigo fonte do projeto (veja em View - Project Source).
HelpCommand(): carrega o arquivo de help da aplicao.
Algumas das principais propriedades da classe TApplication so:
MainForm: contm o formulrio principal da aplicao;
Title: contm o ttulo da aplicao que ser apresentado para quando estiver
minimizada;
HelpFile: armazena o nome do arquivo de Help da aplicao;
Icon: contm o cone que representa a aplicao.
TScreen
Quando se inicia um projeto em DELPHI, automaticamente criada uma varivel
Screen que do tipo TScreen. Esta classe contm as caractersticas da tela na qual a
aplicao est rodando.
Algumas das principais propriedades da classe TScreen so:
Cursor : contm o cursor que est em uso;
Cursors: contm a lista dos cursores disponveis para a aplicao;
TPrinter
Quando se inicia um projeto em DELPHI, automaticamente criada uma varivel
Printer que do tipo TPrinter. Esta classe contm as caractersticas da impressora
que est sendo utilizada pelo Windows, alm de permitir a impresso.
Os principais mtodos da classe TPrinter so:
BeginDoc(): inicia um processo de impresso.
EndDoc(): finaliza um processo de impresso.
Abort(): aborta o processo de impresso.
NewPage(): inicia a impresso em uma nova pgina.
Algumas das principais propriedades da classe TPrinter so:
Printers: contm a lista de impressoras instaladas no Windows.
PrinterIndex: contm o ndice da impressora ativada.
Orientation: contm a orientao do papel.
PageHeight: contm a altura da pgina de impresso.
PageWidth: contm a largura da pgina de impresso.
PageNumber: contm o nmero da pgina que est sendo impressa.
Title: contm o ttulo da pgina impressa.
Para a impresso de dados utilizando o TPrinter necessrio utilizar a classe
TCanvas.
Componentes
As classes visveis so aquelas que podem ser manipuladas atravs da Paleta de
Componentes, ou seja, so os prprios componentes
A paleta de componentes a biblioteca de classes que fornece recursos para o
desenvolvimento visual em DELPHI. Os componentes VCL (Visual Component
Library) representadas na Paleta de Componentes esto separados em pginas.
Os componentes visuais podem ter sua forma e tamanho alteradas no formulrio,
alm das propriedades e eventos que podem ser alterados no Object Inspector. Eles
aparecem durante a execuo do aplicativo exatamente como foram definidos
durante a construo do formulrio.
STANDARD
A pgina Standard possui os componentes de interface mais comuns para a
construo de aplicaes Windows95/NT.
Biblioteca de Classes
12
MainMenu
Cria uma barra de menus em um formulrio. Para definir as opes do menu, adicione o
componente MainMenu no formulrio e d um duplo-click sobre ele para abrir o Menu
Designer.
PopupMenu
Cria um menu popup que aparece quando o usurio clica o boto direito do mouse. Para definir
as opes do menu e, adicione o componente PopupMenu no formulrio e d um duplo-click
sobre ele para abrir o Menu Designer.
Label
Apresenta um texto que o usurio no poder selecionar ou manipular.
Edit
Apresenta um campo de edio onde o usurio poder digitar uma nica linha de texto.
Memo
Apresenta uma rea de edio onde o usurio poder digitar diversas linha de texto.
Button
Cria um boto que o usurio escolhe para iniciar uma determinada ao.
CheckBox
Representa uma informao do tipo Sim/No. Geralmente utilizado para representar um
grupo de opes que no so mutuamente exclusivas, podendo-se selecionar mais de uma
opo de um mesmo grupo.
RadioButton
Apresenta uma informao do tipo Sim/No. geralmente utilizado para representar um grupo
de opes mutuamente exclusivas, podendo o usurio escolher apenas uma opo de um
mesmo grupo.
ListBox
Apresenta uma lista de opes.
ComboBox
Apresenta um campo de edio onde o usurio digita informaes diretamente em uma linha de
texto, ou escolher a partir de uma lista previamente definida.
ScrollBar
Fornece uma forma de alterar a rea visvel de uma lista ou um formulrio.
GroupBox
Permite definir uma rea para criar um grupo de componentes relacionados.
RadioGroup
Permite criar uma rea contendo um agrupamento de componentes RadioButton.
Panel
Permite cria uma rea que pode-se agrupar diversos tipos de componentes. Pode-se ainda
utilizar o Panel para criar barra de ferramentas ou linhas de status.
ADDITIONAL
Na pgina Additional encontram-se outros componentes de interface.
Biblioteca de Classes
13
MaskEdit
Apresenta um campo de edio onde o usurio digita uma nica linha de texto, similar ao
componente Edit. A diferena que o MaskEdit fornece uma forma de especificar um formato
particular, tal como CEP, nmero de telefone, etc.
StringGrid
Cria uma tabela que pode ser usada para apresentar textos divididos em colunas e linhas.
DrawGrid
Cria uma tabela que pode ser usada para apresentar diversos tipos de dados em forma de tabela.
Image
Apresenta figuras bitmap, icon, etc. em um formulrio.
Shape
Desenha figuras geomtricas no formulrio.
Bevel
Cria linhas e caixas tridimensionais no formulrio.
ScrollBox
Cria uma rea que apresenta automaticamente barras de rolagem (scrollbars) quando
necessrio.
CheckListBox
Apresenta um lista similar ao ListBox, exceto que cada item possui tambm um CheckBox.
Splitter
Um componente Splitter pode ser colocado entre dois componentes para permitir ao usurio
alterar o tamanho desses componentes em tempo de execuo.
StaticText
Este componente possui um texto no editvel, como o componente Label. A diferena podese definir uma moldura ao redor do texto.
Chart
Este componente desenha grficos em um formulrio utilizando uma pequena planilha como
fonte de dados
WIN32
Os pgina de componente Win32 fornece a maioria dos controles encontrados na
interface Windows 95/NT.
14
ProgressBar
Barra retangular que preenchida da esquerda para a direita, como aquela mostrada quando se
copia arquivos no Windows Explorer. Fornece um retorno visual sobre o progresso de uma
operao.
UpDown
Incrementa e decrementa valores atravs de uma seta para cima e uma para baixo..
HotKey
Cria e apresenta combinaes de teclas que podero ser usadas como teclas de atalho.
Animate
Apresenta um vdeo .AVI (Audio Video Interleaved). Possui alguns vdeos pr definidos como
aqueles que so apresentados pelo Windows 95 quando se exclui ou copia um arquivo, por
exemplo..
DateTimePicker
Apresenta um calendrio para a seleo de data. O usurio pode digitar, selecionar atravs de
um calendrio ou atravs de setas para cima e para baixo.
TreeView
Permite apresentar informaes atravs de uma estrutura hierrquica.
ListView
Fornece diferentes formas de apresentar informaes sob forma de lista.
HeaderControl
Apresenta um cabealho que pode ser dividido colunas contendo textos ou nmeros. Pode-se
configurar o comportamento de cada uma dessas colunas para que, como um boto, execute
uma funo especifica quando o usurio clicar sobre ele.
StatusBar
Define uma rea para apresentar o estado atual de alguma operao, mensagens de erro ou de
alerta, avisos, etc.
ToolBar
Agrupa um conjunto de botes e outros componentes, organizando-os em colunas e ajustando
automaticamente seus tamanhos e posies.
CoolBar
Apresenta uma coleo de linhas (CoolBand) que podem ser movimentados pelo usurio em
tempo de execuo.
SYSTEM
A pgina System possui controles especializados que interagem com o Sistema
Operacional ou com algumas caractersticas de Hardware.
Biblioteca de Classes
15
DdeClientConv
DDE uma antiga tecnologia para implementao de comunicao. Para novos projetos deve-se
utilizar OLE.
O componente DDEClientConv fornece s aplicaes a habilidade de estabelecer uma
converso DDE com uma aplicao servidora DDE. Este componente deve trabalhar em
conjunto com um componente DDEClientItem para que sua aplicao seja uma aplicao
cliente DDE completa.
DdeClientItem
O componente DDEClientItem define o item da converso DDE. Utilize este componente junto
com o componente DDEClientConv para implementar uma aplicao cliente DDE.
DdeServerConv
Este componente fornece aplicao a habilidade de estabelecer uma converso DDE com um
aplicao cliente. Ao utilizar este componentes, sua aplicao ser uma servidor DDE. Este
componente utilizado em conjunto com o componente DDEServerItem para que sua aplicao
seja um servidor DDE completa.
DdeServerItem
O componente DDEServerItem define o tpico de uma converso DDE com outra aplicao.
Este componente utilizado em conjunto com um componente DDEServerConv.
INTERNET
Os componentes da pgina Internet permitem implementar aplicaes que utilizem
algum tipo de servio Internet.
Biblioteca de Classes
16
HTML
Controle ActiveX que implementa um visualizador HTML, com ou sem recuperao automtica
de documentos HTML e fornece interpretador HTML, assim como uma viso de uma pgina
HTML. O componente HTML pode ainda ser usado como um interpretador HTML no-visual
para analisar ou processar documentos HTML.
HTTP
Controle ActiveX que implementa o Protocolo Cliente HTTP, permitindo aos usurios
recuperarem documentos HTTP diretamente, sem possibilidade de navegao.
NNTP
Controle ActiveX que permite s aplicaes acessarem o Protocolo NNTP, possibilitando
leitura e escrita de mensagens no servidor de news
POP
Controle ActiveX que recupera correios eletrnicos de servidores UNIX ou outro servidor que
suporta o protocolo POP3.
SMTP
Controle ActiveX que permitem as aplicaes acessarem a servidores de correio eletrnico
SMTP e a capacidade de enviar mensagens.
TCP
Controle ActiveX que implementa o protocolo TCP para aplicaes cliente e aplicaes
servidoras, fornecendo fcil acesso aos seus servios.
UDP
Controle ActiveX que fornece fcil acesso aos servios do protocolo UDP (UDP). Implementa
o WinSock para cliente e servidor, e representa um ponto de comunicao utilizando servios
UDP. Pode ainda ser usado para enviar e receber dados UDP.
DATA ACCESS
De uma forma geral, os componentes da pgina Data Access representam e do
acesso aos dados armazenadas fisicamente.
17
BatchMove
Copia a estrutura de uma tabela ou os seus dados. Pode ser usado para copiar tabelas inteiras de
um determinado formato para outro.
UpdateSQL
Permite utilizar o recurso de cached updates com um DataSet de apenas leitura. Por exemplo,
poderia se utilizar um componente UpdateSQL para possibilitar a atualizao de um DataSets
abilitando a atualizao de DataSets de apenas leitura.
Provider
Fornece dados de uma aplicao multi-tiered servidora para um DataSet de uma aplicao
cliente (ClientDataSet).
ClientDataSet
utilizado como se fosse um componente DataSet na parte cliente de um aplicao multi-tiered.
RemoteServer
Em uma aplicao cliente, fornece a conexo a uma servidor de dados remoto.
Report
Permite que uma aplicao utilize relatrios desenvolvidos em geradores de relatrios
independentes tal como o ReportSmith, que era distribudo juntamente com a verso 2.0 do
Delphi.
DATA CONTROLS
A pgina Data Controls fornecem componentes que permitem construir formulrios
para trabalhar diretamente com dados (campos) que esto armazenados em tabelas de
banco de dados.
Biblioteca de Classes
18
DBRadioGroup
Grupo de botes do tipo RadioButton que apresenta um conjunto de valores que podem ser
armazenados em um campo de uma tabela.
DBLookupListBox
Apresenta um campo de uma tabela cuja lista de possveis valores provm de um campo de
outra tabela.
DBLookupComboBox
Componente do tipo Combo, que permite visualizar e editar um campo de uma tabela cuja lista
de possveis valores provm de um campo de outra tabela.
DBRichEdit
Controle de edio que permite apresentar e editar campos memo formatados.
DBCtrlGrid
Permite apresentar e editar dados de forma tabular, sendo que cada clula pode conter vrios
campos de um mesmo registro.
DBChart
Este componente desenha grficos em um formulrio utilizando uma tabela de banco de dados
como fonte de dados..
DECISION CUBE
Os componentes da pgina Decision Cube (disponveis somente na verso
Client/Server) acrescenta recursos para anlise multidimensional de dados atravs de
referncia cruzada entre tabelas de banco de dados, utilizando as poderosas
caracterstica da linguagem SQL.
QREPORT
Os componentes da pgina QReport permitem construir relatrios atravs da
definio de da definio de faixas, ttulos, cabealhos, sumrios, grupos, etc. Podese gerar relatrios a partir de qualquer tipo de DataSource: Table, Query, etc.
Durante a montagem do relatrio possvel visualiza-lo atravs do Preview.
19
QuickRep
Formulrio bsico para a construo de relatrios, onde so colocados todos componentes do
relatrio. um componente visual que possui o tamanho do papel selecionado (A4, Legal, etc.).
Um relatrio criado desenhando-se faixas e outros componentes sobre um QuickRep
conectado a um DataSet.
QRSubDetail
Faz a ligao de DataSets adicionais em um relatrio. Tipicamente utilizado para construir
relatrios do tipo Master/Detail.
QRBand
Adicione um componente QRBand em seu relatrio e configure a propriedade BandType para
especificar o seu comportamento durante a gerao do relatrio.
QRChildBand
Faixas filhas (Child Bands) so usadas como extenses das faixas regulares de um relatrio.
QRGroup
Define o inicio e o final de um grupo de registros conforme determinado atributo. utilizado
para a definio das quebras de um relatrio.
QRLabel
Imprime um texto ou outra informao que no provm de um banco de dados.
QRDBText
uma verso do componente QRLabel que imprime o valor de campos calculados e campos
texto, incluindo campos string, numrico, data e memo.
QRExpr
Imprime campos de banco de dados, clculos e textos estticos.
QRSysData
Imprime informaes do sistema, tais como data, hora, nmero da pgina, etc.
QRMemo
Imprime uma grande quantidade de texto que no provm de um campo de banco de dados
Pode ser texto esttico ou pode-se alterar durante a gerao do relatrio..
QRRichText
Permite imprimir no relatrio um texto formatado.
QRDBRichText
Permite imprimir no relatrio o texto formatado armazenado em um campo de uma tabela.
QRShape
Apresenta figuras simples tais como retngulos, crculos e linha em um relatrio.
QRImage
Apresenta uma figura em um relatrio.
QRDBImage
Imprime imagens armazenadas em campos de banco de dados.
QRCompositeReport
QRPreview
Define uma rea para a visualizao de relatrios, no formato em que iriam ser impressos.
QRChart
Permite a impresso de diversos tipos grficos.
DIALOGS
Os componentes da pgina Dialogs implementam as caixas de dilogo do Windows
95/NT. Caixas de dilogo fornecem uma interface consistente para operaes com
arquivo, tais como abertura, gravao e impresso.
Biblioteca de Classes
20
Win 3.1
Possui componentes de interface no padro Windows 3.1. Estes componentes servem
para manter a compatibilidade com as aplicaes desenvolvidas em Delphi 1.0
(Windows 3.1).
SAMPLES
Os componentes da pgina Samples so exemplos de componentes personalizados. O
cdigo fonte destes componentes esto disponveis no diretrio DELPHI
3\SOURCE\SAMPLES (instalao Default).
Biblioteca de Classes
21
Gauge
Barra retangular que preenchida da esquerda para a direita. Fornece um retorno visual sobre o
progresso de uma operao.
ColorGrid
Apresenta uma tabela de cores.
SpinButton
Semelhante ao componente UpDown. Uma diferena que o componente SpinButton permite
definir uma figura para os botes.
SpinEdit
Semelhante ao componente UpDown. Uma diferena que j apresenta um campo onde
apresentada a informao.
DirectoryOutline
Apresenta a rvore de diretrios do disco, semelhante ao que apresentado pelo Windows/NT
Explorer.
Calendar
Implementao de um calendrio.
IBEVentAlerter
ActiveX
Os componentes na pgina ActiveX so objetos completos apresentados como
exemplos. Para utiliza-los deve-se primeiro abrir um formulrio ActiveX em um
projeto ActiveX. Aps posicionar um componente em um formulrio ActiveX,
clique o boto direito do mouse para ser apresentadas as propriedades e outros
comandos.
Biblioteca de Classes
22
Parte
II
Programao Orientada
a Objetos
POO
Orientao a Objetos
O termo orientado a objetos tem sido to usado e abusado que o seu sentido
concreto se perdeu. Tem caracterizado desde modelos de administrao a mtodos de
auto-ajuda. Muitos produtos de softwares que alegam ser orientados a objetos no o
so. s vezes possuem alguns recursos baseados em objetos, outras vezes nem isso.
Toda essa confuso de conceitos fez com que ningum hoje soubesse mais o que
realmente vem a ser orientado a objetos.
A linguagem utilizada pelo Delphi (Object Pascal) uma orientada a objetos. Para
melhor entender o Delphi importante compreender os conceitos da programao
orientada a objetos (POO).
Apesar de ser um assunto muito badalado, o conceito de POO no novo. Tem quase
trinta anos de idade. Foi introduzido pela primeira vez na linguagem Simula-67.
Desde ento surgiram vrias outras linguagens com esses conceitos como SmallTalk
Eiffel. C++, a mais popular, na verdade uma linguagem hbrida. uma extenso do
C com suporte a classes e objetos, mas permite que se desenvolva programas sem
classes ou objetos.
Abstrao
o processo de extrair as caractersticas essenciais de um objeto real. A abstrao
essencial para se ter um modelo fiel da realidade. O conjunto de caractersticas
resultante da abstrao forma um tipo abstrato de dado, com informaes sobre
estado e comportamento.
A abstrao nem sempre produz os mesmos resultados. Depende do contexto onde
utilizado. Ou seja, a abstrao de um objeto por uma pessoa pode ser diferente na
viso de outra. Por exemplo, para um mecnico, um carro caracterizado pela marca,
modelo, potncia, etc. J um usurio comum o caracteriza pela cor, marca modelo,
Encapsulamento
o processo de combinar tipos de dados e funes relacionadas em um nico bloco
de organizao e s permitir o aceso a eles atravs de mtodos determinados.
Por exemplo, existe um nmero determinado de coisas que se pode fazer com um
toca-fitas. Pode-se avanar, voltar, gravar, tocar, parar, interromper e ejetar a fita.
Dentro do toca-fitas, porm, h varias outras funes sendo realizadas como acionar
o motor, deslig-lo, acionar o cabeote de gravao, liberar o cabeote, e outras
operaes mais complexas. Essas funes so escondidas dentro do mecanismo do
toca fitas e no temos acesso a elas diretamente. Quando apertamos o play o motor
ligado e o cabeote de reproduo acionado, mas no precisamos saber como isso
feito para usar o toca fitas.
Uma das principais vantagens do encapsulamento esconder a complexidade do
cdigo. Outra, proteger os dados, permitindo o acesso a eles apenas atravs de
mtodos. Dessa maneira evita-se que seus dados sejam corrompidos por aplicaes
externas.
Herana
o aproveitamento e extenso das caractersticas de uma classe j existente.
Existem muitos exemplos de herana na natureza. No reino animal, os mamferos
herdam a caracterstica de terem uma espinha dorsal por serem uma subclasse dos
vertebrados. Acrescentam a essa caracterstica, vrias outras, como Ter sangue
quente, amamentar, etc. Os roedores herdam todas as caractersticas dos vertebrados
e mamferos e acrescentam outras, e assim por diante.
Em programao, a herana ocorre quando uma classe aproveita a implementao
(estrutura de dados e mtodos) de uma outra classe para desenvolver uma
especializao dela. formada ento uma hierarquia de classes, onde cada nvel
uma especializao do nvel anterior, que mais genrico.
Polimorfismo
a propriedade de se utilizar um mesmo nome para fazer coisas diferentes.
Por exemplo, mandar algum correr pode produzir resultados diferentes dependendo
da situao. Se a pessoa estiver parada e em p, ir obedecer ordem simplesmente
correndo. Ser a pessoa estiver no volante de um carro, o resultado ser o aumento da
presso do p no acelerador.
Em programao, uma mesma mensagem poder provocar um resultado diferente,
dependendo dos argumentos que foram passados e do objeto que o receber. Por
exemplo: o envio de uma instruo desenhe() para uma subclasse de
polgono, poder desenha um tringulo, retngulo, pentgono, etc. dependendo
da classe que a receber.
O que um Objeto?
Objetos so a base da tecnologia orientada a objetos. Consistem de modelos
(abstraes) de objetos reais, com seus estados e seus comportamentos.
Qualquer objeto real pode ser abstrado, filtrando-se seus estados e comportamentos.
Orientao a Objetos
25
Objeto
Estado
Comportamento
Carro
Gato
Caneta
Toca-fitas
acelera,
Tudo o que o objeto de software sabe (seu estado) e tudo o que ele pode fazer
(comportamento) determinado pelas suas variveis e mtodos.
Vamos representar o modelo de um automvel atravs de um objeto de software. As
variveis indicam o seu estado atual: Velocidade = 77 Km/h, marcha = 4 e
cor = vermelho. DPartida(), acelera(), trocaMarcha() e
freia() so mtodos que podem mudar o estado das variveis (velocidade e
marcha). O objeto que vamos construir se chamar ferrari.
Orientao a Objetos
26
27
O que so Classes?
Classes so prottipos utilizados para construir objetos. As caractersticas de estado e
comportamento do objeto ferrari, ilustrado nos exemplos anteriores, so
caractersticas de qualquer automvel que sai da fbrica. Essas caractersticas so
definidas nas classes.
A figura abaixo representa uma classe. Observe a semelhana com o diagrama que
utilizamos para representar os objetos. A classe no um objeto pois no possui um
estado, nem um comportamento especfico. Ela no algo que existe e que possua
estados.
Para produzir todos os automveis que saem da fbrica, poderamos definir uma
classe chamada Automvel. Esta classe teria a declarao das variveis que sero
utilizadas para armazenar a cor, velocidade e marcha, alm da implementao dos
mtodos que cada automvel deve ter.
28
e podem dar partida, acelerar, freiar e trocar marcha. Porsche pode ser vermelho e
estar a 193 Km/h, enquanto fusca pode ser preto e estar parado.
A grande vantagem de se usar classes a reutilizao do cdigo. Toda a estrutura de
um objeto definida na classe, que depois utilizada quantas vezes for necessrio
para criar vrios objetos.
Herana
No bastasse a reutilizao do cdigo proporcionado pelas classes, na criao de
objetos, a POO vai mais longe e define meios de permitir em uma classe, a
reutilizao do cdigo de outras classes.
As caractersticas cor, velocidade, marcha, etc. podem estar definidas em uma classe
chamada de Veculo Motorizado, que declara mtodos trocaMarcha(),
dPartida(), acelera(), etc. Esses mtodos e varveis podem ser herdadas
pelas classes Automvel, Motocicleta e Caminho que so veculos
motorizados.
29
Delphi e a POO
Para se definir uma classe no DELPHI deve-se empregar a seguinte sintaxe:
type
classe = class(superclasse)
atributos
mtodos
end;
Qualificadores de Acesso
No DELPHI pode-se definir o tipo de acesso que uma classe-objeto ter sobre os
atributos ou mtodos de outra classe-objeto. Os principais qualificadores de acesso
em DELPHI so:
Private: as declaraes feitas nesta rea no podem ser acessadas por outras
classes-objetos;
Protected: as declaraes feitas nesta rea s podem ser acessadas pelas
classes filhas da classe-objeto;
Public: as declaraes feitas nesta rea podem ser acessadas por qualquer
outra classe-objeto.
Sendo assim, uma definio mais completa da sintaxe de uma classe, em DELPHI :
Orientao a Objetos
30
classe = class(superclasse)
private
{declaraes privativas}
protected
{declaraes protegidas}
public
{declaraes pblicas}
end;
Construtores e Destrutores
Quando uma nova classe definida em DELPHI necessrio declarar construtores.
Um construtor permite criar a instncia de uma classe, ou seja, um objeto.
Convenciona-se chamar um construtor pelo nome de Create. Um construtor
denotado pela palavra Constructor.
Ao contrrio dos construtores, os destrutores so utilizados para liberar a instncia
da classe. Ao destrutor convenciona-se o nome de Destroy. Um destrutor denotado
pela palavra Destructor.
Sendo assim, uma nova definio para a classe TPessoa poderia ser:
type
TPessoa = class(TObject)
private
Nome : string;
Endereco : string;
public
procedure AtualizarDados(Nome, Endereco : string);
protected
constructor Create;
destructor Destroy;
end;
O constructor Create foi colocado na rea protected. Isto significa que ele s pode
ser acessado pelas subclasses da classe TPessoa. Deste modo, a classe TPessoa nunca
Orientao a Objetos
31
poderia ser um objeto, pois seu construtor no pode ser acessado por outras classesobjetos.
Poderamos considerar esta definio como definitiva. No entanto, falta agora a
implementao dos mtodos AtualizarDados e Create.
Implementao de Classes
A implementao das classes deve ser feita na rea de implementation de uma
UNIT, e segue as regras normais da linguagem Turbo Pascal. A seguir apresentada
a implementao completa da classe TPessoa.
unit Pessoas;
interface
type
TPessoa = class(TObject)
protected
Nome
: string;
Endereco : string;
constructor Create;
destructor Destroy:
public
procedure AtualizarDados (Nome, Endereco: string);
end;
implementation
constructor TPessoa.Create;
begin
inherited Create;
Nome := ;
Endereco := ;
end;
destructor TPessoa.Destroy;
begin
inherited Destroy;
end;
procedure TPessoa.AtualizarDados(Nome, Endereco: string);
begin
Self.Nome := Nome;
Self.Endereco := Endereco;
end;
end.
Orientao a Objetos
32
Constructor Create
No constructor Create podem ser omitidos as inicializaes dos atributos. Eles
devem aparecer apenas quando deseja-se inicializar um atributo com um
determinado valor.
Inherited
A clusula inherited, no constructor Create, indica que o mtodo Create foi herdado
da classe-me (no caso, TObject).
Self
A clusula self, na procedure AtualizarDados, indica que o atributo referenciado o
da classe, e no a varivel passada como parmetro.
Orientao a Objetos
33
Object Pascal
A linguagem Object Pascal proveniente da linguagem Pascal, que durante a dcada
de 80 fez grande sucesso comercial atravs do Turbo Pascal. A estrutura bsica da
linguagem, a maioria de seus comandos e sua sintaxe elegante ainda permanecem.
Porm, com a evoluo para a programao orientada a objetos, a forma de se
trabalhar com a linguagem e algumas de suas caractersticas foram sendo alteradas.
Passou-se do Turbo Pascal 7 para o Turbo Pascal para Windows, que no fez o
mesmo sucesso.
Com o Delphi, a linguagem Pascal assume outra vez o lugar de destaque que sempre
mereceu. Agora com o nome Object Pascal, muitas de suas caractersticas, que
muitos pensam ser fruto de atualizaes posteriores, na verdade j faziam parte da
linguagem padro, idealizada e concebida pelo seu criador, Niklaus Wirth.
Comentrios
Como ponto inicial, voc deve saber como fazer comentrios em seu programa
Pascal. O Delphi suporta trs tipos de comentrios:
{ Comentrios utilizando chaves }
(* Comentrios usando parente e asterisco *)
// Comentrios no estilo C++
Variveis
A linguagem Object Pascal requer que se declare todas as variveis, antes de se
iniciar uma procedure, function ou program. Isto significa que o cdigo escrito em
Object Pascal, obedece a uma estrutura um pouco mais rgida do que em outras
linguagens:
Procedure Foo;
Var
x, y: integer;
f: double;
Begin
X := 1;
Inc(x);
y := 2;
// ...
end;
Dica
A utilizao de letras MAISCULAS e minsculas pode ser til para dar clareza aos
nomes de variveis, procedures, functions, etc. Por exemplo, a seguinte declarao
Procedure estaprocedurenaofaznada;
difcil de ler. Ficaria bem melhor da seguinte forma:
Procedure EstaProcedureNaoFazNada;
Note como a Object Pascal permite voc agrupar mais de uma varivel de mesmo
tipo juntas em uma mesma linha:
x, y: Integer;
Constantes
As constantes so definidas aps a clusula const, similar linguagem C, como no
exemplo abaixo:
const float AdecimalNumber = 3.14;
const int i = 10;
const char *ErrorStrng = Perigo, perigo, perigo!;
Object Pascal
35
Type
A = array[1..2] of integer;
Const
W: word = Sizeof(Byte);
Var
I: integer = 8;
J: SmallInt = ord(a);
L: LongInt = Trunc(3.14159);
X: ShortInt = Roud(2.17828);
B1: byte = High(A);
B2: byte = Low(A);
C: Char = Chr(46);
Operadores
Os operadores so smbolos que habilitam a manipulao de todos os tipos de dados.
Em Object Pascal os operadores esto definidos basicamente em: operador de
atribuio, operadores aritmticos, operadores lgicos, operadores relacionais, etc.:
Operador de Atribuio
O operador de atribuio utilizado para alterar o contedo das variveis. Para
atribuir um valor a uma varivel utiliza-se o operador :=.
PI := 3.1415;
Mens := Pressione OK para sair
Operador de Comparao
O Object Pascal utiliza o operador = para realizar comparaes lgicas entre duas
expresses ou dois valores.
if X = Y then
...
Operadores Lgicos
O Pascal utiliza as palavras and, or e not como operadores lgicos.
If (condio1) and (condio2) then
FazIsso
While (condio1) or (condio2) do
FazAquilo
If not (condio) then
FacaAlgumaCoisa;
Operador
Smbolo
Atribuio
:=
=
Comparao
Object Pascal
36
Diferena
Menor
Maior
Menor ou igual
Maior ou igual
e lgico
ou lgico
not lgico
<>
<
>
<=
>=
and
or
not
Operadores Aritmticos
De forma geral, os operadores aritmticos so os mesmos existentes em outras
linguagens de programao. A diferena que o Pascal possui diferentes operadores
de diviso. O operador div (diviso inteira) trunca automaticamente o resultado
final da diviso.
Operador
Smbolo
Adio
+
*
/
div
mod
Subtrao
Multiplicao
Diviso Real
Diviso Inteira
Resto da Diviso
Ateno
Inc(VInt, 3)
Dec(Vint, 5)
end.
Tipos de Dados
A definio de tipos de dados corretos para as variveis muito importante, pois
alm de permitirem a economia de memria, eles tem, em muitos casos, de ter
compatibilidade com os seus respectivos tipos de dados do Windows.
Object Pascal
37
Tamanho
(em bytes)
Domnio
Byte
0..255
ShortInt
-128..127
Word
0..65535
SmallInt
-32768..32768
Longint
-2147483648..2147483647
Tamanho
(em bytes)
Domnio
Cardinal
-32768.. 32767
Integer
0.. 65636
Cardinal
0.. 2147483647
Integer
-2147483648.. 2147483647
Tamanho
(em bytes)
Domnio
Single
Real
Double
Extended
10
Comp
-26310 .. 263-10
Currency
-922337203685477.5808..
922337203685477.5807
O tipo Currency o tipo MOEDA. Ele tem preciso de quatro casas decimais e
compatvel com os bancos de dados que representam dinheiro.
Tamanho
(em bytes)
Armazenamento
Boolean
1 byte
ByteBool
1 byte
WordBool
uma palavra
LongBool
38
Tamanho
(em bytes)
Armazenamento
Char
1 caracter ANSI
AnsiChar
1 caracter ANSI
WideChar
1 caracter Unicode
Tamanho
(em bytes)
Armazenamento
ShortString
255
ANSIChar
AnsiString
at 3 Gb
ANSIChar
255 ou at 3 Gb
ANSIChar
at 1,5 Gb
WideChar
String
WideString
Tipo PChar
O tipo PChar permite tambm que voc manipule strings. Quando voc utiliza uma
varivel com o tipo Pchar, o Delphi assume que todo o gerenciamento de alocao e
liberao de memria ser realizado pelo cdigo do programa.
As variveis do tipo PChar possuem como delimitador de fim de string o caracter
especial #0.
Tipo Variant
O tipo de dados variant um tipo nico que pode manipular diferentes tipos de
dados. O tipo variant pode manipular strings, inteiros, reais, entre outros. Porm uma
varivel do tipo variant no poder manipular tipos de dados dinmicos, como, por
exemplo, os ponteiros (pointer) e as classes de dados (os objetos). Exemplo
Object Pascal
39
...
Var
V1, V2, V3: Variant;
Begin
V1 := 1200;
V2 := Borland Delphi;
V3 := 3.1415;
V1 := V1 + V2 + V3;
end.
Note que para o mesmo tipo foram atribudos trs diferentes tipos. Portanto, deve-se
tomar cuidado quando realizar operaes envolvendo este tipo de dado.
No exemplo acima, o contedo da varivel V1 ser igual a 1200Borland
Delphi3.1415.
Veja que neste caso o compilador ir converter todos as variveis envolvidas na
operao para o tipo String e realizar uma concatenao.
Arrays
A linguagem Object Pascal permite criar arrays (matrizes) de qualquer tipo. Por
exemplo, uma varivel declarada como Array com oito nmeros inteiros:
Var
A: Array[0..7] of integer;
Records
O tipo record permite que se agrupe em uma nica varivel, um conjunto de tipos de
dados diferentes. A aplicao deste tipo de dado bastante semelhante ao conceito
de registro, ou seja, ou seja, uma varivel do tipo record composta por vrios
campos.
Record tipo estruturado em Pascal, equivalente ao struct do C.
Object Pascal
40
{ Pascal }
/* C */
Type
typedef struct {
MyRec = record
int i;
I:integer;
D:double;
double d;
}MyRec;
end
Quando se trabalha com records, utiliza-se o caracter ponto para acessar cada campo.
...
var
N: MyRec
Begin
N.i := 23;
N.d := 3.4;
end;
Pointers
O tipo de dado Pointer uma varivel que armazena um endereo de memria, e no
um valor, como estamos acostumados a trabalhar. Um exemplo de varivel do tipo
pointer o tipo Pchar, mostrado anteriormente. Existem duas formas de
implementao para o tipo pointer: pointer tipados e pointers no tipados.
Uma varivel pointer tipada quando se conhece o tipo de dado que est
armazenado no endereo de memria contido na varivel pointer.
...
var
PP1: ^Integer;
begin
New(PP1);
end.
Object Pascal
41
Objetos
Pode-se dizer que um objeto um record que contm functions e procedures.
type
TobjetoFilho =
class( TObjetoPai )
V: Integer;
procedure FazNada;
end;
Estruturas de Deciso
No Object Pascal existem dois comandos para tomar decises durante a execuo de
um programa. So as instrues IF e CASE.
O comando IF
A instruo IF permite controlar a execuo de outras instrues (ou bloco de
instrues) do programa, dependendo do valor de uma varivel ou expresso
booleana. Quando a expresso booleana tem o valor True, a instruo (ou bloco) que
segue a palavra THEN executada. Quando a expresso booleana tem o valor False,
a instruo (ou bloco) que segue a palavra ELSE executada.
IF expresso booleana THEN instruo;
IF expresso booleana THEN
instruo1
ELSE
instruo2;
IF expresso booleana THEN
BEGIN
instruo;
...
instruo;
END
ELSE
BEGIN
instruo;
...
instruo;
END;
expresso booleana: constante, varivel ou expresso boleana.
instruo:
Ateno
Se uma instruo if possui vrias condies (expresses booleanas) estas devem vir
entre parntesis.
if (x=7) and (y=8) then ...
Object Pascal
42
O Comando CASE
O comando CASE equivalente a uma srie de comandos IF. Se a varivel de
controle igual a uma das constantes de uma lista, a instruo ou bloco de instrues
associada lista executada. Se a varivel de controle no igual a nenhuma das
constantes, a declarao case no ter nenhum efeito e o computador passa para
instruo seguinte do programa.
CASE varivel-controle OF
constante1: instruo1;
constante2: instruo2;
...
ELSE
instruo1;
END;
varivel-controle:
constantes:
Estruturas de Repetio
Na linguagem Pascal esto disponveis trs estruturas de repetio que fornecem uma
grande flexibilidade na representao de um processo repetitivo. Um loop executa
uma instruo (ou bloco de instrues) repetidamente.
As trs estruturas de repetio em Pascal so representadas pelas palavras reservadas
FOR, WHILE e REPEAT.
O Comando FOR
O comando FOR usado para repetir vrias vezes a mesma instruo ou bloco de
instrues. Durante a execuo, uma varivel usada como ndice assume uma srie
de valores, desde um dado valor inicial at um valor final. Na forma FOR-TO, o
ndice assume valores crescentes; na forma FOR-DOWNTO, o ndice assume valores
decrescentes. A forma geral da declarao a seguinte:
FOR ndice := inicial TO final DO instruo
Object Pascal
43
inicial:
final:
instruo:
O Comando REPEAT
A instruo REPEAT faz com que uma instruo (ou bloco de instrues) seja
executada repetidas vezes, at que uma certa condio seja satisfeita. Observe que na
forma composta da declarao, as palavras BEGIN e END no so usadas para
delimitar as declaraes que fazem parte do loop; este sempre comea pela palavra
REPEAT e termina na palavra UNTIL.
REPEAT instruo UNTIL condio;
REPEAT
instruo1;
instruo2;
...
UNTIL condio;
condio
instruo
Object Pascal
44
O Comando WHILE
O loop WHILE semelhante ao loop REPEAT. A principal diferena est no fato de
que o loop REPEAT sempre executado pelo menos uma vez; o loop WHILE pode
no ser executado nenhuma vez.
WHILE condio DO instruo.
WHILE condio DO
BEGIN
instruo1;
instruo2;
...
END;
condio
instruo
Procedimentos e Funes
Procedimentos (procedures) e Funes (functions) so partes do programa que
podem executar uma tarefa especfica quando chamamos de um dos mdulos do
programa. Aps a execuo do procedimento ou funo, o controle da execuo
retorna ao mdulo do programa que executou a chamada.
Os procedimentos e funes so executados de forma bastante semelhante, porm,
uma funo retorna um valor de retorno, enquanto que um procedimento apenas
executa um bloco de comandos.
Procedure ReajustaSalario;
begin
if Salario > 600 then
Salario := Salario * 1.05
else
Salario := Salario * 1.10;
end;
45
begin
begin
if HouveReajuste then
ShowMessage(Reajuste);
end;
Object Pascal
46
Parmetros Constantes
Se o valor de um parmetro no vai ser alterado durante a execuo da procedure ou
function, pode-se declara-lo como constante atravs da clusula conts. A palavra
const previne qualquer modificao de valor e tambm gera um cdigo otimizado.
procedure ApresentaMensagem(const Mens: String);
Para se trabalhar com uma array aberta dentro da procedure ou function pode-se
utilizar as funes High(), Low() e SizeOf() para se obter informaes sobre a
array.
Object Pascal
47
Units
As Units so mdulos de programa onde so agrupados os procedimentos e funes
que compem a aplicao Delphi. Uma Unit composta de reas pr-definidas.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
end.
A rea Unit
Nesta rea encontra-se o incio da Unit, determinada pela palavra Unit, seguida pelo
seu identificador (nome). O nome da unit ser gerado pelo Delphi e ter o mesmo
nome que o arquivo armazenado em disco. Isto . inicialmente o Delphi gera
automaticamente o nome da Unit. Ao ser gravado no disco, a Unit assume o nome
dado ao arquivo.
Object Pascal
48
A rea Interface
A rea de interface encontra-se sempre aps a rea da Unit e antes da rea de
implementation. Esta rea utilizada para realizar as declaraes de variveis,
constantes, tipos, procedimentos e funes, etc. As declaraes posicionadas nesta
rea podero ser compartilhadas por outras Units ou pelo mdulo principal da
aplicao.
Nesta rea somente podero aparecer declaraes, nunca aparecer linhas de
comando.
A rea Implementation
Nesta rea ser encontrado basicamente a implementao dos procedimentos e
funes. Pode ainda conter declaraes de variveis, constantes, tipos, etc. que no
podero ser compartilhados por outras Units, nem pelo prprio mdulo principal da
aplicao. Isto e, os dados declarados na rea implementation so dados locais,
somente visveis dentro da Unit na qual foram declarados.
reas Opcionais
A rea Initialization
Esta rea, quando existente, deve conter linhas de comando responsveis pela
inicializao de variveis, objetos, etc., declarados dentro da Unit. A execuo desta
rea realizada antes da execuo do mdulo principal da aplicao e ocorre uma
nica vez.
A rea Finalization
Esta rea deve aparecer aps a rea Initialization e deve conter linhas de comandos
relativas a desalocao de memria de variveis do tipo Pointer ou Objetos. A
execuo desta rea realizada s sua aplicao est sendo encerrada.
A clusula Uses
A clusula uses serve para que possamos tornar acessveis as variveis, constantes,
procedimentos e funes declarados na rea Interface de uma determinada Unit. A
clusula uses deve aparecer dentro da Unit na qual deseja-se manipular dados
declarados fora do se escopo.
program Prog;
uses Unit2;
const a = b;
begin
end.
unit Unit2;
interface
uses Unit1;
const b = c;
implementation
end.
Object Pascal
49
unit Unit1;
interface
const c = 1;
implementation
const d = 2;
end.
Referncia Circular
A clusula uses pode aparecer na rea interface ou na rea implementation, sem
interferir em desempenho ou tamanho da aplicao. Porm, existe um caso em que se
torna obrigatrio a declarao da clusula uses dentro da rea implementation da
Unit. Isto acontece quando duas Units fazem referncia entre si. Este processo
conhecido como Referncia Circular.
Unit UnAcessa
Unit UnDeclara
Interface
Interface
var B: Integer;
var A: Integer;
Implementation
Implementation
uses UnDeclara;
uses UnAcessa;
procedure Inicia;
procedure Reset;
begin
begin
A := 10;
B := 0;
end;
end;
end.
end.
No exemplo acima mostra um caso de referncia circular que foi solucionada devido
declarao da clusula uses ter sido feita na rea implementation. Caso a
declarao da clusula uses tivesse sido feita na rea interface, seria apresentado um
erro durante a compilao
Excees
Excees so erros que ocorrem durante a execuo do programa. Existem diversos
tipos de excees, que podem ocorrer nas seguintes operaes:
alocao de memria;
criao e utilizao de objetos;
clculo de expresses matemticas;
manipulao de arquivos;
utilizao de recursos do sistema operacional.
Algumas das principais caractersticas das excees no DELPHI so:
a instncia da exceo fornece informaes sobre o tipo de problema ocorrido;
usurio pode definir suas prprias excees, utilizando a classe Exception;
para forar a execuo de uma exceo utiliza-se a clusula Raise;
os tipos de exceo normalmente devem iniciar com a letra E.
uma exceo gera um evento denominado OnException.
Object Pascal
50
No entanto, pode ocorrer mais de uma exceo dentro de um mesmo bloco. Neste
caso necessrio utilizar o comando on ... do.
On ... Do
O comando on ... do permite tratar mais de um tipo de exceo de um bloco try ...
except.
on
{Tipo de exceo}
do
{Bloco de comandos da exceo}
Object Pascal
51
Tipos de Exceo
Os principais tipos de exceo da RTL (RunTime Library) do DELPHI, a serem
tratadas nos blocos on ... do so:
Nome
Descrio
EaccessViolation
Ocorre quando se tenta acessar uma regio de memria invlida (ex: tentar
atribuir valor a um ponteiro cujo contedo nil).
EconvertError
EdivByZero
EinOutError
EintOverFlow
EinvalidCast
EinvalidOp
EinvalidPointer
EoutOfMemory
EoverFlow
ErangeError
ocorre quando uma expresso excede os limites para a qual foi definida (ex:
tentar atribuir 11 ao ndice de um vetor que pode ir no mximo at 10).
EstackOverflow
Eunderflow
EzeroDivide
Por exemplo, garantir que um arquivo ser fechado mesmo quando ocorrer uma
exceo.
Object Pascal
52
...
assign (arq, teste.txt);
try
reset(arq)
// outros comandos sobre o arquivo
finally
close (arq)
end;
...
Object Pascal
53
Projetos Delphi
Os Arquivos do Projeto
Um projeto Delphi composto por vrios arquivos relacionados entre si. Alguns
destes arquivos so gerados durante o desenvolvimentos, quando est se definindo os
formulrios da aplicao. Outros arquivos so gerados na compilao da aplicao.
Note que neste arquivo existe uma clusula uses contendo a relao de uma Unit. O
arquivo de projeto ir listar todas as Units que compem a aplicao, estando elas
relacionadas a formulrios ou no. Outro ponto que vale ressaltar a diretiva de
compilao {$R *.RES}. As chaves seguidas pelo caracter $ indicam uma diretiva de
compilao, ou seja, um determinado comportamento do compilador Delphi. Neste
caso, esta diretiva indica que o compilador ir adicionar os arquivos com extenso
.RES (arquivos de recurso), quando da link-edio do projeto.
55
Arquivos Compilados
Aps a compilao de um projeto, sero gerados mais dois tipos de arquivos. Os
arquivos com extenso .DCU (Delphi Compiled Unit) e o arquivo com extenso
.EXE. Um arquivo .dcu o resultado da compilao dos arquivos .pas e .dfm. O
arquivo executvel .exe o resultado da compilao de todos os arquivos do projeto.
As Opes de um Projeto
O comando de menu Project | Options, ir apresentar uma caixa de dilogo contendo
algumas opes relativas ao seu projeto. Voc poder definir desde o formulrio
principal da aplicao, at a forma de como o projeto ser compilado.
A Pgina Forms
Na pgina Forms possvel selecionar o formulrio principal da aplicao e para
definir quais os formulrios sero criados automaticamente pelo Delphi.
Main form: Indica qual o formulrio principal da sua aplicao. Este ser o
primeiro formulrio apresentado quando se executa a aplicao. Atravs do
ComboBox possvel alterar a definio do formulrio principal da aplicao.
Normalmente o formulrio principal gerado automaticamente. Isto , ele est
presente na lista Auto-create forms.
Auto-create forms: Contm a lista dos formulrios gerados automaticamente
pelo Delphi quando sua aplicao for executada.
Available forms: Contm a lista dos formulrios que sero gerados pela
aplicao. Para fazer uso dos formulrios que esto sendo mostrados nesta
lista eles devem ser instanciados anteriormente.
Projetos Delphi
56
A Pgina Application
Nesta pgina poder definir-se um ttulo e um cone para a aplicao.
Title: Especificao de um ttulo para a sua aplicao. Este ttulo ser
apresentado quando sua aplicao estiver minimizada.
Help file: Associao de um arquivo de help (.hlp) que ser utilizado na sua
aplicao. O boto Browse ir abrir uma caixa de dilogo para que voc
localize o arquivo de help.
Icon: Especificao de um cone para a aplicao.
A Pgina Compiler
Define as opes de compilao de seu projeto. Entre as opes disponveis, pode-se
indicar se sero realizadas checagem de limite de variveis, se sero compiladas
informaes para depurao do projeto, etc. Todas as opes desta pgina so
diretivas de compilao que tambm podero ser colocadas diretamente no cdigo da
unit.
A Pgina Linker
Contm as indicaes de como os arquivos do projeto sero link-editados. Nesta
pgina indica-se se o compilador Delphi ir gerar um arquivo externo com
mapeamento dos arquivos linkados, indicar tambm se o produto final da linkedio ser uma unit compilada (.dcu) ou um arquivo objeto (.obj), e mais diversas
outras opes.
A Pgina Directories/Conditionals
Utiliza-se esta pgina para definir onde os seus arquivos compilados sero
armazenados e para definir um smbolo de compilao. Pode-se decidir, de acordo
com o smbolo de compilao, qual a parte do cdigo ser compilada.
A Pgina Packages
Packages so arquivos que contm vrias classes pr-definidas pelo Delphi, como,
por exemplo, botes, forms, tables, etc. O nome package uma nova designao para
VCL Visual Component Library.
Voc poder indicar quais os packages que estaro disponveis em tempo de
desenvolvimento e quais os que sero requisitados em tempo de execuo. Com o
controle dos packages, consegue-se reduzir o tamanho do arquivo executvel, pois s
sero compilados os packages que fazem parte da sua aplicao.
Projetos Delphi
57
Parte
III
Banco de Dados
O que um Alias ?
As aplicaes que trabalham com tabelas de banco de dados podem referenciar estas
tabelas utilizando o caminho (path) onde elas esto posicionadas no disco. Para cada
tabela representada na aplicao definido o caminho e o arquivo que contm os
dados da tabela.
60
Apesar de funcionar sem problemas, essa forma de implementao faz com que a
aplicao fique dependente da pasta (diretrio) onde os dados esto localizados. Se
os dados no estiverem exatamente na pasta definida na aplicao, esta no
funcionar.
61
Desta forma, caso seja alterada a pasta onde esto localizados os dados da aplicao
basta alterar a definio do Alias para que a aplicao continue funcionando
normalmente.
BDE Administrator
Para que se consiga acessar bases de dados a partir do Delphi, faz-se necessrio a
criao de referncias. Estas referncias so conhecidas por Alias, e so criadas em
um aplicativo chamado BDE Administrator.
O BDE Administrator permite:
Configurar o Borland Database Engine (BDE).
Configurar os drivers STANDARD (Paradox e dBASE/FoxPro), os drivers
SQL, Access e tambm criar e configurar drivers ODBC.
Criar e manter Alias de banco de dados.
A Pgina Databases
Mostra os alias dos bancos de dados disponveis.
62
A Pgina Configuration
Permite adicionar e configurar drivers ODBC, configurar drivers padro e drivers
SQL e ainda configurar o Borland Database Engine (BDE).
DataBase Desktop
O DataBase Desktop uma ferramenta do DELPHI para manipulao de Banco de
Dados. Ela til principalmente para a criao, visualizao, modificao e consulta
de tabelas nos formatos Paradox, dBASE e SQL.
63
Ser apresentado uma janela para a definio do tipo de tabela que se deseja criar.
Clique o boto OK. Neste instante devem ser definidos os atributos dos campos,
como segue:
Field Name: nome do campo;
Type: tipo do campo. Clicando o boto direito do mouse pode-se selecionar o
tipo do campo;
Size: define o tamanho do campo. S disponvel para alguns tipos;
Key: define campos-chave para a tabela.
Ainda nesta tela pode-se definir:
Table properties: define caractersticas gerais dos campos da tabela;
Required Field: define se o campo tem um valor requerido;
Minimum Value: valor mnimo para o campo;
Maximum Value: valor mximo para o campo;
Default Value: valor padro para o campo;
Picture: define o formato de entrada do campo.
Delphi com Banco de Dados
64
Data Module
O Data Module um formulrio especial que permite centralizar os componentes de
controle de banco de dados. Suas principais vantagens so:
permite que toda a aplicao utilize os mesmos componentes de controle de
dados, evitando duplicao de componentes;
garantem o uso correto das tabelas, pois elas no precisam ser recriadas em
cada formulrio;
permitem definir novos eventos ou mtodos sobre as tabelas que sejam
comuns em toda a aplicao.
65
66
TUTORIAL
.
Sero vistas aqui as etapas para construo de uma aplicao Delphi. Como
exemplo ser utilizado um sistema comercial simplificado, que se utiliza de
tabelas de banco de dados. A seqncia com que essas etapas so apresentadas
serve apenas para a conduo didtica na elaborao do exemplo proposto, no
tem pretenso de metodologia. Pelo contrrio. A forma com que sero
implementadas algumas caractersticas do nosso sistema-exemplo se justifica
apenas por uma questo de gosto pessoal.
1
Definindo o Sistema
sempre bom lembrar que, antes de sentar-se em frente ao micro e sair
programando, a anlise do sistema e a modelagem de dados ainda so fundamentais
para o sucesso de um projeto de sistema. muito difcil para um programador
compulsivo ficar parado elaborando diagramas, perdendo tempo rabiscando
coisas que j esto claras em sua cabea. Esse pensamento o caminho mais curto
para aqueles sistemas no acabam nunca.
Sofisticados recursos de interface no conseguem ajeitar um sistema mal
elaborado.
Na elaborao de sistemas que envolvam Banco de Dados, no se deve esquecer de
toda a teoria que envolve esta rea. Modelagem de dados, normalizao, etc., foram e
esto sendo estudadas para serem usadas. No se deve elaborar novas teorias ou um
jeitinho todo seu de se fazer as coisas. Pelo menos no durante o desenvolvimento
um sistema importante.
Toda a papelada gerada durante a anlise do sistema, se bem padronizada, pode
servir como documentao do sistema ainda ser um ponto de partida para a
elaborao dos manuais. Assim o seu sistema continuar funcionando caso o analista
ou o programador arranjar outro emprego.
O Sistema
O sistema que ser utilizado como exemplo serve para emisso de notas fiscais. Ele
ter o nome (otimista) de SisFat, e ter as seguintes atribuies:
Controle de Produtos;
Controle de Vendedores;
Elaborao e emisso de Notas Fiscal.
As Tabelas
As informaes necessrias esto divididas em quatro tabelas de banco de dados
como definidas abaixo:
PRODUTO
VENDEDOR
NotaFiscal
ItemNota
Cdigo
Cdigo
Nmero
Nota
Descrio
Nome
Data
Item
Quantidade em estoque
Data de admisso
Vendedor
Produto
Preo de compra
Preo de venda
Quantidade
2
Organizando os Arquivos
Definido o sistema, iremos agora ao computador comear a programar!!! A primeira
coisa a fase definir uma nova pasta (diretrio) onde sero gravados os dados e os
programas do novo sistema.
Um sistema pode conter centenas de arquivos referentes aos programas e outras
centenas referentes aos dados. Portanto, uma boa prtica criar uma pasta de
trabalho para a organizao dessa grande quantidade de arquivos.
Criando Diretrios
Crie uma Pasta (diretrio) com o nome do sistema (SisFat).
importante separar os arquivos que se referem aos dados (tabelas) dos diversos
tipos de arquivos referentes aos programas. Para isso, na pasta SisFat, crie duas
outras pastas: Dados e Programas.
Criando um Alias
Para a aplicao proposta, vamos criar um Alias chamado Faturamento que
referencia a pasta de dados onde sero gravadas as tabelas que iremos criar adiante.
Passo 1
Na pgina Databases do BDE Administrator execute a opo New do menu Object.
Passo 2
Ser apresentada uma janela para a seleo do driver de banco de dados. Selecione
STANDARD pois iremos trabalhar com tabelas Paradox.
Aps digitar OK, ser criado um novo Alias com o nome STARDARD1. Renomeie
o Alias com o nome Faturamento.
Passo 3
Em Definition (lado direito da janela) preencha o atributo Path com o caminho onde
sero posicionadas as tabelas de dados da aplicao: C:\SisFat\Dados. Se preferir,
clique o mouse nos trs pontos que aparecem no atributo para utilizar uma caixa de
dilogo para auxiliar na procura do diretrio de dados.
Passo 4
Feche o DBE Administrator
Construindo uma aplicao Delphi
70
Responda Yes para salvar o Alias. Como pode ser visto, todos os Alias so gravados
no arquivo
C:\Arquivos de Programas\Borland\Common Files\BDE\IDAPI32.CFG
3
Criando Tabelas
DataBase Desktop
O DataBase Desktop uma ferramenta para manipulao de Banco de Dados. Ela
til principalmente para a criao, visualizao, modificao e consulta de tabelas
nos formatos Paradox, dBASE e SQL.
PASSO 2
Neste instante devem ser definidos os atributos dos campos:
Field Name: nome do campo;
Type: tipo do campo. Clicando o boto direito do mouse pode-se selecionar o
tipo do campo;
Construindo uma aplicao Delphi
71
Produto.db
Type
Size
Codigo
Descricao
40
QtdEstoque
PrecoCompra
PrecoVenda
NotaFiscal.db
Type
Numero
Data
Vendedor
Size
Key
*
Key
*
Vendedor.db
Type
Size
Codigo
Nome
40
DataAdmissao
ItemNota.db
Type
Size
Key
*
Key
Nota
Item
Produto
Quantidade
PASSO 3
Clicando no boto Save As, deve aparecer uma caixa de dilogo para que se possa
salvar a tabela em disco. D um nome tabela e clique no boto Salvar.
Ateno
72
4
Iniciando um Projeto
Ao iniciar o Delphi, apresentado um projeto chamado Project1 com um formulrio
chamado Form1.
Para comearmos a partir do zero, feche (sem salvar) o formulrio utilizando o
comando do menu File|Close. Desta forma teremos apenas o projeto sem nenhum
formulrio. Agora salve o projeto atravs do comando File|Save Project As. Um
arquivo de projeto possui a extenso .dpr (Delphi Project).
Ateno
Verifique com ateno a pasta onde ser gravado o projeto. No nosso exemplo os
arquivos que no se referem s tabelas devem ser gravados na pasta
C:\SisFat\Programas.
Faturamento
DatabaseName
dbFaturamento
Name
dbFaturamento
Connected
True
PASSO 3
Ponha um componente Table na janela. O componente Table tambm est
localizado na pgina DataAccess da Paleta de Componentes
73
dbFaturamento
TableName
Produto
Name
tbPRODUTO
Active
True
PASSO 4
Acrescente um componente DataSource no Data Module.
Altere as seguintes propriedades:
Properties
DataSet
tbPRODUTOS
Name
dsPRODUTO
PASSO 5
Conforme os passos 3 e 4, acrescente mais trs componentes Table e mais trs
componentes DataSource com as seguinte as propriedades:
Properties
Properties
DatabaseName
dbFaturamento
DataSet
tbVENDEDOR
TableName
Vendedor
Name
dsVENDEDOR
Name
tbVENDEDOR
Active
True
Properties
Properties
DatabaseName
dbFaturamento
DataSet
tbNotaFiscal
TableName
NotaFiscal
Name
dsNotaFiscal
Name
tbNotaFiscal
Active
True
Properties
Properties
DatabaseName
dbFaturamento
DataSet
tbItensNota
TableName
ItensNota
Name
dsItensNota
Name
tbItensNota
Active
True
PASSO 6
Salve o Data Module utilizando o comando File|Save As. O nome do arquivo ser
dmFaturamento.
Ateno
74
5
Transformando campos em objetos
Pode-se dizer que a funo de um componente Table representar internamente
aplicao uma tabela gravada no disco, permitindo que a aplicao consiga
referenci-la.
Na maioria das aplicaes necessrio que cada campo de uma tabela seja tambm
representado por um objeto. Dessa forma possvel manipular algumas propriedades
de cada campo individualmente.
Como exemplo ser utilizada a tabela tbItensNota
D um duplo-clique sobre a tabela tbItensNota. Aparecera uma pequena janela
inicialmente vazia. Sobre esta janela clique o boto direito do mouse e escolha a
opo Add Fields....
75
Aparecer uma outra janela contendo todos os campos da tabela. Marque todos os
campos e clique o boto OK.
O nome de cada objeto-campo ser definido automaticamente pelo Delphi. Ele ser
composto do nome da tabela seguido do nome do campo. Por exempo, o nome do
objeto-campo definido para o campo Produto da tabela tbItemNota ser
tbItemNotaProduto.
76
6
Criando campos virtuais
O recurso de transformar campos em objetos permite que se crie objetos-campo que
no esto ligados a um campo da tabela.
Na tabela tbItemNota, por exemplo, temos o cdigo do Produto e a Quantidade.
Sabemos antecipadamente que durante a execuo do nosso sistema teremos que
calcular diversas vezes o valor total do item (preo de venda * quantidade). Porm o
preo de venda do produto no aparece nesta tabela e sim na tabela tbPRODUTO.
Que bom seria se o campo PrecoVenda aparecesse tambm na tabela tbItemNota,
economizaria muito trabalho.
PASSO 2
Na janela que ser apresentada, preencha as seguintes informaes:
77
Name
Component
Type
Key Fields
Dataset
Lookup key
Result Field
78
PASSO 2
Na janela que ser apresentada, preencha as seguintes informaes:
Name
Component
Type
PASSO 3
Clique no boto OK e ser criado um novo campo na tabela que no est fisicamente
gravado no disco. Porm, o valor deste campo no mantido automaticamente pelo
sistema. necessrio definir na tabela tbItemNota o evento OnCalcFields.
Selecione a tabela tbItemNota e na janela Object Inspector clique na pgina
Events. No evento OnCalcFields digite TotalItem e pressione Enter. Ser criado
uma procedure onde dever ser digitada apenas uma linha de cdigo.
79
7
Relacionando tabelas
Existe um relacionamento 1 para N entre as tabelas tbNotaFiscal e a tabela
tbItemNota. Uma nota fiscal possui vrios itens. Este tipo de relacionamento
chamado pelo Delphi de Master-Detail.
No nosso exemplo a tabela Master a tabela tbNotaFiscal e a tabela Detail a
tabela tbItemNota. Os relacionamentos entre as tabelas feito atravs de um ou
mais campos. No caso, o campo Nota da tabela Detail (tbItemNota) deve se
relacionar com o campo Numero da tabela Master (tbNotaFiscal);
Para se definir um relacionamento Master-Detail basta alterar alguns atributos da
tabela Detail.
80
8
Criando a janela Principal
O primeiro formulrio (janela) que iremos criar o formulrio principal. O
formulrio principal ter apenas o menu principal de nossa aplicao. Este menu
servir para guiar a implementao de todos demais formulrios do sistema.
PASSO 1
Para criar um novo formulrio selecione a opo do menu File|New Form. Ser
criado um formulrio que inicialmente ter o nome Form1.
Altere as seguintes propriedades da janela.
Properties
Caption
SisFat 1.0
Name
fmPrincipal
Position
poScreenCenter
PASSO 2
Ponha um componente MainMenu (pgina Standard) em qualquer posio e altere a
propriedade Name para MenuPrincipal.
D um duplo-clique sobre esse componente e ser apresentado um Editor de Menu,
onde voc poder definir as opes do menu.
81
Cada item do menu um objeto, possuindo suas propriedades e eventos. Para cada
item do menu, altere as seguintes propriedades:
Caption
Name
&Cadastro
MenuCadastro
&Vendedores
OpcaoVendedores
&Venda
OpcaoVenda
N1
Sair
OpcaoSair
PASSO 3
Os eventos deste menu sero definidos assim que as janelas correspondentes forem
criadas. Podemos, no entanto, definirmos o evento para a opo Sair. Para isso d um
duplo-clique sobre esta opo. Automaticamente ser criada uma Procedure para que
voc escreva o cdigo (programa) que ser executado na seleo desta opo.
procedure TfmPrincipal.OpcaoSairClick(Sender: TObject);
begin
Close;
end;
82
9
Criando a janela Vendedores
Vamos agora criar o formulrio para entrada de dados da tabela Vendedores. Existe
uma forma automtica de se criar formulrios de banco de dados utilizando-se o
Database Form Wizard. Iremos, porm, criar os formulrios de forma manual.
PASSO 1
No menu, selecione File|New Form. Ser apresentado um formulrio em branco.
Altera as seguintes propriedades:
Properties
Caption
Vendedores
BorderStyle
bsSingle
Name
fmVendedor
Position
poScreenCenter
83
DadosFaturamento.dsVENDEDOR
Name
DadosVendedor
PASSO 4
Inclua no formulrio um componente DBNavigador.
Altere as seguintes propriedades:
Properties
DataSource
DadosFaturamento.dsVENDEDOR
Name
ControleVendedor
Construindo uma aplicao Delphi
84
1
0
Criando a janela Produtos
Seguindo o exemplo da criao da janela Vendedores criada a janela Produtos
Criar novo formulrio (File|New Form)com as seguintes propriedades:
Properties
Caption
Produtos
BorderStyle
bsSingle
Name
fmProduto
Position
poScreenCenter
DadosFaturamento.dsPRODUTO
Name
DadosProduto
Construindo uma aplicao Delphi
85
DadosFaturamento.dsPRODUTO
Name
ControleProduto
1
1
Criando a janela Notas fiscais
O formulrio de entrada de dados das notas fiscais ter as seguintes propriedades:
Properties
Caption
Notas Fiscais
BorderStyle
bsSingle
Name
fmNotaFiscal
Position
poSreenCenter
86
1
2
Completando a janela principal
O formulrio principal ir acessar os trs formulrios de entrada de dados que foram
criados (fmVendedor, fmProduto, fmNotaFiscal). Para que o formulrio principal
consiga referenciar cada um deste formulrios, necessrio selecion-los atravs da
opo File|Use Unit selecione.
87
88
1
3
Configurando o Projeto
Para configurar a aplicao utilize a opo do menu do Delphi Project|Options...
Apesar de existir vrias pginas, as pginas que iremos ver so as pginas Forms e
Application.
Na pgina Forms, no campo Main form, voc define o formulrio principal do
projeto. Isto , a janela que ser apresentada quando voc executar a aplicao. No
nosso exemplo, o formulrio que contm o menu, ou seja fmPrincipal.
Na janela Auto-create forms: aparecem os formulrios que so criados
automaticamente, ao ser iniciada a aplicao. Pode-se dizer que estes formulrios
ocupam memria, mesmo que no estejam visveis.
Na janela Available forms: esto os formulrios que sero criados em tempo de
execuo. Esses formulrios no ocupam memria, at que eles sejam apresentados
na tela. Porm, o processo de alocao e liberao de memria para esses formulrios
de responsabilidade do programador.
89
90