Java - Objeto e classes

Java é uma linguagem orientada a objetos. Como uma linguagem que possui o recurso Orientado a Objetos, Java oferece suporte aos seguintes conceitos fundamentais -

  • Polymorphism
  • Inheritance
  • Encapsulation
  • Abstraction
  • Classes
  • Objects
  • Instance
  • Method
  • Passagem de mensagens

Neste capítulo, examinaremos os conceitos - Classes e Objetos.

  • Object- Os objetos têm estados e comportamentos. Exemplo: Um cão tem estados - cor, nome, raça e também comportamentos - abanar o rabo, latir, comer. Um objeto é uma instância de uma classe.

  • Class - Uma classe pode ser definida como um template / blueprint que descreve o comportamento / estado que o objeto de seu tipo suporta.

Objetos em Java

Vamos agora examinar profundamente o que são objetos. Se considerarmos o mundo real, podemos encontrar muitos objetos ao nosso redor, carros, cães, humanos, etc. Todos esses objetos têm um estado e um comportamento.

Se considerarmos um cão, então seu estado é - nome, raça, cor e o comportamento é - latir, abanar o rabo, correr.

Se você comparar o objeto de software com um objeto do mundo real, eles têm características muito semelhantes.

Os objetos de software também têm um estado e um comportamento. O estado de um objeto de software é armazenado em campos e o comportamento é mostrado por meio de métodos.

Portanto, no desenvolvimento de software, os métodos operam no estado interno de um objeto e a comunicação objeto a objeto é feita por meio de métodos.

Aulas em Java

Uma classe é um projeto a partir do qual objetos individuais são criados.

A seguir está um exemplo de uma classe.

Exemplo

public class Dog {
   String breed;
   int age;
   String color;

   void barking() {
   }

   void hungry() {
   }

   void sleeping() {
   }
}

Uma classe pode conter qualquer um dos seguintes tipos de variáveis.

  • Local variables- Variáveis ​​definidas dentro de métodos, construtores ou blocos são chamadas de variáveis ​​locais. A variável será declarada e inicializada dentro do método e a variável será destruída quando o método for concluído.

  • Instance variables- Variáveis ​​de instância são variáveis ​​dentro de uma classe, mas fora de qualquer método. Essas variáveis ​​são inicializadas quando a classe é instanciada. Variáveis ​​de instância podem ser acessadas de dentro de qualquer método, construtor ou blocos daquela classe particular.

  • Class variables - Variáveis ​​de classe são variáveis ​​declaradas dentro de uma classe, fora de qualquer método, com a palavra-chave estática.

Uma classe pode ter vários métodos para acessar o valor de vários tipos de métodos. No exemplo acima, latindo (), com fome () e dormindo () são métodos.

A seguir estão alguns dos tópicos importantes que precisam ser discutidos ao examinar as classes da linguagem Java.

Construtores

Ao discutir sobre as classes, um dos subtópicos mais importantes seriam os construtores. Cada classe possui um construtor. Se não escrevermos explicitamente um construtor para uma classe, o compilador Java construirá um construtor padrão para essa classe.

Cada vez que um novo objeto é criado, pelo menos um construtor será chamado. A regra principal dos construtores é que eles devem ter o mesmo nome da classe. Uma classe pode ter mais de um construtor.

A seguir está um exemplo de um construtor -

Exemplo

public class Puppy {
   public Puppy() {
   }

   public Puppy(String name) {
      // This constructor has one parameter, name.
   }
}

Java também oferece suporte a Singleton Classes, onde você poderá criar apenas uma instância de uma classe.

Note- Temos dois tipos diferentes de construtores. Discutiremos os construtores em detalhes nos capítulos subsequentes.

Criação de um objeto

Conforme mencionado anteriormente, uma classe fornece os projetos para objetos. Então, basicamente, um objeto é criado a partir de uma classe. Em Java, a nova palavra-chave é usada para criar novos objetos.

Existem três etapas ao criar um objeto de uma classe -

  • Declaration - Uma declaração de variável com um nome de variável com um tipo de objeto.

  • Instantiation - A palavra-chave 'novo' é usada para criar o objeto.

  • Initialization- A palavra-chave 'novo' é seguida por uma chamada para um construtor. Esta chamada inicializa o novo objeto.

A seguir está um exemplo de criação de um objeto -

Exemplo

public class Puppy {
   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name );
   }

   public static void main(String []args) {
      // Following statement would create an object myPuppy
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

Se compilarmos e executarmos o programa acima, ele produzirá o seguinte resultado -

Resultado

Passed Name is :tommy

Acessando variáveis ​​e métodos de instância

Variáveis ​​de instância e métodos são acessados ​​por meio de objetos criados. Para acessar uma variável de instância, a seguir está o caminho totalmente qualificado -

/* First create an object */
ObjectReference = new Constructor();

/* Now call a variable as follows */
ObjectReference.variableName;

/* Now you can call a class method as follows */
ObjectReference.MethodName();

Exemplo

Este exemplo explica como acessar variáveis ​​de instância e métodos de uma classe.

public class Puppy {
   int puppyAge;

   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Name chosen is :" + name );
   }

   public void setAge( int age ) {
      puppyAge = age;
   }

   public int getAge( ) {
      System.out.println("Puppy's age is :" + puppyAge );
      return puppyAge;
   }

   public static void main(String []args) {
      /* Object creation */
      Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
      myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
      myPuppy.getAge( );

      /* You can access instance variable as follows as well */
      System.out.println("Variable Value :" + myPuppy.puppyAge );
   }
}

