<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Everson Novka &#187; Padrão delphi</title>
	<atom:link href="http://www.eversonnovka.com/tag/padrao-delphi/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.eversonnovka.com</link>
	<description>Delphi para todos!</description>
	<lastBuildDate>Tue, 06 Oct 2009 23:16:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Padronização de código</title>
		<link>http://www.eversonnovka.com/padronizacao-de-codigo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=padronizacao-de-codigo</link>
		<comments>http://www.eversonnovka.com/padronizacao-de-codigo/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 05:30:33 +0000</pubDate>
		<dc:creator>Everson Novka</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Nomenclatura]]></category>
		<category><![CDATA[Padrão de código]]></category>
		<category><![CDATA[Padrão delphi]]></category>

		<guid isPermaLink="false">http://delphi2010.wordpress.com/?p=11</guid>
		<description><![CDATA[Este Artigo tem por finalidade definir padrões de desenvolvimento, no que diz respeito a nomenclatura e melhores práticas, aos elementos a serem utilizados nos projetos que utilizarem Delphi]]></description>
			<content:encoded><![CDATA[<p align="center"><strong>Introdução</strong><br />
Este artigo tem por finalidade definir padrões de desenvolvimento, no que diz respeito a nomenclatura e melhores práticas, aos elementos a serem utilizados nos projetos que utilizarem <strong>Delphi para Windows</strong>.</p>
<p><span style="text-decoration:underline;"><br />
</span></p>
<p><strong>1. Estilos de Capitalização</strong><strong> </strong></p>
<p>Existem três tipos de convenções de nomenclatura. São eles: Pascal Case, Camel Case e Upper Case. Em todas as convenções se refere ao uso de maiúsculas ou minúsculas nos nomes. Todas se aplicam a nomes formados por várias palavras.</p>
<p><strong><em>1.1. Pascal Case</em></strong><strong> </strong></p>
<p>A primeira letra do identificador e as primeiras letras das palavras subseqüentes são maiúsculas.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>B</strong>ack<strong>C</strong>olor</td>
</tr>
</tbody>
</table>
<p><strong><em>1.2. Camel Case</em></strong><strong> </strong></p>
<p>A primeira letra da primeira palavra é em minúscula, e as demais palavras subseqüentes iniciam com maiúscula.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>b</strong>ack<strong>C</strong>olor</td>
</tr>
</tbody>
</table>
<p><strong><em>1.3. Upper Case</em></strong><strong> </strong></p>
<p>Todas as letras são maiúsculas. Usada somente para constantes.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">CHAVE_CRIPTOGRAFIA   = String(‘#F$%A&amp;DH’);</td>
</tr>
</tbody>
</table>
<p><strong>2. Tabela de Regras de Capitalização</strong><strong> </strong><strong> </strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="171" valign="top"><strong>Tipo</strong></td>
<td width="92" valign="top"><strong>Estilo</strong></td>
<td width="286" valign="top"><strong>Obrigatório</strong></td>
</tr>
<tr>
<td width="171" valign="top">Classes</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top">T<strong>C</strong>liente<strong>C</strong>adastro   (Utilizar T no início)</td>
</tr>
<tr>
<td width="171" valign="top">Eventos</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>V</strong>alue<strong>C</strong>hange</td>
</tr>
<tr>
<td width="171" valign="top">Variáveis</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>R</strong>ed<strong>V</strong>alue</td>
</tr>
<tr>
<td width="171" valign="top">Interface</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>ID</strong>isposable</td>
</tr>
<tr>
<td width="171" valign="top">Métodos</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>C</strong>onverte<strong>V</strong>alor()</td>
</tr>
<tr>
<td width="171" valign="top">Nome de   Unit</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>C</strong>liente<strong>C</strong>adastro<strong>F</strong>orm.pas</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade</td>
<td width="92" valign="top">PascaCase</td>
<td width="286" valign="top"><strong>B</strong>ack<strong>C</strong>olor</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade   Public</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>R</strong>ed<strong>V</strong>alue</td>
</tr>
<tr>
<td width="171" valign="top">Parâmetro   de Métodos</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top">A<strong>N</strong>ome<strong>P</strong>arametro</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade   Protected</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>R</strong>ed<strong>V</strong>alue</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade Private</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>D</strong>omain<strong>U</strong>ser</td>
</tr>
<tr>
<td width="171" valign="top">Constantes</td>
<td width="92" valign="top">UpperCase</td>
<td width="286" valign="top"><strong>CODIGO_SISTEMA</strong></td>
</tr>
<tr>
<td width="171" valign="top">Numeradores</td>
<td width="92" valign="top">camelCase</td>
<td width="286" valign="top"><strong>(st</strong>Aberto, <strong>st</strong>Fechado, <strong>st</strong>Desconhecido<strong>)</strong></td>
</tr>
</tbody>
</table>
<p><strong>3. Padrão de Nomenclatura</strong><strong> </strong></p>
<p>Nomear corretamente objetos, componentes, arquivos, pastas, enfim, elementos em geral, é muito importante para um bom entendimento do projeto como um todo. Um simples arquivo nomeado errado, ou sem um padrão definido, pode confundir e prejudicar uma futura manutenção. Portanto, questões importantes devem ser consideradas na nomenclatura do projeto:<br />
· Não utilize notação húngara. A notação é útil somente para nomear componentes e, mesmo assim, quando existe a necessidade de identificação facilitada do mesmo;<br />
· Coloque nomes da forma mais clara possível, visando facilitar a compreensão da finalidade;<br />
· Em nomes compostos, faça combinações entre caracteres maiúsculos e minúsculos para PascalCase;<br />
· Utilize abreviações com responsabilidade, e conforme a necessidade;<br />
· Utilize nomes em português;<br />
· Não utilize espaços, acentos, cedilhas, sublinhas ou caracteres especiais, mesmo que o contexto do que está sendo nomeado permita.</p>
<p><strong><em>3.1. Classes</em></strong><strong> </strong></p>
<p><strong>3.1.1. Classes</strong><strong> Objeto</strong><strong> </strong></p>
<p>· Nomeie classes objeto com nomes/substantivos;<br />
· Use PascalCase;<br />
· Não use prefixo de classe (por exemplo: CFTP);<br />
· Utilize “T” no início do nome da declaração da classe;<br />
· Não use o caractere de sublinha (_).<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="538">TUsuario = Class;<br />
TUsuarioPadrao = TUsuario;<br />
TUsuarioBasico = TUsuario;</td>
</tr>
</tbody>
</table>
<p><strong><em>3.2. Interfaces</em></strong><strong> </strong></p>
<p>· Nomeie interfaces com substantivos ou adjetivos que descrevem o comportamento;<br />
· Use PascalCase;<br />
· Não use o caractere de sublinha (_);<br />
· Coloque a letra I como prefixo, para indicar que o tipo é uma interface;<br />
· Use nomes similares quando definir pares de classes/interfaces, onde a classe é uma implementação padrão das interfaces. O nome deve diferir apenas com a letra I, que é o prefixo do nome da interface.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">IUsuarioBase = <strong>Interface </strong><br />
TppInterfacedObject = <strong>class(TObject, IUnknown)</strong></td>
</tr>
</tbody>
</table>
<p><strong><em>3.3. Parâmetros</em></strong><strong> </strong></p>
<p>· Use nomes de parâmetros descritivos. Nomes de parâmetros devem ser descritivos o suficiente para que se possa, baseado no nome do parâmetro e seu tipo, determinar o que o parâmetro significa;<br />
· Use PascalCase;<br />
· Use nomes baseados no significado do parâmetro e não baseados no tipo do parâmetro;<br />
· Não use parâmetros reservados (por exemplo: params, args, etc);<br />
· Não use notação Húngara.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>procedure </strong>FormataNumero(<strong>AV</strong>alor   : Inteiro);<br />
<strong>function </strong>FormataNumero(<strong>AV</strong>alor   : Inteiro) : Integer;</td>
</tr>
</tbody>
</table>
<p><strong><em>3.4. Variáveis</em></strong><strong> </strong></p>
<p>· Nomeie Variáveis usando substantivos;<br />
· Use PascalCase;<br />
· Nunca utilize o caractere de sublinha (_);<br />
· Quando for variável declarada na interface, utilize “F” no início do nome.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">Private</p>
<p>FNomeUsuario : String;</p>
<p>FSenhaUsuario : String;</p>
<p>Public</p>
<p>FNomeEmpresa   : String;</p>
<p>End;</td>
</tr>
</tbody>
</table>
<p><strong><br />
</strong><strong>Declaração em métodos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">Procedure   <strong>ProcessaUsuario(</strong>ACodigoUsuario : Integer<strong>);</strong></p>
<p><strong>var</strong></p>
<p>ValorTemporario   : Integer;</p>
<p>NomeUsuario   : String;</p>
<p><strong>begin</strong></p>
<p><strong>//</strong></p>
<p><strong>end;</strong></td>
</tr>
</tbody>
</table>
<p><strong><em>3.5. Propriedades</em></strong><strong> </strong></p>
<p>· Nomeie propriedades usando substantivos;<br />
· Use PascalCase;<br />
· Considere ter uma propriedade com o mesmo nome do tipo;<br />
· Quando declarar uma propriedade com o mesmo nome do tipo, defina o mesmo tipo da propriedade;<br />
· Não utilize o “T” no início do nome, “T” é utilizado apenas na declaração de tipos.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">private</p>
<p><strong>FNomeUsuario : String;</strong></p>
<p>public</p>
<p>property <strong>NomeUsuario :   String read FNomeUsuario write FNomeUsuario</strong></td>
</tr>
</tbody>
</table>
<p><strong><em>3.6. Nome para Arquivos (Units)</em></strong><strong></strong></p>
<p>· Use PascalCase para nomear arquivos;<br />
· Para formar o nome, utilize o nome da funcionalidade, o tipo da funcionalidade, e o tipo de formulário (<em>form</em>) que você está utilizando (caso esse arquivo seja de um formulário).<br />
<strong>Exemplos de formulários:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">CategoriaCadastroForm.pas<br />
UsuarioListaForm.pas<br />
EntradaForm.pas<br />
UsuarioPesquisaForm.pas</td>
</tr>
</tbody>
</table>
<p><strong><em>3.7. Prefixo para Objetos de Interface</em></strong><strong></strong></p>
<p>· Esses objetos ainda seguem a notação húngara;<br />
· Use as abreviações, nas tabelas a seguir, como prefixo dos objetos;<br />
· Use CamelCase para nomear objetos de interface;<br />
· Utilize a seguinte regra: Três consoantes + Nome do Objeto. Exemplos:<br />
- <strong>Q</strong>ue<strong>ry</strong> da tabela Banco à qryBanco;<br />
- <strong>C</strong>lient<strong>D</strong>ata<strong>S</strong>et da tabela Banco à cdsBanco;<br />
- <strong>D</strong>ata<strong>S</strong>ou<strong>r</strong>ce ligado ao ClientDataSet à dsrBanco.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">T<strong>B</strong>u<strong>t</strong>to<strong>n   = btnNomeBotao; </strong>(Tentar não repetir consoantes).<br />
TADO<strong>Q</strong>ue<strong>ry</strong> = <strong>qryNomeQuery; </strong><br />
T<strong>S</strong>peed<strong>B</strong>u<strong>t</strong>ton = <strong>sbtNomeBotao;</strong><br />
T<strong>A</strong>ction<strong>L</strong>i<strong>s</strong>t = <strong>alsNomeActionList</strong>;</td>
</tr>
</tbody>
</table>
<p><strong><em>3.8. Prefixo para Formulários (Form) e Módulos de Dados (DataModule)</em></strong><strong></strong></p>
<p>· Use CamelCase;<br />
· Form = utilizar “<strong>frm</strong>” + o nome da funcionalidade;<br />
· DataModule = utilizar “<strong>dmd</strong>” + o nome da funcionalidade.</p>
<p><strong>Exemplos para DataModule:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>dmdClienteProcesso</strong> : TDataModule;<br />
<strong>dmdClienteCadastro</strong> : TDataModule;<br />
<strong>dmdPessoaUsuarioCadastro</strong> : TDataModule;</td>
</tr>
</tbody>
</table>
<p><strong>Exemplos para Form:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>frmClienteProcesso</strong> : TFom;<br />
<strong>frmClienteCadastro</strong> : TForm;<br />
<strong>frmPessoaUsuarioCadastro</strong> : TForm;</td>
</tr>
</tbody>
</table>
<p><strong>4. Endentação</strong><strong></strong></p>
<p>A endentação citada é sobre o número de espaços entre os níveis de tabulação. Utilize como padrão 2 espaços. Este padrão pode ser configurado na janela de opções do <strong>Borland Delphi</strong>.</p>
<p>Evite escrever linhas com mais de 80 posições entre espaços e caracteres. A idéia é facilitar a compreensão do código e, se possível, visualizar a linha inteira em seu editor de código. Caso alguns trechos de código fiquem muito extensos, poderá ser feita a quebra da linha, entretanto é necessário seguir os seguintes princípios:<br />
· Quebrar a linha após uma vírgula;</p>
<p>· Quebrar a linha após um operador;</p>
<p>· Alinhar a nova linha no início da expressão no mesmo nível da linha anterior.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">calculaArea(expr1,   expr2, expr3,</p>
<p>expr4,   expr5);</p>
<p><em>ou</em></p>
<p>var :=   a *b / (c &#8211; g + f)<strong> + </strong></p>
<p>4 * z;</td>
</tr>
</tbody>
</table>
<p>Outra questão importante é a utilização de espaços em branco para endentação. Utilize espaços em branco para endentação, nunca use tabulação!</p>
<p><strong>5. Comentários</strong><strong></strong></p>
<p>Os comentários são muito importantes, tanto para relembrar você como para orientar outra pessoa sobre a manutenção do código fonte. Comente tudo que puder, da seguinte forma:<br />
· Utilize as duas barras “//” para comentar trechos de código;<br />
· Utilize “{}” para comentar blocos.</p>
<p><strong><em>5.1. Cabeçalho de Arquivos (Units)</em></strong><strong></strong></p>
<p>Comentários de cabeçalho são importantes para saber quem foi o responsável pelo desenvolvimento e as alterações aplicadas na unit. Portanto:<br />
· Descreva o propósito da unit;<br />
· Coloque o nome do programador responsável pelo desenvolvimento inicial da unit;<br />
· Coloque o nome do analista responsável;<br />
· O item Revisões será utilizado quando for feita uma manutenção na unit;<br />
· Comentários adicionais são importantes caso as alterações efetuadas nessa unit possam afetar alguma outra funcionalidade do sistema.</p>
<p><strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">(*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Propósito   da Unit:<br />
Programador:   Data: ??<br />
Analista   Responsável:<br />
Revisões:<br />
Programador:<br />
Data:   Descrição da Revisão<br />
Comentários   adicionais:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*)</td>
</tr>
</tbody>
</table>
<p><strong><em>5.2. Cabeçalho de Métodos</em></strong><strong></strong></p>
<p>Ao descrever o cabeçalho de um Método:<br />
· Utilize comentário de bloco;<br />
· Não seja detalhista, tente ser objetivo em seu comentário;<br />
· Comente sobre os parâmetros, caso hajam.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">{&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
*   Propósito do Método: Exibir uma mensagem de Pergunta utilizando MessageBox<br />
*<br />
*   Utilização dos parâmetros:<br />
ATitulo   = Titulo da Mensagem (Caption).<br />
AMensagem   = Mensangem que ira aparecer no corpo do MessageBox.<br />
Result   = Retorna True caso seja selecionado a opção Sim no MessageBox.<br />
* Autor   / Data: Everson R. Novka 09/06/2006<br />
*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;}<br />
class   function TFWMensagem.Pergunta(const ATitulo,<br />
AMensagem:   String): Boolean;<br />
begin<br />
Result   := (MessageBox(0, PChar(AMensagem), pChar(ATitulo),<br />
MB_ICONQUESTION   or MB_YESNO or MB_DEFBUTTON2) = idYes);<br />
end;</td>
</tr>
</tbody>
</table>
<p><strong><em>5.3. Comentários dentro de métodos</em></strong><strong></strong></p>
<p>· Utilize “//” para comentários de apenas um linha;<br />
· Utilize comentário em bloco ( { &#8230; } ) somente em rotinas para comentários de mais de uma linha, a questão visual é fundamental para um melhor entendimento.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">function TfrmMovPontoManual.tbKeyIsDown(const key: integer): boolean;<br />
begin<br />
//Retorna se a tecla especificada está pressionada.<br />
//Gislaine &#8211; 26/09/2005<br />
Result := GetKeyState(Key) and 128 &gt; 0;<br />
end;<br />
}</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.eversonnovka.com/padronizacao-de-codigo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

