Programaзгo modular -
RebeloX - 05.03.2015
Programaзгo Modular
A programaзгo modular, tambйm conhecido por Modularidade й um conceito onde o sistema ou software й divido em partes distintas. O conceito de modularidade passa por criar mуdulos com funзхes diferentes e usar um mуdulo principal, por exemplo:
PHP Code:
Soma(x,y) return printf("%d + %d = %d",x,y,(x+y));
Divisao(x,y) return printf("%d/%d = %d",x,y,(x/y));
Multiplicao(x,y) return printf("%d*%d = %d",x,y(x*y));
Subtracao(x,y) return printf("%d-%d = %d",x,y,(x-y));
main()
{
Soma(2,5);
Divisao(2,5);
Multiplicao(2,5);
Subtracao(2,5);
}
Neste exemplo jб podemos verificar a existкncia da modularidade, ou seja, nуs criamos funзхes responsбveis por tarefas ou algoritmos, em vez de colocarmos tudo em uma sу parte nуs separamos em pequenas partes e depois juntamos tudo.
Com isto deu-se a criaзгo de bibliotecas, as tais famosas #includes, fazendo com que cada biblioteca fosse responsбvel por uma determinada tarefa. Jб quando nуs programa-mos pawn temos tendкncia a escrever um cуdigo em apenas um ficheiro e o que acontece й que ele torna-se grande e nуs acabamos-nos por perder no meio do cуdigo em si.
As pessoas que usam a modularidade pode-se dizer que sгo pessoas mais organizadas, pessoas que se preocupam com a estйtica do cуdigo e preocupam-se em nгo se perder no meio do oceano. Isto porque se separar-mos tudo й mais fбcil encontrar algo e esse algo por vezes pode ser um bug.
Um exemplo da programaзгo modular й o Paradise City RPG, o Lуs desenvolveu o gamemode em mуdulos tornando o mesmo bastante organizado e fбcil de outros entenderem, nos caso de haverem mais developers claro.
A ideia de como dividir o gamemode em mуdulos depende bastante de cada um e nгo existe uma regra global, eu pessoalmente divido por sistemas, ou seja, se for o sistema de carros й uma coisa, casa outra, jogador outra, por ai a diante.
Agora claro existem questхes tйcnicas como por exemplo, tenho de definir as includes em todos os mуdulos? Nгo.
Para que nгo sabe a funзгo #include serve apenas para incluir o cуdigo em determinado cуdigo ou seja
calculos.inc
PHP Code:
Soma(x,y) return printf("%d + %d = %d",x,y,(x+y));
Divisao(x,y) return printf("%d/%d = %d",x,y,(x/y));
Multiplicao(x,y) return printf("%d*%d = %d",x,y(x*y));
Subtracao(x,y) return printf("%d-%d = %d",x,y,(x-y));
calcular.pwn
PHP Code:
#include <calculos.inc>
main()
{
Soma(2,5);
Divisao(2,5);
Multiplicao(2,5);
Subtracao(2,5);
}
Realidade:
PHP Code:
Soma(x,y) return printf("%d + %d = %d",x,y,(x+y));
Divisao(x,y) return printf("%d/%d = %d",x,y,(x/y));
Multiplicao(x,y) return printf("%d*%d = %d",x,y(x*y));
Subtracao(x,y) return printf("%d-%d = %d",x,y,(x-y));
main()
{
Soma(2,5);
Divisao(2,5);
Multiplicao(2,5);
Subtracao(2,5);
}
Isso й o que acontece quando se usa o #include, entгo vamos agora а pergunta em si.
Quando criamos mуdulos nгo й necessбrio estar a incluir as mesmas includes, o que devemos fazer й incluir as includes principais no ficheiro principal (main.pwn) e depois incluir os mуdulos
PHP Code:
#include <a_samp>
#include <sscanf>
#include <zcmd>
//etc..
//mуdulos
#include "modulos/player.pwn"
#include "modulos/vehs.pwn"
#include "modulos/props.pwn"
//etc..
O que acontecerб й que o cуdigo juntarб tudo e como sabemos os compiladores funcionam de cima para baixo, entгo eles iram definir o que й necessбrio em baixo.
Entгo mas e as callbacks do sa-mp, precisa de fazer hook? Nгo necessariamente.
А um tempo atrбs eu tive uma conversa com o y_less sobre usar o Hook Method 7 e fazer a chamada normal das callbacks, entгo ele disse-me que para fazer a chamada normal das callbacks requere disciplina, ou seja, й necessбrio saber o que se esta a fazer para nгo causar problemas no script e segundo ele o y_hooks e os hook methods foram desenvolvidos para trabalharem em transparкncia, ou seja, eles redefinem as callbacks afim do outro programador nгo se esquecer de fazer a chamada.
Quote:
Originally Posted by Y_Less
I mean if you are explicitly calling callbacks in other files, you have to remember to do so. Hooks were developed as most includes used to state something like:
Quote:
To use this include, add "Inc_OnPlayerConnect(playerid);" to "OnPlayerConnect" and "Inc_OnPlayerDisconnect(playerid, reason);" to "OnPlayerDisconnect".
|
This was unwieldy, frequently ignored, and the primary source of bugs in most people's use of these includes. Hooks were developed to do it transparently.
|
Um exemplo de chamada й o seguinte:
main.pwn
PHP Code:
public OnPlayerConnect(playerid)
{
player_OnPlayerConnect(playerid); //chama o mуdulo player.pwn
return 1;
}
player.pwn
PHP Code:
public player_OnPlayerConnect(playerid)
{
//login / registro
return 1;
}
O que acontece й que nуs chama-mos a nossa funзгo personalizada a partir da funзгo "mгe" й como estivesse-mos a criar uma бrvore onde existem o parent e os childs. Na minha opiniгo nгo existe nenhuma necessidade de usar y_hooks ou qualquer mйtodo hooks ao desenvolver um gamemode em mуdulos isto porque sendo o programador o ъnico desenvolvedor ou a equipa os ъnicos nгo existe necessidade de trabalhar nessa transparкncia pois ambos tкm conhecimento do que estгo a fazer e por sua vez nгo se irгo esquecer de ligar o parente а child.
Isto tambйm й um mйtodo bastante usado no LS-RP, por exemplo, eles quando utilizam funзхes como OnPlayerConnect eles fazem desta forma Damian_OnPlayerConnect , Mmartin_OnPlayerConnect, etc..
Isto й uma boa forma de organizaзгo e para quem deseja trabalhar nesta бrea devem levar em consideraзгo isto pois caso contrбrio pode-se tornar complicado trabalhar em equipa.
Nгo sei se o tutorial estб grande coisa, jб nгo faзo а algum tempo, mas pronto, como fizeram-me um pedido decidi vir aqui esclarecer umas dъvidas e expor a minha opiniгo e conhecimento, obrigado a todos!
Re: Programaзгo modular -
arakuta - 05.03.2015
Bom tutorial... Apesar de ser bem simples, tem gente que nгo sabe
Re: Programaзгo modular -
ipsLuan - 05.03.2015
O tutorial estб уtimo, parabйns.
Respuesta: Programaзгo modular -
ipsBruno - 05.03.2015
Й um bom mйtodo de organizaзгo, principalmente para projetos muito grandes.
Parabйns Gonзalo, pelo visto continuas um bom programador
Sucesso
Re: Programaзгo modular -
Locky_ - 05.03.2015
Um outro exemplo de organizaзгo й do PPC_Trucking. A versгo do PowerPC603 й organizada por diversas includes (Dialogs,Definiзхes,Comandos,Salvamento,Profissхes )... E realmente, fica algo mais organizado e melhor.
Re: Programaзгo modular -
ipsLuan - 05.03.2015
Hб algum modo de criptografar os dados dos mуdulos?
Exemplo: No GameMode ele й criptografado em AMX.
Re: Programaзгo modular -
Dolby - 06.03.2015
Sensacional, de fato. Parabйns pelo bom trabalho Gonзalinho.
Quote:
Originally Posted by Luan Argolo
Hб algum modo de criptografar os dados dos mуdulos?
Exemplo: No GameMode ele й criptografado em AMX.
|
E qual seria a necessidade disto?
Re: Programaзгo modular -
PT - 06.03.2015
Desde sempre que utilizo esse tipo de mйtodo em programaзгo ligada a sa-mp nunca me arrependi de o fazer.
Contudo se nгo for bem pensada podem vir a ter problemas.
Usar hooks ou "Damian_OnPlayerConnect" da no mesmo isso ja vai da preferкncia de cada um.
Quote:
Originally Posted by Luan Argolo
Hб algum modo de criptografar os dados dos mуdulos?
Exemplo: No GameMode ele й criptografado em AMX.
|
pra que?
Re: Programaзгo modular -
Lуs - 06.03.2015
Nгo hб a necessidade de criptografar os arquivos dos mуdulos, visto que quando o arquivo principal й compilado, os mуdulos nгo mergem ao arquivo principal assim como as includes fazem. Sendo assim, se descompilarem o arquivo principal, o arquivo se torna inutilizбvel, visto que sу terб o cуdigo fonte do arquivo principal. Ou seja, um gamemode modularizado й muito seguro, de fato.
Bom tutorial.
Re: Programaзгo modular -
PT - 06.03.2015
Quote:
Originally Posted by Lуs
Sendo assim, se descompilarem o arquivo principal, o arquivo se torna inutilizбvel, visto que sу terб o cуdigo fonte do arquivo principal. Ou seja, um gamemode modularizado й muito seguro, de fato.
|
Na verdade nao tenho a certeza se й bem assim, visto que as includes tbm sao colocadas no .amx principal por isso acho que fica tudo no .amx...
Mas irei confirmar amanha se me lembrar e se tal edito este post aqui.