Programação Modular
O programa modular, também conhecido por Modularidade é um conceito onde o sistema ou software é dividido em partes distintas. O conceito de modularidade passa por criar módulos com funções diferentes e usar um módulo principal, por exemplo:
- Código:
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 peão temos tendкncia a escrever um cуdigo em apenas um arquivo eo que acontece й que ele torna-se grande e nуs a fim-nos por perder no meio do cуdigo em si.
As pessoas que usam a modularidade podem-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, no 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 duvidosamente dividido 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 saiba a funзгo #include serve apenas para incluir o cуdigo em determinado cуdigo ou seja
calculos.inc
Código PHP: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 peão temos tendкncia a escrever um cуdigo em apenas um arquivo eo que acontece й que ele torna-se grande e nуs a fim-nos por perder no meio do cуdigo em si.
As pessoas que usam a modularidade podem-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, no 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 duvidosamente dividido 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 saiba a funзгo #include serve apenas para incluir o cуdigo em determinado cуdigo ou seja
calculos.inc
- Código:
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
Código PHP:- Código:
#include <calculos.inc>
main()
{
Soma(2,5);
Divisao(2,5);
Multiplicao(2,5);
Subtracao(2,5);
}
Realidade:
Código PHP:- Código:
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 os mesmos includes, o que devemos fazer é incluir as includes principais no arquivo principal (main.pwn) e depois incluir os módulos
Código PHP:Quando criamos módulos não é necessário estar a incluir os mesmos includes, o que devemos fazer é incluir as includes principais no arquivo principal (main.pwn) e depois incluir os módulos
- Código:
#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 acontece é 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.
Citar: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.
Postado originalmente por Y_Less Quero dizer, se você estiver explicitamente chamando retornos de chamada em outros arquivos, lembre-se de fazê-lo. Hooks foram desenvolvidos como a maioria dos includes usados para declarar algo como: Citar:
Isso era pesado, frequentemente ignorado e a principal fonte de bugs no uso deles pela maioria das pessoas. Ganchos foram desenvolvidos para fazer isso de forma transparente.[/size] |
Um exemplo de chamada é o seguinte:
main.pwn
Código PHP:main.pwn
- Código:
public OnPlayerConnect(playerid)
{
player_OnPlayerConnect(playerid); //chama o mуdulo player.pwn
return 1;
}
jogador.pwn
Código PHP:- Código:
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 estávamos-mos a criar uma árvore onde existem o pai e os filhos. 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 pai а filho.
Isto também é um método bastante usado no LS-RP, por exemplo, eles quando usam 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 deve 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 me fez um pedido vir aqui esclarecer umas dъvidas e expor a minha opiniгo e conhecimento, obrigado a todos!
Isto também é um método bastante usado no LS-RP, por exemplo, eles quando usam 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 deve 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 me fez um pedido vir aqui esclarecer umas dъvidas e expor a minha opiniгo e conhecimento, obrigado a todos!
Creditos: Rebelox