Você está na página 1de 8

Comunicado 17

Técnico Dezembro, 2001


Campinas, SP

ISSN 1677-8464

Padronização da Codificação
Programas em Borland
Delphi: Experiência no
Projeto SIGI

Marcos Cezar Visoli1


Moacir Pedroso Júnior2
João Francisco Gonçalves Antunes3
Gustavo R. Borges de Lima4

1. Introdução ● desenvolvedores recém-incorporados em uma


equipe podem obter alta produtividade rapi-
damente;
A padronização de código fonte em um projeto de
● pessoas com pouca prática na linguagem neces-
desenvolvimento de software, embora não seja fun-
sitam de um estilo pessoal e absorvendo o pa-
damental para o seu sucesso, é uma prática que aju-
drão, passam a defendê-lo e aprimorá-lo;
da a fazer com que etapa de implementação seja exe-
cutada de forma mais tranquila e harmoniosa. ● certos padrões dificultam a inserção de erros de
programação.
Em Extreme Programming (Beck, 1999), um conjun-
to de práticas para desenvolvimento de software, e Este documento descreve o padrão, aqui muito mais
que são utilizados no projeto SIGI (Pedroso, 2001), a como um conjunto de recomendações que devem ser
padronização de código se torna ainda mais impor- seguidas na elaboração de programas em Borland
tante, pois ajuda em muito a aplicação da prática de Delphi, para o projeto SIGI.
pair programming, programação em duplas, onde a Este documento não tem a intenção de definir um
leitura e intervenção de um código escrito por outro novo padrão ou discutir vantagens e desvantagens
desenvolvedor tem alta frequência. Os desen- do padrão aqui colocado em relação a outros. O do-
volvedores ficam mais à vontade tanto para ler como cumento relata o padrão utilizado no SIGI, e que pode
para escrever programas. ser utilizado em outros projetos, e ressalta a impor-
Pode-se adicionar outros pontos importantes na uti- tância de se adotar um no processo de elaboração
lização de um padrão de codificação: de programas.

1
Bsc. em Ciência da Computação, Pesquisador da Embrapa Informática Agropecuária, Caixa Postal 6041, Barão Geraldo –
13083-970 – Campinas, SP. (E-mail: visoli@cnptia.embrapa.br)
2
Ph.D. em Pesquisa Operacional, Pesquisador da Embrapa Informática Agropecuária. (E-mail: pedroso@cnptia.embrapa.br)
3
Bsc. em Matemática Aplicada e Estatística, Pesquisador da Embrapa Informática Agropecuária. (E-mail: joaof@cnptia.embrapa.br)
4
Consultor da Embrapa Informática Agropecuária na área de desenvolvimento do SIGI. (E-mail: gustavol@cnptia.embrapa.br)
2 Padronização da Codificação Programas em Borland Delphi: Experiência no Projeto SIGI

Embora seja dirigido para desenvolvedores em 2001), que permite a produção de documentação de
Borland Delphi, algumas sugestões podem auxiliar código fonte em html (HyperText Markup Language)
na confecção de recomendações para elaboração de num estilo como JavaDoc (Sun Microsystems, 2001),
programas em outras linguagens. amplamente conhecido no meio de desenvolvimento
de sistemas. A seguir são apresentados os formatos re-
Também cabe ressaltar que não define, e nem é sua
comendado para cada tipo de comentário.
pretensão, o padrão para todas as situações e casos que
possam ocorrer durante a etapa de escrita de código. 2.4.1. Cabeçalhos
Para o cabeçalho recomenda-se o seguinte padrão:

