You are on page 1of 37

Definiendo clases

Programacin II

Variables y Mtodos Estticos


Considera una clase que contiene una variable de instancia. Cada vez que se crea una instancia de esa clase, se asigna memoria para la variable de instancia; por consiguiente, cada instancia de la clase tendr su propia copia de la variable de instancia.

Variables y Mtodos Estticos


Esto no es verdadero para las variables de clase. Slo existir una copia de una variable de clase. Dicha copia es compartida por todas las instancias de la clase. Una variable de clase se declara utilizando la palabra clave static, motivo por el cual se conoce frecuentemente como variable esttica

Variables y Mtodos Estticos


Un mtodo de clase es un mtodo que puede acceder nicamente a variables de clase. Por el contrario, un mtodo de instancia puede acceder tanto a variables e instancias de clase. Un mtodo de clase se declara tambin utilizando la palabra clave static, por lo que se utiliza con frecuencia el trmino mtodo esttico.

Variables y Mtodos Estticos


Para llamar a un mtodo de instancia, el nombre del mtodo debe estar precedido por una referencia de objeto:


pointOne.setX(20);

Por convencin, para llamar a un mtodo de clase, el nombre del mtodo debe estar precedido por el nombre de la clase:


Point.getNumberOfInstances()

Esto tiene sentido porque las variables de clase no son parte de ningn objeto, por lo que los mtodos que operan en ellos no estn asociados a ningn objeto en particular.

Variables y Mtodos Estticos


Debido a que las variables de clase y los mtodos de clase no estn asociados a ningn objeto en particular, pueden ser utilizados an y cuando no existan objetos de la clase! Por ejemplo, podemos llamar a getNumberOfInstances antes de que se cree ningn objeto Point.

Mtodos Selectores y Modificadores


Un mtodo selector o selector de lectura, es utilizado para recuperar el valor de una variable de instancia. Por convencin, el nombre de un selector es getVariableName donde VariableName es el nombre de la variable de instancia. Un mtodo modificador o selector de escritura, es utilizado para cambiar, o mutar, el valor de una variable de instancia. Por convencin, el nombre de un modificador es setVariableName.

Herencia

Implementando Relaciones de Especializacin/Generalizacin


Una relacin de especializacin/generalizacin es implementada en Java utilizando herencia. La herencia es un mecanismo que crea una nueva clase "extendiendo" o "especializando" una clase existente

Implementando Relaciones de Especializacin/Generalizacin


La nueva clase (la subclase o clase hija) hereda las variables y mtodos de la clase existente (la superclase o clase padre). Para declarar una subclase, utiliza la palabra clave extends seguida por el nombre de la superclase: public class DerivedClass extends BaseClass {}

Convirtiendo el Tipo de Objetos (Casting)


Un empleado es una persona, tal que todo objeto Employee es tambin un objeto Person. Por esta razn, una variable de referencia de Employee puede ser asignada a una variable de referencia de Person. El siguiente cdigo crea un objeto Employee y asigna la referencia de Employee a person, una referencia de Person:


Person person = new Employee("Joe Smith", "100 Main Ave", 3000.0);

Convirtiendo el Tipo de Objetos (Casting)


Las implicaciones de esto son inesperadas y un tanto ms confusas. La referencia person, la cual apunta a un objeto Employee, no puede ser utilizada para llamar a los mtodos de Employee! Si escribimos


double salary = person.getSalary();

// ilegal

Convirtiendo el Tipo de Objetos (Casting)


el compilador protestar porque no puede encontrar un mtodo llamado getSalary en la clase Personhasta este punto del cdigo, el compilador slo sabe que person es un Person. Podemos utilizar la referencia person para llamar a los mtodos de Person como getName y getAddress:
 

String name = person.getName(); // legal String address = person.getAddress(); // legal

Convirtiendo el Tipo de Objetos (Casting)


Java provee una facilidad para el problema de getSalary. Podemos cambiar la referencia person en una referencia de Employee con el trmino de conversin de tipo (cast). Una vez que tenemos una referencia de Employee, podemos llamar al mtodo getSalary como se indica a continuacin:
 

Employee employee = (Employee) person; double salary = employee.getSalary();


// o

double salary = ((Employee) person).getSalary();

Convirtiendo el Tipo de Objetos (Casting)


Podemos convertir la referencia person en una referencia Employee porque person apunta en realidad a un objeto Employee. Si no se hiciera y ejecutramos el cdigo, la conversin sera ilegal y la mquina virtual de Java (Java Virtual Machine o JVM) lanzara una excepcin ClassCastException. Aunque siempre resulta legal convertir una referencia de subclase en una referencia de superclase, hacerlo al revs no siempre es legal. Considera el siguiente cdigo:
 

Person person = new Person ("Joe Smith", "100 Main Ave"); double salary = ((Employee) person).getSalary(); // ilegal

El Operador instanceof
El operador instanceof toma dos operandos: una referencia de un objeto y un nombre de clase. Una expresin instanceof se evaluar como verdadera si el objeto especificado es una instancia de la clase especificada:


object instanceof ClassX

El Operador instanceof
La expresin tambin resultar verdadera si object es una instancia de una subclase de ClassX. De hecho, si object es una instancia de cualquier clase que tenga a la ClassX como ancestro, entonces la expresin resultar verdadera. Si el operador del lado izquierdo tiene un valor de null, la expresin instanceof resultar falsa. Observa que el operador instanceof no puede ser utilizado para determinar el tipo de una expresin primitiva.

El Operador instanceof
El operador instanceof es utilizado con frecuencia para evitar una conversin ilegal:
 

Person person = new Person ("Joe Smith", "100 Main Ave"); if (person instanceof Employee) { salary = ((Employee) person).getSalary(); }

Mtodo equals y Mtodo toString


