Skip to content

1 Clases vs Objetos

Introducción

La Programación Orientada a Objetos (POO) es una técnica de programar aplicaciones basada en una serie de objetos independientes que se comunican entre sí.

A Java se le considera un lenguaje orientado a objetos ya que siempre que se crea un programa en Java, por simple que sea, se necesita declarar una clase, y el concepto de clase pertenece a la programación orientada a objetos.

Un objeto es un elemento del programa que integra sus propios datos y su propio funcionamiento. Es decir, un objeto está formado por datos (atributos o propiedades) y por las funciones que es capaz de realizar el objeto (métodos). Esta forma de programar se asemeja más al pensamiento humano. La cuestión es detectar adecuadamente los objetos necesarios para una aplicación. De hecho hay que detectar las distintas clases de objetos.

Una clase es lo que define a un tipo de objeto. Al definir una clase lo que se hace es indicar como funciona un determinado tipo de objeto. Luego, a partir de la clase, podremos crear objetos de esa clase, es decir, la clase es como un molde a partir del cual se crean los objetos que pertenecen a ella. Realmente la programación orientada a objetos es una programación orientada a clases. Es decir, lo que necesitamos programar es como funcionan las clases de objetos.

Por ejemplo, una clase podría ser la clase Coche. Cuando se defina esta clase, indicaremos los atributos o propiedades (como el color, modelo, marca, velocidad máxima,...) y los métodos (arrancar, parar, repostar, acelerar, frenar...). Todos los coches, es decir, todos los objetos de la clase Coche, tendrán esas propiedades y esos métodos. Para explicar la diferencia entre clase y objeto:

  • la clase Coche representa a todos los coches.
  • un coche concreto es un objeto, es decir, un ejemplar de una clase es un objeto. También se le llama a los objetos instancias de la clase. Este término procede del inglés, instance, que realmente significa ejemplar.

Por ejemplo, si quisiéramos crear el juego del parchís en Java, una clase sería la casilla, otra las fichas, otra el dado, etc. En el caso de la casilla, se definiría la clase para indicar su funcionamiento y sus propiedades, y luego se crearían tantos objetos casilla como casillas tenga el juego. Lo mismo ocurriría con las fichas, la clase ficha definiría las propiedades de la ficha (color y posición por ejemplo) y su funcionamiento mediante sus métodos (por ejemplo un método sería mover, otro llegar a la meta, etc), luego se crearían tantos objetos ficha como fichas tenga el juego.

Creación de clases

Una clase sirve para definir una serie de objetos con propiedades (atributos), comportamientos (métodos) y semántica comunes. Hay que pensar en una clase como un molde para crear objetos.

La definición de una clase incluye lo siguiente:

  • El nombre o identificador de clase. Debe empezar con letra mayúscula y seguir letras minúsculas, y si consta de varias palabras, se utiliza la notación UpperCamelCase. También pueden contener números pero no como primer carácter. Por ejemplo, 1Coche no es un identificador válido de clase, pero Coche1 sí sería válido. Veamos algunos consejos a la hora de elegir los identificadores de las clases:
    • Evitar abreviaturas a favor de la legibilidad del código. Es muy importante que el nombre de las clases sea claro y simbolice perfectamente al tipo de objetos que representa.
    • Evitar nombres excesivamente largos.Aunque parece que se contradice con la norma anterior, se trata de que los nombres sean concisos. No es conveniente que sean descripciones de clase, para eso ya están los comentarios javadoc.
    • Utilizar nombres ya reconocidos. Hay abreviaturas reconocidas como por ejemplo TCP, por eso el nombre de clase ManejadorTCP es mejor que ManejadorProtocoloControlTransmision .
  • Los atributos, también llamados propiedades o campos. Los atributos son variables que poseerá cada objeto de la clase y por lo tanto marcarán el estado de los mismos. Por ejemplo, un coche puede estar parado, en marcha, estropeado, funcionando, sin gasolina, etc. El estado lo marca el valor que tengan los atributos del objeto.
  • Los métodos. Son las acciones que pueden realizar los objetos de la clase, es decir, lo que determina el comportamiento de los objetos.

En Java, cada clase se define en un archivo. Además, el nombre de la clase y el del archivo tiene que ser el mismo. Es decir, si queremos definir la clase Vehicle, tendremos que hacerlo en un archivo llamado Vehicle.java. Dicho archivo contiene la definición de la clase Vehicle:

public class Vehicle {
    int wheelCount; // Nº ruedas
    double speed; // Velocidad
    String color; // Color del vehículo
    void accelerate(double amount){ // acelerar
        speed += amount;
    }
    void brake(double amount){ // frenar
        speed -= amount;
    }
}

Creación de objetos

Una vez definida la clase, ya se pueden crear objetos de la misma. Para crear un objeto, hay que declarar una variable cuyo tipo será la propia clase:

Vehicle car; //(1)!
  1. car es una variable de tipo Vehicle

Una vez definida la variable, se le crea el objeto llamando a un método que se llama constructor. Un constructor es un método que se invoca cuando se crea un objeto y que sirve para inicializar los atributos del objeto y para realizar las acciones pertinentes que requiera el mismo para ser creado. El constructor tiene el mismo nombre que la clase y para invocarlo se utiliza el operador new.

car = new Vehicle(); //(1)!
  1. Vehicle() es un método constructor

También se puede hacer todo en la misma línea:

Vehicle car = new Vehicle();

Acceso a los atributos y métodos del objeto

Una vez creado el objeto, se puede acceder a sus atributos de la siguiente manera: objeto.atributo

car.wheelCount = 4; //(1)!
  1. Se le asigna 4 al atributo número de ruedas de la variable car-

Los métodos se utilizan de la misma forma que los atributos, a excepción de que los métodos poseen siempre paréntesis ya que son funciones que pertenecen a un objeto: objeto.método(argumentos).

car.accelerate(30); //(1)!
  1. El coche incrementa su velocidad a 30, es decir, si iba a 90km/h, después de ejecutar el método el coche va a 120km/h.
Ejercicio 1

Crea un paquete llamado exercise01 el cual contenga una clase llamada Persona con los atributos: nombre, edad, altura y ocupación. Crea una clase Main donde se le solicite al usuario el nombre de la persona, modifíquelo y muéstrelo por pantalla.