Creación y utilización de objetos

Para crear varios objetos de la clase anterior podemos utilizar la siguiente clase:

package com.example.complejos;

class Principal {
    public static void main(String[] main) {
        Complejo z, w;
        z = new Complejo(-1.5, 3.0);
        w = new Complejo(-1.2, 2.4);
        z.suma(w);
        System.out.println("Complejo: " + z.toString());
    }
}

La clase Principal es algo atípica, no tiene atributos ni constructor, únicamente el método main. Cuando en un proyecto existe una clase que tiene un método con este perfil, es el que se llama para comenzar la ejecución. Como parámetros este método recibe un array de Strings. Esta información tiene interés cuando el programa es ejecutado desde la línea de comandos con parámetros.

El la primera línea se declaran los objetos z y w. En las dos siguientes líneas se inicializan los objetos llamando al constructor. Se utiliza la expresión:

<objeto> = new <Clase>(<parámetros>);.

También es posible declarar e inicializar el objeto en la misma sentencia de la siguiente forma:

<Clase> <objeto> = new <Clase>(<parámetros>);

En el ejemplo sería:

Complejo z = new Complejo(-1.5, 3.0);

Siguiendo con el ejemplo en la siguiente línea se llama a un método suma() del objeto z. Se sigue el siguiente expresión:

<objeto>.<método>(<parámetros>);

En la última línea utilizamos System.out.println() para sacar por la consola una cadena de caracteres. Es decir, si ejecutamos la aplicación desde una consola de la línea de comandos se mostrará un mensaje por pantalla.  

Ejercicio paso a paso: Creación de una primera clase

Android Studio está pensado exclusivamente para crear aplicaciones Android. Sin embargo, si sigues los siguientes pasos podrás crear una aplicación 100% Java:

1.     Arranca Android Studio.

2.     Crea un nuevo proyecto (File> New > New Project..) con nombre de aplicación Complejos y nombre de paquete com.example.complejos. En la segunda ventana marca Phone and Tablet. Y en la tercera selecciona la opción Add No Activity, así no creamos una actividad que nunca será usada. Pulsa Finish.

3.     Pulsa en File> New > New Module. Selecciona Java Library y pulsa Next.

4.     Introduce en Library name: complejos, como Java pakage name: com.example.complejos y en Java class name: Complejo. Pulsa el botón Finish. Se creará un nuevo módulo Java dentro de tu proyecto Android.

5.     Abre el explorador del proyecto (pestaña 1: Projet o <Alt-1>). Despliega el paquete complejos y busca dentro la clase Complejo.  Reemplaza su código por el mostrado anteriormente en el ejemplo de la clase Complejo. (Código de complejo ubicado en la unidad anterior). Has de dejar la primera línea package com.example.complejos;

6.     En el explorador del proyecto, pulsa con el botón derecho sobre complejos / java / com.example.complejos  y selecciona New / Java Class.

7.     Introduce en el campo Name: Principal y pulsa en Finish.

8.     Reemplaza el código por el mostrado anteriormente en el ejemplo de la clase Principal.

9.   Pulsa en el botón desplegable a la derecha del botón Run  . Selecciona Edit Configurations...

10.  En la nueva ventana, haz clic en el signo + de la esquina superior izquierda y selecciona Application. Aparecerá una nueva configuración de aplicación. Selecciona en Name: complejos, en Main class: com.example.complejos.Principal y en Use classpath of module: complejos. Pulsa en OK..

11.  Pulsa el botón Ejecución y verifica que el resultado que aparece en la ventana de Run es similar a:

"C:\Program ...
Complejo: -2.7+5.4i
Process finished with exit code 0

12.    En la clase Principal reemplaza "Complejo: " + z.toString() por "Complejo: " + z. Ejecuta de nuevo el proyecto y observa que el resultado no cambia. En Java si añadimos cualquier objeto a una expresión de texto, se utilizará el método toString()  para convertir el objeto a texto.

Practica: La clase coordenada geográfica

1.     Crea un nuevo proyecto Java con nombre Coordenadas_Geograficas

2.     Crea una clase con el nombre GeoPunto.

3.     Define dos atributos longitud y latitud tipo double.

4.     Define el constructor de la clase.

5.     Define el método toString() de forma similar a como se hizo en la clase Complejo.

6.     Define el método   double  distancia(GeoPunto punto) para aproximar la distancia en metros entre dos coordenadas. Podemos utilizar el algoritmo Haversine:  

R = radio medio de la Tierra (6,378km)
Δlat = lat2− lat1
Δlong = long2− long1
a = sin²(Δlat/2) + cos(lat1) cos(lat2) sin²(Δlong/2)
c = 2 atan2(√a, √(1−a))
d = R c

Una posible implementación en Java de este algoritmo se muestra a continuación:

final double RADIO_TIERRA = 6371000; // en metros
double dLat = Math.toRadians(latitud - punto.latitud);
double dLon = Math.toRadians(longitud - punto.longitud);
double lat1 = Math.toRadians(punto.latitud);
double lat2 = Math.toRadians(latitud);
double a =    Math.sin(dLat/2) * Math.sin(dLat/2) +
              Math.sin(dLon/2) * Math.sin(dLon/2) *
              Math.cos(lat1) * Math.cos(lat2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
return c * RADIO_TIERRA; 

7.     Crea la clase Principal de forma similar a como se hizo en el proyecto Complejos.

8.     Ejecuta el proyecto y verifica que todo funciona correctamente.