CAPÍTULO 5. <strong>JCML</strong> - JAVA CARD MODELING LANGUAGE 101Kbytes de tamanho, enquanto o gerado pelo <strong>JCML</strong>c tem 5 Kbytes. O arquivo original com5 Kbytes de tamanho, após ser compilado com o compilador <strong>JCML</strong> passa a ter 8 Kbytes(arquivo .java). O arquivo gerado pelo <strong>JCML</strong>c (Usuario<strong>JCML</strong>.java) ao ser compiladocom <strong>Java</strong> <strong>Card</strong> produz um executável com 5 Kbytes de tamanho (.class), enquanto queo arquivo original, sem especificação, tem 3 Kbytes após ser compilador com <strong>Java</strong> <strong>Card</strong>,um aumento de 66%. Ao se utilizar o compilador JML, este produz um executável de 37Kbytes, 1133,33% de aumento em relação ao arquivo original. Um aumento considerávelem relação as restrições <strong>Java</strong> <strong>Card</strong>. A Tabela 5.3 mostra a diferença entre os tamanhosdos arquivos.Tipo de Arquivo <strong>Java</strong> <strong>Card</strong> <strong>JCML</strong> JML.java 5 Kb 8 Kb 5 Kb.class 3 Kb 5 Kb 37 KbTabela 5.3: Análise do Tamanho do Arquivo Gerado pelo Compilador - Diferença entre<strong>JCML</strong>c e JMLc .Outra comparação possível, entre <strong>JCML</strong> e JML, é a quantidade de métodos geradosa partir de cada especificação. A Tabela 5.4 apresenta quantos métodos são criados porcada compilador. O objetivo dos novos métodos gerados é de auxiliar na verificação daespecificação durante a execução do programa. O compilador JML gera 41 métodos deverificação para a classe Usuario. Nestes 41 métodos estão inclusos verificação de póscondiçãoe pós-condição excepcional. Como o compilador <strong>JCML</strong> não gera funções deverificação para métodos sem especificação e pós-condição, existem apenas 8 métodosde verificação após a classe Usuario ser compilada com <strong>JCML</strong>c, além dos 10 métodosoriginais.5.5 ConclusãoEste capítulo apresentou a <strong>JCML</strong>, <strong>Java</strong> <strong>Card</strong> <strong>Modeling</strong> <strong>Language</strong>, uma linguagem de especificaçãoe verificação de aplicações <strong>Java</strong> <strong>Card</strong> em tempo de execução, e uma versãoinicial do seu compilador. Devido às restrições <strong>Java</strong> <strong>Card</strong>, a implementação de verificaçãoruntime é uma tarefa difícil. A motivação a implementação da <strong>JCML</strong> e seu compilador, éprover verificação automática, de propriedades de especificação, em tempo de execução.Este trabalho é inspirado na JML e JMLc, contudo, tem foco específico no desenvolvimento<strong>Java</strong> <strong>Card</strong>, ao invés de <strong>Java</strong>.
CAPÍTULO 5. <strong>JCML</strong> - JAVA CARD MODELING LANGUAGE 102Método Tem Espec.? <strong>JCML</strong>c JMLcInvariante Sim 1 6setMatricula Sim 1 3getMatricula Não 0 3setTipo Sim 1 3getTipo Não 0 3adicionarLocal Sim 1 3removerLocal Sim 1 3temAcessoLocal Sim 1 3adicionarCreditos Sim 1 3removerCreditos Sim 1 3getCreditos Não 0 3Total de Métodos Gerados x 8 41Tabela 5.4: Quantidade de Métodos de Verificação Gerados - <strong>JCML</strong>c x JMLc .Figura 5.22: Desenvolvimento <strong>Java</strong> <strong>Card</strong> Aplicando Especificação <strong>JCML</strong>.A primeira versão do compilador, apresentada neste capítulo, está habilitada a checarpropriedades simples, as quais podem ser traduzidas diretamente para código <strong>Java</strong> <strong>Card</strong>.Foi apresentado, também neste capítulo, um modelo para a implementação de novas propriedadesdo compilador <strong>JCML</strong>.Dessa forma, com o uso da linguagem <strong>JCML</strong>, são inseridos código adicional ao desenvolvimento<strong>Java</strong> <strong>Card</strong> tradicional. Os executáveis <strong>Java</strong> <strong>Card</strong> são criados a partir daespecificação <strong>JCML</strong>. O código runtime é compatível com as restrições da tecnologia <strong>Java</strong><strong>Card</strong>. A aplicação de especificação <strong>JCML</strong> no desenvolvimento <strong>Java</strong> <strong>Card</strong> segue a estruturadefinida na Figura 5.22.