Unidad 3 Programación Orientada a Objetos con Java

Anuncio
Unidad 3 Programación Orientada a Objetos con Java.
3.1 Clases.
En el mundo real encontramos muchos objetos del mismo tipo, por ejemplo,
existen diferentes bicicletas de la misma marca y modelo. Cada una de ellas fue
elaborada utilizando la misma plantilla o molde y por lo tanto cada una de ellas contiene
los mismos componentes. Hablando en términos de la programación orientada a objetos,
podemos decir que una bicicleta es una instancia u objeto de la clase Bicicleta.
Una clase en java es una plantilla que contiene atributos y métodos que definen
el estado y comportamiento de un objeto. En java, todo debe estar dentro de una clase.
El archivo donde se almacena la clase debe de tener el mismo nombre que la clase con
extensión .java
Forma General de una clase en java.
AccesoALaClase class NombreClase{
//atributos
//metodos
}
Tipos de clases.




abstract . Una clase abstract tiene al menos un método abstracto. Una clase
abstracta no se instancia, sino que se utiliza como clase base para la herencia.
final . Una clase final se declara como la clase que termina una cadena de
herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es
una clase final.
public . Las clases public son accesibles desde otras clases, bien sea
directamente o por herencia. Son accesibles dentro del mismo paquete en el que
se han declarado. Para acceder desde otros paquetes, primero tienen que ser
importadas.
synchronizable . Este modificador especifica que todos los métodos definidos
en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo
a ellos desde distintos threads; el sistema se encarga de colocar los flags
necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se
puedan modificar las mismas variables sin que haya problemas de que se
sobreescriban.
Existen diferentes formas de acceso a los miembros de las clases, en la siguiente tabla se
muestran.
Nivel de Acceso
Modificador Clase Paquete Subclase Mundo
public
Y
Y
Y
Y
protected
Y
Y
Y
N
no modifier
Y
Y
N
N
private
Y
N
N
N
Tabla 1 Modificadores de Acceso a los miembros de una clase.
3.2 Métodos.
Los métodos son procedimientos definidos en una clase que contienen
instrucciones y variables.
Forma general de un método.
modificadorAcceso tipoDeRetorno nombreMetodo(argumentos){
//declaraciones e instrucciones
}
La declaración de un método tiene 6 componentes.

Modificador de Acceso. Por ejemplo puede ser público o privado o los que se
encuentran en la Tabla 1. Este modificador indicará la forma en que otras clases
pueden ver o no al método.

Tipo de Retorno. El tipo de dato que regresará el método o void si no regresa
nada.

Nombre del Método

Argumentos o parámetros enlistados entre paréntesis. Dentro de los paréntesis es
la lista de argumentos delimitados por comas indicando primero el tipo de dato
que es. Si no hay parámetros se ponen paréntesis vacíos ().

Lista de excepciones. En caso de que no se desee hacer caso de las excepciones
en este método, se indican todas las excepciones que se pueden presentar dentro
del método.