2. Regras Gerais para {: nome do arquivo


Formatação de Código Fonte @desc descrição do módulo ou unit
<Br>
<Br><B>Informação do CVS</B>
2.1. Idioma dos nomes <Br>$Source$
<Br>$Name$
O idioma dos nomes de variáveis, procedimentos, <Br>$Revision$
classes, métodos, etc. pode interferir na legibilidade <Br>$Author$
<Br>$Date$
de um código fonte, já que todas as palavras reserva-
<Br><B>Revisão</B>
das de comandos, por exemplo, estão na língua in- <Br>nome, data, descrição
glesa. É interessante que se defina um único idioma,
facilitando assim a leitura do código. Exemplos espe- @author autor do módulo ou unit.
cíficos podem ser vistos nas próximas seções. @cat categoria do módulo ou unit.
}
2.2. Indentação Os nomes entre os caracteres $ são provenientes
da ferramenta de controle de versão utilizada no
A indentação definida é de três caracteres por nível. Não projeto, o CVS (Fogel, 1999), e são substituídos
se deve utilizar caracteres de tabulação nos arquivos d u r a n t e a i n t e r a ç ã o d o Ti m e 2 H e l p c o m o
fonte. Para isto é necessário desabilitar as opções Use controlador de versão. Também foram utilizados
tab character e Optimal fill no diálogo Editor Options, alguns tags de HTML.
do menu Ferramentas, no Borland Delphi.
2.4.2. Rotinas
2.3. Margens Para rotinas, deve-se inserir o comentário logo aci-
ma da declaração da mesma, como no exemplo:
As margens devem ser fixadas em 80 caracteres. O có-
digo não deve exceder esta margem, salvo exceções
{:
como, por exemplo, terminar uma palavra. Quando Fecha todos os arquivos da aplicação
possível, os comandos que ultrapassarem a margem }
devem ser continuados na próxima linha. O ponto de procedure CloseFiles();
quebra geralmente é após uma vírgula ou um opera- Quando a rotina possui parâmetros, pode-se produ-
dor. Neste caso também é necessário indentar a linha zir tabelas que os documentem, como no exemplo:
seguinte, para manter o nível de indentação. {:
Remove um item, por valor, de uma lista. Caso o item
não exista, é emitida uma mensagem de advertência.
2.4. Comentários @param item o item que deseja-se remover
@param lista de onde deseja-se remover o item
Comentários normalmente são delimitados por { e }. }
procedure RemoveItem(item : string; lista : TLista);
Para comentários de uma linha, deve-se usar //, dei-
xando a notação (* *) para a remoção temporária de 2.5. Begin ... End
código fonte.
O uso recomendado do par begin...end é demons-
A inserção de comentários no código fonte sempre foi
trado nos exemplos a seguir:
uma prática altamente recomendada para os for i:=0 to 10 do begin
desenvolvedores de qualquer projeto. No SIGI foram ...
estabelecidas algumas regras para o formato de comen- ...
tários de cabeçalhos de units e de rotinas, visando a end;
utilização de algum extrator de documentação, para a
if condicao1 then begin
produção automática de documentação de código fon- ...
te. Optou-se pelo extrator Time2Help (Digital LogiKK, end
Padronização da Codificação Programas em Borland Delphi: Experiência no Projeto SIGI 3

else if condicao2 then begin Os nomes devem dar um sentido para o conteúdo
... das rotinas. Utilizar o verbo no infinitivo é um boa
else begin
... opção para isto. Por exemplo:
end; procedure PrintReport;

while condicao do begin Para rotinas que atribuem valores os nomes devem
... ser iniciados com a palavra Set . Por exemplo:
end; procedure SetUserName;
with nome do begin Similarmente, os nomes de rotinas que recuperam valo-
... res devem ser iniciados com a palavra Get. Por exemplo:
end;
function GetUserName : String;
Observe que o begin sempre está na mesma linha
Aqui há o uso de termos da língua inglesa (Get e Set),
do comando, enquanto que o end sempre está no
que pode entrar em conflito com a língua escolhida para
mesmo nível do comando. O par begin..end deve ser
a codificação. Porém, considerou-se que get e set são
usado mesmo quando englobe apenas um coman-
largamente utilizados, inclusive pelos ambientes de
do, como no exemplo:
if condicao then begin desenvolvimento que produzem automaticamente pro-
comando; cedimentos e funções a partir da definição de classes.
end;
3.3.2. Parâmetros
Isto evitará futuros problemas, caso alguma linha seja
inserida na condição e se esqueça de colocar o
3.3.2.1. Formatação
begin..end.
Os parâmetros devem sempre ser acompanhados de
seu tipo. Se houver necessidade de uma nova linha,
3. Linguagem Object Pascal a quebra deve ser realizada no nome do parâmetro e
deve haver a indentação necessária para uma me-
3.1. Parênteses lhor leitura. Exemplos:

Não deve existir espaço em branco entre o abrir pa- procedure Test(Param1 : Integer; Param2 : string);
rêntese e o próximo caracter, assim como não deve procedure Test(Param1 : Integer; Param2 : Integer;
Param3 : Integer; Param4 : string);
existir espaço em branco entre um fechar parêntese
e o caracter anterior. Por exemplo:
3.3.2.2. Nome
Procedimento( parametro ); // incorreto
Procedimento(parametro); // correto O nome de um parâmetro, como todo nome, deve
ser significativo. Geralmente é baseado no nome do
Parênteses devem ser utilizados somente quando
identificador que foi enviado para a rotina. Recomen-
necessário, para obter uma melhor leitura do código
da-se que o nome seja iniciado com letra maiúscula
fonte. Por exemplo:
e que seja adicionado o prefixo p, para evitar uma
if (condicao) then begin // incorreto - possível ambigüidade do nome de parâmetros e de
não é necessário propriedades ou nome de um campo de uma classe.
if (condicao1) or
Por exemplo:
(condicao2) then begin // correto
procedure Test(pNome: Integer;pldade: Integer);

3.2. Palavras reservadas e palavras-chave 3.3.2.3. Parâmetros constantes


As palavras reservadas e palavras-chave devem sem- Quando parâmetros não são modificados pela roti-
pre ser escritas em letra minúscula, como por exem- na, é recomendado que se utilize a determinação de
plo for, if, while, etc. que o parâmetro é constante. Isto facilita a leitura da
rotina, além de, para alguns tipos de variáveis, per-
3.3. Rotinas - procedimentos mitir um tratamento mais eficiente do código pelo
e funções compilador.

3.3.1. Nome e formato


Para uma maior legibilidade do código fonte, os nomes Colisão de nomes
das rotinas devem sempre começar com letra maiúscu-
la. Quando compostas por mais de uma palavra, cada Quando duas units possuem rotinas com o mesmo
uma deve iniciar com letra maiúscula. Exemplo: nome, a rotina da unit declarada por último na cláu-
procedure badexampleofprocedurename; // sula uses será a rotina invocada. Para evitar esta
incorreto dependência da cláusula uses, deve-se sempre utili-
procedure GoodExampleOfProcedureName; / zar o prefixo, que é o nome da unit, antes da invoca-
/ correto ção da rotina. Por exemplo:
4 Padronização da Codificação Programas em Borland Delphi: Experiência no Projeto SIGI

SysUtils.FindClose(SR); A utilização sempre será com o nome do registro (glo-


ou bal, neste caso) o que identifica claramente que a
Windows.FindClose(Handle); variável que é utilizada é global.

3.4. Variáveis 3.5. Tipos


3.4.1. Nome e formatação 3.5.1. Nome
Devem iniciar com letra minúscula, e quando são com- O nomes de tipos que são palavras reservadas deve-
postas por mais de uma palavra, as demais palavras riam ser escritas em minúsculo. Tipos do Win32 ge-
devem iniciar com letra maiúscula. Por exemplo: ralmente são todos em maiúsculo. Tipos de outras
var API devem seguir a mesma nomenclatura
numberFiles : Integer; especificada na unit ou documentação corresponden-
item : Integer; te. Para os outros tipos, deve-se iniciar com letra
maiúscula, e quando são compostas por mais de uma
Variáveis de controle de um loop geralmente são
palavra, cada uma deve iniciar com letra maiúscula.
identificadas por um caracter como i, j ou k, mas pode-
se utilizar nomes como, por exemplo, index Table. Exemplos:
Variáveis booleanas devem ter preferencialmente um
var
nome que signifique verdadeiro ou falso.
texto : string; // palavra reservada
Handle : HWND; // tipo Win32 API
3.4.2. Declaração de variáveis
i : Integer; // outro tipo
As variáveis devem ser declaradas uma por linha,
juntamente com seu tipo. Embora pareça repetitivo 3.5.2. Tipos ponto flutuante
quando existem várias delas do mesmo tipo, a inser- Real não deveria ser utilizado, pois existe somente para
ção ou remoção de uma delas é feita sem afetar a prover compatibilidade com antigos código pascal.
declaração de outras. Como exemplo temos:
Double deve ser sempre utilizado, inclusive por ser
var
um padrão IEEE (Institute of Electrical and Electronics
i : Integer;
Engineers).
j : Integer;
ended : boolean; Extended somente deve ser utilizado quando Double
não suporta a faixa de valores necessária. Extended
3.4.2.1. Variáveis locais é um tipo específico da Intel.

Variáveis locais usadas dentro de rotinas seguem a Single somente deve ser utilizado se o tamanho físi-
mesma regra de nomenclatura citada anteriormen- co da variável é importante, como por exemplo, quan-
te. Variáveis temporárias devem ser nomeadas apro- do utiliza-se uma ou mais DLLs (Dynamic Link
priadamente, com o sufixo Temp. Library) escritas em outras linguagens.

3.4.2.2. Uso de variáveis globais 3.5.3. Tipos enumerados


Variáveis globais devem ser utilizadas o mínimo pos- Nomes de tipos enumerados deve ser significativos
sível. Quando for o caso devem estar declaradas na para o propósito de enumeração. O nome do tipo
seção de implementação de uma unit. Quando uma deve ser prefixado com a letra T (type ). A lista de
variável for utilizada por mais de uma unit, ela deve ser identificadores deve ser prefixada com até três le-
movida para uma unit específica de variáveis globais. tras minúsculas das iniciais do tipo. Por exemplo:
Para diferenciar variáveis globais de variáveis locais type
recomenda-se adicionar o prefixo g ao nome da va- TMusicalNote = (nmDo, nmRe, nmMi, nmFa,
riável. Por exemplo: nmSol, nmLa, nmSi)
var
A variável de um tipo enumerado pode conter o nome
gNumItens : Integer;
do tipo sem a letra T. Por exemplo:
gNome : Integer;

Uma outra alternativa é construir um registro com var


MusicalNote : TMusicalNote;
todas as variáveis globais, como em:
var
3.5.4. Tipos estruturados
global : record
numItens : Integer; 3.5.4.1. Tipos Array
nome : string;
Os nomes para tipos array devem ser significativos
end;
para o seu propósito. O nome do tipo deve ser prefi-
Padronização da Codificação Programas em Borland Delphi: Experiência no Projeto SIGI 5

xado com a letra T ( type). Caso um ponteiro para o Como exemplo temos:
array seja declarado, o seu nome deve ser prefixado
case Condicao of
ainda com a letra P (pointer ). Por exemplo:
condicao1:
type begin
PAnimalArray = ^TAnimalArray; ...
TAnimalArray = array [1..100] of Integer; end;
condicao2:
3.5.4.2. Tipos Record begin
Os nomes para tipos record também devem ser sig- ...
nificativos. De forma similar ao tipos array, a decla- end;
ração deve ser prefixada com a letra T e se um pon- else
teiro para o tipo registro é declarado, ele deve ser begin
prefixado com a letra P. Os elementos que compõem ...
o record devem ser indentados. Por exemplo: end;
end;
type
PCustomer = ^TCustomer;
TCustomer = record 3.6.3. while
Name : string;
Todo e qualquer trecho de código de preparação para
Address : string;
o comando while deve ocorrer imediatamente antes
end;
do comando, sendo que outros comandos não rela-
cionados não devem estar neste trecho.
3.6. Comandos É completamente indesejável que se utilize o proce-
dimento Break para encerrar o while. Sempre que
3.6.1. if possível, utilize somente a condição do próprio while.
i := 0;
Sempre que possível colocar a maior quantidade de
while (i<100) do begin
casos a serem tratados na seção da cláusula then ,
...
deixando o mínimo possível na seção da cláusula
i := i + 1;
else.
end;
Não utilizar muitos aninhamentos de if. Um número
de até 5 aninhamentos é razoável. Para evitar um 3.6.4. for
encadeamento de if...else if, quando possível utilize
Comandos for devem ser utilizados quando um tre-
o comando case .
cho de código deve ser executado por um número
Quando o comando if possuir múltiplas condições, é conhecido de iterações.
recomendável ordená-las da esquerda para a direi-
for i:=0 to 100 do begin
ta, da mais simples para a mais complexa. Isto pos-
...
sibilita ao compilador utilizar a vantagem de avalia-
end;
ção short-circuit Boolean e tornar a execução mais
rápida. Também é recomendável colocar cada con-
3.6.5. repeat
dição em uma linha, respeitando a indentação. Por
exemplo: Comandos repeat seguem de forma similar as mes-
if Condicao1 or mas recomendações para o comando while.
(Condicao2 and i := 0;
Condicao3) then begin repeat
... ...
... i := i + 1;
end; until i = 100;

3.6.2. case
3.6.6. with
Os casos num comando case deveriam ser ordena-
O comando with deve ser utilizado com muito cuidado.
dos pela constante, numérica ou alfabética,
É recomendável não utilizar múltiplos objetos ou outro
referenciada no comando, mas pode-se ordenar pela
elemento no comando with, como no exemplo:
importância ou freqüência da ocorrência do caso.
Os comandos para cada caso devem ser simples e with Record1, Record2 do begin
não ultrapassar um número de 4 ou 5 linhas. Se for ...
necessário, pode-se colocar o código numa rotina em ...
separado, de preferência local. end;
6 Padronização da Codificação Programas em Borland Delphi: Experiência no Projeto SIGI

Isto pode confundir um desenvolvedor e levar a bugs 5.3.3. Métodos virtuais/métodos dinâmicos
difíceis de encontrar.
Métodos virtuais devem ser utilizados quando o
método pode ser redefinido pelas classes descenden-
tes. Recomenda-se que métodos dinâmicos sejam
4. Tratamento de Exceções utilizados em classes que tem um grande número de
Estruturado classes descendentes que irão redefinir o método.
O tratamento de exceções deve ser utilizado com fre- Em princípio, deve-se sempre utilizar métodos virtu-
qüência. Nos casos em que recursos são alocados é ais, e somente sob excepcional circunstâncias deve-
necessário utilizar um try...finally para assegurar a se utilizar métodos dinâmicos.
liberação adequada dos recursos.
5.3.4. Uso de métodos abstratos (abstract)
Por exemplo:
Class1 := TClass1.Create; Não deve-se utilizar métodos abstratos em classes
Class2 := TClass2.Create; cujas instâncias serão criadas.
try
{ trecho de código }
finally 5.3.5. Métodos de acesso a propriedades
Class1.Free; (properties)
Class2.Free;
Todos os métodos de acesso devem aparecer, na
end;
declaração de uma classe, nas seções privada
(private) ou protegida (protected ).
5. Classes Os nomes do métodos seguem as mesmas regras
para os procedimentos e funções. Os métodos de
5.1. Nomenclatura leitura (read ) deve ser prefixado com a palavra Get.
Os nomes para classes, como os nomes para outros O método de escrita (write ) deve ser prefixado com
a palavra Set. Por exemplo:
elementos, também devem ser significativos para o
seu propósito. O nome, em minúsculo, porém com a TClasse = class(TObject)
primeira letra em maiúsculo, deve ser prefixado com private
a letra T ( type), como no exemplo: FAttrib : Integer;
protected
type
function GetAttrib : Integer;
Tcustomer = class (TObject);
procedure SetAttrib(pValue : Integer);
O nome de uma instância da classe é o próprio nome public
da classe, sem o prefixo T. Observe que neste caso, property campo: Integer read GetAttrib write SetAttrib;
embora a classe seja uma variável, permaneceu com end;
a letra inicial em maiúsculo.
var 5.4. Propriedades (properties)
Customer : TCustomer; Propriedades que servem para acessar atributos pri-
vados terão o mesmo nome do atributo, mas sem o
5.2. Atributos prefixo F. Os nomes de propriedades devem ser subs-
Nomes de atributos das classes seguem a mesma con- tantivos, pois representam dados, enquanto verbos
venção para nomes de variáveis, exceto que adiciona- representam os métodos ou ações.
se o prefixo F. Todos os atributos devem ser privados
(private). O acesso a atributos fora do escopo da classe
deve ser realizado através de uma property.
6. Arquivos
5.3. Métodos
Em geral os nomes de arquivos devem ser descriti-
5.3.1. Nomenclatura vos e por si só representar o conteúdo do arquivo.
Os nomes devem iniciar com a letra minúscula e
Os nomes para os métodos seguem as mesmas con- podem ser compostos por mais de uma palavra, sen-
venções descritas para nomes de procedimentos e do que a separação entre elas se dá através de um
funções. caracter em maiúsculo.

5.3.2. Métodos estáticos (static)


6.1. Arquivos de projeto (project)
Métodos estáticos devem ser utilizados quando é
necessário que o método não seja redefinido por uma Os nomes de arquivos de projetos possuem exten-
classe descendente. são .dpr. Exemplos: queries.dpr, tstInsert.dpr.
Padronização da Codificação Programas em Borland Delphi: Experiência no Projeto SIGI 7

6.2. Arquivos de formulários (forms) 6.6. Units de propósito geral


Os nomes de arquivos de formulários possuem ex- Geralmente são units utilizadas por outras units, com
tensão .dfm. Recomenda-se adicionar ao nome o pre- definições de informações globais, rotinas utilitá-
fixo ufrm para indicar que se trata de um formulário. rias, etc. como por exemplo customerGlobals.pas,
Exemplos: ufrmHelp.dfm, ufrmInfo.dfm. No caso de fileUtilities.pas.
formulários de módulo de dados ( data modules )
deve-se utilizar o prefixo udm, como por exemplo,
udmCustomers.

7. Formulários (Forms) e Módulo


6.3. Arquivos de units de Dados (Data Modules)
6.3.1. Nomenclatura
7.1. Formulários
A nomenclatura dos arquivos de units segue o que
já foi descrito neste documento em termos de clare- 7.1.1. Nomenclatura
za e significado. Os nomes dos tipos de formulários devem ser prefi-
xados com a letra T (type). Após o nome é adiciona-
6.3.2. Cláusula Uses da a palavra Form. Este nome é produzido automati-
A cláusula uses na seção de interface ( interface camente quando um formulário é criado no Borland
section) deve conter somente os nomes das units que Delphi. Como exemplo temos:
são necessárias para o código da seção de interface. TCustomerForm = class (TForm)
Qualquer outro nome de unit que não é necessário, TMainForm = class (TForm)
inclusive aqueles que o Delphi insere automatica-
mente, devem ser removidos. Os nomes das instâncias são idênticos aos do tipo,
mas sem o prefixo T. Por exemplo:
A cláusula uses da seção de implementação
(implementation section) contém somente as units CustomerForm : TCustomerForm;
que são utilizadas nesta seção. Qualquer outro nome MainForm : TMainForm;
de unit que não é utilizado deve ser removido.
7.1.2. Criação automática de formulários
6.3.3. Seção de interface (interface section) A criação automática é realizada somente com o for-
A seção de interface deve conter somente as decla- mulário principal, a menos que seja necessário. To-
rações de tipos, variáveis e procedimentos, funções dos os outros formulários devem ser removidos da
que são necessárias exportar para outras units. Caso lista de criação automática no diálogo Project
contrário, as declarações devem ser movidas para a Options.
seção de implementação. A criação e destruição de formulários pode ser reali-
zada através de uma rotina exportada por uma unit
6.3.4. Seção de implementação que contém o formulário. Esta rotina garante a cria-
(implementation section) ção, apresentação e destruição do formulário.
A seção de implementação deve conter quaisquer
declarações de tipos, variáveis e procedimentos e
funções particulares da unit.
7.2. Módulo de dados
6.4. Units de formulários
Um arquivo de unit de um formulário deve ter o mes- Os nomes dos tipos de módulo de dados devem ser
mo nome do arquivo de formulário correspondente. Por prefixados com a letra T (type) mais dm (Data Modu-
exemplo, para o formulário ufrmCustomer.dfm, o arqui- le). Este nome também produzido automaticamente
vo da unit chama-se ufrmCustomer.pas. quando um formulário é criado no Delphi. Como
exemplo temos:
6.5. Units dos módulo de dados TdmCustomer = class (TDataModule)
(data module)
Os nomes das instâncias devem ser idênticos aos do
Uma unit de módulo de dados tem o mesmo nome tipo, mas sem o prefixo T. Por exemplo:
do arquivo de formulário correspondente, mas com
a extensão .pas. Por exemplo: udmCustomer.pas, dmCustomer : TdmCustomer;
udmSupplier.pas. dmOrder : TdmOrder;
8 Padronização da Codificação Programas em Borland Delphi: Experiência no Projeto SIGI

8. Conclusão ● dos desenvolvedores que começaram a partici-


par do projeto durante seu curso, houve uma
A utilização do padrão de codificação na elaboração certa resistência inicial, porém dado o devido
de programas tem-se apresentado como um fator tempo, também adotaram as recomendações.
importante para a compreensão dos mesmos. O des-
Em todo o processo de desenvolvimento foram su-
conforto e uma possível reação de cunho negativo
provocado quando um desenvolvedor lê o código geridos melhorias, inclusive a de se adotar ferramen-
elaborado por outro profissional é muito baixo e isto tas para formatação do código fonte. Algumas ferra-
facilita em muito a aplicação de algumas práticas de mentas, devidademente configuradas, auxiliam a
Extreme Programming, como pair programming. formatar o código fonte seguindo muitas das reco-
mendações definidas neste documento, e podem ser
Algumas reações dos desenvolvedores podem sur-
gir quando se aplica quaisquer padrões, e aqui caso utilizadas para apresentação final. Porém, o objetivo
de um padrão de codificação não é diferente: de se definir o padrão de codificação, é o de que se
● o padrão normalmente está errado porque foi utilize durante a elaboração, principalmente quando
feito por alguém que não conhece a linguagem; esta é feita em pares.
● o padrão está errado porque não segue o que
eu sei fazer;
● o padrão reduz a criatividade; 9. Referências Bibliográficas
● o padrão não é necessário quando as pessoas
têm experiência e são consistentes; BECK, K. Extreme Programming Explained : embrace
● normalmente as pessoas ignoram os padrões. change. Boston: Addison-Wesley , 2000. 190p. (The
XP series).
Assim algumas ações são importantes na implanta- DIGITAL LOGIKK. Time2Help. Disponível em: <http:/
ção de um padrão de codificação para reduzir a re- /www.time2help.com>. Acesso em: ago. 2001.
sistência dos desenvolvedores e deixar que a tarefa
de codificação seja prazerosa e eficiente: FOGEL, K. Open Source Development with CVS. Dis-
ponível em: < http://www.gnu.org>. Acesso em: dez.
● discutir e tomar as decisões sobre a padroniza- 2001.
ção com a equipe de desenvolvimento;
HOFFMEISTER, S. Delphi 4 Developer’s Guide Coding
● não impor um estilo, mas controlar o ego e con- Standards Document. Disponível em: < http:/
vencer a equipe de que o padrão é o mais ade-
/www.econos.de/delphi/cs.html>. Acesso em: 11 fev.
quado;
2002.
● ser flexível às possíveis mudanças sugeridas
pela equipe; PEDROSO, M. JR. SIGI: Sistema de Informação Gerencial
● sempre lembrar que um projeto é o esforço de de Projetos de Pesquisa Agropecuária para o Instituto
uma equipe, e não de apenas um indivíduo. Nacional de Investigaciones Agrícolas da Venezuela.
Campinas: Embrapa Informática Agropecuária, 2001.
(Sistema Embrapa de Planejamento, Projeto
Em relação a aplicação no projeto SIGI das recomen-
12.2001.950). Projeto em andamento.
dações para codificação em Borland Delphi, algumas
observações podem ser tomadas: SUN MICROSYSTEMS. How to Write Doc Comments
● dos desenvolvedores que contribuíram para de- for the Javadoc Tool . Disponível em: <http://
finir as recomendações, houve uma adoção java.sun.com/j2se/javadoc/writingdoccomments/
tranquila do seu uso, desde o início. index.html#sourcefiles>. Acesso em: 5 fev. 2002.

Comitê de Presidente: Francisco Xavier Hemerly


Comunicado Embrapa Informática Agropecuária
Área de Comunicação e Negócios Membros efetivos: Amarindo Fausto Soares, Ivanilde Dispato,
Técnico, 17 Publicacões Marcia Izabel Fugisawa Souza, José Ruy Porto de Carvalho,
Av. Dr. André Tosello s/no Suzilei Almeida Carneiro
Cidade Universitária - “Zeferino Vaz”
Suplentes: Fábio Cesar da Silva, João Francisco Gonçalves
MINISTÉRIO DA AGRICULTURA, Barão Geraldo - Caixa Postal 6041
PECUÁRIA E ABASTECIMENTO 13083-970 - Campinas, SP Antunes, Luciana Alvim Santos Romani, Maria Angélica de
Telefone/Fax: (19) 3789-5743 Andrade Leite, Moacir Pedroso Júnior
E-mail: sac@cnptia.embrapa.br

Expediente Supervisor editorial: Ivanilde Dispato


1 a edição Normalização bibliográfica: Leila Maria Lenk
Capa: Intermídia Publicações Científicas
© Embrapa 2001 Editoração Eletrônica: Intermídia Publicações Científicas

Você também pode gostar