SuperWaba é uma linguagem de programação utilizada para desenvolvimento de aplicações para aparelhos móveis como telefones celulares e aparelhos que comportam sistemas como PalmOS, Windows, Windows Mobile, WindowsCE e SymbianOS. O SuperWaba se baseia e estende o Waba. A linguagem do SuperWaba é um versão reduzida da definida em Java. Existe semelhança com o Java, também é usada uma máquina virtual cuja implementação é específica de cada aparelho onde é instalada. Diferentemente do Java, SuperWaba não suporta o modelo de sincronização e, como tal, não pode ser considerada verdadeiramente tecnologia Java. SuperWaba cumpre um papel semelhante à tecnologia J2ME. A diferença fundamental é sua maior integração nativa com os aparelhos moveis e um modelo de API mais pragmático que a API J2ME.

SuperWaba
Paradigma Orientação a objeto, Imperativo, Genérico
Surgido em 2000
Criado por Guilherme Campos Hazan
Estilo de tipagem Forte, Estática
Principais implementações Warp e Exegen
Influenciada por Java, J2ME ,Waba
Influenciou TotalCross

Características editar

O SuperWaba é uma plataforma que possui uma implementação própria de linguagem (com sintaxe semelhante ao Java), máquina virtual, formato de arquivos de classes e um conjunto de classes. Além disso, ele permite o uso de ferramentas Java no desenvolvimento.

Dentre as diversas características, podemos notar o suporte para SQL, leitor de código de barras, protocolo GPS, protocolo HTTP, tratamento de imagens JPEG, PNG, GIF e PNG, e suporte para compressão de dados.

Podemos comparar o SuperWaba ao .NET Compact Framework em recursos (exceto linguagem), porém o SuperWaba é ainda mais portável, rodando em várias plataformas como comentado na seção anterior.

Somente podemos compará-lo com o J2ME em termos de sintaxe da linguagem utilizada, pois enquanto o J2ME usa a linguagem Java o SuperWaba possui uma linguagem de sintaxe similar ao Java, porém não podemos comparar os dois em termos de recursos e portabilidade, pois o SuperWaba roda em dispositivos em que o J2ME não possui máquina virtual, sem considerar que o SuperWaba possui muito mais recursos que o J2ME.

Programação editar

O SuperWaba estende uma linguagem parecida com o Java, porém, com vários recursos reduzidos devido ao processamento limitado dos dispositivos moveis, existem alguns pontos a serem destacados:

  • As classes do SuperWaba estão contidas no pacote waba, embora a maioria possua o mesmo nome que as classes java, são implementadas de forma diferenciada.
  • Embora o SuperWaba seja semelhante ao Java, o compilador não aceita classes Java, ocorrendo um erro no processo de compilação.
  • Os tipos de variáveis do SuperWaba são iguais aos tipos do Java, todos ocupam mesmo espaço de memória e são caracterizados iguais.
  • Uma exceção muito crítica em comparação ao Java, é a variável String, que não são aceitos alguns métodos como o "split".
  • As maiores reduções encontradas em comparação ao java é em questão ao pacote "útil" do Java, onde no SuperWaba a única collections existente é o "Vector" não existindo List, Map, Set e outras.

Ferramentas editar

IDE - Eclipse (IDE)

Plugins de IDE - SuperWaba Kit

Compiladores - Warp e Exegen

Compiladores editar

O ponto crucial do SuperWaba é a compilação, feita pelo Warp que gera o arquivo .pdb responsável por conter o código do programa, e o Exegen que gera os arquivos de execução de acordo com a plataforma.

Existe uma maquina virtual para cada plataforma (PalmOS, WindowsCE, etc..), tendo que utilizar os arquivos compilados de acordo com tal maquina virtual.

O processo de compilação ocorre sob um arquivo JAR que é gerado pela interpretação de um arquivo XML que contem as informações necessárias para o procedimento:

<!--  ****** GENERATED BY SUPERWABA-IDE - DO NOT MODIFY!!! ******
  -->
