<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://jams.uni-jena.de/ilmswiki/pt/skins/common/feed.css?301"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="Pt">
		<id>https://jams.uni-jena.de/ilmswiki/pt/index.php?action=history&amp;feed=atom&amp;title=Tutorial_para_Programadores_de_Modelos</id>
		<title>Tutorial para Programadores de Modelos - História de revisão</title>
		<link rel="self" type="application/atom+xml" href="https://jams.uni-jena.de/ilmswiki/pt/index.php?action=history&amp;feed=atom&amp;title=Tutorial_para_Programadores_de_Modelos"/>
		<link rel="alternate" type="text/html" href="https://jams.uni-jena.de/ilmswiki/pt/index.php?title=Tutorial_para_Programadores_de_Modelos&amp;action=history"/>
		<updated>2026-06-05T06:12:54Z</updated>
		<subtitle>Histórico de edições para esta página nesta wiki</subtitle>
		<generator>MediaWiki 1.17.0</generator>

	<entry>
		<id>https://jams.uni-jena.de/ilmswiki/pt/index.php?title=Tutorial_para_Programadores_de_Modelos&amp;diff=10118&amp;oldid=prev</id>
		<title>DanielS: Criou nova página com 'de:Tutorium_Modellentwickler en:Tutorial_Model_Developers =JAMS Componentes-API=  ===Tipos de dados JAMS===  Os seguintes tipos de dados do JAMS estão disponíveis:...'</title>
		<link rel="alternate" type="text/html" href="https://jams.uni-jena.de/ilmswiki/pt/index.php?title=Tutorial_para_Programadores_de_Modelos&amp;diff=10118&amp;oldid=prev"/>
				<updated>2011-12-10T12:30:00Z</updated>
		
		<summary type="html">&lt;p&gt;Criou nova página com &amp;#039;&lt;a href=&quot;http://ilms.uni-jena.de/ilmswiki/de/index.php/Tutorium_Modellentwickler&quot; class=&quot;extiw&quot; title=&quot;de:Tutorium Modellentwickler&quot;&gt;de:Tutorium_Modellentwickler&lt;/a&gt; &lt;a href=&quot;http://ilms.uni-jena.de/ilmswiki/index.php/Tutorial_Model_Developers&quot; class=&quot;extiw&quot; title=&quot;en:Tutorial Model Developers&quot;&gt;en:Tutorial_Model_Developers&lt;/a&gt; =JAMS Componentes-API=  ===Tipos de dados JAMS===  Os seguintes tipos de dados do JAMS estão disponíveis:...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nova página&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[de:Tutorium_Modellentwickler]]&lt;br /&gt;
