Diversos, Java

Introdução a Orientação a Objetos – Segunda parte

Classes:

As classes são os verdadeiros elementos da orientação a objetos. Uma classe descreve um tipo contendo sub-rotinas (ou métodos) e dados. Como uma classe descreve um tipo, pode-se construir variáveis que contem tanto métodos quanto variáveis. Tais variáveis são os objetos. Os objetos diferem das variáveis das linguagens de programação procedimentais porque podem definir o modo como os dados podem ser alterados. As sub-rotinas nas linguagens orientadas a objetos diferem de seus equivalentes nas linguagens procedimentais pois elas têm um conjunto de dados (os membros de dados definidos na mesma classe), o qual elas podem alterar, mas os outros métodos não.

A classe é o ponto de partida da programação orientada a objetos. São elas que fornecem modelos para a especificação do estado e do comportamento de um objeto durante a execução. Um objeto é reconhecido como uma instância de uma classe.

Uma classe é constituída de atributos e métodos. Um atributo pode ser visto como uma qualidade ou característica da classe. Por exemplo, a classe Funcionário, terá os seguintes atributos: nome, idade, sexo, etc. Já os métodos são os serviços que uma classe pode oferecer. Para este caso, Funcionário, poderia-se ter: calcularSalario, calcularHorasExtras, etc.

Definição de classes em Java:

Em Java, classes são definidas através do uso da palavra-chave class. Para definir uma classe, utiliza-se a construção:

[modif] class NomeDaClasse {
// corpo da classe…
}

A primeira linha é um comando que inicia a declaração da classe. Após a palavra-chave class, segue-se o nome da classe, que deve ser um identificador válido para a linguagem. O modificador modif é opcional; se presente, pode ser uma combinação de public e abstract ou final.

A definição da classe propriamente dita está entre as chaves { e }, que delimitam blocos na linguagem Java. Este corpo da classe usualmente obedece à seguinte seqüência de definição:

1. As variáveis de classe, public, protected, e private.
2. Os atributos (ou variáveis de instância) dos objetos dessa classe, seguindo a mesma ordenação definida para as variáveis de classe.
3. Os construtores de objetos dessa classe.
4. Os métodos da classe, geralmente agrupados por funcionalidade.

Toda classe pode também ter um método main associado, que será utilizado pelo interpretador Java para dar início à execução de uma aplicação.

Java também oferece outra estrutura, denominada interface, com sintaxe similar à de classes mas contendo apenas a especificação da funcionalidade que uma classe deve conter, sem determinar como essa funcionalidade deve ser implementada.

Exemplos de código:

Método main:

O método main é onde o programa inicia. Pode estar presente em qualquer classe. Os parâmetros de linha de comando são enviados para a array args[], do tipo String.

public class OlaMundo {
public static void main(String args[]) {
System.out.println(“Olá, Mundo!”);
}
}

Criação de classes:

Exemplo:

public abstract class Animal {
public abstract void fazerBarulho();
}

public class Cachorro extends Animal {
public void fazerBarulho() {
System.out.println(“AuAu!”);
}
}

public class Gato extends Animal {
public void fazerBarulho() {
System.out.println(“Miau!”);
}
}

O exemplo acima cria a classe Animal e duas classes derivadas de Animal.

Java não suporta herança múltipla.

Herança Múltipla é o principio, implementado em algumas linguagens de programação orientadas a objetos, que possibilita o compartilhamento de atributos e operações de duas ou mais classes em uma subclasse.

Ela é implementada nas linguagens de programação C++ e em Python, por exemplo. A linguagem Java possui apenas herança simples (uma classe possui no máximo uma classe pai), mas permite que uma classe implemente várias interfaces.

O uso indiscriminado desta característica pode levar a uma codificação confusa que dificultaria a manutenção do código.

Todas as classes em Java derivam de Object.

Classes internas:

Java pode ter classes internas.

Exemplos:

public class Cavalo extends Animal {
public void fazerBarulho() {
System.out.println(“RIINCH!”);
}

//Classe interna e privada. Existe só no contexto do cavalo.
private class Parasita extends Animal {
public void fazerBarulho() {
System.out.println(“SQRRT”);
}
}
}

Objetos e classes anônimos:

Podemos ter também objetos e ou classes anônimas.

exemplo:

public class MostraBarulho {
public static void main(String args[]) {
new Cavalo().fazerBarulho(); //Objeto anônimo.

//Abaixo um objeto e classe anônimos!
new Animal() {
public void fazerBarulho() {
System.out.println(“QUAC!”);
}
}.fazerBarulho();
}
}

Interfaces:

Uma interface modela um comportamento esperado. Pode-se entendê-la como uma classe que contenha apenas métodos abstratos. Embora uma classe não possa conter mais de uma superclasse, a classe pode implementar mais de uma interface.

Exemplo:

public interface Pesado {
double obterPeso();
}

public interface Colorido {
Color obterCor();
}

public class Porco extends Animal
implements Pesado, Colorido {
public void fazerBarulho() {
System.out.println(“Óinc!”);
}

//Implementação da interface Pesado
public double obterPeso() {
return 50.00;
}

//Implementação da interface Colorido
public Color obterCor() {
return Color.BLACK;
}

//Um método só do porco
public boolean enlameado() {
return true;
}
}

Diversos, Java

Introdução a Orientação a Objetos – Primeira parte

A orientação a objetos, é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos.
O termo orientação a objetos pressupõe uma organização de software em termos de coleção de objetos discretos incorporando estrutura e comportamento próprios.
O enfoque de modelagem por objetos, vê o mundo como uma coletânea de objetos que interagem entre si, apresentam características próprias que são representadas pelos seus atributos (dados) e operações (métodos ou serviços).
Resumidamente, a mudança de enfoque (entre estruturado e orientado a objetos) é justificada pelo fato de que objetos existem na natureza muito antes de haver qualquer tipo de aplicação deles pelo negócio. Equipamento, pessoas, minerais, petróleo, etc., existem por si só e apresentam características peculiares representadas pelos seus atributos e, adiante, pelo seu comportamento no mundo real.

Este tipo de abordagem, oferece os seguintes benefícios:

Manter a modelagem do sistema, e em decorrência, sua automação o mais próximo possível de uma visão conceitual do mundo real;
Servir de base à decomposição e modelagem do sistema nos dados, que é o elemento mais estável de todos aqueles que compõem um sistema de informação e
Oferecer maior transparência na passagem da fase de modelagem para a de construção através da introdução de detalhes, não requerendo uma reorganização do modelo.

Um aspecto interessante da teoria de objetos é a sua característica intríseca de analisar o mundo como ele é, permitindo organizar resultados de maneira mais fácil e natural. Procura representar o mundo real como o vemos, pessoas, lugares e coisas existentes que se comportam como objetos e que possuem características próprias de atributos e operações. Por definição, a teoria de objetos espelha o mundo de forma mais simples do que modelos algorítmicos ou estruturados.

Principais palavras chaves na Teoria da Orientação a Objetos:

Atributo:
Característica particular de uma ocorrência da classe.
(Indivíduo possui nome, sexo, data de nascimento)

Classe:
Agrupamento de objetos similares que apresentam os mesmos atributos e métodos.
(Indivíduo, caracterizando as pessoas do mundo)

Encapsulamento:
Combinação de atributos e métodos em uma classe.
Atributo: data do nascimento.
Método: cálculo da idade a partir da data do nascimento.

Especificação:
Atributos e métodos diferentes de uma subclasse, acrescentando ou substituindo características herdadas da classe pai.
Subclasses [Organização] e [indivíduo] acrescentam atributos e métodos distintos da superclasse.

Estado:
Situação de um objeto em um dado instante de tempo.
(Emitindo nota fiscal)

Evento:
Uma ocorrência significativa no mundo real que deve ser tratada.
(Pedido tomado, entrega efetuada, ponto de solicitação de material atingido)

Generalização:
Atributos e operações comuns compartilhados por classes.
Superclasse [Parte] ou [Pessoa] como generalização das subclasses [Organização] e Indivíduo.

Herança:
Compartilhamento pela subclasse dos atributos e operações da classe pai.
Subclasse Eucalipto compartilha atributos e operações da classe Árvore.

Instância de classe:
Uma ocorrência específica de uma classe.
É o mesmo que objeto. Uma pessoa, uma organização, um equipamento, uma localização geográfica.

Mensagem:
Uma solicitação entre objetos para invocar certo método.
Informar a idade da pessoa.

Objeto:
Elemento do mundo real (natureza).
Sinônimo de instância de classe.
Uma pessoa: “Fulano de Tal”.

Métodos (serviços):
Lógica contida em uma classe para designar-lhe um comportamento.
Cálculo da idade de uma pessoa em uma classe.

Polimorfismo (sobrecarga):
Habilidade para usar a mesma mensagem para invocar comportamentos diferentes do objeto.
Chamada da operação: “calcularSaldo” de correntista. Invoca as derivações correspondentes para cálculo de saldo de poupança, renda fixa, fundo de ações, etc.

SubClasse:
Característica particular de uma classe.
Classe Árvore -> subclasses Ipê, Jacarandá, Eucalipto, etc.