- <project name="RegisterSum" basedir="." default="all">
- <!--  Application classpath
  -->
- <path id="classpath">
  <pathelement location="G:\Projetos\Java\SuperWabaSDKPro/lib/SuperWaba.jar" />
  <pathelement location="\RegisterSum\lib\comm.jar" />
</path>
- <!--  Warp/Exegen classpath
  -->
- <path id="utils">
  <pathelement path="G:\Projetos\Java\SuperWabaSDKPro/utils" />
  <pathelement location="G:\Projetos\Java\SuperWabaSDKPro/lib/SuperWaba.jar" />
</path>
- <!--  Clean directories and files
  -->
- <target name="clean">
  <delete dir="build" />
  <delete dir="dist" />
</target>
- <!--  Compile
  -->
- <target name="build" depends="clean">
  <mkdir dir="build" />
  <mkdir dir="dist" />
- <javac srcdir="G:\Projetos\Java\ProjetosCurrent\RegisterSum\src" destdir="build" target="1.1">
  <include name="**/*.java" />
  <classpath refid="classpath" />
</javac>
- <copy todir="build">
- <fileset dir="G:\Projetos\Java\ProjetosCurrent\RegisterSum\src">
  <exclude name="**/*.java" />
</fileset>
</copy>
</target>
- <!--  Package classes
  -->
- <target name="jar" depends="build">
- <jar jarfile="build/${ant.project.name}.jar">
  <fileset dir="build" includes="**/*.class" />
</jar>
</target>
- <!--  Execute WARP
  -->
- <target name="warp" depends="jar">
- <java dir="build" classname="Warp" fork="true" classpathref="utils">
  <arg value="c" />
  <arg value="/c" />
  <arg value="2345" />
  <arg value="${ant.project.name}" />
  <arg value="${ant.project.name}.jar" />
</java>
</target>
- <!--  Prepare EXEGEN execution
  -->
- <target name="prepare-exegen">
  <mkdir dir="icons" />
- <copy todir="build">
- <fileset dir="icons">
  <include name="*.bmp" />
</fileset>
</copy>
</target>
- <!--  Execute EXEGEN
  -->
- <target name="exegen" depends="warp, prepare-exegen">
- <java dir="build" classname="Exegen" fork="true" classpathref="utils">
  <arg value="/c" />
  <arg value="2345" />
  <arg value="/i" />
  <arg value="ooo" />
  <arg value="${ant.project.name}" />
  <arg value="br.com.cas.janela.RegisterSumMain" />
  <arg value="${ant.project.name}" />
</java>
</target>
- <!--  Execute EXEGEN with WinCE EXE
  -->
- <target name="exegen-exe" depends="warp, prepare-exegen">
- <java dir="build" classname="Exegen" fork="true" classpathref="utils">
  <arg value="/c" />
  <arg value="2345" />
  <arg value="/i" />
  <arg value="ooo" />
  <arg value="/e" />
  <arg value="${ant.project.name}" />
  <arg value="br.com.cas.janela.RegisterSumMain" />
  <arg value="${ant.project.name}" />
</java>
</target>
- <!--  Execute EXEGEN with WinCE CAB
  -->
- <target name="exegen-cab" depends="warp, prepare-exegen">
- <java dir="build" classname="Exegen" fork="true" classpathref="utils">
  <arg value="/c" />
  <arg value="2345" />
  <arg value="/i" />
  <arg value="ooo" />
  <arg value="/z" />
  <arg value="${ant.project.name}" />
  <arg value="br.com.cas.janela.RegisterSumMain" />
  <arg value="${ant.project.name}" />
</java>
</target>
- <!--  Execute WARP and populate distribution directory
  -->
- <target name="all-warp" depends="warp">
  <move file="build/${ant.project.name}.pdb" todir="dist" />
</target>
- <!--  Execute EXEGEN and populate distribution directory
  -->
- <target name="all-exegen" depends="exegen, all-warp">
  <move todir="dist" file="build/${ant.project.name}.prc" />
</target>
- <!--  Execute EXEGEN with WinCE EXE and populate distribution directory
  -->
