Programación Orientada a Objetos con Java

Anuncio
Programación Orientada a
Objetos con Java
M.C. Jorge Eduardo Ibarra Esquer
[email protected]
Sobrecarga de métodos
†
†
†
Java permite la definición de dos o más métodos que
tengan el mismo nombre, dentro de la misma clase.
La restricción para esto es que sus parámetros sean
diferentes
En estos casos se dice que hay una sobrecarga de
métodos, la cual es una de las formas en las que Java
implementa el polimorfismo
Cuando Java encuentra una llamada a un método
sobrecargado, se ejecuta la versión que corresponde
a los argumentos utilizados al llamarlo
1
Sobrecarga de métodos
†
El método escribir() de nuestra clase Pizarron puede
servir para ejemplificar la sobrecarga
public void escribir(String texto)
{
this.texto=texto;
}
public void escribir(String texto, boolean agrega)
{
if(agrega)
this.texto+=texto;
else
this.texto=texto;
}
Sobrecarga de constructores
†
Una clase puede tener más de un constructor,
siempre y cuando cada uno de ellos tenga
diferentes argumentos:
Pizarron( )
{
color=“Verde”;
material=“Madera”;
ancho=3.0;
alto=1.5;
texto=“”;
}
Pizarron(String texto)
{
color=“Verde”;
material=“Madera”;
ancho=3.0;
alto=1.5;
this.texto=texto;
}
2
Utilizar objetos como parámetros de
los métodos
†
Definir un método copiar(Pizarron p) que
copie el texto de un pizarrón a otro
Paso de argumentos por valor
†
†
†
Consiste en copiar el valor en el parámetro del
método
Los cambios que el método realice en el
parámetro recibido, no tienen efecto sobre el
argumento original
Cuando se utiliza como parámetro un tipo de
dato primitivo, se pasa por valor:
„
byte, short, int, long, float, double, char, boolean
3
Paso de parámetros por referencia
†
†
†
Se pasa una referencia a un parámetro, no su
valor
Los cambios que se realicen en el método,
afectarán al argumento original
Cuando se pasa un objeto a un método, se
hace por referencia
Especificadores de acceso
†
†
A través de estas palabras clave, se puede
controlar el acceso a los miembros de una
clase desde las diferentes partes de un
programa
Los especificadores de acceso de Java son:
„
„
„
public
private
protected
4
Acceso público
†
Cuando se utiliza la palabra public, cualquier
parte de un programa puede tener acceso a ese
miembro de la clase:
„
„
public int a;
public void borra( ){… }
Acceso privado
†
Cuando a un miembro de una clase se le
especifica este acceso mediante la palabra
private, únicamente se tendrá acceso a él
desde otros miembros de su misma clase:
„
„
private int a;
private void guarda( ) {…}
5
Acceso protegido
†
†
Sólo se tiene acceso a los miembros de la
clase desde subclases de la misma, es decir,
clases que hereden sus características.
Para indicar este modo de acceso, se utiliza la
palabra protected:
„
„
protected int a;
protected void metodo();
Acceso por default
†
†
Si no se utiliza ninguno de los modificadores
de acceso, entonces se tendrá acceso por
defecto
En este caso, se tendrá acceso a los miembros
de la clase desde cualquier otra clase que se
encuentre en el mismo paquete
6
Resumen de modificadores de acceso
public protected
default
private
Misma clase
3
3
3
3
Subclase en el
mismo paquete
Otra clase en el
mismo paquete
Subclase en otro
paquete
Otra clase en otro
paquete
3
3
3
2
3
3
3
2
3
3
2
2
3
2
2
2
La palabra clave static
†
†
Existen miembros de una clase que se pueden
utilizar independientemente de cualquier
objeto de esa clase
Para crearlos, es necesario que en su
declaración se incluya la palabra static
„
„
static double pi=3.14159;
static int suma(int a, int b)
7
La palabra clave final
†
†
Cuando una variable se declara como final, su
valor no puede ser modificado
Una variable de este tipo debe ser inicializada
al momento que se define
„
„
„
†
final double PI=3.14159;
final int ABRIR=1;
final int CERRAR=2;
Generalmente este tipo de variables se
especifican utilizando sólo mayúsculas
Clases internas
†
†
†
Estas son clases que se definen dentro de otra
clase. También reciben el nombre de clases
anidadas.
Las clases internas pueden tener una
definición completa o ser una clase anónima,
es decir, una clase sin nombre
Su aplicación principal es en el manejo de
eventos
8
Herencia
†
Para indicar que una clase hereda sus
atributos y métodos de otra, en Java se utiliza
la palabra clave extends
„
public class Vocal extends Letra
Herencia
†
†
Por medio de la herencia, se puede modificar
el comportamiento de algunos de los métodos
de una clase, así como agregar nuevos
atributos y métodos
Un objeto de una subclase, puede utilizarse
como parámetro cuando se requiera un objeto
de su superclase
9
Herencia
public class PizarronCuadrado
extends Pizarron{
…
…
…
}
…
public void copiar(Pizarron p){
…
}
†
public class Pizarrones {
…
…
PizarronCuadrado pc1,pc2;
…
…
pc1.copiar(pc2);
…
…
…
}
Un objeto de la clase PizarronCuadrado será
también un objeto de la clase Pizarron
La palabra clave super
†
†
Esta palabra se utiliza para que una clase se
refiera a su superclase inmediata
Un uso común es el de llamar a uno de los
constructores de la superclase
„
†
super(lista de parámetros);
La llamada a super() debe ser la primer
sentencia que se ejecute en un constructor
10
La palabra clave super
†
También se puede utilizar para llamar a un
miembro específico de la superclase, de
manera similar a this
„
†
super.miembro;
Un miembro de una clase es un método o
atributo
Clases abstractas
†
†
Son clases en las que se declara la estructura
de la misma, pero no se implementa alguno o
algunos de los métodos
Definen una forma general que será
compartida por todas las subclases,
permitiendo que éstas definan el
comportamiento específico para cada una de
ellas
11
Clases abstractas
†
†
Cuando una clase tenga al menos un método
declarado como abstracto, deberá también
declararse como clase abstracta
Para declarar clases y métodos abstractos, se
utiliza la palabra clave abstract
„
„
†
public abstract class Clase
public abstract void método(parámetros);
No pueden crearse objetos de clases abstractas
Evitando la herencia
†
†
En algunos casos, se tendrán métodos que no
es conveniente que se sobreescriban al ser
heredados
Para evitar esta sobreescritura, se utiliza la
palabra clave final
„
†
public final void método(atributos){…}
De la misma forma, se puede evitar que una
clase sea heredada
„
public final class Clase
12
Paquetes
†
†
†
Los paquetes son contenedores de clases que
permite delimitar el espacio en el cual una
clase existe
Los paquetes permiten que exista más de una
clase con el mismo nombre
Para indicar que una clase pertenece a un
cierto paquete, se utiliza la palabra clave
package
Paquetes
†
†
†
La declaración del paquete debe colocarse
como la primera sentencia de la clase
La sentencia package define un espacio de
nombres en el que se almacenan las clases
La forma de esta sentencia es:
„
package nombrePaquete;
13
Paquetes
†
†
Cualquier clase que se declare como parte de
un paquete, debe estar contenida dentro de un
directorio con el nombre de dicho paquete
Los paquetes pueden organizarse como una
jerarquía. Para esto, se separa el nombre de
cada paquete por medio de un punto:
„
package paq1.paq2.paq3;
La palabra clave import
†
Cuando se requiera utilizar una clase en un
programa escrito en Java, ésta debe
referenciarse, cada vez que sea utilizada, con
el nombre completo del paquete en el que se
encuentra. Por ejemplo:
„
„
java.io.BufferedReader
java.lang.Integer
14
La palabra clave import
†
†
†
La sentencia import nos permite referenciar
las clases utilizando únicamente su nombre
Al importar una clase o las clases que se
encuentran en un paquete se vuelven visibles
para el compilador
La forma de utilizar la sentencia import es la
siguiente:
„
„
import java.io.BufferedReader;
import java.io.*;
La palabra clave import
†
La sentencia import se debe colocar después
de la declaración del paquete y antes de la
declaración de la clase
package paquete;
import paquete1.*;
import paquete2.*;
…
import paqueteN.*;
public class Clase{
…
}
15
Interfaces
†
†
†
Por medio de una interfaz, se puede
especificar lo que una clase debe hacer, pero
no cómo debe hacerlo
Las interfaces son similares a las clases, pero
no contienen variables de instancia y los
métodos solamente se declaran
Para crear una interfaz, se utiliza la palabra
clave interface en lugar de class
Interfaces
public interface UnaInterfaz{
public void metodo1();
public String metodo2();
public double metodo3(double a, double b);
public void metodo4();
}
16
Interfaces
†
†
†
El acceso a una interfaz puede ser public o
por default
Se pueden declarar variables en una interfaz,
pero estas, de manera implícita, tendrán los
modificadores static y final
Si una interfaz se declara como public, todos
sus métodos y variables también lo serán
Implementación de interfaces
†
†
Una vez que se tiene una interfaz, una o más
clases pueden implementarla
La implementación de una interfaz se indica
mediante la palabra implements
„
†
public class Clase implements Interfaz
Cuando una clase implementa a una interfaz,
debe declarar todos los métodos de dicha
interfaz o declararse como clase abstracta
17
Implementación de interfaces
†
Una clase puede implementar más de una
interfaz, separando los nombres de las
interfaces por medio de comas
„
†
public class Clase implements Interfaz1,Interfaz2
Se puede tener acceso a una clase a través de
una referencia a una interfaz que ésta
implemente
Implementación de interfaces
public interface Leible{
Public class Biblioteca{
public String leer();
….
….
}
public class Libro implements Leible{
…
public String leer(){
return texto;
}
}
Libro lib=new Libro();
leePagina(lib);
…
…
public String leePagina(Leible l){
return l.leer();
}
….
}
18
Implementación de interfaces
†
†
Cuando una clase implementa una interfaz,
otras clases pueden comunicarse con ella a
través de los métodos definidos en la interfaz
Las interfaces son una manera indirecta en la
cual Java implementa la herencia múltiple
Variables en interfaces
†
Una interfaz se puede utilizar para declarar un
grupo de constantes que serán utilizadas por
otras clases
public interface Constantes{
public interface Comandos{
String bienvenida=“Hola”;
int SALIR=0;
String despedida=“Hasta luego”;
int ABRIR=1;
String saludo=“¿Cómo has estado?”;
int GUARDAR=2;
}
int BORRAR=3;
}
19
Descargar