Uso de Clases Declaración de una clase ¨ Es recomendable crear un archivo de texto en donde declararemos una clase por cada objeto identificado en nuestro problema, aunque es posible declarar varios objetos dentro de un mismo archivo de texto. [Tipo Clase] class nombreclase{ } ¨ Si declaramos más clases en el mismo documento en donde se encuentra nuestra clase principal, la sintaxis es la siguiente: class nombreclase{ }; ¨ En donde: ¤ [Tipo Clase] determinan la accesibilidad de otras clases a la clase que se está declarando, así como el comportamiento de su herencia. Todos son opcionales y por el momento se empleará public. ¤ class es obligatoria y le dice al compilador que el bloque de código siguiente es una declaración de clase. ¤ nombreclase será el nombre de la clase según las reglas vistas con anterioridad. Como se mencionó ya, el nombre de la clase debe coincidir exactamente con el nombre del archivo .java que la contiene. ¤ Las llaves de apertura y cierre ( { } ) delimitan el cuerpo de nuestra definición de clase. Todas las variables y métodos de la clase deberán ir encerrados en este bloque. Declaración e inicialización de los atributos de una clase Las variables de clase, conocidas formalmente como atributos, se colocan después de la llave de apertura de la clase. ¨ Como cualquier tipo de variable, los atributos se utilizan para almacenar y recuperar datos en nuestros programas. ¨ Los atributos globales deben colocarse de manera obligatoria afuera de cualquier método. ¨ Los atributos también se les conoce como variables miembro o variables de instancia dado que cuando un objeto es instanciado, ¨ estas variables se encargarán de contener los datos específicos de cada objeto creado. ¨ ¨ La declaración e inicialización de los atributos de una clase tiene la siguiente sintaxis: [modificadores] tipo variable [= valor]; ¨ En donde: ¤ ¤ ¤ ¤ [modificadores] representan diversas palabras reservadas que definen la forma en que las variables de la clase son accedidos. Todos son opcionales y por ahora se empleará el modificador public. tipo representa el tipo de dato primitivo que la variable contendrá. Así, algunas variables contendrán números enteros, reales, caracteres o valores booleanos. identificador será el nombre que se le asignará a la variable según las reglas vistas con anterioridad. valor será el valor que se desea asignar a la variable y es opcional. public int shirtID = 0; public char colorCode = ‘G’; public float orderTotal; Es posible de hecho, declarar simultáneamente (e incluso inicializar) varios atributos del mismo tipo; para ello se emplea el separador coma con la siguiente sintaxis: [modificadores] tipo identificador[=valor] [,identificador2[=valor]…]; public String Nombre, Apellido, Direccion; public int contador=0, total=1; Declaración de los métodos de una clase ¨ Los métodos siguen a los atributos de la clase; su sintaxis es la siguiente: [modificadores] tipoderetorno identificador([argumentos]){ bloque_de_instrucciones } public void printMessage(){ System.out.println(“Hola a todos!”); }// Fin del método printMessage ¨ En donde: ¤ ¤ ¤ ¤ ¤ ¤ [modificadores] por el momento se empleará public. tipoderetorno indica el tipo de valor que el método regresa (en caso de existir). Los valores retornados por un método pueden ser empleados por el método que los invoca y podrá ser a lo mucho uno. Si el método no retorna nada, la palabra clave void deberá usarse como tipo de retorno. identificador será el nombre del método según las reglas vistas con anterioridad. [argumentos] representa la lista de variables cuyos valores son pasados al método para que éste trabaje y son opcionales. Los paréntesis de apertura “( “ y cierre “ ) “ son obligatorios aún cuando el método no requiera ningún argumento. bloque_de_instrucciones será la lista de sentencias que el método ejecuta. Una gran variedad de tareas pueden realizarse en el bloque de código o cuerpo de un método. Así como en otros lenguajes de programación, podrán crearse tantos bloques de instrucciones internos como se desee o convenga. Las llaves de apertura y cierre ( { } ) delimitan el cuerpo de nuestro método. Declaración, instanciamiento e inicialización de objetos Normalmente todo programa en Java deberá emplear cuando menos un objeto. ¨ Para usar objetos debemos: ¨ ¤ Definir la clase del objeto en un archivo fuente en donde se detallen sus atributos y métodos. ¤ Definir la clase principal que usará el o los objetos creados. ¤ Declarar, instanciar e inicializar los objetos en la clase principal. ¤ Invocar sus métodos de las instancias creadas. ¨ Tomemos por ejemplo el siguiente código Java en donde se define a una clase de objeto llamada Message: public class Message{ public void printMessage(){ System.out.println("Hola a todos!"); } } ¨ Como podemos notar, esta clase no tiene atributo alguno y únicamente cuenta con un método llamado printMessage(), el cual no retorna o recibe ningún valor, únicamente imprime un mensaje. ¨ Dado que esta clase no contiene un método main(), será imposible ejecutarla, únicamente podremos compilarla. Para usarla, deberemos crear una clase principal o de prueba que llamaremos MessageTest en donde crearemos una instancia del objeto de clase Message e invocaremos su único método: public class MessageTest{ public static void main(String args[]){ Message myMessage = new Message(); myMessage.printMessage(); } } ¨ ¨ En el código anterior notamos una sintaxis nueva en la tercera línea; ésta es la declaración, instanciamiento e inicialización de un objeto de clase Message. La sintaxis genérica es la siguiente: nombredeclase identificador = new nombredeclase(); ¨ En donde: ¤ nombredeclase representa el nombre de la clase de objeto a instanciar. ¤ identificador será el nombre que se le asignará a la instancia (también llamada referencia de objeto). ¤ new será la palabra clave encargada de instanciar un objeto empleando como plantilla a la clase especificada por nombredeclase. ¨ Lo anterior puede realizarse también en dos líneas: nombredeclase identificador; identificador = new nombredeclase(); ¨ Para el caso anterior tendríamos: Message myMessage; myMessage = new Message(); ¨ Por último, analicemos la cuarta línea; aquí invocamos el método del objeto empleando una sintaxis genérica: identificadordeobjeto.identificadordemétodo(); ¨ Dado que la sintaxis completa que se emplea para invocar un método varía considerablemente según la situación, se verá con detalle en un apartado más adelante. ¨ Java no permite el uso de apuntadores por parte del programador, lo cual podría verse como una desventaja aunque en realidad es todo lo contrario, gracias a que no puede haber manipulación de memoria es imposible invadir entornos ajenos al de nuestras aplicaciones y por lo tanto la seguridad de nuestro sistema estará siempre garantizada. Ejemplo del Elevador: ¨ Las principales funciones de un elevador son: ¤ Subir ¤ Bajar ¤ Abrir Puerta ¤ Cerrar Puerta ¨ Por lo que estas son métodos forman parte de la clase funciones del elevador, quedando en código así: //Ejemplo del Elevador // public class Elevador{ public static void main(String args[]) { //declara la conexion con la clase funciones elevador FuncionesElevador Funcion = new FuncionesElevador(); Funcion.abrir(); Funcion.cerrar(); Funcion.subir(); Funcion.abrir(); Funcion.cerrar(); Funcion.bajar(); Funcion.abrir(); } } class FuncionesElevador{ public void subir(){ System.out.println("Elevador subiendo"); } public void bajar(){ System.out.println("Elevador bajando"); } public void abrir(){ System.out.println("Abriendo Puerta"); } public void cerrar(){ System.out.println("Cerrando Puerta"); } };