Conceitos de Orientação a Objetos:

Abstração OO:

Habilidade mental que permite aos seres humanos visualizarem os problemas do mundo real com vários graus de detalhe, dependendo do contexto corrente do problema.
[Rumbaugh]

Abstração é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software.
(Um objeto é uma ocorrência específica (instância) de uma classe).

Por exemplo, imaginamos a abstração referente a classe Animais. Há várias entidades na classe Animais como Anfíbios, Répteis e Mamíferos que são também sub-classes da classe Animais, onde há objetos que contêm cada sub-classe como Ser humano, Jacaré e outros.

Objeto:

Um objeto é uma ocorrência específica (instância) de uma classe e é similar a uma entidade/tabela no modelo relacional, somente até o ponto onde representa uma coleção de dados relacionados com um tema comum.
A diferença entre objeto e entidade/tabela é que o primeiro é uma ocorrência de uma classe, que, por sua vez, é um conjunto de objetos similares em atributos e métodos onde a estrutura de classe define como o objeto é criado e se comporta durante a vida. Um objeto possui todo o que é necessário para conhecer a si próprio, há o encapsulamento de métodos e atributos atribuindo-lhe vida própria.
É uma abstração de alguma coisa em um domínio do problema, de maneira autocontida e identificável, refletindo a capacidade de manter um estado de si, encapsulando valores de atributos e serviços exclusivos.
Não muda de identidade, comportamento ou atributos definidos por sua classe, podendo conter dados privados ou atributos que são alterados para representar o estado atual do objeto.
Atributos e operações utilizados para controlar seu comportamento, são encapsulados dentro do objeto, às vezes fora do alcance dos demais objetos.

mensagem:

Objetos se comunicam através de mensagens, isto é, um sinal enviado de um objeto a outro requisitando serviços através da execução de uma operação. Trata-se de um ciclo completo onde uma mensagem é enviada a um objeto, métodos são executados dentro desse com base nos dados de seu alcance na hierarquia de classes, e uma mensagem contendo o resultado da operação é enviada ao objeto solicitante. Funciona como uma fábrica que recebe uma ordem de produção (mensagem de solicitação), processa esta ordem (métodos) utilizando matéria-prima (atributos) e gera um produto final (mensagem de resposta).

Polimorfismo:

Adjacente ao conceito de mensagem, há o conceito de polimorfismo, cuja palavra é originária do grego “muitas formas”. Tais formas se referem aos vários comportamentos que uma mesma operação pode assumir, assim como à capacidade de uma variável referir-se a objetos diferentes que preenchem certas responsabilidades como um conceito em teoria de tipo no qual um nome (como uma declaração de variável) pode denotar objetos de muitas subclasses diferentes que estão relacionadas por alguma superclasse comum, assim, qualquer objeto denotado por esse nome tem a capacidade de responder a algum conjunto comum de métodos de formas diferentes.

Classe:

Classe é uma coleção de objetos que podem ser descritos com os mesmos atributos e os mesmos métodos. Representa a idéia ou um conceito simples e categoriza objetos que possuem propriedades similares, configurando-se em um modelo para a criação de novas instâncias.

Na construção de classes, há a possibilidade de ocorrer uma conexão semântica de elementos de modelo entre pai e filho na qual uma classe filha (subclasse) herda as propriedades de seu pai (super classe) direta ou indiretamente. Cada classe pode ter suas propriedades particulares herdadas diretamente da classe pai ou substituída / mascarada nessa transição, assim somente propriedades diferentes serão declaradas na classe filha. Quando é criada uma nova classe a partir de uma existente, a nova classe (uma subclasse) automaticamente herda todas as propriedades e comportamentos da classe base (a super classe).
Uma classe base estabelece uma interface comum para um grupo de classes ou descreve o alcance de mensagens para os objetos dentro de uma classe. Esse mecanismo retrata mais um conceito da orientação a objetos: a herança.

Herança:

Herança é a capacidade de um novo objeto tomar atributos e operações de um objeto existente, permitindo criar classes complexas sem repetir código, a nova classe simplesmente herda seu nível base de características de um antepassado na hierarquia de classe. Também pode reimplementar (ou sobreescrever) métodos selecionados, já que subclasses tiram proveito do comportamento das classes acima na hierarquia passando propriedades de uma classe pai a uma classe filha.