Cuerpo del método. El código de lo que realizara el método, incluyendo la
declaración de variables. Todo dentro de {}.
Ejemplo.
void suma(int numero1,int numero1){
//cuerpo del metodo
}
Una de las características de java es la de mantener la encapsulación de los
datos, esto se logra manteniendo los atributos privados. De esta forma solo utilizando
los métodos de acceso adecuados podremos ver o establecer/modificar los valores de los
atributos. A estos métodos se les llama en ingles accesors y mutators.
Accesors. Son métodos de acceso a los atributos, se les llama getters, y la firma del
metos es:
acceso tipoRetorno nombreMetodo();
Generalmente el acceso es publico y siempre debe haber un tipo de retorno, ya que
como la palabra lo indica, es para tener el acceso al atributo (para poder ver su valor).
Mutators. Son métodos para modificar los valores de los atributos, se les llama setters, y
la firma del método es:
acceso void nombreMetodo(tipoAtributo nuevoValor);
Generalmente el acceso es público y generalmente no existe el tipo de retorno. Este
método se utiliza para establecer un nuevo valor para el atributo.
Para invocar la llamada al un metodo se utiliza el . como se muestra a continuación:
nombreObjeto.nombreMetodo();
En caso de que el método reciba parámetros se hace de la siguiente manera:
nombreObjeto.nombreMetodo(param1,param2);
3.3 Constructores
El constructor es un tipo específico de método que siempre tiene el mismo
nombre que la clase y se utiliza para construir objetos de esa clase. No tiene tipo de dato
específico de retorno, ni siquiera void. Esto se debe a que el tipo específico que debe
devolver un constructor de clase es el propio tipo de la clase. En este caso, pues, no se
puede especificar un tipo de retorno, ni se puede colocar ninguna sentencia que
devuelva un valor. Los constructores pueden sobrecargarse, y aunque puedan contener
código, su función primordial es inicializar el nuevo objeto que se instancia de la clase.
Cuando se declara una clase en Java, se pueden declarar uno o más constructores
opcionales (sobrecarga de métodos o polimorfismo) que realizan la inicialización
cuando se instancia un objeto de dicha clase.
class Persona
{ private String nombre;
private String curp;
private String fechaNacimiento;
private float peso;
//Constructores.
public Persona(String nombre,String curp,String
fechaNacimiento,float peso){
this.nombre=nombre;
this.curp=curp;
this.fechaNacimiento=fechaNacimiento;
this.peso=peso;
}
public Persona(String nombre,float peso){
this.nombre=nombre;
this.peso=peso;
}
//setters y getteres para cada atributo de la clase
}
En el ejemplo de Persona se declararon dos constructores, lo que hace la diferencia
entre los dos, es la lista de argumentos o parámetros que le llega a cada uno de ellos.
Por un lado esta el que recibe cuatro argumentos, igual cantidad que los atributos. Y el
otro constructor solo recibe dos argumentos, uno String para el nombre y otro flotante
para el peso.
En Java, si no se proporciona explícitamente un constructor, el sistema proporciona uno
por defecto que inicializará automáticamente todas las variables miembro a cero o su
equivalente, en Java.
3.4 El recolector de basura.
Se utiliza para liberar la memoria reservada. En ingles se llama garbage
collector.
Cuando ya no se necesita un objeto simplemente puede dejar de referenciarse.
No existe una operación implícita para destruir un objeto o liberar el área de memoria
utilizada por el. La liberación de memoria la realiza el recolector de basura, que es una
función de baja prioridad de la JVM (java virtual Machine). La JVM determina en que
momento se activara el recolector de basura.
En ocasiones es necesario realizar alguna acción asociada antes de la liberación
de memoria. Esto se puede realizar codificando el método finalize, se declara a
continuación:
protected void finalize() throws Throwable{}
El método finalize es invocado por la JVM antes de liberar la memoria por el recolector
de basura o antes de terminar la JVM. No existe un momento concreto en que las áreas
de memoria son liberadas, sino que lo determina en cada momentos la JVM en función
de sus necesidades de espacio.
La forma de invocar al garbage collector es:
System.gc();
Pero esto no es recomendado.
3.5 Miembros de clase estáticos
Java tiene tres tipos de variables:
 de instancia
 de clase
 locales