Se compilarmos e executarmos o programa acima, ele produzirá o seguinte resultado -

Resultado

Name chosen is :tommy
Puppy's age is :2
Variable Value :2

Regras de declaração do arquivo fonte

Como a última parte desta seção, vamos agora examinar as regras de declaração do arquivo de origem. Essas regras são essenciais ao declarar classes, instruções de importação e instruções de pacote em um arquivo de origem.

  • Só pode haver uma classe pública por arquivo de origem.

  • Um arquivo de origem pode ter várias classes não públicas.

  • O nome da classe pública deve ser o nome do arquivo de origem também, que deve ser anexado por .javano fim. Por exemplo: o nome da classe é public class Employee {} então o arquivo de origem deve ser como Employee.java.

  • Se a classe for definida dentro de um pacote, a instrução do pacote deve ser a primeira instrução no arquivo de origem.

  • Se houver instruções de importação, elas deverão ser escritas entre a instrução do pacote e a declaração da classe. Se não houver instruções de pacote, a instrução de importação deve ser a primeira linha no arquivo de origem.

  • As instruções de importação e pacote implicarão em todas as classes presentes no arquivo de origem. Não é possível declarar instruções de importação e / ou pacote diferentes para classes diferentes no arquivo de origem.

As classes têm vários níveis de acesso e existem diferentes tipos de classes; classes abstratas, classes finais, etc. Explicaremos sobre tudo isso no capítulo sobre modificadores de acesso.

Além dos tipos de classes mencionados acima, Java também possui algumas classes especiais chamadas classes internas e classes anônimas.

Pacote Java

Em palavras simples, é uma forma de categorizar as classes e interfaces. Ao desenvolver aplicativos em Java, centenas de classes e interfaces serão escritas, portanto, categorizar essas classes é uma obrigação e torna a vida muito mais fácil.

Declarações de importação

Em Java, se um nome totalmente qualificado, que inclui o pacote e o nome da classe, for fornecido, o compilador pode localizar facilmente o código-fonte ou as classes. A instrução de importação é uma maneira de fornecer a localização adequada para o compilador encontrar essa classe específica.

Por exemplo, a linha a seguir pediria ao compilador para carregar todas as classes disponíveis no diretório java_installation / java / io -

import java.io.*;

Um estudo de caso simples

Para nosso estudo de caso, criaremos duas classes. Eles são Employee e EmployeeTest.

Primeiro abra o bloco de notas e adicione o código a seguir. Lembre-se de que esta é a classe Employee e a classe é uma classe pública. Agora, salve este arquivo de origem com o nome Employee.java.

A classe Employee tem quatro variáveis ​​de instância - nome, idade, designação e salário. A classe tem um construtor definido explicitamente, que recebe um parâmetro.

Exemplo

import java.io.*;
public class Employee {

   String name;
   int age;
   String designation;
   double salary;

   // This is the constructor of the class Employee
   public Employee(String name) {
      this.name = name;
   }

   // Assign the age of the Employee  to the variable age.
   public void empAge(int empAge) {
      age = empAge;
   }

   /* Assign the designation to the variable designation.*/
   public void empDesignation(String empDesig) {
      designation = empDesig;
   }

   /* Assign the salary to the variable	salary.*/
   public void empSalary(double empSalary) {
      salary = empSalary;
   }

   /* Print the Employee details */
   public void printEmployee() {
      System.out.println("Name:"+ name );
      System.out.println("Age:" + age );
      System.out.println("Designation:" + designation );
      System.out.println("Salary:" + salary);
   }
}

Conforme mencionado anteriormente neste tutorial, o processamento começa a partir do método principal. Portanto, para que possamos executar essa classe Employee, deve haver um método principal e os objetos devem ser criados. Estaremos criando uma classe separada para essas tarefas.

A seguir está a classe EmployeeTest , que cria duas instâncias da classe Employee e invoca os métodos de cada objeto para atribuir valores a cada variável.

Salve o código a seguir no arquivo EmployeeTest.java.

import java.io.*;
public class EmployeeTest {

   public static void main(String args[]) {
      /* Create two objects using constructor */
      Employee empOne = new Employee("James Smith");
      Employee empTwo = new Employee("Mary Anne");

      // Invoking methods for each object created
      empOne.empAge(26);
      empOne.empDesignation("Senior Software Engineer");
      empOne.empSalary(1000);
      empOne.printEmployee();

      empTwo.empAge(21);
      empTwo.empDesignation("Software Engineer");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}

Agora, compile ambas as classes e execute EmployeeTest para ver o resultado da seguinte maneira -

Resultado

C:\> javac Employee.java
C:\> javac EmployeeTest.java
C:\> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0

O que vem a seguir?

Na próxima sessão, discutiremos os tipos de dados básicos em Java e como eles podem ser usados ​​no desenvolvimento de aplicativos Java.