You are on page 1of 12

TO Java, Actividad No.

Asignatura: TO Java Tema No. 2: Clases en Java. Ttulo: Caractersticas generales del lenguaje. Actividad No. 3: Clases, Objetos, Clases Abstractas, Interfaces, Clases Internas, Arreglos. Operadores y Modificadores. Paquetes y Accesibilidad. Bibliografa: Clases Thinking in Java, 3rd Edition. Cap-2 Pg. (93-105), Cap-4 Pg. (177-198), Cap-6 Pg. (257-291). Piensa en Java Cap-2 Pg. (61-70), Cap-4 Pg. (127-144), Cap-6 Pg. (191-218). Aprenda Java como si estuviera en primero. Pg. 35-43.

Operadores Arreglos Thinking in Java, 3rd Edition Cap-4 Pg (216-225). Piensa en Java. Cap-4 Pg. (159-166). Thinking in Java, 3rd Edition. Cap-3 Pg (117-141). Piensa en Java. Cap-3 Pg. (80-96).

Interfaces y Clases Internas Thinking in Java, 3rd Edition. Cap-8 Pg. (335-389). Piensa en Java. Cap-8 Pg. (225-298). Aprenda Java como si estuviera en primero. Pg: 48-56.

Objetivos: Conocer la sintaxis de Java para la implementacin de clases y arreglos. Adquirir conocimientos sobre paquetes y accesibilidad.

Contenido:

TO Java, Actividad No. 3

