Clases y objetos I

El paradigma orientado a objetos nació en 1969 de la mano del doctor noruego Kristin Nygaard, quien intentando escribir un programa de computadora que describiera el movimiento de los barcos a través de un fiordo, descubrió que era muy difícil simular las mareas, los movimientos de los barcos y las formas de la línea de la costa con los métodos de programación existentes en ese momento.   

Las tecnologías orientadas a objetos han evolucionado mucho pero mantienen la razón de ser del paradigma: combinación de la descripción de los elementos en un entorno de proceso de datos con las acciones ejecutadas por esos elementos. Las clases y los objetos como instancias o ejemplares de ellas, son los elementos clave sobre los que se articula la orientación a objetos.

¿Qué son objetos?

En el mundo real, las personas identifican los objetos como cosas que pueden ser percibidas por los cinco sentidos. Los objetos tienen propiedades específicas, como posición, tamaño, color, forma, textura, etc., que definen su estado. Los objetos también tienen ciertos comportamientos que los hacen diferentes de otros objetos.

Martin/Odell definen un objeto como «cualquier cosa, real o abstracta, en la que se almacenan datos y aquellos métodos (operaciones) que manipulan los datos». Para realizar esa actividad se añaden a cada objeto de la clase los propios datos y asociados con sus propios métodos miembro que pertenecen a la clase.

¿Qué son clases?

En términos prácticos, una clase es un tipo definido por el usuario. Las clases son los bloques de construcción fundamentales de los programas orientados a objetos. Booch denomina a una clase como «un conjunto de objetos que comparten una estructura y comportamiento comunes».

Una clase contiene la especificación de los datos que describen un objeto junto con la descripción de las acciones que un objeto conoce como ha de ejecutar. Estas acciones se conocen como servicios o métodos. Una clase incluye también todos los datos necesarios para describir los objetos creados a partir de la clase. Estos datos se conocen como atributos, variables o variables de instancia. El término atributo se utiliza en análisis y diseño orientado a objetos y el término variable instancia se suele utilizar en programas orientados a objetos.

Declaración de una clase

Antes de que un programa pueda crear objetos de cualquier clase, esta debe ser definida. La definición de una clase significa que se debe dar a la misma un nombre, darle nombre a los elementos que almacenan sus datos  y describir los métodos  que realizarán las acciones consideradas en los objetos.

Las definiciones o especificaciones no son códigos de programa ejecutables. Se utilizan para asignar almacenamiento a los valores de los atributos usados por el programa y reconocer los métodos que utilizará el programa. Normalmente se sitúan en archivos formando los denominados packages, utilizando un archivo para varias clases que están relacionadas.

Formato

       class NombreClase{
                lista de miembros
       }

       NombreClase: Nombre definido por el usuario que identifica a la clase (puede incluir letras, números
                                         y subrayados como cualquier identificador válido).
       lista de miembros: métodos y datos miembros de la clase.

Ejemplo

Definición de una clase llamada Punto que contiene las coordenadas x e y de un punto en un plano.

       class Punto {
                private int x;                 // coordenada x
                private int y;                 // coordenada y

                public Punto(int x_, int y_) {
                            x = x_;
                            y = y_;
                }
                public Punto() {           // constructor sin argumentos
                            x = y = 0;
                }
                public int leerX() {      // devuelve el valor de x
                            return x;
                }
                public int leerY() {      // devuelve el valor de y
                            return y;
                }
                public void fijarX(int valorX) {           // establece el valor de x
                            x = valorX;
                }
                public void fijarY(int valorY) {           // establece el valor de y
                            y = valorY;
                }
       }

Declaración de la clase Edad.

       class Edad {
                private int edadHijo, edadMadre, edadPadre;            // datos

                public Edad() {. . .}                                                                          // método especial: constructor
                public void iniciar(int h, int e, int p) {. . .}                           // métodos
                public int leerHijo() {. . .}
                public int leerMadre() {. . .}
                public int leerPadre() {. . .}
       }

Objetos

Una vez que una clase ha sido definida, un programa puede contener una instancia de la clase, denominada un objeto de la clase. Un objeto se crea con el operador new aplicado a un constructor de la clase. Un objeto de la clase Punto inicializado a las coordenadas (2,1):

       new Punto(2,1);

El operador new crea el objeto y devuelve una referencia al objeto creado. Esta referencia se asigna a una variable del tipo de la clase. El objeto permanecerá vivo siempre que esté referenciado por una variable de la clase que es instancia.

Formato para definir una referencia

       NombreClase  variableReferencia;

 Formato para crear un objeto

       variableReferencia = new NombreClase(argumentos_constructor);

Toda clase tiene uno o más métodos, denominados constructores. Para inicializar el objeto cuando es creado, tienen el mismo nombre que el de la clase, no tienen tipo de retorno y pueden estar sobrecargados. En la clase Edad del ejemplo anterior, el constructor no tiene argumentos, se puede crear un objeto:

       Edad edad = new Edad();

El operador de acceso a un miembro (.) selecciona un miembro individual de un objeto de la clase. Por ejemplo:

       Punto punto;
       punto = new Punto();
       punto.fijarX(100);
       System.out.println(«Coordenada de x es: » + punto.leerX());

A recordar

El operador punto (.) se utiliza con los nombres de los métodos y variables instancia para especificar que son miembros de un objeto.

Ejemplo

       Clase DiaSemana, contiene un método visualizar()

       DiaSemana hoy;                      // hoy es una referencia
       hoy = new DiaSemana();    // se ha creado un objeto
       hoy.visualizar();                       // llama al método visualizar()