Sunteți pe pagina 1din 15

2.

1 DECLARACIN DE CLASES: ATRIBUTOS,


MTODOS, ENCAPSULAMIENTO.
La declaracin de una clase define la estructura de la misma. Dicho de otra forma, la
declaracin de una clase informa de los elementos que la conforman. Posteriormente
a ser declarada, una clase debe ser implementada convenientemente, es decir, se
debe escribir el cdigo correspondiente a los procedimientos y funciones que
determinan el funcionamiento de esa clase.
Las clases se declaran en la seccin TIPO del script pues las clases son, al fin y al
cabo, tipos de datos.
La programacin orientada a objetos se basa en la programacin de clases; a
diferencia de la programacin estructurada, que est centrada en las funciones.
Una clase es un molde del que luego se pueden crear mltiples objetos, con similares
caractersticas.
Una clase es una plantilla (molde), que define atributos (variables) y mtodos
(funciones)
La clase define los atributos y mtodos comunes a los objetos de ese tipo, pero luego,
cada objeto tendr sus propios valores y compartirn las mismas funciones.
Debemos crear una clase antes de poder crear objetos (instancias) de esa clase. Al
crear un objeto de una clase, se dice que se crea una instancia de la clase o un objeto
propiamente dicho.
Tipos de atributos.
Objetivos:
a) Profundizar en el concepto de atributo de una clase e indicar los tipos de atributos
en Java
b) Interpretar el cdigo fuente de una aplicacin Java donde aparecen distintos tipos
de atributos
c) Construir una aplicacin Java sencilla, convenientemente especificada, que
emplee clases con diferentes tipos de atributos.
Los atributos, tambin llamados datos o variables miembro son porciones de
informacin que un objeto posee o conoce de s mismo. Una clase puede tener

cualquier nmero de atributos o no Tener ninguno. Se declaran con un identificador y


el tipo de dato correspondiente.

Modificador
public
protectec
private
package

