Java: objetos y clases

Java es un lenguaje orientado a objetos. Como lenguaje que tiene la función Orientada a objetos, Java admite los siguientes conceptos fundamentales:

  • Polymorphism
  • Inheritance
  • Encapsulation
  • Abstraction
  • Classes
  • Objects
  • Instance
  • Method
  • Paso de mensajes

En este capítulo, analizaremos los conceptos: clases y objetos.

  • Object- Los objetos tienen estados y comportamientos. Ejemplo: un perro tiene estados - color, nombre, raza y comportamientos - meneando la cola, ladrando, comiendo. Un objeto es una instancia de una clase.

  • Class - Una clase se puede definir como una plantilla / plano que describe el comportamiento / estado que soporta el objeto de su tipo.

Objetos en Java

Veamos ahora en profundidad qué son los objetos. Si consideramos el mundo real, podemos encontrar muchos objetos a nuestro alrededor, automóviles, perros, humanos, etc. Todos estos objetos tienen un estado y un comportamiento.

Si consideramos a un perro, entonces su estado es: nombre, raza, color y comportamiento: ladrar, menear la cola, correr.

Si compara el objeto de software con un objeto del mundo real, tienen características muy similares.

Los objetos de software también tienen un estado y un comportamiento. El estado de un objeto de software se almacena en campos y el comportamiento se muestra mediante métodos.

Entonces, en el desarrollo de software, los métodos operan en el estado interno de un objeto y la comunicación de objeto a objeto se realiza a través de métodos.

Clases en Java

Una clase es un plano a partir del cual se crean objetos individuales.

A continuación se muestra una muestra de una clase.

Ejemplo

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

   void barking() {
   }

   void hungry() {
   }

   void sleeping() {
   }
}

Una clase puede contener cualquiera de los siguientes tipos de variables.

  • Local variables- Las variables definidas dentro de métodos, constructores o bloques se denominan variables locales. La variable se declarará e inicializará dentro del método y la variable se destruirá cuando el método se haya completado.

  • Instance variables- Las variables de instancia son variables dentro de una clase pero fuera de cualquier método. Estas variables se inicializan cuando se crea una instancia de la clase. Se puede acceder a las variables de instancia desde dentro de cualquier método, constructor o bloques de esa clase en particular.

  • Class variables - Las variables de clase son variables declaradas dentro de una clase, fuera de cualquier método, con la palabra clave estática.

Una clase puede tener cualquier número de métodos para acceder al valor de varios tipos de métodos. En el ejemplo anterior, ladrar (), hambriento () y dormir () son métodos.

A continuación, se muestran algunos de los temas importantes que deben discutirse al analizar las clases del lenguaje Java.

Constructores

Cuando se habla de clases, uno de los subtemas más importantes serían los constructores. Cada clase tiene un constructor. Si no escribimos explícitamente un constructor para una clase, el compilador de Java crea un constructor predeterminado para esa clase.

Cada vez que se crea un nuevo objeto, se invocará al menos un constructor. La regla principal de los constructores es que deben tener el mismo nombre que la clase. Una clase puede tener más de un constructor.

A continuación se muestra un ejemplo de un constructor:

Ejemplo

public class Puppy {
   public Puppy() {
   }

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

Java también es compatible con las clases Singleton, en las que podría crear solo una instancia de una clase.

Note- Tenemos dos tipos distintos de constructores. Vamos a discutir los constructores en detalle en los capítulos siguientes.

Crear un objeto

Como se mencionó anteriormente, una clase proporciona los planos de los objetos. Básicamente, un objeto se crea a partir de una clase. En Java, la nueva palabra clave se utiliza para crear nuevos objetos.

Hay tres pasos al crear un objeto a partir de una clase:

  • Declaration - Una declaración de variable con un nombre de variable con un tipo de objeto.

  • Instantiation - La palabra clave 'nuevo' se utiliza para crear el objeto.

  • Initialization- La palabra clave 'nueva' va seguida de una llamada a un constructor. Esta llamada inicializa el nuevo objeto.

A continuación se muestra un ejemplo de cómo crear un objeto:

Ejemplo

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" );
   }
}

