Sign in Join
Wiki copytemporary

The Power of Proper Planning and Practices/pt: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11### Planejar diretamente para cross-plataforma
22
33Existem muitas vantagens em fazer o seu desenvolvimento de maneira cross-plataforma. Provavelmente a mais importante é que pode dar um resultado melhor e mais confiável. Isto acontece porque o desenvolvimento cross-plataforma requer que você gaste mais tempo planejando o seu software antes de começar a escrevê-lo. Também o força a desenvolver bons hábitos de progrmação para testar mais o seu software e desenvolver uma abordagem mais disciplinada em relação ao que você está fazendo. Estas coisas (planejar, testar, disciplina) tendem a contagiar outros aspectos do seu desenvolvimento, resultando em um ainda melhor design e confiabilidade.
44
55Outra vantagem do desenvolvimento cross-plataforma é que ele o expõe a outras plataformas. Por exemplo, muitos desennvolvedores para Windows e provavelmente todos os desenvolvedore para Linux poderiam se beneficiar de algum tempo gasto simplesmente usando o Mac como modo de desenvolver uma apreciação para software em facilidade de uso e estética. E muitos desenvolvedores Windows poderiam se beneficiar de como o Linux tende a usar arquivos-texto e scripts para muitas coisas sem perda de performance nas aplicações.
66
77Uma terceira vantagem do desenvolvimento cross-plataforma é que ela é por definição *inclusiva*, o que o força a considerar seus usuários mais que a maioria dos programadores de plataforma única fazem.
88
99A melhor maneira de fazer uma aplicação cross-plataforma é desenhá-la para ser assim. Se você planejar para adicionar suporte cross-plataforma mais tarde, você pode precisar reescrever partes do programa ou, pior, encontrar-se em um beco-sem-saída "Windows-only" que torne o suporte cross-plataforma difícil ou impossível.
1010
1111Se você já desenvolveu uma aplicação para Windows com Delphi, é possível em algumas situações convertê-la para cross-plataforma sem recomeçar. Se você quiser fazer uma conversão de mão-única do seu código e formulários Delphi para Lazarus, você pode usar alguns dos comandos de conversão do menu Ferramentas do Lazarus. Se você também quer converter para Lazrus, mas reter a compatibilidade com Delphi, \[discussion needed\].
1212
1313### Código separado para unidades UI e não-UI
1414
1515Provavelmente uma das mais importantes práticas de programação que você pode empregar com qualquer aplicação, seja cross-plataforma ou não, é dividir seu código entre unidades de interface de usuário (UI) e não-interface-de-usuário. Em geral, isto quer dizer que as suas unidades não-usuário não devem implementar algo da interface de usuário e as unidades de interface de usuário não devem conter nada da parte computacional ou de banco de dados do programa. Na prática , uma boa forma de forçar esta separação é requerer que as unidades que você desenvolve somente use unidades do seu próprio lado desta divisão. Por exemplo, suas unidades não-usuário não devem usar unidades da LCL ou unidades como Forms, Dialogs, StdCtrls, Button, Graphics, Controls, LMessages, etc, ou qualquer das suas unidades que usem essas unidades. E suas unidades-usuário não devem usar unidades como Math, Dbf, MySQLDB4, etc. Siga o exemplo do Free Pascal e do Lazarus, em que unidades de propósito geral como SysUtils, Classes e Variants não usam unidades LCL e unidades LCL como Forms e Controls não provêem rotinas de propósito geral.
1616
1717Existem muitas vantagens de dividir o seu código assim. Por exemplo, isso significa que você será capaz de usar as suas unidades não-usuário em qualquer tipo de programa, biblioteca, console, até uma aplcação Web, sem fazer qualquer modificação no código. E isto também significa que você pode desenvolver uma interface de usuário completamente diferente se necessário ou mudar para uma biblioteca ou controle sem modificar o código não-usuário remanescente. Também é decisivo que esta partição seja feita em projetos grandes de modo que múltiplos desenvolvedores possam trabalhar em diferentes partes do programa sem pisar nos pés uns dos outros.
1818
1919Você também pode achar isso útil para futuramente subdividir seu código não-UI. Por exemplo, você pode querer pôr todo o código de acesso a banco de dados em um grupo de unidades e todo o código de lógica de negócios e nnúmeros em outro grupo de unidades. Mais, pode querer pôr todo o código dependente de plataforma (shelling, registry, clipboard, etc.) em seu próprio grupo de unidades para isolar este código e tornar mais fácil portar para outras plataformas.
2020
2121### Usar arquivos de lote e arquivos shell
2222
2323Mesmo que o Lazarus permita editar e compilar código e configurar a maioria das switches sem deixar a IDE, você vai provavelmente achar útil criar muiitos arquivos de lote para cada projeto. Arquivos de lote são só arquivos de texto contendo comandos de console; você os cria com um editor de texto. Com Windows, arquivos de lote tem uma extensão .BAT ou .CMD; com OS X e Linux, arquivos de lote tem extensões .SH. Você tipicamente executa o arquivo de lote entrando o seu nome em uma janela de console, como segue:
2424
2525Com Windows:
2626
27-` mybatch.bat`
27+```text
28+ mybatch.bat
29+```
2830
2931Note que você pode omitir a extensão .BAT se não existir nenhum arquivo .EXE com a mesma extensão.
3032
3133Com Unix:
3234
33-` ./mybatch.sh`
35+```text
36+ ./mybatch.sh
37+```
3438
3539Existem muitas maneiras em que arquivos de lote podem ser usados em desenvolvimento. Por exemplo, você deve ter um grupo de opções de compilador que você usa durante o desenvolvimento e outro grupo que você usa para criar o executável que você distribui. Aqui está um exemplo de comando que você pode pôr em um arquivo de lote que executa o comppilador Free Pascal:
3640
3741Com Windows:
3842
39-` c:\lazarus\pp\bin\i386-win32\fpc.exe -Sda -Cirot -gl %1`
43+```text
44+ c:\lazarus\pp\bin\i386-win32\fpc.exe -Sda -Cirot -gl %1
45+```
4046
4147Com Unix:
4248
43-` /usr/local/bin/fpc -Sda -Cirot -gl $@`
49+```text
50+ /usr/local/bin/fpc -Sda -Cirot -gl $@
51+```
4452
4553O comando acima compila a unidade ou programa não-GUI especificado na linha de comando com compatibilidade Delphi, assertions, I/O checking, range checking, overflow checking, stack checking, and line number tracing ligadas. Note que você pode adicionar pre ou pós-comandos do compilador em um arquivo de lote. Por exemplo, você pode executar o utilitário strip.exe para diminuir o tamanho do seu executável ou copiar o executável para uma pasta diferente para testar.
4654
4755Aqui está um comando similar que você pode pôr em um arquivo de lote para compilar um programa GUI que você especificar na linha de comando:
4856
4957Com Windows (tudo numa única linha):
5058
51-` c:\lazarus\pp\bin\i386-win32\fpc.exe -dLCL -WG -Sda -Cirot -gl`\
52-`  -Fuc:\lazarus\lcl\units\i386-win32;c:\lazarus\lcl\units\i386-win32\win32 %1`
59+```text
60+ c:\lazarus\pp\bin\i386-win32\fpc.exe -dLCL -WG -Sda -Cirot -gl
61+ -Fuc:\lazarus\lcl\units\i386-win32;c:\lazarus\lcl\units\i386-win32\win32 %1
62+```
5363
5464Com OS X (tudo numa única linha):
5565
56-` /usr/local/bin/fpc -dLCL -WG -Sda -Cirot -gl -Fu/usr/local/share/lazarus/lcl/units/powerpc-darwin`\
57-`  -Fu/usr/local/share/lazarus/lcl/units/powerpc-darwin/gtk -Fl/usr/X11R6/lib/ -Fl/sw/lib/ $@`
66+```text
67+ /usr/local/bin/fpc -dLCL -WG -Sda -Cirot -gl -Fu/usr/local/share/lazarus/lcl/units/powerpc-darwin
68+ -Fu/usr/local/share/lazarus/lcl/units/powerpc-darwin/gtk -Fl/usr/X11R6/lib/ -Fl/sw/lib/ $@
69+```
5870
5971### Como evitar de usar um depurador
6072
6173Usar um depurador raramente é divertido. Aqui estão algumas técnicas simples que você vai empregar que vão minimizar o seu uso do depurador:
6274
6375Desenvolver com todos os run-time checks ligados. Você pode desligar alguns ou todos quando criar um executável para distribuição, pois o ganho o ganho no tamanho do código e na performance ao desligá-los é pequeno. Mais, deixar as checagens ligadas pode ajudar a localizar bugs que aparecem mais tarde.
6476
6577- Usar assertions. Como para run-time checks, assertions podem ser desligadas depois, pois deixando-os ligados podem ajudar a localizar bugs que os seus usuários encontrarem.
6678- Compilar com line number tracing ligado. Você pode desligar quando publicar seu programa para diminuir o tamanho do executável.
6779- Se o seu código maneja excessões, você pode até determinar o número da linha e nome do fonte onde a excessão ocorreu usando line number tracing e a função FPC BackTraceStrFunc , como neste exemplo de código:
6880
69-`   try`\
70-`     raise Exception.Create('Exception here');  `\
71-`   except`\
72-` // Handle exception here.`\
73-` {$IFDEF FPC}`\
74-`     WriteLn(BackTraceStrFunc(ExceptAddr));`\
75-` {$ENDIF}`\
76-`     end;`
81+``` pascal
82+ try
83+ raise Exception.Create('Exception here');
84+ except
85+ // Handle exception here.
86+ {$IFDEF FPC}
87+ WriteLn(BackTraceStrFunc(ExceptAddr));
88+ {$ENDIF}
89+ end;
90+```
7791
7892As linhas {\$IFDEF} e {\$ENDIF} garantem que você possa compilar este código com Delphi também.
7993
8094- Inicialize variáveis. Mesmo que o Delphi e o FPC inicializem variáveis globais e campos de objetos, variáveis locais para rotinas não são inicializadas. É uma boa idéia inicilizar todas as variáveis só para ficar claro quais são os valores iniciais.
8195- Ligue os compiler warnings e preste atenção a eles.
8296- Use "with" esparçamente. Mesmo que o estamento Pascal "with" possa economizar bastante digitação, ele pode esconder referências de campo incorretas se você os usar aninhados ou se um campo com o mesmo nome no seu estamento "with" é adicionado algum dia a uma classe ancestral.
8397- Execute o seu código através de múltiplos compiladores. Sempre vai haver diferenças em como diferentes compiladores processam seu código. Às vezes elas são ditadas pelo sistema operacional ou pelo hardware. Tente compilar seu programa (ou pelo menos a parte não-UI) com dois ou três compiladores.
8498
8599Por exemplo, se o eu código compilar e executar corretamente com Delphi e pelo menos duas plataformas do FPC, você vai estar mais perto não só de um programa estável em cross-plataforma como de ter um programa que você sabe que vai funcionar.
86100
87101---
88102*From the Free Pascal wiki, page "The Power of Proper Planning and Practices/pt", as it stood on 2007-05-23 after a change by Antoniog, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history