Clases 1.1 Declaracin de clases. Las sintaxis para declarar clases es la siguiente: [<accesibilidad>][<modificador>] class <nombre> { [<miembros>]

Ejemplo: public class Student { }

Si una clase hereda de otra, se utiliza la palabra clave extends para indicar la herencia. Ejemplo: public class Student extends Person { } En Java no se permite herencia mltiple entre clases. Si una clase es declarada utilizando el modificador final, se est diciendo que no es posible heredar de ella. Ejemplo:

public final class Rock { } 2.2 Campos. 1.2.1 Declaracin de campos: [<accesibilidad>] [<modificador>] <tipo> <nombre>;

La sintaxis para declarar los campos de una clase es la siguiente: Es posible declarar varios campos del mismo tipo separados por comas, aunque no es una prctica muy recomendable porque disminuye la legibilidad del cdigo. 1.2.2 Campos de clase: Un campo puede ser declarado utilizando la palabra reservada static:

private static int instancesCounter;

El modificador static indica que se trata de un miembro de clase y no de objeto. O sea, este campo pertenece a la clase y no a ningn objeto especfico. 2

TO Java, Actividad No. 3

1.2.3 Constantes: Una constante puede ser declarada aplicando el modificador final a un campo o una variable local. Una vez asignado un valor a un campo declarado como final, no es posible modificarlo. Java permite declarar un campo final sin asignarle valor alguno, sin embargo el compilador se encarga de garantizar que un campo final no sea utilizado sin antes haber sido inicializado, para ello fuerza a inicializarlo en cada constructor. Ejemplo de constante: public final int MAX_NUNBER_ALLOWED = 1000;

1.3 Mtodos. Los mtodos en Java son virtuales por defecto, as que no es necesario aplicar ningn modificador para indicar este comportamiento. 1.3.1 Declaracin de mtodos: La sintaxis para declarar mtodos es la siguiente:

[<accesibilidad>] <tipo retorno> <nombre>([<parmetros>]) { [<implementacin>]

Ejemplo:

public class Person { public void eat() { ... } 1.3.2 Parmetros: Los parmetros de los mtodos se separan por comas, y aunque existan varios parmetros del mismo tipo no puede declararse abreviadamente como ocurre con los campos y las variables. Los parmetros de tipos de datos primitivos pasan por valor, los parmetros de tipo de alguna clase y los arreglos pasan por referencia. El modificador final en la declaracin de un parmetro indica que no puede modificarse su valor. En Java no existen parmetros por defecto, pero se puede obtener el mismo resultado utilizando la sobrecarga de mtodos.

1.3.3 Implementacin: Los mtodos siempre se implementan donde mismo se declaran, por tanto su declaracin de ir seguida de llaves ({ }). 3

TO Java, Actividad No. 3

Para que un mtodo no tenga implementacin, en cuyo caso su declaracin finaliza con un punto y coma (;), debe ser marcado con la palabra clave abstract, que indica que es un mtodo abstracto y por tanto no lleva implementacin en esa clase. Cuando un mtodo es marcado como abstracto, la clase tambin ha de ser marcada como abstracta.

1.3.4 Mtodos final: Existen dos razones para marcar un mtodo con la palabra final. La primera es para evitar que el mtodo sea redefinido en clases que hereden de la clase donde se declara. Esto se hace por razones de diseo, cuando se est seguro de que el comportamiento del mtodo debe mantenerse y no puede ser redefinido con la herencia. La segunda razn es para lograr una mayor eficiencia. Si se marca un mtodo como final se est permitiendo al compilador convertir las llamadas al mtodo en llamadas en lnea. Las llamas en lnea son reemplazadas con una copia del cuerpo del mtodo. Claro est, que si el mtodo es muy grande el cdigo se vera inflado. Sin embargo el compilador es capaz de detectar estos casos y decidir cundo llevar a en lnea un mtodo final. No obstante, lo mejor es dejar que el compilador y la mquina virtual majen la eficiencia, y usar la palabra final solo para prevenir la redefinicin del mtodo. Todo mtodo privado es implcitamente un mtodo final, porque como los mtodos privados no pueden ser accedidos, no pueden ser redefinidos. Es posible marcar un mtodo privado como final, pero esto no proporciona ningn significado extra al mtodo. Si se trata de redefinir un mtodo privado, el cual es implcitamente final, puede parecer que es posible, ya que el compilador no da ningn error. Sin embargo un mtodo solo puede ser redefinido si forma parte de la interfaz de la superclase. Los mtodos privados no forman parte de la interfaz de una clase. Por tanto si se crea un mtodo no privado con el mismo nombre que el mtodo privado de la superclase, no existe ninguna conexin entre ellos.

1.4 Inicializacin. 1.4.1 Campos: A los campos se les pueden dar explcitamente un valor inicial en el punto en que son declarados. Ejemplo: class Professor{ private int salary = 349;

Cuando se crea un objeto, antes de ejecutarse el cdigo del constructor correspondiente, y antes de que de los campos del objeto reciban su valor inicial, ocurre la inicializacin automtica, donde los campos del objeto se inicializan a su valor por defecto. Los campos estticos se inicializan la primera vez que se accede al tipo de dato al que pertenecen, ya sea para crear objeto o para acceder a algn miembro esttico de la clase. Al igual que los campos no estticos, primero se inicializan al valor por defecto y despus al explcitamente asignado.

TO Java, Actividad No. 3

1.4.2 Parmetros: Los parmetros se inicializan en cada llamada al mtodo al cual pertenecen con los valores especificados al llamarlos. 1.4.3 Variables locales: Las variables locales se inicializan en cada llamada al mtodo al cual pertenecen y a diferencia de los campos no toman valor por defecto. Por tanto acceder a una variable local que no se ha inicializado produce un error en tiempo de compilacin. Arreglos Existen tres formas, sintcticamente correctas, de declarar arreglos en Java: Sintaxis <tipo>[] x; // preferible <tipo> []x; <tipo> x[]; Ejemplos: int[] x; // preferible int []x; int x[];

Todas son permitidas aunque es recomendable usar la primera para mayor claridad. Aunque todas las formas son vlidas para la declaracin de arreglos, debe prestarse especial cuidado cuando se hacen varias declaraciones en una lnea de cdigo. Por ejemplo las siguientes declaraciones pueden resultar no claras para: int[] x, y[]; int []x, y[]; En ambas y es un arreglo donde cada elemento es a su vez un arreglo de enteros, o sea, una matriz, no un arreglo de enteros. Se pueden crear arrays de objetos de cualquier tipo. En principio un array de objetos es un array de referencias a los mismos. Podramos, por ejemplo, crear una clase para manipular nmeros fraccionarios: class FractionNumber { private int num; private int den; y podemos perfectamente declarar un arreglo de elementos de tipo FractionNumber de manera similar, es decir: //declara un arreglo de elementos tipo FractionNumber FractionNumber[] arrFractions; Interfaces

Interfaces 5

TO Java, Actividad No. 3

3.1 Qu son las interfaces? Se puede pensarse en una interfaz como una clase abstracta pura. Las interfaces agrupan un conjunto de declaraciones de mtodos (sin definicin). Todos los mtodos de las interfaces son implcitamente pblicos y abstractos. Las interfaces pueden adems contener campos, pero estos son implcitamente pblicos, estticos y finales (constantes).

3.2 Definicin de interfaces. Las interfaces se declaran de manera similar a las clases pero se utiliza la palabra reservada interface en lugar de class. Para los nombre de las interfaces se utiliza notacin Pascal. Es una prctica comn en Java llamar a la clase que implementa una interfaz InterfazImpl donde Interfaz es el nombre de la interfaz que se implementa. Los niveles de accesibilidad permitidos para las interfaces son public y package. Toda interfaz pblica debe ser definida en un fichero .java con igual nombre que la interfaz.

3.3 Uso de interfaces. Para decir que una clase implementa una interfaz se utiliza la palabra reservada implements. Ejemplo: public class HelperStudent extends Student implements Professor { }

Cuando una clase implementa una interfaz, la interfaz puede ser utilizada como el tipo de dato con el cual referirse a las instancias de la clase.

3.4 Interfaces y herencia. En Java las clases no pueden heredar de ms de una clase, pero sin embargo pueden implementar tantas interfaces como se quiera, separndolas por comas. A diferencia de las clases, las interfaces soportan herencia mltiple. 3.5 Colisiones de nombres al combinar interfaces.

Si se tienen las siguientes declaraciones:

public interface InterfaceOne { void doSomething();

public interface InterfaceTwo { boolean doSomething(); 6

TO Java, Actividad No. 3

No es posible crear una clase que implemente ambas interfaces, ya que los mtodos se diferencian en el nombre y los argumentos en cantidad, tipo y orden. Y puesto que no Es posible diferenciar dos mtodos por el tipo de retorno, las interfaces InterfaceOne e InterfaceTwo son incompatibles. Cuando varias interfaces pueden pretender ser implementadas juntas, deben evitarse los mtodos con igual nombre.

3.6 Interfaces contra clases abstractas. La diferencia ms evidente entre las interfaces y las clases abstractas es que las clases abstractas permiten contener implementaciones mientras que las interfaces no. Una diferencia ms importante, es que usando clases abstractas los nuevos tipos de datos deben formar parte de una jerarqua. Modificar una clase para que implemente una interfaz es muy sencillo, todo lo que hay que hacer es adicionar los mtodos necesarios si no existen y agregar la clusula implements. Modificar una clase para que extienda una clase abstracta puede no ser tan sencillo si la clase en cuestin tiene su propia jerarqua, ya que habra que buscar un lugar forzado para la clase abstracta en dicha jerarqua. Las interfaces permiten definir frameworks no jerrquicos. Supngase que se est desarrollando un sistema que permite migrar informacin de una forma de almacenamiento a otro. Para hacer el sistema suficientemente flexible como para trabajar con cualquier forma de almacenamiento, el sistema no trabajara directamente con las formas de almacenamiento, sino que lo hara a travs de un driver. El driver bien pudiera ser una clase abstracta donde se defina cuales son los mtodos necesarios para interactuar con el sistema, que los proveedores de las forma de almacenamiento o los interesados en la migracin de datos extenderan. De esta forma todo parece funcionar bien. Supngase ahora que ya se tiene una clase que implementa la salva de datos hacia determinada forma de almacenamiento, sera muy cmodo que el driver a implementar extendiera dicha clase, sin embargo no es posible hacer esto, ya que el driver est forzado a extender la clase del driver abstracto. Si por el contrario, en vez de extender una clase abstracta hubiera que implementar una interfaz Driver, el sistema podra ofrecer un framework menos rgido. Es ms fcil evolucionar una clase abstracta que una interfaz. Si en nuevas versiones de una biblioteca de clases se quiere adicionar un mtodo concreto (con implementacin) a una clase abstracta, todas las implementaciones de la clase abstracta tendrn dicho mtodo. Sin embargo no es posible adicionar un mtodo a una interfaz si romper todos los programas existentes que utilicen dicha interfaz. Las clases que implementaban previamente la interfaz notarn la falta del nuevo mtodo y ya no compilarn.

Aunque las interfaces no permiten contener ninguna implementacin de mtodos, el uso de interfaces para definir tipos de datos no impide proveer implementaciones. Es posible combinar las virtudes de las interfaces y las clases abstractas proveyendo lo que se llama abstract skeletal implementation class. La interfaz contina definiendo el tipo pero la clase abstracta (skeletal implemntation) se toma el trabajo de implementarlo. Por convenio, estas clases (skeletal implementations) se nombra AbstractInterfaz donde Interfaz es el nombre de la Interfaz que se implementa. 3.7 Qu son las clases internas? Una clase interna es una clase definida dentro de otra clase. Las clases internas tienen acceso a los miembros de la clase exterior puesto que mantienen una referencia a la instancia de la clase externa responsable de crearla. Las clases internas admiten los modificadores private y protected.

3.8 Clases anidadas. Cuando no se necesita referenciar los miembros no estticos de la clase exterior, puede marcarse la clase interna como static. Estas clases son comnmente llamadas clases anidadas. La sentencia import puede 7

TO Java, Actividad No. 3

utilizarse para importar una clase anidada de la misma forma en que se importa una clase de un paquete. Pueden existir varios niveles de clases anidadas.

3.9 Clases internas locales. Las clases internas pueden ser definidas dentro de un bloque de cdigo del cuerpo de un mtodo. Las clases internas locales tienen acceso a los argumentos del mtodo y a las variables locales al bloque de cdigo, pero solo si son final. En realidad las clases internas locales trabajan con su propia copia de las variables locales, por eso se exige que no puedan cambiar. Las clases internas locales no pueden contener miembros static ni modificadores de accesibilidad.

3.10 Clases internas annimas. Las clases annimas son clases internas sin nombre. En las clases annimas se unen los pasos de definir y crear la clase. Como la clase no tiene nombre solo es posible crear una nica instancia. Las clases annimas se utilizan con mucha frecuencia para definir clases que gestionen los eventos de los distintos componentes de interfaz grafica de usuario.

Las formas de crear una clase annima son: En una expresin del lenguaje, incluida en una asignacin o una llamada a un mtodo, se escribe el operador new seguido de la declaracin de la clase entre llaves. Con el operador new seguido del nombre de la clase de la que hereda, seguido de parntesis, entre los cules van los parmetros del constructor si los lleva, y seguido la declaracin de la clase entre llaves. Con el operador new seguido del nombre de la interfaz que implementa, seguido de parntesis, y seguido la declaracin de la clase entre llaves. Ejemplo de una definicin de clase annima:

okButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { ... } Paquetes }); 3.1 Qu son los paquetes? Paquetes Los paquetes son bibliotecas de clases, que agrupan a clases e interfaces que guardan alguna relacin entre ellas. 4.1 Cmo nombrar los paquetes. Los paquetes se nombran con letras minsculas. Por convenio, la primera parte del nombre de un paquete es el nombre de dominio de Internet del creador de las clases, comenzando en orden inverso a las URL, 8

TO Java, Actividad No. 3

por ejemplo: org.eclipse. La segunda parte del nombre debe referenciar el mdulo o submdulo al que pertenecen las clases, por ejemplo: org.eclipse.swt, org.eclipse.swt.events.

4.2 Uso de paquetes. Para indicar que una clase pertenece a un paquete se utiliza la palabra reservada package, al inicio del archivo de donde se declara la clase. Ejemplo:

package org.eclipse.swt; Para utilizar una clase declarada en un paquete diferente al de la clase que se est implementando, es necesario incluirla mediante la palabra reservada import. Las sentencias import se escriben al inicio del archivo despus de la sentencia package. Ejemplo:

import org.eclipse.core.runtime.Path; Todas las clases de un paquete pueden ser incluidas de una vez mediante un asterisco (*). Ejemplo: Import org.eclipse.core.runtime.*; 4.3 Los paquetes y la estructura de directorios. Cada fragmento del nombre de un paquete equivale a una carpeta en la estructura de directorio. Retomando uno de los ejemplos anteriores (org.eclipse.swt.events), se tiene una carpeta org, dentro de la hay una carpeta eclipse, dentro de la que hay una carpeta swt, dentro de la cual se encuentran algunas clases y otras carpetas, como events. 4.4 Colisiones de nombres. Si se tienen las sentencias: import edu.ceis.classes.TestClass; import edu.ceis.courses.TestClass;

Y se trata de crear un objeto:

TestClass testClass = new TestClass();

El compilador no puede saber a cul clase se refiere en la lnea anterior. Por tanto, obliga a especificar cul clase de la siguiente forma:

edu.ceis.classes.TestClass testClass = new edu.ceis.classes.TestClass(); 9

TO Java, Actividad No. 3

Accesibilidad 5.1 Acceso dentro del paquete. El nivel de acceso por defecto (cuando no se especifica ningn otro) es comnmente llamado package. Significa que los elementos con ese nivel de acceso, estn disponibles (como si fueran pblicos) para todas las clases dentro del mismo paquete, y ocultos (como si fueran privados) para todas las clases fuera del paquete. 5.2 Accesibilidad de miembros de clases. Los miembros de clases pueden tener los siguientes niveles de accesibilidad: package (Sin modificador de acceso) pblico (public) protegido (protected) privado (private)

5.3 Accesibilidad de clases. Los niveles de acceso disponibles para las clases son solo package y pblico. Solo puede haber una clase pblica por unidad de compilacin (archivo). El nombre de la clase pblica debe corresponder exactamente con el nombre del archivo, incluyendo las maysculas y minsculas.

5.4 Comentarios de documentacin. Comentar el cdigo es tan importante como escribirlo. Quizs, el mayor problema con la documentacin, sea su mantenimiento, ya que se hace bastante molesto llevarla separada del cdigo. Una manera de resolver este problema es tener ambas cosas, en un mismo archivo. En Java existe una sintaxis especial para marcar aquellos comentarios que pertenecen a la documentacin. Adems existe una herramienta llamada javadoc, que forma parte del JDK, y que extrae estos comentarios del cdigo y los transforma en un archivo HTML con un formato ms prctico.

5.5 Sintaxis. Los comentarios de documentacin se escriben entre los smbolos: /** (para marcar el inicio) y */ (para marcar el final). Las etiquetas de documentacin son comandos que comienzan con @ y son puestos al principio de la lnea de comentario.

5.6 HTML embebido. Es posible utilizar etiquetas de HTML dentro de los comentarios. Ejemplo: /** 10<code> * * Algn comentario * </code>

TO Java, Actividad No. 3

5.7 Algunas etiquetas. @see: Permite refrirse a la documentacin de otras clases. Cada refrencia representar una entrada en See Also con un hipervnculo a la documentacin de otra clase. Las posibles formas son: @see nombre-clase @see nombre-clase-completo @see nombre-clase-completo#nombre-mtodo @version: Para espesificar informacin acerca de la versin. Tiene la forma: @version informacin @author: Generalmente el nombre del autor. Tiene la forma: @author informacin @param: Se utiliza en la documentacin de mtodos. Permite describir los parmetros. Tiene la forma: @param nombre-parametro descripcin @return: Se utiliza en la documentacin de mtodos. Permite describir el valor de retorno. Tiene la forma: @return descripcin @throws: Se utiliza en la documentacin de mtodos. Permite describir en qu caso es levantada cada tipo de excepcin. Tiene la forma: @throws nombre-clase-completo descripcin

@deprecated: Se utiliza para indicar que una clase o un mtodo ser suprimido en el futuro por alguna mejora. El compilador advirte en cuando se est usando algn mtodo o clase markado con @deprecated. Estudio Independiente: Realizar los ejercicios propuestos en la Actividad 4 Ejercicios en Java Ejercicios: Tema Clases: Cap-2 Ejer-1 Tema Operadores: Cap-3 Ejer-9 11

TO Java, Actividad No. 3

Tema Arreglos: Cap-4 Ejer-5 y Ejer-6 Tema Interfaces y Clases Internas: Cap-8 Ejerc-2 y Ejerc-18

12

You might also like