Visibilidad
Pblica (+)
Protegida / en la herencia(#)
Privada(-)
De paquete (~)

Mtodos.
Java como todo lenguaje de programacin orientado a objetos utiliza los llamados
mtodos. A continuacin veremos cmo se crea un mtodo y como se utilizan.
Se podra decir que existen 2 grandes tipos de mtodos, el primer tipo de mtodo son
mtodos que realizan procesos, puedes realizar cualquier operacin con ellos, sin
embargo el propsito es manipular variables existentes. El segundo tipo de mtodos
son los que realizan un proceso o clculo, y calculan una variable especfica, un
ejemplo podra ser un mtodo para obtener el valor de una multiplicacin.
Los mtodos en java pueden tener parmetros, es decir, que un mtodo puede utilizar
variables predefinidas para ser utilizadas en sus procesos.
Encapsulamiento.
Como se puede observar de los diagramas, las variables del objeto se localizan en el
centro o ncleo del objeto. Los mtodos rodean y esconden el ncleo del objeto de
otros objetos en el programa. Al empaquetamiento de las variables de un objeto con la
proteccin de sus mtodos se le llama encapsulamiento. Tpicamente, el
encapsulamiento es utilizado para esconder detalles de la puesta en prctica no
importantes de otros objetos. Entonces, los detalles de la puesta en prctica pueden
cambiar en cualquier tiempo sin afectar otras partes del programa.
El encapsulamiento de variables y mtodos en un componente de software ordenado
es, todava, una simple idea poderosa que provee dos principales beneficios a los
desarrolladores de software.

Modularidad.
esto es, el cdigo fuente de un objeto puede ser escrito, as como darle
mantenimiento, independientemente del cdigo fuente de otros objetos. As mismo, un
objeto puede ser transferido alrededor del sistema sin alterar su estado y conducta.
Ocultamiento de la informacin, es decir, un objeto tiene una "interfaz publica" que
otros objetos pueden utilizar para comunicarse con l. Pero el objeto puede mantener
informacin y mtodos privados que pueden ser cambiados en cualquier tiempo sin
afectar a los otros objetos que dependan de ello.
Los objetos proveen el beneficio de la modularidad y el ocultamiento de la
informacin. Las clases proveen el beneficio de la reutilizacin. Los programadores de
software utilizan la misma clase, y por lo tanto el mismo cdigo, una y otra vez para
crear muchos objetos.
En las implantaciones orientadas a objetos se percibe un objeto como un paquete de
datos y procedimientos que se pueden llevar a cabo con estos datos. Esto encapsula
los datos y los procedimientos. La realidad es diferente: los atributos se relacionan al
objeto o instancia y los mtodos a la clase. Por qu se hace as? Los atributos son
variables comunes en cada objeto de una clase y cada uno de ellos puede tener un
valor asociado, para cada variable, diferente al que tienen para esa misma variable los
dems objetos. Los mtodos, por su parte, pertenecen a la clase y no se almacenan
en cada objeto, puesto que sera un desperdicio almacenar el mismo procedimiento
varias veces y ello va contra el principio de reutilizacin de cdigo.

2.2 INSTANCIACIN DE UNA CLASE.


Podemos interpretar que una clase es el plano que describe como es un objeto de la
clase, por tanto podemos entender que a partir de la clase podemos fabricar objetos. A
ese objeto construido se le denomina instancia, y al proceso de construir un objeto se
le llama instanciacin.
Cuando se construye un objeto es necesario dar un valor inicial a sus atributos, es por
ello que existe un mtodo especial en cada clase, llamado constructor, que es
ejecutado de forma automtica cada vez que es instanciada una variable.
Generalmente el constructor se llama igual que la clase y no devuelve ningn valor.
Anlogamente, destructor es un mtodo perteneciente a una clase que es ejecutado
de forma automtica cuando un objeto es destruido. Java no soporta los destructores.
Es posible que exista ms de un constructor en una clase, diferenciados slo en los

parmetros que recibe, pero en la instanciacin slo ser utilizado uno de los
constructores.
Ejemplo:
clase base
package ejemplo_de_libro;
import java.util.Scanner;
public class Main {

public static void main(String[] args) {


Scanner entrada = new Scanner(System.in);
LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones();
System.out.println("Escribe algo: ");
String nombreDelCurso = entrada.nextLine();
System.out.println();
miLibroCalificaciones.mostrarMensaje(nombreDelCurso);
}
}

clase derivada
package ejemplo_de_libro;

public class LibroCalificaciones {


public void mostrarMensaje(String nombredelsaludo)
{
System.out.printf("Bienvenido al libro de calificaciones para :\n%s\n",
nombredelsaludo);
}
}

2.3 REFERENCIA AL OBJETO ACTUAL.


La utilizacin de THIS en lugar de hacer referencia explcitamente al objeto actual por
su nombre (por ejemplo, thisform.command1.caption) hace que el cdigo de programa
pueda alternarse entre objetos, porque evita el nombre del objeto y encapsula
automticamente la clase primaria del objeto.
THIS permite hacer referencia a una propiedad o un objeto de una definicin de clase.
Los mtodos de un bloque de definicin de clase pueden utilizar THIS para especificar
una propiedad o un objeto que existir cuando se cree la clase.
Puesto que mltiples instancias de objetos comparten el mismo cdigo de mtodo,
THIS siempre hace referencia a la instancia en la que est ejecutndose el cdigo. Si
hay mltiples instancias de un objeto, y se llama a uno de los mtodos del objeto,
THIS hace referencia al objeto correcto.
Cada objeto puede acceder a una referencia a si mismo mediante la palabra this.
Cuando se hace una llamada a un mtodo no static para un objeto especifico, el
cuerpo del mtodo utiliza en forma implcita la palabra this para hacer referencia a las
variables de instancia y los dems mtodos del objeto.
Ahora demostraremos el uso implcito y explicito de la referencia this para permitir al
mtodo main de la clase PruebaThis que muestre en pantalla los datos prvate de un
objeto de la clase TiempoSimple. Hicimos esto para demostrar que, al compilador un
archivo .java que contiene mas de una clase, el compilador produce un archivo de
clase separado por la extensin .class para cada clase compilada.
// Ejemplo This.java
//Uso implicito y explicito de this para hacer referencia a los miembros de un objeto
public class PruebaThis
{
public static void main (String args[])
{

TiempoSimple tiempo=new TiempoSimple(15, 30, 19 );


System.out.println(tiempo.crearString());
}//fin de main
}//fin de la clase PruebaThis
//la clase TiempoSimple demuestra la referencia "this"
public class TiempoSimple
{
private int hora; //0-23
private int minuto; //0-59
private int segundo;//0-59
//si el constructor utiliza nombres de parametros identicos a
//los nombres de las variables de instancia, se reuiere la
//referencia "this" para diferenciar unos nombres de otros
public TiempoSimple (int hora,int minuto, int segundo)
{
this.hora=hora;//establece la hora del objeto "this"
this.minuto=minuto;//establece el minuto del objeto "this"
this.segundo=segundo;//establece el segundo del objeto "this"
}//fin del constructor de TiempoSimple
//usa la referencia "this" explicita e implicita para llamar StringUniversal
public String crearString()
{
return String.format("%24s:%s\n%24s:%s",
"this.aStringUniversal()",this.aStringUniversal(),
"aStringUniversal()",aStringUniversal());
}//fin del metodo crearString
//convierte a String en formato de hora universal (HH:MM:SS)
public String aStringUniversal()
{
//"this"no se requiere aqui para acceder a las variables de instancia,
//ya que el metodo no tiene variable locales con los mismos
//nombres que las variables de instancia
return String.format("%02d:%02d:%02d",
this.hora, this.minuto, this.segundo);

}//fin del metodo sStringUniversal


}//fin de la clase TiempoSimple

2.4 MTODOS : DECLARACIN , MENSAJES , PASO


DE PARMETROS, RETORNO DE VALORES.
Los mtodos o funciones miembro se definen dentro de la clase a la que pertenecen y
constituyen la interfaz o forma de acceder a la estructura interna de los objetos es
decir a los datos privados.
Los mtodos definen cual son las operaciones que se pueden realizar con los
atributos de los objetos de la clase. La ejecucin de un programa orientado a objetos
consiste, en recibir, interpretar y responder unos objetos a los mensajes que envan
otros objetos. En P.O.O. un mensaje est asociado siempre con un mtodo, de
manera que cuando un objeto recibe un mensaje la respuesta a ese mensaje es
ejecutar el mtodo asociado
Modo de acceso:
Especfica el tipo de acceso permitido indicando que usuarios de la clase podrn
acceder a ese mtodo, los mtodos son la nica forma de acceso a los atributos
privados. Por defecto los mtodos tienen proteccin paquete, es decir son accesibles
desde cualquier clase que pertenezca al mismo paquete. Todas las clases de un
mismo fichero .java pertenecen a un mismo paquete.

Public: Accesible desde cualquier otra clase.

Package: Accesible slo desde el mismo paquete.

Protected: Se comporta como un mtodo pblico para los mtodos del mismo
paquete o de las subclases y para el resto como un mtodo privado.

Prvate: Slo accesible a travs de mtodos de la propia clase.


Retorno de valores:
Un mtodo puede devolver un valor a quien lo llama o no devolver nada. El valor
devuelto por un mtodo puede ser de un tipo primitivo de datos o una referencia, pero
nunca puede devolver ms de un valor. El valor de retorno nunca puede ser un objeto
de una superclase, s de la misma clase o de una subclase. Si el mtodo no devuelve
nada el tipo devuelto por el mtodo es el tipo void.

Paso de parmetros a una funcin o mtodo.


Los parmetros de una funcin son variables locales que se inicializan en el momento
de la llamada al mtodo. Fuera de la funcin no se conocen y no pueden ser
accedidas. Se crean al entrar en la funcin y se destruyen al salir de ella.
El paso de parmetros o argumentos a las funciones se puede hacer de dos formas.
Paso por valor , paso por referencia.

2.5 CONSTRUCTORES Y DESTRUCTORES:


DECLARACIN, USO Y SUS APLICACIONES.
Para crear un objeto se necesita reservar suficiente espacio en memoria e inicializar
los valores de los campos que representan el estado del objeto. Este trabajo es
realizado por un tipo especial de mtodo denominado constructor.
Constructor
Un mtodo constructor de una clase es un mtodo especial que: tiene el mismo
nombre que la clase y no tiene tipo de retorno. La sintaxis para la declaracin de un
mtodo constructor es:
[atributos] [modificadores] <identificador> ( [parmetros] ) [inicializador]
{
// Cuerpo del constructor.
}
Donde: atributos (opcional) es informacin declarativa adicional, modificadores
(opcional) se restringen a extern y a los modificadores de acceso, identificador es el
nombre del mtodo constructor (igual al nombre de la clase), parmetros (opcional) es
la lista de parmetros pasados al constructor, inicializador (opcional). Con el
inicializador, el constructor invoca previamente a otro constructor.
El inicializador puede ser uno de los siguientes: base([listaDeParmetros])
this([listaDeParmetros])
Cuerpo del constructor es el bloque de programa que contiene las instrucciones para
inicializar la instancia de clase (objeto).
Destructor

La sintaxis para declarar un destructor es:


[Atributos] ~ <Identificador> ( )
{
// Cuerpo del destructor.
}
Una clase solamente puede tener un destructor. Los destructores no pueden
heredarse o sobrecargarse, los destructores no pueden invocarse, sino que son
invocados automticamente, un destructor no acepta modificadores ni parmetros, por
ejemplo, la siguiente es una declaracin de un destructor para la clase Figura:
~ Figura()
{
// Instrucciones para limpiar.
}

La destruccin por defecto: Recogida de basura


El intrprete de Java posee un sistema de recogida de basura, que por lo general
permite que no nos preocupemos de liberar la memoria asignada explcitamente.
El recolector de basura ser el encargado de liberar una zona de memoria dinmica
que haba sido reservada mediante el operador new, cuando el objeto ya no va a ser
utilizado ms durante el programa (por ejemplo, sale del mbito de utilizacin, o no es
referenciado nuevamente).
El sistema de recogida de basura se ejecuta peridicamente, buscando objetos que ya
no estn referenciados.
La destruccin personalizada: finalize
A veces una clase mantiene un recurso que no es de Java como un descriptor de
archivo o un tipo de letra del sistema de ventanas. En este caso sera acertado el
utilizar la finalizacin explcita, para asegurar que dicho recurso se libera. Esto se
hace mediante la destruccin personalizada, un sistema similar a los destructores de
C++.
Para especificar una destruccin personalizada se aade un mtodo a la clase con el
nombre finalize.

2.6 SOBRECARGA DE MTODOS.


Un mtodo sobrecargado se utiliza para reutilizar el nombre de un mtodo pero con
diferentes argumentos (opcionalmente un tipo diferente de retorno). Las reglas para
sobrecargar un mtodo son las siguientes:

Los mtodos sobrecargados deben de cambiar la lista de argumentos.

Pueden cambiar el tipo de retorno.

Pueden cambiar el modificador de acceso.

Pueden declarar nuevas o ms amplias excepciones.

Un mtodo puede ser sobrecargado en la misma clase o en una subclase.

Veamos un mtodo que se desea sobrecargar:


public void cambiarTamano(int tamano, String nombre, float patron){ }
Los siguientes mtodos son sobrecargas legales del mtodo cambiarTamano():
public void cambiarTamano(int tamano, String nombre){}
public int cambiarTamano(int tamano, float patron){}
public void cambiarTamano(float patron, String nombre) throws IOException{}
Cmo invocar un mtodo sobrecargado:
Lo que define qu mtodo es el que se va a llamar son los argumentos que se envan
al mismo durante la llamada. Si se invoca a un mtodo con un String como
argumento, se ejecutar el mtodo que tome un String como argumento, si se manda
a llamar al mismo mtodo pero con un float como argumento, se ejecutar el mtodo
que tome un float como argumento y as sucesivamente. Si se invoca a un mtodo
con un argumento que no es definido en ninguna de las versiones sobrecargadas
entonces el compilador arrojar un mensaje de error.
Reglas de la sobrecarga y sobreescritura de mtodos:

Ahora que hemos visto ambas formas de reescribir mtodos, revisemos las reglas y
diferencias entre ambos tipos de reescritura:
Argumentos: En un mtodo sobrecargado los argumentos deben de cambiar
mientras que en un mtodo sobreescrito NO deben cambiar.
El tipo de retorno: En un mtodo sobrecargado el tipo de retorno puede
cambiar, en un mtodo sobreescrito NO puede cambiar, excepto por subtipos del tipo
declarado originalmente.
Excepciones: En un mtodo sobrecargado las excepciones pueden cambiar,
en un mtodo sobreescrito pueden reducirse o eliminarse pero NO deben de arrojarse
excepciones nuevas o ms amplias.
Acceso: En un mtodo sobrecargado puede cambiar, en un mtodo
sobreescrito el acceso NO debe de hacerse ms restrictivo (puede ser menos
restrictivo).
Al invocar: En un mtodo sobrecargado los argumentos son los que
determinan qu mtodo es el que se invocar, en un mtodo sobreescrito el tipo de
objeto determina qu mtodo es elegido.

Ejemplo :
clase base
package sobrekarga;
public class Main {
public static void main(String[] args) {
// TODO code application logic here
articulo objarticulo=new articulo();
objarticulo.fijarprecio("70");
objarticulo.mostrarprecio();
edad objedad= new edad();
objedad.poneredad();
objedad.mostraredad();

}
}
Clase articulo
package sobrekarga;
public class articulo {
private double precio;
public void fijarprecio(){
precio=5.50;
}
public void fijarprecio(String precio){
System.out.println("No es un valor");
}
public void fijaprecio (double precio){
this.precio=precio;
}
public void mostrarprecio(){
System.out.printf("precio es %.2f",precio);
System.out.println();
}
}
Clase edad
package sobrekarga;
public class edad {
private int edad;
public void poneredad(){
edad= 22;
}
public void poneredad(String edad){
System.out.println("no es una edad");
}

public void poneredad(int edad){


this.edad= edad;
}
public void mostraredad(){
System.out.printf("la edad es : %d ",edad);
System.out.println();
}
}

2.7 SOBRECARGA DE OPERADORES: CONCEPTO Y


UTILIDAD, OPERADORES UNARIOS Y BINARIOS.
La sobrecarga de operadores es la capacidad para transformar los operadores de un
lenguaje como por ejemplo el +, -, etc, cuando se dice transformar se refiere a que los
operandos que entran en juego no tienen que ser los que admite el lenguaje por
defecto. Mediante esta tcnica podemos sumar dos objetos creados por nosotros o un
objeto y un entero, en vez de limitarnos a sumar nmeros enteros o reales, por
ejemplo.
La sobrecarga de operadores ya era posible en c++ y en otros lenguajes, pero
sorprendentemente java no lo incorpora, as que podemos decir que esta
caracterstica es una ventaja de c# respecto a java, aunque mucha gente, esta
posibilidad, no lo considera una ventaja porque complica el cdigo.
A la hora de hablar de operadores vamos a distinguir entre dos tipos, los unarios y los
binarios. Los unarios son aquellos que solo requieren un operando, por ejemplo a++,
en este caso el operando es 'a' y el operador '++'. Los operadores binarios son
aquellos que necesitan dos operadores, por ejemplo a+c , ahora el operador es '+' y
los operandos 'a' y 'c'. Es importante esta distincin ya que la programacin se har
de forma diferente.

Los operadores que podemos sobrecargar son los unarios, +, -, !, ~, ++, --; y los
binarios +, -, *, /, %, &, |, ^, <<, >>. Es importante decir que los operadores de
comparacin, ==, !=, <, >, <=, >=, se pueden sobrecargar pero con la condicin que
siempre se sobrecargue el complementario, es decir, si sobrecargamos el ==
debemos sobrecargar el !=
Operadores Unarios
En esta seccin se ver cmo sobrecargar los operadores unarios, es decir aquellos
que toman un solo operando, como por ejemplo a++. El prototipo de los mtodos que
van a sobrecargar operadores unarios ser:
public static Operando operator++(Operando a)
Como antes sustituyendo el ++ por cualquier operador unario. El ejemplo dentro de
nuestra clase de nmeros complejos sera:
public static ComplexNum operator++(ComplexNum a)
{
float auximg = a.Img;
float auxreal = a.Real;
return new ComplexNum(++auxreal, ++auximg);
}
Operadores binarios
Para empezar vamos a sobrecargar el operador suma('+') para que al sumar dos
objetos de la clase ComplexNum, es decir dos nmeros complejos obtengamos un
nmero complejo que ser la suma de ambas partes. Cabe destacar que los
prototipos para sobrecargar operadores sern:
public static Operando operator+(Operando a, Operando b)
Este es el prototipo para el operador +, el resto de operadores binarios van a seguir el
mismo patrn. Por tanto el cdigo del mtodo de sobrecarga ser el siguiente:
public static ComplexNum operator+(ComplexNum a, ComplexNum b)
{
return new ComplexNum(a.Real + b.Real, a.Img + b.Img);
}

Este mtodo sobrecarga el operador suma para que podamos sumar dos nmeros
complejos. Un dato a tener en cuenta es que los mtodos que sobrecargan
operadores deben ser static. Como se ve en el cdigo los operandos son 'a' y 'b', que
se reciben como parmetro y el resultado de la operacin es otro nmero complejo
que es el que retorna el mtodo. Por tanto se limita a crear un nuevo nmero complejo
con ambas partes operadas. De la misma forma podemos crear la sobrecarga del
operador resta('-') para que lleve a cabo la misma funcin:
public static ComplexNum operator-(ComplexNum a, ComplexNum b)
{
return new ComplexNum(a.Real - b.Real, a.Img - b.Img);
}
Como vemos el mtodo es idntico solo que sustituyendo los + por -. En este caso el
trabajo que hacemos dentro del mtodo es trivial pero podra ser tan complejo como
se quisiera.