En Java, todas las clases descienden, directa o indirectamente, de la clase Object, de modo que todas las clases heredan los mtodos definidos en la clase Object. En este curso, utilizaremos fuertemente dos de estos mtodos, equals y toString.

Metodo equals
El mtodo equals compara dos objetos y regresa verdadero s y solo si son iguales. La versin de este mtodo definida en la clase Object regresa true si los objetos que estn siendo comparados son el mismo objeto. Esta implementacin predeterminada es exactamente lo mismo que obj1 == obj2.

Metodo equals
El mtodo equals toma un parmetro de entrada, una referencia de Object. En Java, esto significa que una referencia a un objeto de cualquier tipo puede ser pasada a equals. Por lo mismo, equals puede utilizarse para comparar dos instancias de cualquier clase.

Metodo equals
El mtodo equals, tal y como est definido en Object, no resulta apropiado para la mayora de las clases, por lo que muchas de ellas lo sobrescriben. La versin de equals en la mayora de las clases regresa true cuando los objetos que se estn comparando tienen el mismo estado, esto es, contienen los mismos datos.

Mtodo toString
La clase Object define un mtodo llamado toString que regresa la representacin string del objeto que hace la llamada. La versin de este mtodo definida en la clase Object regresa un String con el siguiente formato:


NombreClase@numero

Donde NombreClase es el nombre de la clase del objeto y nmero es un nmero hexadecimal que identifica al objeto.

Mtodo toString
Es recomendable que todas las subclases sobrescriban el mtodo toString. Las clases comnmente redefinen el mtodo toString de modo que el String regresado contenga la representacin textual del objeto

Implementando el Sistema de Biblioteca

Clases del Sistema de Biblioteca


El Sistema de Biblioteca lleva un registro de los elementos que los usuarios han pedido prestados.

Clases del Sistema de Biblioteca

Clases del Sistema de Biblioteca


La Clase CatalogItem modela un elemento del catlogo de la biblioteca. Variables de instancia:
   

code. El cdigo nico que identifica el elemento del catlogo. title. El ttulo del elemento del catlogo year. El ao en que fue publicado el elemento del catlogo. available. Indica si el elemento del catlogo est disponible.

Clases del Sistema de Biblioteca


Constructor y mtodos:


    

public CatalogItem(String initialCode, String initialTitle, int initialYear) Constructor que inicializa las variables de instancia code, title, year y available. public String getCode(). Regresa el valor de la variable de instancia code. public String getTitle(). Regresa el valor de la variable de instancia title. public int getYear(). Regresa el valor de la variable de instancia year. public void setAvailable(boolean value). Modifica el valor de la variable de instancia available. public boolean isAvailable(). Regresa el valor de la variable de instancia available.

Clases del Sistema de Biblioteca


boolean equals(Object object). Sobrescribe el mtodo equals de la clase Object. Dos objetos CatalogItem son iguales si sus cdigos son iguales. String toString(). Sobrescribe el mtodo toString de la clase Object. Regresa la representacin String del objeto CatalogItem. La cadena regresada tiene el siguiente formato: code_title_year_available Los campos estn separados por un guin bajo ( _ ). Suponemos que los campos en s no contienen guiones bajos.

La Clase Book
La clase Book modela un libro. Extiende la clase CatalogItem. Variables de instancia:
 

author. El autor del libro numberOfPages. El nmero de pginas del libro public Book(String initialCode, String initialTitle, int initialYear, String initialAuthor, int initialNumberOfPages) Constructor que inicializa las variables de instancia code, title, year, available, author y numberOfPages.

Constructor y mtodos:


La Clase Book
public String getAuthor(). Regresa el valor de la variable de instancia author. public int getNumberOfPages(). Regresa el valor de la variable de instancia numberOfPages. String toString(). Sobrescribe el mtodo toString de la clase Object. Regresa la representacin String del objeto Book. La cadena regresada tiene el siguiente formato: code_title_year_available_author_numberOfPage s Los campos estn separados por un guin bajo ( _ ). Suponemos que los campos no contienen ningn guin bajo.

La Clase Recording
La clase Recording modela una grabacin, ya sea un CD o una cinta. Extiende la clase CatalogItem. Variables de instancia:
 

performer. El intrprete de la grabacin format. El formato de la grabacin public Recording(String initialCode, String initialTitle, int initialYear, String initialPerformer, String initialFormat) Constructor que inicializa las variables de instancia code, title, year, available, performer y format.

Constructor y mtodos:


La Clase Recording
public String getPerformer(). Regresa el valor de la variable de instancia performer. public String getFormat(). Regresa el valor de la variable de instancia format. String toString(). Sobrescribe el mtodo toString de la clase Object. Regresa la representacin String del objeto Recording. La cadena regresada tiene el siguiente formato: code_year_available_title_performer_format Los campos estn separados por un guin bajo ( _ ). Suponemos que los campos no contienen guiones bajos.

La Clase Borrower
La clase Borrower modela un usuario de la biblioteca. Variables de instancia:
 

id. El nmero de identificacin del usuario name . El nombre de un usuario public Borrower(String initialId, String initialName) Constructor que inicializa las variables de instancia id y name.

Constructor y mtodos:


La Clase Borrower
public String getId(). Regresa el valor de la variable de instancia id. public String getName(). Regresa el valor de la variable de instancia name. boolean equals(Object object). Sobrescribe el mtodo equals de la clase Object. Dos objetos Borrower son iguales si sus nmeros de identificacin son iguales. String toString(). Sobrescribe el mtodo toString de la clase Object. Regresa la representacin String del objeto Borrower. La representacin String tiene el siguiente formato:


id_name

Los campos estn separados por un guin bajo ( _ ). Suponemos que los campos no contienen guiones bajos.

You might also like