Pionner Design    

CARACTERÍSTICAS DA LINGUAGEM  

Parecida com C, C++:  

Java tem a aparência de C ou de C++, embora a filosofia da linguagem seja diferente. Por este motivo estaremos frequentemente fazendo comparações alguma destas linguagens. O leitor que programa em qualquer uma delas, ou em uma linguagem orientada a objetos,  se sentirá mais a vontade e se tornará um bom programador Java em menos tempo.

Java também possui características herdadas de muitas outras linguagens de programação: Objective-C, Smalltalk, Eiffel, Modula-3, etc. Muitas das características desta linguagem não são totalmente novas. Java é uma feliz união de tecnologias testadas por vários centros de pesquisa e desenvolvimento de software.

 

Compilada:  

Um programa em Java é compilado para o chamado “byte-code”, que é próximo as instruções de máquina, mas não de uma máquina real. O “byte-code” é um código de uma máquina virtual idealizada pelos criadores da linguagem. Por isso Java pode ser mais rápida do que se fosse simplesmente interpretada.           

Portável:  

Java foi criada para ser portável. O “byte-code” gerado pelo compilador para a sua aplicação específica pode ser transportado entre plataformas distintas que suportam Java  (Solaris 2.3Ò, Windows-NTÒ, Windows-95Ò, Mac/Os etc) . Não é necessário recompilar um programa para que ele rode numa máquina e sistema diferente, ao contrário do que acontece por exemplo com programas escritos em C e outras linguagens.

Esta portabilidade é importante para a criação de aplicações para a heterogênea internet. Muitos d os programas exemplo deste tutorial foram escritos e compilados numa plataforma Windows-95Ò e rodaram perfeitamente quando simplesmente copiados para uma plataforma Solaris 2.3Ò. Em Java um inteiro por exemplo, tem sempre 32 bits, independentemente da arquitetura. O próprio compilador Java é escrito em Java, de modo que ele é portável para qualquer sistema que possua o interpretador de “byte-codes”. Um exemplo de programa escrito em Java é o browser hotjava.  

Orientada a Objetos:  

A portabilidade é uma das características que se inclui nos objetivos almejados por uma linguagem orientada a objetos. Em Java ela foi obtida de maneira inovadora com relação ao grupo atual de linguagens orientadas a objetos.

Java suporta herança, mas não herança múltipla. A ausência de herança múltipla pode ser compensada pelo uso de herança e interfaces, onde uma classe herda o comportamento de sua superclasse além de oferecer uma implementação para uma ou mais interfaces.

Java permite a criação de classes abstratas. Outra característica importante em linguagens orientadas a objetos é a segurança. Dada a  sua importância o tópico foi escrito a parte.           

Segura:  

A presença de coleta automática de lixo, evita erros comuns que os programadores cometem quando são obrigados a gerenciar diretamente a memória  (C , C++, Pascal ). A eliminação do uso de ponteiros, em favor do uso de vetores, objetos e outras estruturas substitutivas  traz benefícios em termos de segurança. O programador é proibido de obter acesso a memória que não pertence ao seu  programa, além de não ter chances de cometer erros comuns tais como “reference aliasing” e uso indevido de aritmética de ponteiros. Estas medidas são particularmente úteis quando pensarmos em aplicações comerciais desenvolvidas para a internet.

Ser “strongly typed” também é uma vantagem em termos de segurança, que está aliada a eliminação de conversões implícitas de tipos de C++.

A presença de mecanismos de tratamento de exceções torna as aplicações mais robustas, não permitindo que elas abortem, mesmo quando rodando sob condições anormais. O tratamento de exceções será útil na segunda parte para modelar situações tais como falhas de transmissão e formatos incompatíveis de arquivos.           

Suporta concorrência:  

A linguagem permite a criação de maneira fácil, de vários “threads” de execução. Este tópico será útil quando você estudar animações, e é particularmente poderoso nos ambientes em que aplicações Java são suportadas, ambientes estes que geralmente podem mapear os threads da linguagem em processamento paralelo real. 

Eficiente:  

Como Java foi criada para ser usada em computadores pequenos, ela exige pouco espaço, pouca memória. Java é muito mais eficiente que grande parte das linguagens de “scripting” existentes, embora seja cerca de 20 vezes mais lenta que C, o que não é um marco definitivo. Com a evolução da linguagem, serão criados geradores de “byte-codes” cada vez mais otimizados que trarão as marcas de performance da linguagem mais próximas das de C++ e C. Além disso um dia Java permitirá a possibilidade de gerar código executável de uma particular arquitetura “on the fly”, tudo a partir do “byte-code”. 

