Está en la página 1de 12

UNIVERSIDAD NACIONAL PEDRO RUIZ GALLO

FACULTAD DE INGENIERIA CIVIL DE SISTEMAS Y


ARQUITECTURA

PRIMER TRABAJO DE LENGUAJE DE


PROGRAMACIN
ALUMNO:
SAMILLN FLORES ALEXIS SMITH.

DOCENTE:
OLOVARRA PAZ JESUS.

ESCUELA:
INGENIERA DE SISTEMAS

CURSO:
LENGUAJE DE PROGRAMACIN

2016

Variables de Instancia
En programacin orientada a objetos, una variable de instancia o miembro de dato
es una variable que se relaciona con una nica instancia de una clase.
Cuando se declara el atributo o variable miembro euros en la clase Precio de la
siguiente
forma:
public class Precio {
// Declaracin de atributos o variables miembro
public double euros;
// Declaracin de mtodos . . .
}
Se est declarando el atributo euros como una variable de instancia. En
consecuencia, cada vez que se crea una instancia de la clase Precio, se reserva
espacio en memoria para una variable de instancia euros. Por ejemplo, el cdigo:
// Creacin de dos instancias de la clase precio
Precio p = new Precio();
p.pone(56.8);
Precio q = new Precio();
q.pone(75.6);
Genera dos instancias de la clase Precio. En este caso, cada una de las dos
instancias, p y q, de la clase Precio tiene una variable de instancia euros propia.
Las respectivas llamadas al mtodo pone para cada instancia (p.pone(56.8) y
q.pone(75.6)), permiten asignar un valor a las variables de instancia correspondientes.

Figura 12.1. Representacin grfica del espacio de la memoria utilizado por cada instancia de la
clase
Precio
Otro ejemplo. En la declaracin de la clase Fecha se incluyen tres atributos (da,
mes y ao) que son variables de instancia:
public class Fecha {
// Declaracin de atributos o variables miembro private int dia;
private int mes; private int anho;
// Declaracin de mtodos. . .
}

Con el siguiente cdigo se crean dos instancias de la clase Fecha:


// Creacin de dos instancias de la clase Fecha
Fecha a = new Fecha();
Fecha b = new Fecha();
Cada una de las instancias de la clase Fecha reserva espacio en memoria para cada
una de las variables de instancia.

Representacin grfica del espacio de la memoria utilizado por cada instancia de la


clase Fecha
Las variables de instancia pueden declararse como public o como private y pueden
pertenecer a cualquiera de los tipos de datos primitivos de Java o bien, a otra clase
existente en Java o declarada por el usuario. En principio, la nica limitacin para el
nmero de variables de instancia que puede declarar una clase es el espacio libre
disponible en la memoria del sistema que ejecute el programa.

Mtodos de Instancia
Los mtodos de instancia operan sobre las variables de instancia de los objetos pero
tambin tienen acceso a las variables de clase. La sintaxis de llamada a un mtodo de
instancia es:
idReferencia.idMetodo(parmetros); // Llamada tpica a un mtodo de instancia
Todas las instancias de una clase comparten la misma implementacin para un
mtodo de instancia. La instancia que hace la llamada al mtodo es siempre un
parmetro o argumento implcito. Dentro de un mtodo de instancia, el
identificador de una variable de instancia hace referencia al atributo de la instancia
concreta que hace la llamada al mtodo (suponiendo que el identificador del
atributo no ha sido ocultado por el de un parmetro).
En el ejemplo anterior en la declaracin de la clase CuentaBancaria, los mtodos
saldo y transferencia ,
son mtodos de instancia.

