Ola pessoal,Esse e modelo de documento de requisitos muito completo que encontrei. Segue o link. O texto esta em ingles e contempla as principais secoes de um documento de requisitos. Vale a pena conferir:www.processimpact.com/process_assets/srs_template.docAte a proxima! Ola pessoal, tudo bem?Neste tutorial vamos implementar uma mascara generica para campos numericos usando Javascript. A funcao aceita como parametro uma string correspondente ao padrao do campo, podendo ser utilizada como mascara de CPF, mascara de CNPJ, mascara de data e hora, de telefone, etc. Para a string do padrao, sera utilizado o caracter '#' para identificar um digito. Dessa forma, para uma mascara de CPF, o padrao fornecido como parametro sera "###.###.###-##". No codigo, fornecemos ja alguns exemplos da aplicacao da mascara generica. Este e um exemplo para fins didaticos. Fique a vontade para apontar melhorias e correcoes. Bons estudos! <html> <head> <title>Mascara generica para campos numericos</title> <script language="JavaScript" type="text/javascript"> function mascaraGenerica(evt, campo, padrao) { //testa a tecla pressionada pelo usuario var charCode = (evt.which) ? evt.which : evt.keyCode; if (charCode == 8) return true; //tecla backspace permitida if (charCode != 46 && (charCode < 48 || charCode > 57)) return false; //apenas numeros campo.maxLength = padrao.length; //Define dinamicamente o tamanho maximo do campo de acordo com o padrao fornecido //aplica a mascara de acordo com o padrao fornecido entrada = campo.value; if (padrao.length > entrada.length && padrao.charAt(entrada.length) != '#') { campo.value = entrada + padrao.charAt(entrada.length); } return true; } </script> </head> <body> <h2>Mascara generica para campos numericos</h2> <form> Mascara de CPF: <input type="text" name="data" OnKeyPress="return mascaraGenerica(event, this, '###.###.###-##');" / > </form> <form> Mascara de CNPJ: <input type="text" name="data" OnKeyPress="return mascaraGenerica(event, this, '##.###.###/####-##');" / > </form> <form> Mascara de Hora: <input type="text" name="data" OnKeyPress="return mascaraGenerica(event, this, '##:##:##');" / > </form> <form> Mascara de Telefone: <input type="text" name="data" OnKeyPress="return mascaraGenerica(event, this, '+## ## ####-####');" / > </form> </body> </html> Quando programamos em C++, temos geralmente um arquivo header, que guarda as assinaturas dos metodos, e um arquivo.cxx, que tem as implementacoes daquilo que foi declarado no arquivo header. Vamos exemplificar o problema da referencia circular.foo.h#include "bar.h"class Foo { public: Bar* bar;}bart.h#include "foo.h"class Bar { public: Foo* foo;}Note que na classe Foo precisamos incluir a classe Bar e vice-e-versa. Porem, se tentarmos compilar esse codigo, obteremos um erro de compilacao.O C++, porem nos da uma ferramenta para acabar com esse problema: o uso de forward declarations. Como o proprio nome ja diz, a ideia e anteciparmos a declaracao de uma classe a ser usada, porem sem incluir o arquivo header propriamente dito. Vejamos:arquivo1.h:#include "bar.h"class Bar; //Forward declaration da classe Barclass Foo { public: Bar* bar;}arquivo2.h:#include "foo.h"class For; //Forward declaration da classe Fooclass Bar { public: Foo* foo;}Isso resolve o problema das referencias circulares. Agora so e dar o include dos arquivo headers dentro do arquivo .cxx, onde os metodos foram implemetados. Esse e o segredo: include so nos .cxx, dentro do .h usamos forward declaration para a declaracao de classes interdependentes.Por enquanto e so. Ate a proxima! Ola a todos. Peco desculpas pelo tempo sem postagens. Ultimamente tem sido muito corrido para mim. Por isso gostaria de