Las variables de instancia o miembros dato, se usan para guardar los atributos de un
objeto particular.
Las variables de clase o miembros dato estáticos son similares a las variables de
instancia, con la excepción de que los valores que guardan son los mismos para todos
los objetos de una determinada clase. En el siguiente ejemplo, PI es una variable de
clase y radio es una variable de instancia. PI guarda el mismo valor para todos los
objetos de la clase Circulo, pero el radio de cada círculo puede ser diferente
class Circulo{
static final double PI=3.1416;
double radio;
double calcularArea(){
double area=PI*radio*radio;
return area;
}
//...
}
Para indicar que el miembro PI es una variable de clase se le antepone el modificador
static. El modificador final indica que es una constante que no se puede modificar, una
vez que la variable PI ha sido inicializada
Las variables locales se utilizan dentro de las funciones miembro o métodos. Como se
puede ver en la declaración del método calcularArea(), area es una variable local a la
función calcularArea en la que se guarda el valor del área de un objeto de la clase
Circulo. Una variable local existe desde el momento de su definición hasta el final del
bloque en el que se encuentra.
De la misma forma que existen variables de instancia y variables de clase,
existen los métodos de instancia y lo métodos de clase.
Métodos de Clase.
El lenguaje java soporta también métodos estáticos. Los métodos estáticos son
los que definen la palabra reservada static en la declaración del método, y deben
llamarse utilizando el nombre de la clase, sin la necesidad de crear una instancia de la
clase, por ejemplo:
NombreClase.nombreMetodo(args);
3.6 Herencia
Java permite el uso de la herencia simple. La herencia se refiriere a que una
clase puede obtener los atributos de otra clase, esto se hace con el fin de encontrar cosas
comunes y generales, para después proporcionar estas características a otras clases y
definir mas a detalle sus propias características. A la clase que da la herencia se le llama
Superclase y a la que la recibe se le llama subclase.
Por ejemplo, podemos crear una clase genérica Bicicleta, esta clase tendrá
características comunes a todas las bicicletas. Esta clase puede heredar sus atributos a
otras clases más especializadas como BicicletaMontaña o BicicletaVelocidad. Cada
subclase además de las características comunes a todas las bicicletas, heredadas de
Bicicleta, tendrá sus propios atributos específicos. Observe la figura, en ella podemos
observar la superclase y las subclases derivadas.
La forma de generar herencia es:
public class subclase extends superclase {
…
}
Ejemplo.
public class Bicicleta {
// la clase Bicicleta tiene 3 atributos
public int cadence;
public int gear;
public int speed;
// la clase Bicicleta tiene un constructor
public Bicicleta(int startCadence, int startSpeed, int startGear)
{
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// la clase Bicicleta tiene 4 metodos
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void meterFreno(int decrement) {
speed -= decrement;
}
public void aumentaVelocidad(int increment) {
speed += increment;
}
}
La clase BicicletaMontaña hereda los atributos de Bicicleta.
public class BicicletaMontaña extends Bicicleta {
// la subclase BicicletaMontaña agrega un campo
public int seatHeight;
// la subclase BicicletaMontaña tiene un constructor
public BicicletaMontaña(int startHeight, int startCadence, int
startSpeed, int startGear) {
super(startCadence, startSpeed, startGear);
seatHeight = startHeight;
}
// la subclass BicicletaMontaña agrega un metodo
public void setHeight(int newValue) {
seatHeight = newValue;
}
}
En Java no se puede hacer herencia múltiple
3.7 Abstracción de Datos
La abstracción de datos es obtener las partes esenciales de un objeto para crear
una clase y generalmente se utilizan para generar herencia como superclase. Una clase
abstracta puede tener o no atributos y puede tener o no métodos abstractos. Un método
abstracto es un método que no tiene implementación como se muestra:
abstract void moveTo(double deltaX, double deltaY);
Si la clase incluye métodos abstractos, la misma clase debe ser declarada como
abstracta, como se muestra a continuación.
public abstract class ClaseAbstracta {
// declaracion de campos
// declaracion de metodos no abstractos
// declaracion metodo abstracto
abstract void dibujar();
}
Las clases abstractas solamente se pueden usar como clases base para otras clases. No
se pueden crear objetos pertenecientes a una clase abstracta. Sin embargo, se pueden
declarar variables de dichas clases.
3.8 Polimorfismo.
El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje
orientado a Objetos, las mismas raíces de la palabra pueden ser una fuerte pista de su
significado: Poli = Multiple, morfismo= Formas , esto implica que un mismo
Objeto puede tomar diversas formas.
A través del concepto de Herencias es posible ilustrar este comportamiento
El poder manipular un Objeto como si éste fuera de un tipo genérico otorga mayor
flexibilidad al momento de programar con Objetos, vea el siguiente código:
Figura a = new Circulo();
Figura b = new Triangulo();
Inicialmente se puede pensar que este código generaría un error debido a que el tipo de
referencia es distinta a la instancia del objeto, sin embargo, el fragmento anterior es
correcto y demuestra el concepto de Polimorfismo. Esto es posible debido a que Circulo
y Triangulo son subclases de Figura.
También podemos asociar el polimorfismo en la declaración de métodos con nombres
igual y argumentos diferentes, como cuando declaramos múltiples constructores. Para
ilustrar este concepto veamos el siguiente ejemplo.
class Sumas{
// declaracion de atributos
int numero1,numero2,resultado1;
float numero3,numero4,resultado2;
Complejo numero5,numero6,resultado3;
//constructores
public Sumas(int n1,int n2){
numero1=n1;
numero2=n2
}
public Sumas(float n1,float n2){
numero3=n1;
numero4=n2
}
public Sumas(Complejo n1,Complejo n2){
numero5=n1;
numero6=n2
}
// declaracion de metodos on el mismo nombre
public int laSuma(int valor){
return valor+numero1;
}
public float laSuma(float valor){
return valor+numero3;
}
public Complejo laSuma(Complejo valor){
return valor+numero5;
}
}
Podemos observar de la clase Suma, que existen 3 constructores, y cada uno de
ellos recibe diferentes tipos de valores, esto hace que no haya confusión a la hora de
invocar el constructor, java sabrá cual se esta invocando. También hay 3 métodos
laSuma, y al momento de invocar cualquiera de los métodos java sabrá cual ejecutar
debido a que recibirá el atributo de un tipo en particular.
Bibliografia.
1. http://java.sun.com/docs/books/tutorial/java/javaOO/methods.html
2. http://www.ulpgc.es/otros/tutoriales/java/Cap1/instan.html
3. http://www.sc.ehu.es/sbweb/fisica/cursoJava
4.
Descargar