Analisando o Java: principais conceitos, apresentados em um enfoque comparativo com o C++. Eng. Luciano Santos Driemeier COMET DPM/FEM UNICAMP Estrutura da Apresentação 1. Motivação 2. Introdução 3. Compilando e Executando em Java 4. Estrutura de Dados e Gerenciamento de Memória 5. Classes, Objetos e Herança 6. Applets: o Java e a Internet 7. Ferramentas Úteis 8. Dicas para Design no Rose 9. Projeto BIA 10.Tendências 11. Referências Conteúdo Objetivos e público alvo - Descrever e acabar com eventuais mitos a respeito do Java. - Apresentação direcionada a comparação das linguagens CONCEITUAL. - Apresentação de recursos que podem ser destacados pela eficiência ou utilidade no Java. - Não é objetivo apresentar conceitos de OOP ou OOD. Motivação Histórico: Projeto Green - Histórico baseado na entrevista dos criadores do Java a revista online SunWorld’s (jul/95). - Antes de 91 - Motivação - criação de uma linguagem compacta para ser usada em equipamentos domésticos. - Pela aplicação o produto deveria: - usar pouca memória; - executar em diferentes CPU’s. - O projeto recebeu o nome Green. Introdução Histórico: Viabilizando a Idéia Conceito: gerar um código intermediário para máquinas hipotéticas. - Máquinas hipotéticas Virtual Machines JVM Java Virtual Machine - O código poderia ser lido em toda máquina que tivesse o interpretador adequado. - Como o background dos programadores da Sun é UNIX, o Java foi baseado em C++. Introdução Histórico: Do Primeiro Produto ao Sucesso - *7 - primeiro produto. Não despertou interesse dentro da Sun e o departamento comercial não conseguiu clientes para o produto. - Mudança de nome. (First Person) - Paralelamente ao desenvolvimento do produto, a WWW (93/94) crescia muito. - Navegador Mosaic escrito, em parte, por Marc Andreessen (em sua graduação a US$ 6,80 por h). Introdução Histórico: Do Primeiro Produto ao Sucesso - Dentro da Sun, surgiu a idéia da aplicação na WWW. - As motivações do projeto se encaixavam nos maiores desafios da rede. - O grande salto do Java foi quando a Netscape lançou sua versão Java Enabled. - Após a Netscape, os demais navegadores também lançaram suas versões Java Enabled. Introdução O que é o Java? - O Java é uma linguagem de programação: - simples; - orientada a objetos; - de arquitetura neutra; - portável; - interpretada. Introdução Inverdades sobre o Java. - O Java é uma extensão do HTML. - Todos os programas em Java são executados em uma página da Web. - O Java é uma linguagem fácil de programar. - O Java será uma linguagem de programação universal. - O Java é interpretado, portanto muito lento para aplicações “sérias”. Introdução Compilando em Java - O Java não faz distinção entre arquivos de: Interface (declaração) Implementação (definição) - Toda a classe Java está definida e declarada em um arquivo de extensão .java com o mesmo nome da classe. - Existem, atualmente, muitos compiladores para o Java (inclusive o Visual J++). - O compilador padrão JDK, fornecido pela Sun, é gratuito. Compilando e Executando Compilando em Java - Utilizando o JDK fornecido pela Sun: c:\>javac MyClass.java - O compilador vai gerar um arquivo interpretável chamado MyClass.class. - Para interpretar o arquivo deve-se executar o seguinte comando: c:\>java MyClass - Todos os .class necessários devem ser fornecidos. Compilando e Executando O Compilador Java - Os compiladores em Java são muito mais rígidos que os compiladores em C++. - Esta característica do compilador facilita portar o código entre as linguagens. - O compilador JDK é case sensitive para interpretar mas não para compilar. - O JDK é um compilador de console, portanto tem algumas limitações. Compilando e Executando Diferenças entre Java e C++ - O Java não define as funções de pré-processador #. - As diretivas de #if e #ifdef são menos necessárias em Java. Em geral, servem para marcar código em linguagem específica. A diretiva # Compilando e Executando Diferenças entre Java e C++ - Como ficam os #includes ? - Os compiladores do Java e C++ trabalham de maneira muito diferente nesta questão. - Organizar as classes Java em packages, para tornar o projeto mais organizado. - Importar os packages necessários para cada uma de suas classes. Compilando e Executando Diferenças entre Java e C++ - O import do Java é absolutamente diferente do #include do C++. - O compilador do C++ somente abrirá os arquivos especificados por completo no include. - O compilador Java abrirá o arquivo que for necessário, bastando indicar onde procurar. - O import é apenas uma questão de conveniência. Podese evitar por completo o import (o include não). Compilando e Executando As maiores diferenças - Neste ponto estão as grandes diferenças: JAVA NÃO TEM PONTEIROS. JAVA NÃO POSSUI DESTRUTORES. - Comentar as principais diferenças e abordar com maior profundidade as frases acima. ED e GM Tipos Inexistente - O Java não define o tipo enumerado - Solução: declarar variáveis public static final byte (solução não segura). - Pois, infelizmente, o Java não define o const. - Declarar classes do tipo enumerado. - Única maneira de conseguir dados seguros: declará-los em classes constantes. ED e GM Ponteiros - Os dados em Java se comportam mais como ponteiros que como valores. - Um outro ponto de vista: tudo no Java é ponteiro. - O argumentação para afirmação anterior é consistente. Ponteiros ED e GM Destrutores - Os dados em Java não precisam ser destruídos. NÃO É NECESSÁRIO se preocupar com vazamentos de memória. - Sistema garbage-collection implementado evita que o programador tenha que desalocar seus dados. - Fazendo uma variável igual a null o programador pode forçar o dado a ser recolhido antes do fim do escopo. ED e GM Definições: Modificadores - Como no C++ os dados e métodos podem ser declarados como public, protected e private. - O processo de dynamic cast permanece inalterado. - O modificador static permanece inalterado. - Criando classes estáticas: variáveis e funções pertencem a classe e não a uma instância desta. Objetos e Classes Definições: Modificadores - O Java não define o modificador friend. Java has no friends. Classe friend. - Uma solução para o problema, sem ter de declarar os dados como públicos, é fazer os dados e métodos package private. Objetos e Classes Definições: Herança - Polimorfismo: os conceitos de orientação a objetos mais fortes no Java. - Diferença quando um método é chamado no C++ e no Java. - Conceito de late binding: late binding - o compilador não gera o código a ser executado por um método em tempo de compilação. Objetos e Classes Definições: Herança - Não é necessário declarar um método em Java como virtual. Este é seu comportamento padrão. - Pode-se prevenir a herança declarando métodos e classes como final. - Classes finais não podem gerar herdeiras. - Métodos finais não podem ser sobrecarregados pela herança. Objetos e Classes Definições: Múltipla Herança - O Java não permite a múltipla herança. - Em Java uma classe pode ter uma única classe mãe. - Esta exclusão foi proposital pois a múltipla herança torna os compiladores muito complexos (C++) ou ineficientes (Eiffel). - Para contornar o problema da herança múltipla foram criadas as interfaces. Class X extends Y implements Z Objetos e Classes Facilidades do Java - Supõe-se ser o Java a melhor ferramenta para conectar computadores a Internet. - Um programador C\C++ ficará surpreso ao descobrir quão fácil é implementar códigos em Java. - Java permite a criação de Applets - Applets são programas escritos em Java e executados em uma página da Web via um navegador como o Netscape. Applets: o Java e a Internet. Applets: Funcionamento - Existem três formas de visualizar o funcionamento de um applet: - usando o AppletViewer da Sun; - carregando uma página local no navegador; - dando uma URL para o navegador carregar o arquivo. Applets Applets: o Java e a Internet. Native Methods e Multithread - É possível importar um método escrito em C para um código em Java. - É possível que um código em C chame um método em Java. - O Java tem implementação fácil de multithreads Multithread. Ferramentas Úteis Rose - A interface para design no Rose para Java é muito parecida com a do C++. - A geração de código é mais simples tanto nas opções de o que gerar quanto na questão das áreas de preserve. - Criar uma variável de projeto para não ter problemas com componentes. Dicas para Design no Rose Descrição do Programa - O programa resolve os problemas de viga, barra e eixos da Resistência dos Materiais. - Tem como ferramenta matemática as funções singularidade. - As funções de singularidade são capazes de representar esforços. Uma vez construída a equação de carregamento apropriada , basta integrá-la. - A versão sem interface visual recebe um arquivo texto com os dados do problema e devolve um arquivo html de solução . Projeto BIA Classes e Funcionamento - O programa está estruturado em 8 pacotes e 28 classes (sem as classes de interface visual). Material CrossSection BoundaryCond Problem Equations Maths Loads Auxiliar Projeto BIA O Java Hoje - O Java, como outras linguagens de programação, tem pontos positivos e negativos em sua aplicação. - Sua principal aplicação ainda está na Internet. - Há muita especulação sobre o Java. O que se pode afirmar é que até mesmo o C++ não tem uma aplicação universal. - Microsoft's next IE browser, quite likely to continue to dominate the browser universe, will supposedly not even have Java included at all. Tendências Referências Core Java - second edition Gary Cornell & Cay Horstmann Sun Microsystems Java CookBook Porting C++ to Java Taligent White Papers - http:\\www.taligent.com Rational Rose 98i - Using Java Manual Aprenda em 24 horas C++ Editora Campus Jesse Liberty Referências