Suporte para programação de sistemas distribuídos:         

Java fornece facilidades para programação com sockets, remote method call, tcp-ip, etc. Estes tópicos não serão abordados neste texto.

 PROGRAMAÇÃO ORIENTADA A OBJETOS

NOTA AOS PROGRAMADORES “C”  

A leitura deste hipertexto é fortemente recomendada para os programadores que tem “C” ou ”C++” como sua principal linguagem de programação, mesmo antes de iniciar a leitura deste tutorial: 

Iniciaremos com um pouquinho de teoria sobre orientação a objetos. Se você quiser algum hipertexto para aprofundamento ou para ler em paralelo com esta introdução sobre classes e objetos e use: 

1.                  CLASSES E OBJETOS  

Uma classe é um tipo definido pelo usuário que contém o molde, a especificação para os objetos, algo mais ou menos como o tipo inteiro contém o molde para as variáveis declaradas como inteiros. A classe envolve, associa, funções e dados, controlando o acesso a estes, definí-la implica em especificar os seus atributos (dados) e seus métodos (funções).

Um programa que utiliza uma interface controladora de um motor elétrico provavelmente definiria a classe motor. Os atributos desta classe  seriam: temperatura, velocidade, tensão aplicada. Estes provavelmente seriam representados na classe por tipos como int ou float. Os métodos desta classe seriam funções para alterar a velocidade, ler a temperatura, etc.

Um programa editor de textos definiria a classe parágrafo que teria como um de seus atributos uma String ou um vetor de Strings, e como métodos, funções que operam sobre estas strings. Quando um novo parágrafo é digitado no texto, o editor cria a partir da classe Parágrafo um objeto contendo as informações particulares do novo texto. Isto se chama instanciação ou criação do objeto.                       

1.1.            ESPECIFICANDO UMA CLASSE  

Suponha um programa que controla um motor elétrico através de uma saída serial. A velocidade do motor é proporcional a tensão aplicada e esta proporcional aos bits que vão para saída serial e passam por um conversor digital analógico.

Vamos abstrair todos estes detalhes por enquanto e modelar somente a interface do motor como uma classe, a pergunta é que métodos e que atributos deve ter nossa classe, que argumentos e valores de retorno devem ter os métodos? 

Representação da velocidade:  

A velocidade do motor será representada por um atributo inteiro (int). Usaremos a faixa de bits que precisarmos, caso o valor de bits necessário não possa ser fornecido pelo tipo , usaremos então o tipo long, isto depende do conversor digital analógico utilizado. 

Representação da saída serial:  

O motor precisa conhecer a sua saída serial, a sua ligação com o “motor do mundo real”. Suponha uma representação em hexadecimal do atributo endereço de porta serial, um possível nome para o atributo: enderecomotor. Não se preocupe em saber como usar a representação hexadecimal. 

Alteração do valor da velocidade:  

Internamente o usuário da classe motor pode desejar alterar a velocidade, cria-se então o método: public void altera_velocidade(int novav);. O código anterior corresponde ao cabeçalho do método ele é definido junto com a classe motor, associado a ela. O valor de retorno da função que “implementa” o método é void, poderia ser criado um valor de retorno (boolean) que indicasse se o valor de velocidade era permitido e foi alterado ou não era permitido e portanto não foi alterado.

O ato de invocar um método também é  chamado de passar uma mensagem para o objeto que está executando este método.

Não faz sentido usar, chamar, este método separado de uma variável do tipo motor, mas então porque  na lista de argumentos da função não se encontra um motor? Este pensamento reflete a maneira de associar dados e código (funções) das linguagens procedurais. Em linguagens orientadas a objetos o código e os dados são ligados de forma diferente, a própria declaração de um tipo definido pelo usuário já engloba as declarações das funções inerentes a este tipo, isto será explicado em 1.2. O objeto ao qual é aplicado o método é passado de outra forma.

Note que não fornecemos o código do método, isto não é importante, por hora a preocupação é com a interface definida pela classe: seus cabeçalhos de métodos e atributos. Apenas pense que sua interface deve ser flexível de modo a não apresentar entraves para a criação do código que seria feita numa outra etapa. Nesta etapa teríamos que imaginar que o valor numérico da velocidade deve ir para o conversor onde irá se transformar numa diferença de potencial a ser aplicada nos terminais do motor, etc. 

Um diagrama simplificado da classe motor com os atributos e métodos:

 

 

 

 

 

 

 

 

Este e outros diagramas deste texto foram elaborados com uma ferramenta case para “object oriented modeling and design” segundo a metodologia descrita em [[1]]

 

 Retorna                                                                                                Avança

Hosted by www.Geocities.ws

1