Si compilamos y ejecutamos el programa anterior, producirá el siguiente resultado:

Salida

Passed Name is :tommy

Acceso a variables y métodos de instancia

Se accede a las variables y métodos de instancia a través de objetos creados. Para acceder a una variable de instancia, la siguiente es la ruta completamente calificada:

/* 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();

Ejemplo

Este ejemplo explica cómo acceder a las variables de instancia y los métodos de una clase.

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 );
   }
}

Si compilamos y ejecutamos el programa anterior, producirá el siguiente resultado:

Salida

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

Reglas de declaración de archivo de origen

Como última parte de esta sección, veamos ahora las reglas de declaración del archivo fuente. Estas reglas son esenciales al declarar clases, declaraciones de importación y declaraciones de paquetes en un archivo fuente.

  • Solo puede haber una clase pública por archivo fuente.

  • Un archivo de origen puede tener varias clases no públicas.

  • El nombre de la clase pública debe ser el nombre del archivo fuente, que debe ser agregado por .javaal final. Por ejemplo: el nombre de la clase es Public class Employee {}, entonces el archivo fuente debe ser Employee.java.

  • Si la clase está definida dentro de un paquete, entonces la declaración del paquete debe ser la primera declaración en el archivo fuente.

  • Si hay declaraciones de importación, deben escribirse entre la declaración del paquete y la declaración de clase. Si no hay declaraciones de paquetes, entonces la declaración de importación debe ser la primera línea del archivo fuente.

  • Las declaraciones de importación y paquete implicarán a todas las clases presentes en el archivo fuente. No es posible declarar diferentes declaraciones de importación y / o paquete para diferentes clases en el archivo fuente.

Las clases tienen varios niveles de acceso y hay diferentes tipos de clases; clases abstractas, clases finales, etc. Explicaremos todo esto en el capítulo de modificadores de acceso.

Aparte de los tipos de clases mencionados anteriormente, Java también tiene algunas clases especiales llamadas clases internas y clases anónimas.

Paquete Java

En palabras simples, es una forma de categorizar las clases y las interfaces. Al desarrollar aplicaciones en Java, se escribirán cientos de clases e interfaces, por lo que categorizar estas clases es una necesidad y hace la vida mucho más fácil.

Declaraciones de importación

En Java, si se proporciona un nombre completo, que incluye el paquete y el nombre de la clase, el compilador puede localizar fácilmente el código fuente o las clases. La declaración de importación es una forma de proporcionar la ubicación adecuada para que el compilador encuentre esa clase en particular.

Por ejemplo, la siguiente línea pediría al compilador que cargue todas las clases disponibles en el directorio instalación_java / java / io -

import java.io.*;

Un estudio de caso simple

Para nuestro caso de estudio, crearemos dos clases. Son Employee y EmployeeTest.

Primero abra el bloc de notas y agregue el siguiente código. Recuerde que esta es la clase Empleado y la clase es una clase pública. Ahora, guarde este archivo fuente con el nombre Employee.java.

La clase Empleado tiene cuatro variables de instancia: nombre, edad, designación y salario. La clase tiene un constructor definido explícitamente, que toma un parámetro.

Ejemplo

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);
   }
}

Como se mencionó anteriormente en este tutorial, el procesamiento comienza desde el método principal. Por lo tanto, para que podamos ejecutar esta clase de empleado, debe haber un método principal y se deben crear objetos. Crearemos una clase separada para estas tareas.

A continuación se muestra la clase EmployeeTest , que crea dos instancias de la clase Employee e invoca los métodos de cada objeto para asignar valores a cada variable.

Guarde el siguiente código en el archivo 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();
   }
}

Ahora, compile ambas clases y luego ejecute EmployeeTest para ver el resultado de la siguiente manera:

Salida

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

¿Lo que sigue?

En la próxima sesión, discutiremos los tipos de datos básicos en Java y cómo se pueden usar al desarrollar aplicaciones Java.