Antes de entender as classes e objetos Java, vamos apresentar brevemente a programação orientada a objetos. Programação é o design de programas por meio de objetos. O objeto representa uma entidade e a entidade pode ser claramente identificada.
Java como linguagem orientada a objetos. Os seguintes conceitos básicos são suportados:
Polimorfismo
herdar
Encapsulamento
resumo
tipo
objeto
Exemplo
método
Análise de mensagens
Nesta seção nos concentramos nos conceitos de objetos e classes.
Objeto : Um objeto é uma instância de uma classe e possui estado e comportamento. Por exemplo, um cachorro é um objeto. Seu status inclui: cor, nome e raça; seus comportamentos incluem: abanar o rabo, latir, comer, etc.
Classe : uma classe é um modelo que descreve o comportamento e o status de uma classe de objetos.
Agora vamos dar uma olhada mais de perto no que é um objeto. Se você olhar para o mundo real ao seu redor, descobrirá que existem muitos objetos ao seu redor, como carros, cachorros, pessoas, etc. Todos esses objetos têm seu próprio estado e comportamento.
Tomemos como exemplo um cachorro. Seu status inclui: nome, raça e cor, e seus comportamentos incluem: latir, abanar o rabo e correr.
Comparando objetos reais e objetos de software, eles são muito semelhantes.
Os objetos de software também possuem estado e comportamento. O estado de um objeto de software é seu atributo e seu comportamento é refletido por meio de métodos.
No desenvolvimento de software, os métodos operam em mudanças no estado interno dos objetos, e chamadas mútuas entre objetos também são realizadas por meio de métodos.
As classes podem ser consideradas modelos para a criação de objetos Java.
Vamos entender a definição de classes em Java por meio da seguinte classe simples:
classe pública Cachorro{
Raça de corda;
idade interna;
Cor da corda;
latido vazio(){
}
vazio com fome(){
}
void dormindo(){
}
}
Uma classe pode conter variáveis dos seguintes tipos:
Variáveis locais : variáveis definidas em métodos, construtores ou blocos de instruções são chamadas de variáveis locais. A declaração e inicialização de variáveis estão todas nos métodos. Após o término do método, as variáveis serão automaticamente destruídas.
Variáveis de membro : variáveis de membro são variáveis definidas na classe e fora do corpo do método. Tais variáveis são instanciadas quando o objeto é criado. Variáveis-membro podem ser acessadas por métodos de classe, construtores e blocos de instruções específicos de classe.
Variáveis de classe : variáveis de classe também são declaradas na classe, fora do corpo do método, mas devem ser declaradas como tipo estático.
Uma classe pode ter vários métodos: barking()
, hungry()
e sleeping()
são todos métodos da classe Cachorro.
Cada classe possui métodos construtores. Se nenhum construtor for definido explicitamente para uma classe, o compilador Java fornecerá um construtor padrão para a classe.
Ao criar um objeto, pelo menos um método construtor deve ser chamado. O nome do construtor deve ser igual ao da classe. Uma classe pode ter vários construtores.
Aqui está um exemplo de construtor:
classe pública Cachorrinho{
publicPuppy(){
}
Filhote de cachorro público(String nome){
// Este construtor possui apenas um parâmetro: nome
}
}
Os objetos são criados com base em classes. Em Java, use a palavra-chave new
para criar um novo objeto. A criação de um objeto requer as três etapas a seguir:
Declaração : Declare um objeto, incluindo o nome e o tipo do objeto.
Instanciação : Use a palavra-chave new
para criar um objeto.
Inicialização : Ao usar new
para criar um objeto, o método construtor é chamado para inicializar o objeto.
Aqui está um exemplo de criação de um objeto:
classe pública Cachorrinho{
Filhote de cachorro público(String nome){
//Este construtor possui apenas um parâmetro: nome
System.out.println("O nome do filhote é:" + nome);
}
public static void main(String []args){
//A instrução a seguir criará um objeto Puppy Puppy myPuppy = new Puppy( "tommy" );
}
}
Compile e execute o programa acima e os seguintes resultados serão impressos:
O nome do cachorrinho é: Tommy
Acesse variáveis de membro e métodos de membro por meio do objeto criado da seguinte forma:
/* Instancia o objeto */
ObjectReference = new Construtor();
/* Acessar as variáveis */
ObjectReference.variableName;
/* Acessar métodos na classe */
ObjectReference.MethodName();
O exemplo a seguir mostra como acessar variáveis de instância e chamar métodos de membros:
classe pública Cachorrinho{
int idade do cachorro;
Filhote de cachorro público(String nome){
// Este construtor possui apenas um parâmetro: nome
System.out.println("O nome passado é:" + nome);
}
public void setAge(int idade){
idade do cachorrinho = idade;
}
public int getIdade(){
System.out.println("A idade do cachorrinho é:" + filhoteAge );
retornar idade do cachorrinho;
}
public static void main(String []args){
/* Cria objeto */
Cachorrinho meu Cachorrinho = novo Cachorrinho( "tommy");
/* Define a idade através de métodos */
meuPuppy.setAge(2);
/* Chama outro método para obter a idade */
meuPuppy.getAge();
/*Você também pode acessar variáveis de membro da seguinte maneira */
System.out.println("Valor da variável:" + myPuppy.puppyAge );
}
}
Compilar e executar o programa acima produz os seguintes resultados:
O nome passado é: tommy
A idade do cachorrinho é:2
Valor variável:2
Na parte final desta seção, aprenderemos sobre as regras de declaração para arquivos de origem. Preste atenção especial a essas regras ao definir múltiplas classes em um arquivo de origem e quando houver instruções import
e instruções package
.
Só pode haver uma classe public
em um arquivo fonte
Um arquivo fonte pode ter múltiplas classes não public
O nome do arquivo fonte deve ser consistente com o nome da classe public
. Por exemplo: o nome da classe public
no arquivo de origem é Employee
, então o arquivo de origem deve ser denominado Employee.java
.
Se uma classe for definida em um pacote, a instrução package
deverá estar na primeira linha do arquivo fonte.
Se o arquivo de origem contiver uma instrução import
, ela deverá ser colocada entre a instrução package
e a definição de classe. Se não houver nenhuma instrução package
, a instrução import
deverá ser a primeira no arquivo de origem.
A instrução import
e a instrução package
são válidas para todas as classes definidas no arquivo de origem. No mesmo arquivo fonte, declarações de pacotes diferentes não podem ser fornecidas para classes diferentes.
As aulas possuem diversos níveis de acesso, e as aulas também são divididas em diferentes tipos: aulas abstratas, aulas final
, etc. Eles serão introduzidos no capítulo sobre controle de acesso.
Além dos tipos mencionados acima, Java também possui algumas classes especiais, como classes internas e classes anônimas.
Os pacotes são usados principalmente para classificar classes e interfaces. Ao desenvolver programas Java, você pode escrever centenas ou milhares de classes, por isso é necessário classificar classes e interfaces.
Em Java, se um nome qualificado completo for fornecido, incluindo o nome do pacote e o nome da classe, o compilador Java poderá localizar facilmente o código-fonte ou a classe. A instrução Import
é usada para fornecer um caminho razoável para que o compilador possa encontrar uma determinada classe.
Por exemplo, a linha de comando a seguir instruirá o compilador a carregar todas as classes no caminho java_installation/java/io
importar java.io.*;
Neste exemplo, criamos duas classes: Employee e EmployeeTest.
Primeiro abra um editor de texto e cole o seguinte código nele. Observe que o arquivo é salvo como Employee.java.
A classe Employee possui quatro variáveis-membro: nome, idade, designação e salário. A classe declara explicitamente um método construtor com apenas um parâmetro.
importar java.io.*;
classe pública Funcionário{
Nome da sequência;
idade interna;
Designação de string;
salário duplo;
//Construtor da classe Employee public Employee(String name){
este.nome = nome;
}
//Definir o valor da idade public void empAge(int empAge){
idade = empIdade;
}
/*Define o valor da designação*/
public void empDesignation(String empDesig){
designação = empDesig;
}
/*Define o valor do salário*/
public void empSalary(double empSalary){
salário = empregadoSalário;
}
/* Imprime informações */
public void printEmployee(){
System.out.println("Nome:"+ nome);
System.out.println("Idade:" + idade);
System.out.println("Designação:" + designação);
System.out.println("Salário:" + salário);
}
}
A execução do programa começa a partir do método main
. Para executar este programa, o método main
deve ser incluído e um objeto de instância deve ser criado.
A classe EmployeeTest é fornecida abaixo, que instancia duas instâncias da classe Employee e chama métodos para definir os valores das variáveis.
Salve o código a seguir no arquivo EmployeeTest.java.
importar java.io.*;
classe pública EmployeeTest{
public static void main(String args[]){
/* Cria dois objetos usando o construtor */
Funcionário empregado = novo Funcionário("James Smith");
Funcionário empDois = novo Funcionário("Mary Anne");
//Chama os métodos membros desses dois objetos empOne.empAge(26);
empOne.empDesignation("Engenheiro de Software Sênior");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("Engenheiro de Software");
empDois.empSalary(500);
empTwo.printEmployee();
}
}
Compile esses dois arquivos e execute a classe EmployeeTest. Você pode ver os seguintes resultados:
C:>javacEmployee.java
C:> vi EmployeeTest.java
C:>javacEmployeeTest.java
C:>javaEmployeeTest
Nome:James Smith
Idade: 26
Designação: Engenheiro de Software Sênior
Salário: 1000,0
Nome: Maria Ana
Idade: 21
Designação: Engenheiro de Software
Salário:500,0