Por exemplo, a classe Automóvel pode conter propriedades genéricas incluindo potência, capacidade de passageiros, etc. A subclasse Automóvel Esportivo pode herdar as propriedades da classe Automóvel e então modificar as propriedades. A subclasse Porsche pode herdar todas as propriedades da classe Automóvel Esportivo e assim modificar ou adicionar as propriedades específicas a objeto “Porsche”. Se uma classe herda comportamentos (métodos) e atributos de mais de uma classe é denominado de herança múltipla, uma variação semântica de generalização na qual um tipo pode ter mais de um supertipo.

Dependência e Coesão de classes:

Dependência refere-se ao conhecimento que uma classe possui de outra – o objetivo é o de minimizar a dependência para evitar impactos em uma classe decorrentes de modificações em outra classe. Coesão é uma medida de integridade conceitual de uma nova classe – o objetivo nesse caso, é o de maximizar a coesão pra assegurar agrupamento de métodos e com isso reduzir esforços de manutenção.

Java

Instalação Plugin TomCat no Eclipse.

Acessem a url:

http://www.sysdeo.com/sysdeo/eclipse/tomcatplugin

baixem o arquivo correspondente a sua versão do Eclipse/TomCat e
descompacte na pasta Plugins no diretorio de instalação do seu
Eclipse (instalação padrão de plugins no Eclipse).

Apos isso é só reiniciar a IDE e configurar conforme a versão do
TomCat que você tem instalada.

Com a instalação deste plugin, você poderá controlar o servidor e
também executar/debugar suas aplicações web sem problemas, direto da
sua IDE.(como acontece no NetBeans).

Para mais detalhes da instalação/configuração/execução, acessem
este endereço.

https://www.dev.java.net/files/documents/353/13028/eclipse_tomcat.swf

Note que haverá alterações na forma de configuração,
principalmente em relação as versões dos softwares.
O meu funfou, com poucas alterações.

Java, Linux

Instalando e configurando o J2SE no Ubuntu 6.10

O que é J2SE?

Java 2 Standard Edition provê um ambiente completo para desenvolvimento de aplicações em desktop e servidores. Ele também serve como base para a plataforma “Java 2 Enterprise Edition” (J2EE) e “Java Web Services”.

Neste artigo utilizamos a versão “J2SE Development Kit 5.0 Update 9”, provalvelmente o processo de instalação e configuração será o mesmo para outras versões do JDK.
O Sistema operacional em que será instalado o JDK é o Ubuntu GNU/Linux em sua versão 6.10.

Entre no link fornecido abaixo e faça o download do JDK em sua versão mais recente.

http://java.sun.com/javase/downloads/index.jsp

Criaremos uma pasta com o nome “java” dentro do diretorio “/usr”, onde vamos instalar o JDK.
Acesse um console(shell) como super usuario(root) (ou utilize o sudo) e digite os seguintes comandos.

mkdir /usr/java

Em seguida movemos o arquivo do SDK que acabamos de fazer o download para a pasta “/usr/java”:

mv jdk-1_5_0_09-linux-i586.bin /usr/java

Acesse o diretorio e dê permissão de execução para o arquivo.

cd /usr/java

chmod a+x jdk-1_5_0_09-linux-i586.bin

Por último executamos o arquivo para começar a instalação:

./jdk-1_5_0_09-linux-i586.bin

Digite “yes” quando receber os termos da licença, e espere o final da instalação.
Após o término da instalação, você poderá deletar o arquivo .bin, deixando apenas a pasta jdk1.5.0_09 no diretorio /java.

Para que a sua nova instalação do Java(JDK) seja preferencial no sistema operacional e não se utilize a versão Java que já vem instalada por padrão (/usr/bin/gij-wrapper-4.1), que apenas provê o runtime da plataforma, digite o seguinte comando:

rm /etc/alternatives/java

Agora insira um link para a sua nova instalação do Java:

ln -s /usr/java/jdk1.5.0_09/bin/java /etc/alternatives/java

Agora iremos setar as variáveis de ambiente para que nosso JDK funcione corretamente.
Abra o arquivo /etc/bashrc, para isso digite:

gedit /etc/bash.bashrc

Acrescente as seguintes linhas ao final do arquivo:

export JAVA_HOME=/usr/java/jdk1.5.0_09
export PATH=:/usr/java/jdk1.5.0_09/bin:$PATH

Para confirmar o sucesso da configuração, abra uma outra seção de console e digite os seguintes comandos:

java -version

Você deve receber uma resposta semelhante a esta:

java version “1.5.0_09”
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b03)
Java HotSpot(TM) Client VM (build 1.5.0_09-b03, mixed mode, sharing)

javac -version

E você irá ver a versão do Java Compiler e suas opções.

Existem outras formas de se configura as variaveis de ambiente, mas esta forma é bem simples e funcional.