SuperWaba

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

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.

Características[editar | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

IDE - Eclipse (IDE)

Plugins de IDE - SuperWaba Kit

Compiladores - Warp e Exegen

Compiladores[editar | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

Hello World[editar | editar código-fonte]

  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 | editar código-fonte]

  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 | editar código-fonte]