[[en:Tutorial_Model_Developers]]&lt;br /&gt;
=JAMS Componentes-API=&lt;br /&gt;
&lt;br /&gt;
===Tipos de dados JAMS===&lt;br /&gt;
&lt;br /&gt;
Os seguintes tipos de dados do JAMS estão disponíveis: &lt;br /&gt;
* Attribute.Boolean &lt;br /&gt;
* Attribute.BooleanArray &lt;br /&gt;
* Attribute.Calendar &lt;br /&gt;
* Attribute.DirName &lt;br /&gt;
* Attribute.Document &lt;br /&gt;
* Attribute.Double &lt;br /&gt;
* Attribute.DoubleArray &lt;br /&gt;
* Attribute.Entity &lt;br /&gt;
* Attribute.EntityCollection &lt;br /&gt;
* Attribute.FileName &lt;br /&gt;
* Attribute.Float &lt;br /&gt;
* Attribute.FloatArray &lt;br /&gt;
* Attribute.Geometry &lt;br /&gt;
* Attribute.Interger &lt;br /&gt;
* Attribute.IntegerArray &lt;br /&gt;
* Attribute.Long &lt;br /&gt;
* Attribute.LongArray &lt;br /&gt;
* Attribute.Object &lt;br /&gt;
* Attribute.String &lt;br /&gt;
* Attribute.StringArray &lt;br /&gt;
* Attribute.TimeIntervall &lt;br /&gt;
&lt;br /&gt;
==Componentes JAMS==&lt;br /&gt;
O principal fundamento de qualquer modelo JAMS é o assim denominado '''componente'''. Um componente é uma classe de JAVA que implementa três métodos diferentes (a saber, '''init''','''run''' e &lt;br /&gt;
'''cleanup'''), que são acionados em fases de execução correspondentes, através das quais um modelo JAMS itera. Como indicado pelos seus nomes, estes métodos são ativados no início, durante &lt;br /&gt;
e no final da vida útil de um componente. Embora os métodos “init” e “clean” sejam executados &lt;br /&gt;
apenas uma vez, o método de execução “run” pode ser ativado várias vezes, dependendo do objetivo e da configuração do componente. &lt;br /&gt;
&lt;br /&gt;
A comunicação entre a estrutura (o framework) e os outros componentes é realizada por atributos públicos arbitrários, que devem satisfazer duas condições: (i) ser de um tipo de dados JAMS válido e (ii) &lt;br /&gt;
ser marcados por anotações especiais JAVA, ou seja, meta-informação sintática. Estas &lt;br /&gt;
anotações de atributo são usadas para definir o seu tipo I/O (read, write), o seus &lt;br /&gt;
valores padrões, a unidade física e limites (se numéricos), e um pequeno texto descrevendo o &lt;br /&gt;
finalidade do atributo. Estas informações são usadas tanto para que o sistema de execução possa criar e interligar atributos e para que os GUIs possam fornecer ajuda durante o design do modelo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Componentes de Contexto JAMS==&lt;br /&gt;
&lt;br /&gt;
Um contexto JAMS é um componente especial composto de várias partes, que pode integrar &lt;br /&gt;
outros componentes e contextos, que são então chamados de “filhotes”. Um contexto &lt;br /&gt;
serve dois propósitos principais: (i) controlar a execução de seus filhotes, e (ii) servir &lt;br /&gt;
como armazenamento de dados para os seus filhotes, permitindo uma troca de dados flexível entre eles. &lt;br /&gt;
Dependendo da finalidade de um dado contexto, ele pode acionar seus filhotes várias vezes ao longo de um número de iterações (Figura à esquerda), mas apenas uma vez, se alguma condição pré-definida estiver satisfeita (Figura ao centro) ou apenas uma vez em uma sequência (Figura à direita). Já que contextos são componentes especializados, eles podem estar integrados em outros &lt;br /&gt;
contextos, permitindo a formação de complexas hierarquias de componentes e estruturas para o controle de execuções . &lt;br /&gt;
A figura a seguir mostra exemplos de contexto. &lt;br /&gt;
&lt;br /&gt;
[[File: Context_examples.png]]&lt;br /&gt;
&lt;br /&gt;
==Entrada / Saída de Dados JAMS==&lt;br /&gt;
&lt;br /&gt;
Dados I/O no JAMS podem ser processados de duas maneiras diferentes. Como uma primeira opção, um componente pode ser usado para ler ou gravar dados a partir de qualquer fonte de dados, por exemplo, arquivos ou bancos de dados. Neste caso, o programador dos componentes deve encarregar-se em solicitar todas as informações necessárias através dos dados de entrada do componente (como por exemplo, nomes de arquivos), ter acesso a fonte de dados e fornecer potenciais resultados (por exemplo, fazer a leitura de dados de um arquivo), assim como dados de saída. Uma vantagem dessa abordagem é um elevada flexibilidade no acesso à informação externa. Por outro lado, esses componentes geralmente precisam ser adaptados a determinados modelos e formatos de dados, o que limita a sua reutilização. &lt;br /&gt;
&lt;br /&gt;
A segunda opção para o processamento da troca de dados no JAMS é o uso da interface de software DataStore. Esta interface pode ser utilizada para ler / gravar dados de / em um armazenamento de dados externo, o qual pode ser um arquivo, ou um sistema de bancos de dados ou um recurso de rede. Ele fornece funções para ler e gravar conjuntos de dados, cada um representado por uma lista ordenada de objetos de dados. Os objetos de dados são descritos por metadados, contendo, por exemplo, seu tipo, &lt;br /&gt;
limites e significado. A figura a seguir dá uma visão geral da estrutura do DataStore JAMS, mostrando dois tipos de DataStore para a leitura (InputDataStore) e gravação (OutputDataStore) de dados. No caso do InputDataStore, métodos podem ser utilizados para solicitar (hasNext) e recuperar (getNext) os dados disponíveis (DataSet). Da mesma forma, o OutputDataStore fornece métodos para gravar dados no &lt;br /&gt;
dispositivo de armazenamento subjacente. &lt;br /&gt;
&lt;br /&gt;
[[File: I_O_System.png]] &lt;br /&gt;
&lt;br /&gt;
Os tipos de dados suportados representam os dados disponíveis JAMS e incluem dados numérios, tipos string e calendário, e geometrias espaciais. A fim de representar a último, o JAMS faz uso do padrão do  Simple Feature Access, tal como definido pelo Open Geospatial Consortium. &lt;br /&gt;
&lt;br /&gt;
Para acessar os dados de um DataStore, sua última fonte de dados e o software para acessá-lo devem ser identificados e parametrizados. Isso é feito por documentos XML especiais. Cada um destes &lt;br /&gt;
define um DataStore e serve às seguintes finalidades: &lt;br /&gt;
&lt;br /&gt;
(1) identificar e parametrizar um componente de software I/O que, no final das contas, pode vir a acessar  um certo tipo de fonte de dados, &lt;br /&gt;
&lt;br /&gt;
(2) definir uma ou mais fontes de dados para serem acessadas ​​por esse componente, e no caso de &lt;br /&gt;
um InputDataStore: &lt;br /&gt;
&lt;br /&gt;
(3) definir como os dados recuperados serão formatados e apresentados. &lt;br /&gt;
&lt;br /&gt;
Os componentes de software I/O podem ser fornecidos pelo usuário e são disponibilizados para o JAMS através de um plug-in mecanismo. Como exemplo, esta poderia ser uma classe de Java que é capaz de ler arquivos com o formato ASCII contendo informações de séries temporais. Parâmetro pode ser o nome do arquivo e o tamanho do buffer de leitura. &lt;br /&gt;
&lt;br /&gt;
=Desenvolvimento de Componentes JAMS=&lt;br /&gt;
&lt;br /&gt;
==Instalação de um ambiente de Desenvolvimento==&lt;br /&gt;
&lt;br /&gt;
Pode-se baixar o ambiente de desenvolvimento '''NetBeans''' na página http://netbeans.org gratuitamente. A última versão é a '''NetBeans IDE 6.9.1'''. &lt;br /&gt;
Selecione '''Java SE''', '''JavaFX''', '''Java''' ou '''Todos(all)''' como o '''IDE NetBeans Download package'''. &lt;br /&gt;
Além disso, o Java Development Kit (JDK) é necessário e pode ser baixado em http://www.oracle.com/technetwork/java/javase/downloads/index.html. &lt;br /&gt;
&lt;br /&gt;
Seu ambiente de desenvolvimento NetBeans fica assim depois de iniciá-la: &lt;br /&gt;
&lt;br /&gt;
[[File: Bild1_1.png]] &lt;br /&gt;
&lt;br /&gt;
==Baixando códigos-fonte de JAMS/J2000 da Internet==&lt;br /&gt;
&lt;br /&gt;
Os códigos-fonte de Java JAMS/J2000 e os vários componentes-padrão, incluindo todas as bibliotecas necessárias, podem ser baixados em http://www.geoinf.uni-jena.de/5580.0.html, usando o link: '''JAMS-2 16-src.tgz'''. &lt;br /&gt;
&lt;br /&gt;
[[File: Quellen_1.png]] &lt;br /&gt;
&lt;br /&gt;
As pastas-fonte a seguir estão incluídas: &lt;br /&gt;
&lt;br /&gt;
[[File: Quellordner.png]] &lt;br /&gt;
&lt;br /&gt;
==Configuração Projetos no NetBeans==&lt;br /&gt;
&lt;br /&gt;
Os projetos devem ser integrados na seguinte ordem: &lt;br /&gt;
&lt;br /&gt;
===Passo 1 - Integrando o Projeto JAMS===&lt;br /&gt;
&lt;br /&gt;
Primeiramente, os códigos-fonte JAMS/J2000 têm de ser carregadas no Netbeans. Nesta primeira etapa, o projeto JAMS é configurado. Para tal, abra o NetBeans e selecione '''Novo Projeto''' sob o item de menu '''Arquivo'''. &lt;br /&gt;
&lt;br /&gt;
[[File: Neues_Projekt.png]] &lt;br /&gt;
&lt;br /&gt;
A seguinte janela irá aparecer: &lt;br /&gt;
&lt;br /&gt;
[[File: Projekt_laden1.png]] &lt;br /&gt;
&lt;br /&gt;
Já que é necessário integrar um código fonte existente, selecione '''Java Project with Existing Source'''. Clique em '''Next''' (próximo). &lt;br /&gt;
Na segunda etapa, é preciso fornecer um nome e uma pasta de projeto. Dê ao projeto o nome JAMS. A pasta do projeto é inserida como uma pasta-padrão, mas ela pode ser modificada. Clique em '''Next'''. &lt;br /&gt;
&lt;br /&gt;
[[File: Projekt_laden2_2.png]] &lt;br /&gt;
&lt;br /&gt;
Clicando no botão '''Add Folder''' é preciso carregar os seguintes códigos-fonte para o projeto: &lt;br /&gt;
# JAMSapi&lt;br /&gt;
# JAMScommon&lt;br /&gt;
# JAMSExplorer&lt;br /&gt;
# JAMSMain&lt;br /&gt;
# JAMSRemote&lt;br /&gt;
# JAMSstarter&lt;br /&gt;
# JAMSui&lt;br /&gt;
&lt;br /&gt;
[[File: Projekt_laden3_1.png]] &lt;br /&gt;
&lt;br /&gt;
Clique em '''Finish'''. &lt;br /&gt;
&lt;br /&gt;
Na próxima etapa, as '''bibliotecas''' necessárias para o projeto precisam ser carregadas. Para encontrá-las na pasta-fonte baixada, sob JAMS-2_x-src \ ext. (X representa a versão que está atualmente baixada, e que muda com o tempo). &lt;br /&gt;
Clique com o botão direito do mouse no “Projeto JAMS”, no projeto JAMS gerado. &lt;br /&gt;
Selecione o ponto '''Properties'''. &lt;br /&gt;
&lt;br /&gt;
[[File: Projekt_laden3_2.png]] &lt;br /&gt;
&lt;br /&gt;
Selecione o item '''Libraries''' na parte direita da janela '''Project Properties - JAMS'''  sob '''Categories'''. Usando o botão '''Add JAR / Folder''' as bibliotecas necessárias podem ser carregadas. Carregue todas as bibliotecas que estão disponíveis na pasta-fonte baixada JAMS-2_x-src \ ext. &lt;br /&gt;
&lt;br /&gt;
[[File: Bibliotheken_laden.png]] &lt;br /&gt;
&lt;br /&gt;
O projeto JAMS foi criado com sucesso. &lt;br /&gt;
  &lt;br /&gt;