public double saldo() { return saldo;


}
public void transferencia( CuentaBancaria origen ) { saldo +=
origen.saldo;
origen.saldo=0;
}
Ejemplos de llamada a estos mtodos dentro de PruebaCuentaBancaria:
CuentaBancaria c1 = new CuentaBancaria();
CuentaBancaria c2 = new CuentaBancaria(20.0); c1.transferencia(c2);
System.out.println("Cuenta con: " + c1.saldo() + " euros"

Variables de Clase
Las variables de clase son variables cuyos valores son los mismos para la clase y
para todas sus instancias.
Las variables de clase son atributos diferentes de las variables de instancia. Las
variables de clase implican una sola zona de memoria reservada para todas las
instancias de la clase, y no una copia por objeto, como sucede con las variables
de instancia. Para diferenciarlas de stas en el cdigo fuente de Java, las
variables de clase se distinguen con el modificador static en la declaracin del
atributo correspondiente. Por defecto (si no se indica la palabra static), el atributo
declarado se considera variable de instancia.
Durante la ejecucin del programa, el sistema reserva un nico espacio en memoria
para cada variable estticas o de clase independientemente del nmero de instancias
creadas de una clase. Esta reserva se produce la primera vez que encuentra dicha
clase en el cdigo, de forma que todas las instancias pertenecientes a una clase
comparten la misma variable de clase. A diferencias de las variables globales fuera
de la POO, las variables de clase garantizan la encapsulacin.
Las variables de clase sirven para almacenar caractersticas comunes (constantes) a
todos los objetos (nmero de ruedas de una bicicleta) o para almacenar
caractersticas que dependen de todos los objetos (nmero total de billetes de
lotera). Por ejemplo, la clase CuentaBancaria tiene una variable de instancia, saldo, y
una variable de clase, totalCuentas.
public class CuentaBancaria {
// Atributos o variables miembro
public double saldo;
public static int totalCuentas=0;
// Declaraciones de metodos
...
}

//Variable de instancia
// Variable de clase

La creacin de varias instancias de la clase CuentaBancaria no conlleva la existencia


de varias variables totalCuentas. Durante la ejecucin de un programa que utilice la
clase CuentaBancaria slo existir una variable de clase totalCuentas,
independientemente del nmero de instancias de la clase CuentaBancaria que se
generen (Figura 12.3). Es ms, no es necesario siquiera que exista una instancia de
la clase, para que lo haga la variable de clase. De hecho, se inicializan a false,
cero o null (dependiendo de su tipo) antes de que se genere una instancia de la
clase.
// Creacion de dos instancias de la clase CuentaBancaria
CuentaBancaria c1 = new CuentaBancaria();
CuentaBancaria c2 = new CuentaBancaria();

Figura 12.3. Representacin grfica del espacio de la memoria utilizado por la variable
de clase
totalCuentas y por cada instancia de la clase CuentaBancaria
Las variables de clase se emplean cuando slo es necesaria una copia por clase que,
adems, est accesible por todas las instancias de la clase a la que pertenece. En
este caso, al ser un atributo public y static, puede accederse directamente a la
variable de clase (totalCuentas) a travs de una instancia (c1 o c2) o de la clase
en s (CuentaBancaria). Un atributo esttico puede ser accedido desde cualquier
instancia de la clase, ya que es miembro de la propia clase.
public class PruebaCuentaBancaria {
public static void main (String [] args) {
CuentaBancaria c1 = new CuentaBancaria();
c1.totalCuentas++;
System.out.println("Total cuentas: " + c1.totalCuentas);
CuentaBancaria c2 = new CuentaBancaria();
c2.totalCuentas++;
System.out.println("Total cuentas: " + c2.totalCuentas);
// Acceso a traves de la clase:
CuentaBancaria.totalCuentas++;
System.out.println("Total cuentas: " +
CuentaBancaria.totalCuentas);
// Resto de sentencias . . .
}
}
La ejecucin del cdigo anterior origina la siguiente salida por pantalla:
$>java PruebaCuentaBancaria
Total cuentas: 1
Total cuentas: 2
Total cuentas: 3

Para operar con variables de clase tambin podemos implementar mtodos en la


clase. Por ejemplo el siguiente mtodo inctotalCuentas incrementa en una unidad el
valor de la variable de clase totalCuentas.
public static void inctotalCuentas() {
totalCuentas++;
}
Al ser declarado el mtodo inctotalCuentas como un mtodo public y static, puede
llamarse mediante cualquiera de las instancias (c1 o c2) o de la clase en s
(CuentaBancaria).
Las variables de clase pueden declararse como public o como private y pueden
pertenecer a cualquiera de los tipos de datos primitivos de Java o bien, a otra clase
existente en Java o declarada por el usuario. En principio, la nica limitacin para el
nmero de variables de clase que puede declarar una clase es el espacio libre
disponible por el sistema que ejecute el programa.

Mtodos de Clase
En principio, los mtodos de clase no operan sobre las variables de instancia de los
objetos. Los mtodos de clase pueden trabajar con las variables de clase pero
no pueden acceder a las variables de instancia declaradas dentro de la clase, a no
ser que se crea una nueva instancia y se acceda a las variables de instancia a
travs del nuevo objeto. Los mtodos de clase tambin pueden ser llamados
precedindolos con el identificador de la clase, sin necesidad de utilizar el de una
instancia.
IdClase.idMetodo(parametros);

// Llamada tipica a un metodo de clase

La palabra static
determina la declaracin de un mtodo de clase. Por defecto,
si no se indica la palabra static, el mtodo declarado se considera un mtodo de
instancia.
En el ejemplo anterior en la declaracin de la clase CuentaBancaria, el
mtodo incCuentas es un mtodo de clase.
public static void incCuentas () { totalCuentas++;
}
Un ejemplo de llamada a este mtodo dentro de PruebaCuentaBancaria sera:
CuentaBancaria.incCuentas();
Las diferencias entre los mtodos de instancia y los de clase se resumen en la Tabla

Tabla: Diferencias entre los mtodos de instancia y los mtodos de clase


Mtodos...
... de
instancia
... de clase

Modificador
en la
declaracin
-(por defecto)
static

Sintaxis de llamada

Operan normalmente...

instancia.metodo(parametros)

Sobre variables de
instancia
Sobre variables de
clase o sobre otros
datos

Clase.metodo(parametros)

Los mtodos de clase o estticos se pueden considerar equivalentes a las rutinas


(globales) de otros lenguajes de programacin como Pascal o C. Como ejemplos
tpicos de mtodos estticos pueden indicarse los mtodos de Java correspondientes
a las funciones matemticas sin, cos, exp, pow... de la clase java.lang.Math (Tabla).
Las llamadas a estos mtodos se realizan anteponiendo el identificador de la clase
Math al identificador del mtodo: Math.sin(angulo)

Tabla 14.2. Mtodos estticos de la clase Math


Modificado
static
double
static float
static int
static long
static
double
static
double
static
double
static
double
static
double
static
double
static
double
static
double
static
double
static
double
static
double
static float
static int
static long
static
double
static float
static int
static long
static
double
static
double
static
double
static long
static int
static
double
static
double
static
double
static
double
static
double

Identificador y
abs(double a)
abs(float a)
abs(int a)
abs(long a)
acos(double a)
asin(double a)
atan(double a)
atan2(double a, double
b)
ceil(double a)
cos(double a)
exp(double a)
floor(double a)
IEEEremainder(double
f1, double f2)
log(double a)
max(double a, double b)
max(float a, float b)
max(int a, int b)
max(long a, long b)
min(double a, double b)
min(float a, float b)
min(int a, int b)
min(long a, long b)
pow(double a, double b)
random()
rint(double a)
round(double a)
round(float a)
sin(double a)
sqrt(double a)
tan(double a)
toDegrees(double
angulo)
toRadians(double
angulo)

Funcin
Devuelve el valor absoluto de un dato de tipo
double.
Devuelve el valor absoluto de un dato de tipo
float.
Devuelve el valor absoluto de un dato de tipo
int.
Devuelve el valor absoluto de un dato de tipo
long.
Devuelve el valor del arco coseno de un
ngulo
entre
0 y .
Devuelve
el valor
del arco seno de un ngulo
entre
/2
y
/2.
Devuelve el arco tangente de un ngulo
entre
/2
/2 en polares
Devuelve
el y ngulo
correspondientes a las coordenadas
rectangulares.
Devuelve
el menor entero (en formato
double) que no es menor que el parmetro.
Devuelve el coseno de un ngulo
Devuelve el valor de la funcin exponencial
Devuelve
el mayor entero (en formato
(ea)
double) que no es mayor que el parmetro.
Devuelve el resto (en formato double) de la
divisin entre los dos parmetros segn la
especificacin
IEEE 754
Devuelve
el logaritmo
neperiano de un valor.
Devuelve el mayor de dos valores de tipo
double.
Devuelve el mayor de dos valores de tipo float.
Devuelve el mayor de dos valores de tipo int.
Devuelve el mayor de dos valores de tipo long.
Devuelve el menor de dos valores de tipo
double.
Devuelve el menor de dos valores de tipo float.
Devuelve el menor de dos valores de tipo int.
Devuelve el menor de dos valores de tipo long.
Devuelve el valor del primer parmetro elevado
al
segundo
Devuelve
un valor aleatorio de tipo double
mayor o igual que cero y menor que 1.
Devuelve el valor entero (en formato double)
ms
cercano.
Devuelve
el valor entero (long) ms cercano al
parmetro.
Devuelve el valor entero (int) ms cercano al
parmetro.
Devuelve el seno de un ngulo
Devuelve la raiz cuadrada positiva del
parmetro
Devuelve ladouble.
tangente de un ngulo
Devuelve el resultado de la conversin de un
ngulo dado en radianes a grados
Devuelve la conversin de un ngulo dado en
grados a radianes

Pasar arreglos a mtodos


Se pueden pasar a un mtodo parmetros del tipo array. Por ejemplo, aqu se
pasa un array de enteros llamado lista:
public void mtodo (int[] lista) {}
Para que lo entendis, que mejor que utilizar un ejemplo.
Vamos a crear una clase Persona, esta clase tendr dos atributos privados, que
sern la edad y el nombre de la misma. Al constructor se le pasar el nombre de
la persona y la edad. Tendr otros dos mtodos ms, uno que retornar la edad
de la persona y otro que retornar su nombre.
Una vez programada la clase, quedar as:

Una vez implementada esta clase, implementaremos la clase ListaPersona,


contendr un mtodo esttico que buscar la edad mayor de las persona que
contiene la lista. Tambin crearemos un mtodo main que crear un array de
personas y llamara al mtodo esttico que tenemos. As quedara implementada
la clase.

Devolver arreglos desde mtodos


Se pueden devolver arrays desde mtodos igual que se pueden devolver
objetos y tipos de datos sencillos. Veamos un ejemplo en el que se crea una
clase llamada ArrayFActory con un mtodo llamado getNewArray. Cuando se
llama a getNewArray, ste devolver un array de enteros. Observe que el tipo
de retorno que se especifica en la declaracin degetNewArray es int[], lo que
indica que es un array de enteros. Este es el cdigo:
class ArrayFactory
(
public int 11 getNewArray ( )
(
int array[l = 11, 2, 3, 4, 5);
return array;
As funcionara la clase ArrayFactory, creando un nuevo array y
visualizndolo:
public class app
{
public static void main(String[] args)
{
ArrayFactory af = new ArrayFactory();
int array[l = af.getNewArray();
for (int loop-index = 0; loop-index < array.length;
loop-index++)
{ System.out.println("array[" + loop-index + "1 = " + array [loopindex] ) ;

Este es el resultado del cdigo:


C:\>java app
array[O] = 1
array[ll = 2
array[2] = 3
array[31 = 4
array [4] = 5

Pasar objetos a mtodos


El programador novato aparece y dice, "Otra vez Java est en plan gracioso.
Pas un objeto a un mtodo porque quera hacer una prueba de destruccin en
ese mtodo, pero al devolver el control, el objeto original estaba destruido.
Qu ha ocurrido?" "Java pasa objetos por referencia, " le contesta. "Eso es lo
que ha ocurrido".
Cuando se pasa un elemento de un tipo de dato sencillo a un mtodo, Java
pasa una copia de los datos, que se llama paso por valor. Dado que el mtodo
slo obtiene una copia del elemento de los datos, el cdigo del mtodo no
puede afectar al elemento del dato original.
Este es un ejemplo en el que se pasa un objeto de la clase printer para
visualizar los datos del objeto:
class Data
{

public String data-string;


~ata(String data) data-string = data;
{
{
class printer
(
public void print (Data d)
f
~ystem.out.println(d.data~string);
1 1 public class app
(
public static void main(String[l args)
I
Data data = new Data("1Hola desde Javal");
printer p = new printero;
Este es el resultado del cdigo:
C:\>java app
Hola desde Java!

Como se mencion anteriormente, dado que los objetos se pasan referencia, el


objeto pasado cambia el objeto original. Aqu tenemos un ejemplo en el que se
pasa el objeto de la clase Data a un mtodo llamado rewrite que cambia la
variable de instancia data-string del objeto; esta variable empieza con la
cadena "Ho1a desde Java!", pero el mtodo rewrite es capaz de cambiar la
cadena a "i Hola a Java!" en este cdigo:
class Data
(
public String data-string;
Data (String S)
(
data-string = new String(s) ;
{
{
class Class
{
public void rewrite(Data d)
{
d.data-string = "iHola a Javal");
{
{
public class app

{
public static void main(String[l args)
Data d = new Data(niRola desde Java!");
Class c = new Class 0;

Este es el resultado del cdigo:


C:\>java app
Hola a Java!

Devolver objeto desde mtodos


Se pueden devolver objetos desde mtodos, igual que ocurre con otros tipos de
datos. Sin embargo, surge una pregunta: cuando el mtodo que 7 devolvi el
objeto se queda fuera del alcance, el objeto que l devolvi tambin se queda
fuera del alcance? 7 La respuesta es no. Cuando se crea un nuevo objeto
usando el operador new, ese objeto no es destruido cuando el mtodo que lo
cre queda fuera del alcance, y el objeto, por s mismo, no est a disposicin
del recolector de basura hasta que no haya ms referencias a l.
En el ejemplo siguiente, la clase llamada ObjectFactory tiene un mtodo
llamado getNewObject que devuelve un objeto de la clase CreatedClass:
class ObjectFactory
{
public CreatedClass getNewObject0
I return new CreatedClassO;
{
1
class CreatedClass
{
public String tag = "Esta es la etiqueta de datos.";
{
public class app
public static void main(String[] args)
{
ObjectFactory o = new ObjectFactoryO;
CreatedClass c = o.getNewObject0;
{
{

Cuando se llama al mtodo getNewObject, ste devuelve un nuevo objeto de la


clase CreatedClass y puede visualizar los datos de ese objeto. Esto es lo que
muestra el programa al ejecutarlo:
C:\>java app
Esta es la etiqueta de datos

Bibliografa:
Java 2. La Biblia. Steven Holzner. Ediciones Anaya Multimedia
(Grupo Anaya, S.A), 2000.
Piensa en Java. Bruce Eckel. Pearson Educacin, S.A., Madrid,
2002.
Introduccin a la programacin orientada a objetos con Java. C.
Thomas Wu. McGraw-Hill/ Interamericana de Espaa, S.A.U.,
2001.

También podría gustarte