Trabajando con las Clases Básicas y Variables (Parte II)

Aqui traigo la segunda parte del Capitulo 4, donde como os dije veremos los objetos en Java.

Java es un lenguaje orientado a Objetos, y como el nombre implica, entendiendo que son y como funcionan, tendremos un concepto fundamental e importante. Casi todo en Java y su trabajo es un Objeto. Los tipos de dato primitive son una de las pequeñas excepciones en esta regla.

Entendiendo los Objetos

Los objetos son un tipo de dato mas avanzado respecto a los primitive. Usan internamente primitives u otros objetos para guardar datos, además de contener código. Los datos son usados para mantener el estado de un objeto, mientras que el código está organizado en métodos que realizan acciones sobre estos datos.
Una clase bien diseñada son aquellas que fácilmente son reusables. Esta es la filosofía fundamental de un lenguaje orientado a objetos.

Objetos vs Clases y el operador new

La distinción entre objetos y clases es importante de entender. Cuando un desarrollador escribe código, está creando o modificando una clase. Una clase es el archivo que contiene el códio que el desarrollador escribe. Una clase es como un patrón que le dice a la máquina virtual de Java como crear un Objeto en tiempo de ejecución.
El operador new le dice al JVM que cree una nueva instancia de esa clase, y elr esuultado de ello será un objeto. Se pueden crear bastantes objetos de una misma clase.
El siguiente código es un ejemplo de una clase. Esta clase es la empleada de crear un objeto usado para representar un coche:

public class Car {
    int topSpeed;
    boolean running;
    Car (int topSpeed, boolean running){
        this.topSpeed=topSpeed;
        this.running=running;
    }
    
    boolean isRunning(){
        return running;
    }
}

Este código puede ser usado para representar un objeto Car. La clase puede guardar un valor booleano que representa si el coche está en funcionamiento y un valor int que representa la velocidad máxima. De esta clase, el JVM puede crear una o mas instancias de la clase Car. Cada instancia se convertirá en su propio objeto Car. En el siguiente segmento de código, se crean 2 objetos Car:

Car fastCar = new Car(200,true);
Car slowCar = new Car(100,true);

Ambos son instancias de la clase Car. El operador new es usado para que la JVM sepa que se encesita crear un objeto Car con los argumentos pasados en el constructor. El operador new siempre retornará una nueva e independiente instancia de la clase.

Usando Objetos

En la sección sobre los datos de tipo primitive, aprendimos como cada uno de ellos puede ser inicializado y como tenían un tamaño finito predeterminado.
Los objetos sin embargo, los tamaños no están claramente definidos. El tamaño de un objeto depende del valor de todos sus datos primitive u otros objetos que guarde. En cuanto un objeto guarda otros objetos, su tamaño debe ser tenido en cuenta y ser considerado. Cuando un objeto es declarado, el JVM hace una referencia en la memoria a la localización del objeto. Los objetos tienen la habilidad de cambiar su tamaño cuando los objetos que guarda empiezan a crecer o se hacen mas pequeños. Un objeto es declarado de la misma manera que un primitive, pero no puede ser usado hasta que sea inicializado con el operador new o sea igualado a un objeto ya existente. En el siguiente ejemplo veremos el uso de la clase Car de nuevo:

// Esto es legal. Puedes usar el método isRunning porque el objeto ha sido inicializado
Car bigCar;
bigCar = new Car(125, true);
boolean running = bigCar.isRunning();

// Esto es legal. Puedes usar el método isRunning porque el objeto smallCar ha sido
// inicializado como el bigCar. Esto hará que smallCar y bigCar sean el mismo coche
Car smallCar;
smallCar = bigCar;
boolean running = smallCar.isRunning();

// Este ejemplo es ilegal. No puedes usar un método de una clase que no ha sido inicalizada
Car oldCar;
boolean running = oldCar.isRunning();

Cuando usar Objetos

Los tipos de dato primitive guardan valores simples. Integers o floats son fáciles de guardar. Desafortunadamente, no todos las aplicaciones tratan con valores que se adapten a los límites de un tipo primitivo. Por ejemplo, si un entero es muy largo y tiene el potencial de convertirse en algo mas grande aún, un int o un long no sería el tipo de dato apropiado. En este caso el desarrollador puede que tenga que usar una de las clases de Java para manejar números muy largos. recuerda que una clase es un patrón de como construir un objeto. Los objetos pueden y deberían ser creados para guardar datos que son similares.
Recuerda que un buen diseño de la orientación a objetos es agruparlos en clases distintas. Los objetos deberían ser usados para guardar sobretodo datos muy coplejos.

Hasta aquí la parte que explica un poco mas sobre las clases y los objetos, la Parte III constará de información sobre el funcionamiento de la clase Array, las enumeraciones, las conversiones forzadas de tipo de dato y algunos ejemplos mas sobre tipos de datos en funcionamiento.

Como digo siempre, cualquier aportación o corrección es bienvenida.

Saludos!!!