- <target name="all-exegen-exe" depends="exegen-exe, all-warp">
- <move todir="dist">
- <fileset dir="build">
  <include name="${ant.project.name}.prc" />
  <include name="**/*.exe" />
</fileset>
</move>
</target>
- <!--  Execute EXEGEN with WinCE CAB and populate distribution directory
  -->
- <target name="all-exegen-cab" depends="exegen-cab, all-warp">
- <move todir="dist">
- <fileset dir="build">
  <include name="${ant.project.name}.prc" />
  <include name="*.CAB" />
  <include name="*.ini" />
  <include name="*.bat" />
</fileset>
</move>
</target>
  <target name="all" depends="all-exegen-cab" />
</project>

Existem dois procedimentos a serem tomados para compilação:

//Dentro do shell digite:

//Primeiro procedimento:
Warp c NomeDoPDB  NomeDoJAR

//Segundo procedimento:
Exegen /e NomeDoExecutavel ClassePrincipal(main) NomeDoPdb

Desta forma ocorrerá a compilação para todos os tipos de maquinas virtuais possíveis.

Exemplo de Sintaxe editar

No SuperWaba não existe uma diferença muito grande em comparação ao java, a maior diferenção é a localização das classes para o pacote "waba", porém existem suas particularidades em questão da montagem de um sistema visual, abaixo está o modelo basico:


import waba.ui.Container;
import waba.ui.ControlEvent;
import waba.ui.Event;
import waba.ui.Window;

public class NomeDaClassePrincipal extends waba.ui.MainWindow{
	
	// DECLARAÇÃO DE VARIAVEIS	
	public final static String versao = "v1.0.0.0";
	private int numero;
	
	// CONSTRUTOR			
	public RegisterSumMain(){
		super("NOMDE DO APLICATIVO NA JANELA", Window.TAB_ONLY_BORDER);
		waba.sys.Settings.setUIStyle(waba.sys.Settings.WinCE);

	}
	
	// METODO DE START, ONDE CRIA TODOS OS COMPONENTES E OS APRESENTA VISUALMENTE
	public void onStart(){
		super.onStart();
		
	}
	
	// METODO DE FLUXO DE EVENTOS
	public void onEvent(Event event){
		switch(event.type){
			case ControlEvent.PRESSED:{
			
				if (event.target == NOME DO COMPONENTE DO EVENTO) {
				}
			   }	
		  }
	 }
    }
}

Exemplos de Codigos editar

Hello World editar


import waba.ui.Label;
import waba.ui.MainWindow;
import waba.ui.Window;

public class Teste extends MainWindow{
	private Label label;
	
	public Teste(){
		super("Hello World", Window.TAB_ONLY_BORDER);
		waba.sys.Settings.setUIStyle(waba.sys.Settings.WinCE);
	}
	
	public void onStart(){
		super.onStart();
		
		this.label = new Label("Hello World!!");
		add(this.label,CENTER,CENTER);
	}		
}

N PRIMEIROS NUMEROS PERFEITOS editar


import waba.ui.Label;
import waba.ui.MainWindow;
import waba.ui.Window;
import waba.util.Vector;

public class Teste extends MainWindow{
	private Label label;
	private String resultado;
	
	public Teste(){
		super("N Perfeitos", Window.TAB_ONLY_BORDER);
		waba.sys.Settings.setUIStyle(waba.sys.Settings.WinCE);
		
		this.resultado = this.nPerfeitos();
	}
	
	public void onStart(){
		super.onStart();
		
		this.label = new Label("Resultado: "+resultado);
		add(this.label,CENTER,CENTER);
	}	
	
	private String nPerfeitos(){
		int num=0, soma, cont=0, n=4;
		String result = "";
		
		do{
			num++;
			soma = 0;
			for (int i = 1; i <= num-1; i++) {
				if(num%i == 0)soma += i;
			}
			if(soma == num){
				result += " "+soma;
				cont++;
			}
	    }while(cont != n);
		return result;
	}
		
}

Referencias Externas editar