[[File: JAMS_Projekt.png]] &lt;br /&gt;
&lt;br /&gt;
Se desejar compilar o projeto, clique com o botão direito do mouse sobre o projeto JAMS e selecione o item '''Build and Clean'''. O JAMS.jar será gerado. Na janela inferior esquerda da seu ambiente de desenvolvimento NetBeans, pode-se verificar se o processo foi bem sucedido e onde a JAMS.jar foi salva. &lt;br /&gt;
&lt;br /&gt;
[[File: Build_Clean.png]] &lt;br /&gt;
&lt;br /&gt;
===Passo 2 - Integrando o Projeto J2000===&lt;br /&gt;
&lt;br /&gt;
Integre o projeto J2000, como descrito no primeiro passo, como '''novo projeto com códigos-fonte existentes'''. Os códigos-fonte estão no diretório já também baixado ...\JAMS-x-src\J2K\src. &lt;br /&gt;
&lt;br /&gt;
[[File: J2000_Quellen.png]] &lt;br /&gt;
&lt;br /&gt;
Carregue como biblioteca o JAMS.jar criado no primeiro passo. &lt;br /&gt;
&lt;br /&gt;
[[File: Bibliotheken_laden_J2000.png]] &lt;br /&gt;
&lt;br /&gt;
Compile o novo projeto clicando com o botão direito do mouse sobre o projeto J2000 e selecionando o item de menu '''Build and Clean'''. &lt;br /&gt;
Na janela inferior direita do seu ambiente de desenvolvimento NetBeans, deverá constar '''BUILD SUCCESSFUL'''. &lt;br /&gt;
&lt;br /&gt;
===Passo 3 - Integrando o Projeto JAMSComponents===&lt;br /&gt;
&lt;br /&gt;
Integre o projeto JAMSComponents como '''novo projeto com códigos-fonte existentes''' como descrito no passo 1. Os códigos-fonte estão no diretório ...\JAMS-x-src\JAMSComponents\src, o qual também já está baixado. &lt;br /&gt;
&lt;br /&gt;
Carregue como biblioteca o JAMS.jar que foi gerado no primeiro passo, bem como todas as bibliotecas (*. jar - Files) da pasta ...\JAMS-x-src\ext. &lt;br /&gt;
[[File: Bibliotheken_laden_JAMSComponents.png]] &lt;br /&gt;
&lt;br /&gt;
Compile o novo projeto clicando com o botão direito do mouse sobre o projeto J2000 e selecionando o item de menu '''Build and Clean'''. &lt;br /&gt;
Na janela inferior direita do seu ambiente de desenvolvimento NetBeans, deverá constar '''BUILD SUCCESSFUL'''. &lt;br /&gt;
&lt;br /&gt;
===Iniciando componentes de processo a partir do NetBeans===&lt;br /&gt;
&lt;br /&gt;
Cada componente de processo que tenha um procedimento principal pode ser iniciado diretamente a partir do NetBeans. Como exemplo, iniciaremos diretamente [[Tutorial_Basic_Users | JAMSLauncher]], como descrito em detalhes no Tutorial Usuários Iniciantes. &lt;br /&gt;
&lt;br /&gt;
==Principais Classes==&lt;br /&gt;
&lt;br /&gt;
Clicando com o botão direito do mouse sobre o projeto '''JAMS'''. Escolha o item de menu '''Properties''. Clique em '''run''' na parte esquerda da janela. A janela a seguir deve aparecer: &lt;br /&gt;
&lt;br /&gt;
[[File: Main_classes.png]] &lt;br /&gt;
&lt;br /&gt;
No campo '''Main Class''' (classe principal), escreva a classe que deve ser iniciada durante a execução do projeto. Com um único clique no botão '''Browse …''', todas as '''Main Classes''' disponíveis no projeto são mostrados. Esses são todos os componentes que têm um procedimento principal (Main procedure). Escolha entre as seguintes classes para iniciar as interfaces de usuário JAMS maiores: &lt;br /&gt;
&lt;br /&gt;
*'''Jamsui.launcher.JAMSui''' para o JAMS Launcher&lt;br /&gt;
*'''Jamsui.juice.JUICE''' para o JAMS Builder&lt;br /&gt;
&lt;br /&gt;
Selecione a classe desejada com '''Select Main Class''' e confirme pressionando ''' OK'''. Inicie agora o projeto '''JAMS''', clicando com o botão direito do mouse sobre o projeto, em seguida, escolha o item '''run'''. A interface de usuário escolhida será iniciada. Desta forma, várias classes com um procedimento principal podem ser iniciadas. &lt;br /&gt;
&lt;br /&gt;
==Desenvolvimento de novos Componentes de Processo em JAVA==&lt;br /&gt;
&lt;br /&gt;
===Estrutura de um Componente===&lt;br /&gt;
&lt;br /&gt;
Cada componente do processo JAMS é estruturado da seguinte forma: &lt;br /&gt;
&lt;br /&gt;
1. Nome do pacote. Ele é gerado automaticamente pelo NetBeans.&lt;br /&gt;
 package org.unijena.j2k.interception;&lt;br /&gt;
&lt;br /&gt;
2. Importação de bibliotecas / classes que são necessárias para os componentes do processo. &lt;br /&gt;
 import jams.data.*;&lt;br /&gt;
 import jams.model.*;&lt;br /&gt;
  ... &lt;br /&gt;
&lt;br /&gt;
3. Iniciando o componente do processo. Cada componente do processo começa com uma descrição dos componentes. Desta forma podem ser armazenados no código-fonte metainformações sobre o componente. Informações sobre o título do componente, o autor, a versão e a data de modificação devem estar incluídas. Além disso, uma breve descrição do componente é necessária. &lt;br /&gt;
&lt;br /&gt;
 @JAMSComponentDescription(&lt;br /&gt;
        title=&amp;quot;...&amp;quot;,&lt;br /&gt;
        author=&amp;quot;...&amp;quot;,&lt;br /&gt;
        description=&amp;quot;...&amp;quot;,&lt;br /&gt;
        version=&amp;quot;...&amp;quot;,&lt;br /&gt;
        date=&amp;quot;...&amp;quot;    &lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
 public class NewClass {&lt;br /&gt;
&lt;br /&gt;
4. Conjunto de variáveis ​​com variáveis ​​públicas e privadas. As variáveis ​​públicas podem ser acessados ​​a partir de outras classes dentro de um modelo. Para cada variável, comentários públicos na forma de anotações são incluídas no código-fonte. &lt;br /&gt;
&lt;br /&gt;
O tipo de acesso ('''AccessType''') deve ser escolhido entre JAMSVarDescription.AccessType.READ (variáveis ​​que são apenas lidas), JAMSVarDescription.AccessType.WRITE (variáveis são apenas salvas) ou JAMSVarDescription.AccessType.READWRITE (variáveis que ​​são lidas e salvas). &lt;br /&gt;
&lt;br /&gt;
Além disso, uma breve descrição, bem como uma unidade de medida (se possível) e um limite inferior e superior da variável são necessários. &lt;br /&gt;
&lt;br /&gt;
 @JAMSVarDescription(&lt;br /&gt;
            access=... ,&lt;br /&gt;
            description=&amp;quot;...&amp;quot;,&lt;br /&gt;
            unit=&amp;quot;...&amp;quot;,&lt;br /&gt;
            lowerBound=...,&lt;br /&gt;
            upperBound=...            &lt;br /&gt;
            )&lt;br /&gt;
 public JAMSDouble  var1;&lt;br /&gt;
 &lt;br /&gt;
 @JAMSVarDescription(&lt;br /&gt;
            access=... ,&lt;br /&gt;
            description=&amp;quot;...&amp;quot;,&lt;br /&gt;
            unit=&amp;quot;...&amp;quot;,&lt;br /&gt;
            lowerBound=...,&lt;br /&gt;
            upperBound=...            &lt;br /&gt;
            )&lt;br /&gt;
 public JAMSInteger var2;&lt;br /&gt;
  &lt;br /&gt;
 @JAMSVarDescription(&lt;br /&gt;
            access=... ,&lt;br /&gt;
            description=&amp;quot;...&amp;quot;,&lt;br /&gt;
            unit=&amp;quot;...&amp;quot;,&lt;br /&gt;
            lowerBound=...,&lt;br /&gt;
            upperBound=...            &lt;br /&gt;
            )&lt;br /&gt;
 public JAMSString  var3;&lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 private JAMSDoublr var4;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Todas as classes JAMS ou J2000 dispõem dos procedimentos init (), run () e cleanup (). &lt;br /&gt;
&lt;br /&gt;
5. O procedimento de inicialização é executado durante a inicialização do modelo.&lt;br /&gt;
 public void init() throws JAMSEntity.NoSuchAttributeException{&lt;br /&gt;
 ...       &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
6. O procedimento (run) é realizado brevemente durante a execução do modelo.&lt;br /&gt;
 public void run() throws JAMSEntity.NoSuchAttributeException{&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
7. O procedimento de limpeza (cleanup) é realizado no final de uma execução de modelo.&lt;br /&gt;
 public void cleanup() throws JAMSEntity.NoSuchAttributeException{&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
8. Procedimentos particulares e funções. Estes só estão disponíveis dentro do componente de processo.&lt;br /&gt;
 private double funktion1(double var){&lt;br /&gt;
        ...&lt;br /&gt;
        return ...;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. Fim do componente de processo.&lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
===Exemplo de um Componente de Processo Completo===&lt;br /&gt;
&lt;br /&gt;
1. Nome do pacote&lt;br /&gt;
 package org.unijena.j2k.potET;&lt;br /&gt;
&lt;br /&gt;
2. Bibliotecas importadas&lt;br /&gt;
 import java.io.*;&lt;br /&gt;
 import jams.data.*;&lt;br /&gt;
 import jams.model.*;&lt;br /&gt;
&lt;br /&gt;
3. Iniciando o componente de processo. Cada componente de processo começa com uma descrição dos componentes. Desta forma, novos metadados do componente podem ser armazenados no código-fonte. Ele deve incluir informações sobre o título do componente, o autor, a versão e a data de modificação. Além disso, uma breve descrição do componente é necessária.&lt;br /&gt;
 @JAMSComponentDescription(&lt;br /&gt;
        title=&amp;quot;&amp;quot;CalcDailyETP_PenmanMonteith&amp;quot;&amp;quot;,&lt;br /&gt;
        author=&amp;quot;Peter Krause&amp;quot;,&lt;br /&gt;
        description=&amp;quot;Calculates potential ETP according Penman-Monteith&amp;quot;,&lt;br /&gt;
        version=&amp;quot;1.0_0&amp;quot;,&lt;br /&gt;
        date=&amp;quot;2011-04-11&amp;quot;    &lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
 public class Penman extends JAMSComponent {&lt;br /&gt;
&lt;br /&gt;
4. Conjunto de variáveis ​​com variáveis ​​públicas e privadas. As variáveis ​​públicas podem ser acessadas ​​a partir de outras classes dentro de um modelo. Para cada variável, comentários públicos na forma de anotações são incluídos no código-fonte. &lt;br /&gt;
&lt;br /&gt;
O tipo de acesso ('''AccessType''') deve ser escolhido entre JAMSVarDescription.AccessType.READ (variáveis ​​que são apenas lidas), JAMSVarDescription.AccessType.WRITE (variáveis são apenas salvas) ou JAMSVarDescription.AccessType.READWRITE (variáveis que ​​são lidas e salvas). &lt;br /&gt;
&lt;br /&gt;
Além disso, uma breve descrição, bem como uma unidade de medida (se possível) e um limite inferior e superior da variável são necessários. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    description = &amp;quot;Current time&amp;quot;)&lt;br /&gt;
    public JAMSCalendar time;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    description = &amp;quot;temporal resolution [d | h | m]&amp;quot;)&lt;br /&gt;
    public JAMSString tempRes;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    description = &amp;quot;state variable wind&amp;quot;)&lt;br /&gt;
    public JAMSDouble wind;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    description = &amp;quot;state variable mean temperature&amp;quot;)&lt;br /&gt;
    public JAMSDouble tmean;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    description = &amp;quot;state variable relative humidity&amp;quot;)&lt;br /&gt;
    public JAMSDouble rhum;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    description = &amp;quot;state variable net radiation&amp;quot;)&lt;br /&gt;
    public JAMSDouble netRad;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    description = &amp;quot;attribute elevation&amp;quot;)&lt;br /&gt;
    public JAMSDouble elevation;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    description = &amp;quot;attribute area&amp;quot;)&lt;br /&gt;
    public JAMSDouble area;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.WRITE,&lt;br /&gt;
    description = &amp;quot;potential ET [mm/ timeUnit]&amp;quot;)&lt;br /&gt;
    public JAMSDouble potET;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.WRITE,&lt;br /&gt;
    description = &amp;quot;actual ET [mm/ timeUnit]&amp;quot;)&lt;br /&gt;
    public JAMSDouble actET;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    description = &amp;quot;et calibration parameter&amp;quot;)&lt;br /&gt;
    public JAMSDouble et_cal;&lt;br /&gt;
 &lt;br /&gt;
    @JAMSVarDescription(access = JAMSVarDescription.AccessType.READ,&lt;br /&gt;
    defaultValue = &amp;quot;0&amp;quot;)&lt;br /&gt;
    public JAMSInteger dataCaching;&lt;br /&gt;
 &lt;br /&gt;
    private File cacheFile;&lt;br /&gt;
    transient private ObjectOutputStream writer;&lt;br /&gt;
    transient private ObjectInputStream reader;&lt;br /&gt;
    public final double CP = 1.031E-3;   //konstanter Parameter  &lt;br /&gt;
    public final double RSS = 150;       //konstanter Parameter &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. O procedimento de inicialização é realizado durante a inicialização do modelo. &lt;br /&gt;
    public void init() throws JAMSEntity.NoSuchAttributeException, IOException {&lt;br /&gt;
        cacheFile = new File(getModel().getWorkspace().getTempDirectory(), this.getInstanceName() + &amp;quot;.cache&amp;quot;);&lt;br /&gt;
        if (!cacheFile.exists() &amp;amp;&amp;amp; (dataCaching.getValue() == 1)) {&lt;br /&gt;
            getModel().getRuntime().sendHalt(this.getInstanceName() + &amp;quot;: dataCaching is true but no cache file available!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        if (dataCaching.getValue() == 1) {&lt;br /&gt;
            reader = new ObjectInputStream(new BufferedInputStream(new FileInputStream(cacheFile)));//new FileInputStream(cacheFile));&lt;br /&gt;
        } else if (dataCaching.getValue() == 0) {&lt;br /&gt;
            writer = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(cacheFile)));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
6. O procedimento (run) é realizado durante a execução do modelo.&lt;br /&gt;
    public void run () throws JAMSEntity.NoSuchAttributeException, IOException { &lt;br /&gt;
    public void run() throws JAMSEntity.NoSuchAttributeException, IOException {&lt;br /&gt;
 &lt;br /&gt;
        if (dataCaching.getValue() == 1) {&lt;br /&gt;
            this.potET.setValue(reader.readDouble());&lt;br /&gt;
            this.actET.setValue(0.0);&lt;br /&gt;
        } else {&lt;br /&gt;
            double netRad = this.netRad.getValue();&lt;br /&gt;
            double temperature = this.tmean.getValue();&lt;br /&gt;
            double rhum = this.rhum.getValue();&lt;br /&gt;
            double wind = this.wind.getValue();&lt;br /&gt;
            double elevation = this.elevation.getValue();&lt;br /&gt;
            double area = this.area.getValue();&lt;br /&gt;
 &lt;br /&gt;
            double abs_temp = org.unijena.j2k.physicalCalculations.ClimatologicalVariables.calc_absTemp(temperature, &amp;quot;degC&amp;quot;);&lt;br /&gt;
            double delta_s = org.unijena.j2k.physicalCalculations.ClimatologicalVariables.calc_slopeOfSaturationPressureCurve(temperature);&lt;br /&gt;
            double pz = org.unijena.j2k.physicalCalculations.ClimatologicalVariables.calc_atmosphericPressure(elevation, abs_temp);&lt;br /&gt;
            double est = org.unijena.j2k.physicalCalculations.ClimatologicalVariables.calc_saturationVapourPressure(temperature);&lt;br /&gt;
            double ea = org.unijena.j2k.physicalCalculations.ClimatologicalVariables.calc_vapourPressure(rhum, est);&lt;br /&gt;
 &lt;br /&gt;
            double latH = org.unijena.j2k.physicalCalculations.ClimatologicalVariables.calc_latentHeatOfVaporization(temperature);&lt;br /&gt;
            double psy = org.unijena.j2k.physicalCalculations.ClimatologicalVariables.calc_psyConst(pz, latH);&lt;br /&gt;
 &lt;br /&gt;
            double G = this.calc_groundHeatFlux(netRad);&lt;br /&gt;
            double vT = org.unijena.j2k.physicalCalculations.ClimatologicalVariables.calc_VirtualTemperature(abs_temp, pz, ea);&lt;br /&gt;
            double pa = org.unijena.j2k.physicalCalculations.ClimatologicalVariables.calc_AirDensityAtConstantPressure(vT, pz);&lt;br /&gt;
 &lt;br /&gt;
            double tempFactor = 0;&lt;br /&gt;
            double pET = 0;&lt;br /&gt;
            double aET = 0;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
            if (this.tempRes.getValue().equals(&amp;quot;d&amp;quot;)) {&lt;br /&gt;
                tempFactor = 86400;&lt;br /&gt;
            } else if (this.tempRes.getValue().equals(&amp;quot;h&amp;quot;)) {&lt;br /&gt;
                tempFactor = 3600;&lt;br /&gt;
            } else if (this.tempRes.getValue().equals(&amp;quot;m&amp;quot;)) {&lt;br /&gt;
                tempFactor = 86400;&lt;br /&gt;
            }&lt;br /&gt;
            double Letp = 0;&lt;br /&gt;
            Letp = this.calcPM(delta_s, netRad, G, pa, CP, est, ea, psy, tempFactor, wind);&lt;br /&gt;
 &lt;br /&gt;
            pET = Letp / latH;&lt;br /&gt;
            aET = 0;&lt;br /&gt;
 &lt;br /&gt;
            //converting mm to litres&lt;br /&gt;
            pET = pET * area;&lt;br /&gt;
 &lt;br /&gt;
            //aggregation to monthly values&lt;br /&gt;
            if (this.time != null) {&lt;br /&gt;
                if (this.tempRes.getValue().equals(&amp;quot;m&amp;quot;)) {&lt;br /&gt;
                    int daysInMonth = this.time.getActualMaximum(time.DATE);&lt;br /&gt;
                    pET = pET * daysInMonth;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            //avoiding negative potETPs&lt;br /&gt;
            if (pET &amp;lt; 0) {&lt;br /&gt;
                pET = 0;&lt;br /&gt;
            }&lt;br /&gt;
 &lt;br /&gt;
            this.potET.setValue(pET*et_cal.getValue());&lt;br /&gt;
            this.actET.setValue(aET);&lt;br /&gt;
            &lt;br /&gt;
            if (dataCaching.getValue() == 0) {&lt;br /&gt;
                writer.writeDouble(pET*et_cal.getValue());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
7. O procedimento de limpeza (cleanup) é realizado no final de uma execução de modelo.&lt;br /&gt;
    public void cleanup() throws IOException {&lt;br /&gt;
        if (dataCaching.getValue() == 0) {&lt;br /&gt;
            writer.flush();&lt;br /&gt;
            writer.close();&lt;br /&gt;
        } else if (dataCaching.getValue() == 1) {&lt;br /&gt;
            reader.close();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
8. Procedimentos particulares e funções. Estes só estão disponíveis dentro do componente do processo. &lt;br /&gt;
 private double calcPM(double ds, double netRad, double G, double pa, double CP, double est, double ea, double psy, double tempFactor, double  wind){&lt;br /&gt;
        double fu = (0.27 + 0.2333 * wind);&lt;br /&gt;
        double Letp = (ds * (netRad - G) + (pa * CP * (est - ea) * fu)) / (ds + psy);&lt;br /&gt;
        return Letp;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
 private double calc_groundHeatFlux(double netRad) {&lt;br /&gt;
        double g = 0.1 * netRad;&lt;br /&gt;
        return g;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
9. Fim do componente de processo.   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Desenvolvimento e Implementacao de componentes de contexto JAMS==&lt;br /&gt;
&lt;br /&gt;
==Integração de novos Componentes de Processo nas Bibliotecas JAMS ou J2000==&lt;br /&gt;
&lt;br /&gt;
Para adicionar o seu componente de processo gerado aos componentes  JAMS ou J2000 existentes, crie um novo *. jar do projeto, onde o componente está localizado. Para tal clique com o botão direito do mouse sobre o projeto e selecione o item '''Build and Clean'''. Agora integre este *. jar como uma biblioteca, onde o seu novo componente poderá ser encontrado. &lt;br /&gt;
&lt;br /&gt;
==Integração e Teste de Novos Componentes (de Contexto)==&lt;br /&gt;
&lt;br /&gt;
Para integrar novos componentes (de contexto) a modelos existentes ou para usá-los em novos modelos, a ferramenta JUICE está disponível para a concepção de modelos. &lt;br /&gt;
Na seção '''1.2 Aplicação do JUICE para o desenvolvimento e a configuração de um modelo''' no [[Tutorial_Advanced_Users | Tutorial Usuários Avançados]] todos os passos para a integração de componentes são explicados. Usando o JUICE, o modelo pode ser iniciado e, consequentemente, os novos componentes podem ser testados. &lt;br /&gt;
&lt;br /&gt;
==Depuração e Perfilamento de Modelos em JAMS==&lt;br /&gt;
&lt;br /&gt;
===Depuração===&lt;br /&gt;
&lt;br /&gt;
Para compreender o funcionamento dos componentes (JAMS/J2000) já criados e existentes e para facilitar a pesquisa de erros no processo de desenvolvimento, está à sua disposição a possibilidade da depuração. É possível selecionar as posições no código-fonte usando pontos de parada, onde o compilador deve parar a execução do modelo. Torna-se assim possível visualizar os valores das variáveis ​​designadas no momento. Além disso, o funcionamento do componente desenvolvido ou existente pode ser traçado linha por linha. &lt;br /&gt;
Antes de iniciar o modo de depuração do modelo, é preciso definir pontos de parada nas posições que lhe são interessantes. Para fazê-lo, clique no ponto vermelho da barra de menu e depois na posição no código-fonte. Na imagem seguinte, dois pontos de parada foram estabelecidos: &lt;br /&gt;
&lt;br /&gt;
[[File: Haltepunkte_setzen.png]] &lt;br /&gt;
&lt;br /&gt;
Se o componente tem um procedimento principal (Main-Procedure), é possível iniciar a depuração diretamente. Se o componente faz parte de um modelo complexo, já é necessário depurar o modelo inteiro. Neste caso, clique com o botão direito do mouse sobre o projeto que deve ser iniciado (o projeto que contém o componente) e selecione '''debug'''. &lt;br /&gt;
&lt;br /&gt;
[[File: Debug_aufrufen.png]] &lt;br /&gt;
&lt;br /&gt;
A execução do modelo será parada na posição selecionada. Na janela inferior é possível ver a atual alocação de variáveis ​​do modelo. Na janela do lado esquerdo superior, é possível ver a posição no código-fonte. &lt;br /&gt;
&lt;br /&gt;
[[File: Debug_1.png]] &lt;br /&gt;
&lt;br /&gt;
Agora pode-se compreender o funcionamento do código-fonte passo a passo. Para isso, as seguintes funções estão disponíveis, as quais podem ser encontradas na barra de menu do Netbeans sob o item '''Debug''' ou, parte delas, diretamente na barra de menu: &lt;br /&gt;
* Finish Debug Session - encerra o modo de depuração &lt;br /&gt;
* Continue - vai para o próximo ponto de parada &lt;br /&gt;
* Step Over - vai para a próxima indicação&lt;br /&gt;
* Step Into - entra na indicação, se possível. Caso não, vai para a próxima &lt;br /&gt;
* Step Out &lt;br /&gt;
  &lt;br /&gt;
[[File: Debug_Menue.png]] &lt;br /&gt;
&lt;br /&gt;
As funções '''Step Over''' e '''Step Into''' podem ser usados para traçar e compreender o funcionamento do código-fonte passo a passo. A linha com sombra verde marca a posição atual que está sendo analisada. &lt;br /&gt;
&lt;br /&gt;
[[File: Debug_2.png]] &lt;br /&gt;
&lt;br /&gt;
Ao clicar no botão '''Continue''' pode-se ir para o próximo ponto de  parada (linha com sombra vermelha). &lt;br /&gt;
&lt;br /&gt;
[[File: Debug_3.png]] &lt;br /&gt;
&lt;br /&gt;
===Perfililamento no Netbeans===&lt;br /&gt;
O Netbeans oferece uma possibilidade para compreender a execução dos modelos, ou seja, que parte do modelo requer que quantidade de tempo. Desta forma, implementações que consomem muito tempo podem ser identificadas. &lt;br /&gt;
&lt;br /&gt;
Para isso, clique com o botão direito do mouse sobre o projeto que deve ser analisado. Selecione a classe principal no item '''Run''' em '''Propriedades''' onde o perfilamento deve ser executado. &lt;br /&gt;
&lt;br /&gt;
Agora selecione o item '''Profiling''' (Perfilamento). &lt;br /&gt;
&lt;br /&gt;
[[File: profile_1.png]] &lt;br /&gt;
&lt;br /&gt;
A seguinte janela irá se abrir. Agora pode-se escolher entre analisar o código-fonte por completo ou apenas suas partes. As seguintes opções estão disponíveis para a filtragem: &lt;br /&gt;
* Profile all classes (Perfilar todas as classes)&lt;br /&gt;
* Profile only project classes (Perfilar somente classes de projetos)&lt;br /&gt;
* Exclude Java core classes (Excluir classes centrais de Java)&lt;br /&gt;
* Quick Filter (Filtragem rápida)&lt;br /&gt;
&lt;br /&gt;
Clique em '''run'''. &lt;br /&gt;
&lt;br /&gt;
[[File: profile_2.png]] &lt;br /&gt;
&lt;br /&gt;
A análise de execução está sendo realizada. A seguinte janela irá aparecer. &lt;br /&gt;
&lt;br /&gt;
[[File: profile_4.png]] &lt;br /&gt;
&lt;br /&gt;
O resultado da análise é mostrado no Netbeans. Na janela da esquerda, são exibidas informações gerais sobre o seu perfil. Na janela superior direita são exibidos os tempos de execução das funções individuais dentro da classe principal selecionada. &lt;br /&gt;
&lt;br /&gt;
[[File: profile_5.png]] &lt;/div&gt;</summary>
		<author><name>DanielS</name></author>	</entry>

	</feed>