1. Unidad II. Clases y Objetos Programación Orientada a Objetos
II. Clases y Objetos.
2.1 Declaración de Clases
La declaración de una clase consta de dos partes claramente diferenciadas: cabecera y cuerpo.
La cabecera nos dará cuenta de los distintos aspectos que deberán ser tenidos en cuenta para el manejo de
esta clase, mientras que el cuerpo de la clase se reserva para la declaración de los atributos y métodos que
serán capaces de ejecutar los objetos generados a partir de esa clase.
Clase Cabecera
{
Atributos Cuerpo de clase
Métodos
}
La sintaxis general de la declaración de una clase es la siguiente:
[modificador] class NombreClase [extends NombreSuperclase][implements listaDeInterfaces]¨
{
}
Todo lo que en la sintaxis de la declaración se ha especificado dentro de corchetes, es opcional. Por lo tanto
la declaración mínima para una clase es :
class NombreClase
{
}
Los atributos de una clase sirven para almacenar datos de los objetos que se instancian a partir de esa clase.
La sintaxis general es la siguiente:
[ModificadorDeAtributo] tipo nombreAtributo;
Modificadores de atributo: Un atributo puede tener más de un modificador y en caso de ser así, estos se
especificarán uno detrás de otro, separados mediante un espacio en blanco.
• static : Los Atributos pueden ser de instancia/objeto o de clase. Los atributos de objeto son
variables u objetos que almacenan valores distintos para objetos instanciados a partir de esa clase. Los
atributos de clase son variables u objetos que almacenan el mismo valor para todos los objetos instanciados
a partir de esa clase. Estos de definen con la palabra static.
• final: La palabra reservada final, calificando a un atributo o variable sirve para declarar
constantes. Si además es static, se puede acceder a dicha constante simplemente anteponiendo el nombre
de la clase, sin necesidad de instanciar la clase creando un objeto de la misma.
�El valor de un atributo final debe ser asignado en la declaración del mismo.
Ejemplo:
class Circulo
{
static final double PI=3.14159265;
1
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.
2. Unidad II. Clases y Objetos Programación Orientada a Objetos
private double radio;
/* Declaración de Método*/
}
2.2 Instanciación de una clase
Un objeto es una instancia de una clase, por lo que los términos objeto o instancia, son indistintos. Un
objeto se declara al definir su tipo de dato (Clase) y se crea o instancia, al reservar su espacio en memoria
(new).
Declaración de objeto: Nombre_de_clase Nombre_de_objeto;
Creación de objeto: Nombre_de_objeto = new Nombre_de_clase();
Declaración y Creación: Nombre_de_clase Nombre_de_objeto = new Nombre_de_clase();
2.3 Referencia al Objeto actual o Auto referencia this
Para que un método conozca la identidad del objeto particular para el que ha sido invocado Java
proporciona una referencia al objeto denominada this. La referencia al objeto puede ser explícita o implícita.
Referencia al objeto con this de manera implícita
public void asigna (int valor)
{
v=valor;
}
Referencia al objeto con this de forma explícita
public void asigna (int valor)
{
this.v=valor;
}
Un uso común de this es cuando se usa el mismo nombre para un atributo y un parámetro, como ejemplo:
public void asigna (int v)
{
this.v=v;
}
2.4 Métodos
Los métodos son funciones que determinan el comportamiento de los objetos. Se declaran y definen dentro
de una clase por lo que cualquier objeto de esa clase tendrá disponibles a esos métodos.
Los métodos se pueden clasificar en tres grupos:
2
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.
3. Unidad II. Clases y Objetos Programación Orientada a Objetos
a) Métodos de consulta: Sirven para extraer información de los objetos.
b) Métodos modificadores: Sirven para cambiar uno o varios valores de los atributos de los objetos.
c) Métodos de cálculo: Son los que manipulan los atributos de los objetos.
Definición y declaración de métodos
Un método está compuesto por dos partes que forman su definición; la cabecera y el cuerpo.
Sintaxis de definición:
// Cabecera
Modificador_de_Acceso tipo_de_dato nombre _método (lista de parámetros) Excepciones
{
//Cuerpo del método
Sentencias;
}
La cabecera está definida por:
1) Modificador de acceso al método.
2) Tipo de dato del valor de retorno, cuando el método regresa un resultado, dentro de su cuerpo se
ocupa la palabra reservada return seguida del valor a devolver, siendo esta la última sentencia en
ejecutarse en el método, si el método no requiere devolver un resultado se ocupa la palabra
reservada void.
3) Nombre del método, es el identificador que se invocará y se recomienda que sea descriptivo.
4) Parámetros formales: Son los valores que el método recibe del exterior y que requiere para su
función, cada uno precedido de su tipo de dato, se escriben entre paréntesis.
5) Excepciones: Si el método puede lanzar excepciones se indica al final de la cabecera.
El cuerpo del método se encuentra encerrado entre llaves y contiene el grupo de sentencias que indican su
funcionamiento.
Ejemplo de definición de método:
o Sin acceso definido, con retorno de resultado y lista de parámetros:
I int sumar (int a, int b)
{
return a+b;
}
o Con acceso público, sin retorno y sin parámetros
public void sumar ()
{
c=a+b; /* En este caso las variables están declaradas como atributos
}
Llamada a un método (Mensaje)
3
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.
4. Unidad II. Clases y Objetos Programación Orientada a Objetos
La llamada o la invocación a un método son conocidas como “mensaje”. El Mensaje es la forma en que un
programa se comunica con un objeto, ejecutando un método específico. Existen 3 tipos de mecanismos para
enviar mensajes:
1) Fuera de la clase donde se define el método por medio de un mensaje compuesto por el objeto, el
método y los parámetros actuales o argumentos.
Sintaxis: Objeto.Método(Argumentos)
Ejemplos: obj_persona.leer()
ob.sumar(a,b)
2) Si es un método estático o de clase la llamada indica el nombre de la clase del método y los
argumentos.
Sintaxis: NombreClase.Método(Argumentos)
Ejemplo: persona.metodo_estático()
3) Cuando el método es utilizado en la misma clase que lo define, sólo se escribe el nombre del
método.
Ejemplo: public void desplegar()
{
leer();
}
Atributos y Métodos de tipo static
Un atributo o método definido como static no es atributo o método de un objeto, sino que es un miembro
de la clase, es decir en el caso del atributo, si existen objetos creados solo hay una copia que comparten
todos los objetos de la clase. Un atributo o método static existe y puede ser utilizado aunque no exista
ningún objeto de la clase.
Modificadores de Acceso
Para controlar el acceso a los miembros de una clase, Java provee las palabras reservadas private, protected,
public, aunque también se pueden omitir convirtiendo el acceso en “predeterminado” o “de paquete”.
Los modificadores de acceso son utilizados para indicar el tipo de acceso permitido a cada miembro de la
clase, es decir el ámbito desde el cual se podrá acceder a él. Los modificadores son los siguientes:
o Acceso Predeterminado (de paquete).- Cuando no se especifica ningún tipo de modificador de
acceso, el miembro de la clase puede ser accedido por cualquier clase que pertenezca al mismo
paquete, ninguna otra clase o subclase, fuera de ese paquete tendrá acceso a los miembros.
o Acceso público (public).- Un miembro declarado public, esta accesible para cualquier otra clase o
subclase que necesita utilizarlo. La interfaz de una clase está formada por todos los miembros
públicos de la misma. Los atributos static generalmente son declarados públicos.
4
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.
5. Unidad II. Clases y Objetos Programación Orientada a Objetos
o Acceso Privado (private).- Un miembro declarado private es accesible solamente por los métodos
de su propia clase. Esto significa que no puede ser accedido por los métodos de cualquier otra clase,
ni por subclases.
o Acceso Protegido (protected).- El modificador protected permite que la propia clase, las subclases y
las clases del mismo paquete accedan a los miembros.
Modificador Clase Método Atributo Descripción
Predeterminado Visibles en todo paquete.
* * *
Public Visibles en todos los paquetes.
* * *
Prívate Visibles en la propia clase.
* *
Protected Visibles en el paquete y en subclases
* * de esta clase en otro paquete.
Paso de parámetros y Devolución de valores desde métodos
Un método puede devolver un resultado al ámbito donde fue llamado si así es necesario. Para hacerlo se
ocupa la palabra reservada return seguida del valor a regresar. El tipo de dato de ese valor debe coincidir
con el tipo indicado en la cabecera del método.
Ejemplo: public float suma( float x, int y)
{
float z= x+y;
return z;
}
La llamada será:
Int A, B; float res;
A=5; B=10;
res = Ob.suma (A, B);
La cabecera de un método especifica el número y tipo de los parámetros requeridos, existen dos formas de
pasar parámetros desde el mensaje, por valor y por referencia.
Parámetros por valor
Todos los tipos de datos primitivos se pasan a los métodos por valor, es decir sus valores se copian a nuevas
posiciones de memoria, por lo que si un argumento se cambia dentro del método, éste no cambiará en el
ámbito donde fue llamado.
Ejemplo: // En la clase // En la llamada
5
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.
6. Unidad II. Clases y Objetos Programación Orientada a Objetos
public int suma (int A, int B) int A=10;
{ int B=20;
A= A+B; C=ob.suma(A,B);
return A;
}
Aunque en el método cambió el valor de A con el resultado de 10 +20, en el ámbito de la llamada A sigue
teniendo el valor de 10.
Paso de parámetros por referencia
Todos los objetos incluyendo a los arreglos se llaman tipos referencia. El paso de un objeto significa que la
referencia de éste es decir su dirección de memoria se pasa a un parámetro. Por lo tanto cualquier cambio
al objeto local que suceda dentro del método afectará al objeto original.
Ejemplo: public void suma(circulo ob)
{
ob.radio=ob.radio+radio;
}
La llamada CIRCULO1.suma (CIRCULO2) causará que el radio del objeto CIRCULO2, se modifique con la
suma del radio del objeto CIRCULO1.
2.5 Constructores y Destructores
Un constructor es un tipo especial de método que inicializa el objeto con valores definidos. El constructor es
llamado automáticamente siempre que se crea un objeto. Cuando se crea un objeto sucede lo siguiente:
a) Se asigna memoria para el objeto por medio del operador new.
b) Se inicializan los atributos del objeto con los valores predeterminados por el sistema, los atributos
numéricos con ceros y los alfanuméricos y las referencias con nulos.
c) Se llama al constructor de la clase que puede ser uno entre varios y se encarga de inicializar los
atributos con los valores indicados en este.
Así como existe un método que se ejecuta automáticamente cada vez que se construye un objeto, existe un
método que se invoca automáticamente cada vez que se destruye. Este método recibe el nombre genérico
de destructor y en java corresponde al método finalize().
Cuando un objeto es destruido ocurren varias cosas:
a) Se llama al método finalize.
b) El recolector de basura de java se encarga de eliminar al objeto, lo que conlleva a:
c) Que se liberen los recursos que el objeto tuviera adjudicados (su espacio en memoria).
Un objeto es destruido automáticamente cuando se eliminan todas las referencias al mismo. Una referencia
a un objeto puede ser eliminada:
1) Porque el flujo de la ejecución salga fuera del ámbito donde la referencia fue declarada
2) Porque de manera explícita se le asigne a la referencia un valor nulo.
6
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.
7. Unidad II. Clases y Objetos Programación Orientada a Objetos
Declaración de métodos Constructor y Destructor
El constructor es un método de acceso público, que no tiene valor de retorno y que lleva el mismo nombre
de la clase, seguido de la lista de parámetros si son requeridos. Su declaración tiene la siguiente sintaxis.
Declaración de un constructor:
public nombre_clase(Parámetros)
{
sentencias
}
Ejemplo:
public circulo()
{
Radio = 10
}
Un destructor se ejecuta antes de que un objeto sea eliminado físicamente de la memoria. Si una clase no
proporciona la definición de un destructor el compilador proporciona uno a través de la clase object con la
siguiente sintaxis:
protected void finalize()throws Throwable
{
//Sin código.
}
Si se desea declarar un destructor en una clase se reescribe el método anterior. En una clase solo se puede
definir un método destructor a diferencia del constructor para el que puede haber varias definiciones.
Para forzar la completa recolección de basura se llama al método gc (garbaje collector) de la clase system,
escribiendo el siguiente segmento de codigo:
Ob_A=null
Runtime runtime=Runtime.getruntime():
runtime.gc();
runtime.runFinalization();
Tipos de constructores
Existen diversos tipos de constructores entre los que se distinguen:
a) Constructores por omisión o por defecto: Es un constructor sin parámetros que inicializa los
atributos del objeto con los valores predeterminados del sistema (ceros y nulos). Si una clase no
especifica ningún constructor el compilador agrega automáticamente un constructor por defecto.
Ejemplo:
public circulo ()
{
radio=0;
}
7
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.
8. Unidad II. Clases y Objetos Programación Orientada a Objetos
b) Constructor por parámetros: Este requiere del paso de un argumento que será utilizado para
inicializar los atributos del objeto. Puede existir más de un constructor con paso de parámetros
siempre y cuando sean diferentes en el tipo o la cantidad de parámetros utilizados.
Ejemplo:
public arreglo (int L)
{
A=new int[L]
}
La ejecución del constructor es cuando se crea el objeto:
arreglo ARREGLO1 = new arreglo(10);
c) Constructor por copia: Es el que asigna otro objeto de su misma clase en el momento de la creación.
Acepta como argumento una referencia al objeto que se va a copiar para después asignar elemento
por elemento al objeto construido.
Ejemplo:
public fecha (fecha Ob)
{
This.d=Ob.d;
This.m=Ob.m;
This.a=Ob.a;
}
La ejecución del constructor es:
fecha FECHA2=new fecha(FECHA1);
Con lo que se crea una copia del objeto FECHA1, en el objeto FECHA2.
2.6 Sobrecarga de Métodos
La sobrecarga es la característica de permitir que existan varios métodos con el mismo nombre, pero con
diferente cantidad y tipo de parámetros.
La función de la sobrecarga es la de eliminar la necesidad de definir métodos deferentes que en esencia
hacen lo mismo. La definición de varios constructores es un ejemplo de Sobrecarga.
Ejemplo. Escribir la clase Fecha, con dia, mes y año como atributos con un método sobrecargado para la
asignación de datos.
class fecha
{
int dd, mm, aa;
public fecha() {
//Constructor por defecto
dd=0;
mm=0;
aa=0;
}
public void setFecha(int dd,int mm,int aa) {
8
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.
9. Unidad II. Clases y Objetos Programación Orientada a Objetos
// metodo sobrecargado
this.dd=dd;
this.mm=mm;
this.aa=aa;
}
public void setFecha(int dd,int mm) {
//metodo sobrecargado
this.dd=dd;
this.mm=mm;
}
.
.
.
}
La forma en que se invoque el método indica cual se ejecutará, los llamados pueden ser de la manera
siguiente:
int di=9, me=6, an=2006;
fecha ob1=new fecha();
fecha ob2=new fecha();
ob1.setFecha(di,me,an);
ob2.setFecha(di,me);
2.7 Sobrecarga de Operadores
El término operador sobrecargado se refiere a un operador que es capaz de desarrollar su función en varios
contextos sin necesidad de otras operaciones adicionales.
La sobrecarga de operadores permite dar un nuevo significado al símbolo de un operador.
En algunos lenguajes existen formas para la sobre carga de operadores.
El lenguaje Java, a diferencia de C++, no soporta la sobrecarga de operadores, esto significa que no es
posible predefinir el entorno en el que actúa un operador con respecto a los objetos de un tipo que el
programador haya definido como propio.
Sin embargo, Java sobrecarga internamente el operador “+”, ya que se puede utilizar para realizar una suma
aritmética, o para concatenar (juntar) elementos, es decir, su función depende del entorno exterior.
Ejemplo de la Sobrecarga de operador ++ en lenguaje c++, que define un método llamado operator,
seguido del símbolo del operador a sobrecargar:
class coordenada
{
int x,y;
void operator ++()
9
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.
10. Unidad II. Clases y Objetos Programación Orientada a Objetos
{
x++;
y++;
}
…
}
El objeto se puede incrementar ahora de la siguiente forma:
ob1++;
Ejemplo de la Sobrecarga interna en Java:
A=B+C;
System.out.println( “El resultado es ”+ A);
10
Instituto Tecnológico de Toluca Lic. Alma Patricia Vásquez Glez.