Sie sind auf Seite 1von 43

Universidad Nacional de Ingeniera

Facultad de Ingeniera Elctrica y Electrnica


Centro de Estudiantes
Java Nivel I
Sesin No.3:
Introduccin a la Programacin
Orientada a Objetos
Miguel Ataurima Arellano
mataurimaa@uni.pe
Qu es un paradigma de programacin?
Paradigma es un modelo o patrn en cualquier disciplina cientfica u otro contexto
epistemolgico.
Un paradigma de programacin es un estilo fundamental de la programacin de
computadoras.
Los paradigmas difieren en los conceptos y abstracciones usados para representar los
elementos de un programa (tales como funciones, variables, constantes, objetos, etc.) y
los pasos que constituyen un clculo (asignacin, evaluacin, flujo de datos, etc.).
Los principales paradigmas de programacin son:
Programacin Imperativa
Programacin Funcional
Programacin Procedimetal
Programacin Controlada por eventos
Programacin Orientada a Objetos
Programacin Declarativa
Programacin Basada en Autmatas
Un lenguaje de programacin puede soportar mltiples paradigmas (Object
Pascal, C++, C#, Visual Basic, Common Lisp, Scheme, Perl, Python, Ruby, Oz y
F#)
Expositor: Miguel Ataurima Arellano 2
Expositor: Miguel Ataurima Arellano 3
PARADIGMA DESCRIPCIN CARACTERSTICAS
PARADIGMAS
RELACIONADOS
Imperativo
Clculos en trminos de sentencias que son
directamente modificadas por el estado de
un programa
Asignaciones directas, Estrucutras de
datos comunes, variables Globales
Estructurado
Es un estilo de programacin imperativa,
con una mayor estructura lgica a los
programas
Estructogramas, Estilo con Sangrado,
ausencia de sentencias GOTO.
Imperativo
Funcional
Trata los clculos como la evaluacin de
funciones matemticas evitando los estados
y mutaciones de datos.
Clculo Lambda, Composicionalidad,
Frmula, Transparencia Referencial.
Procedimental
Derivado de la programacin estructurada
Basado en el concepto de la programacin
modular o de la llamada procedimental
Variables locales, secuencias,
seleccin, iteracin y modularizacin.
Estructurado,
Imperativo
Controlado por
eventos
Los flujos de programacin estan
fundamentalmente controlados por eventos
(tales como clic con el mouse o
interrupciones)
Bucle principal, controladores de
eventos, procesos asncronos.
Procedimental
Orientado a
Objetos
Trata a los campos (datos) como objetos
manipulados solo mediante mtodos pre
definidos.
Objetos, mtodos, paso de mensajes,
ocultamiento de informacin,
abstraccin de datos, encapsulamiento,
polimorfismo, herencia y Serializacin.
Declarativo
Expresan la lgica del clculo sin describir
su flujo de datos en detalle
4GLs, Hojas de Clculo, Generadores
de reporte de programacin
Basado en
Autmatas
El programa es pensado como un modelo
de mquina de estados finito o de cualquier
otro automata formal.
Numeracin del estado, variable de
control, cambios en el estado,
isomorfismo, tabla de transicin de
estados.
Imperativo,
orientado a
eventos
Los Lenguajes de Programacin por Generaciones
Primera Generacin (1GL)
Cdigo mquina
Segunda Generacin (2GL)
Lenguajes ensambladores
Tercera Generacin (3GL)
Agregan caractersticas que favorecen al programador (pero no a la mquina), tales como el concepto
de agregacin de tipos de dato y las expresiones. La mayora de ellos soportan la programacin
estructurada.
Lor primeros (1950s): Fortran, ALGOL y COBOL
Los mas actuales y populares: C, C++, C#, Java y Delphi
Cuarta Generacin (4GL)
Conformado por lenguajes de programacin diseados con un propsito especfico
Expositor: Miguel Ataurima Arellano 4
Cdigo Mquina
2GL
3GL
4GL
Orientado a
Mquina
Orientado a
Humanos
Definicin del
Problema
Expositor: Miguel Ataurima Arellano 5
PROPSITO LENGUAJES
Uso General / Verstiles Agile Business Suite, CA Gen (aka IEF-Information Engineering Facility,
Composicionador, Cool:Gen, Advantage:Gen, and AllFusion:Gen), Clipper, Cucumber,
Cognos PowerHouse 4GL, DataFlex, Discovery Machine Modeler, Fort TOOL
(transactional object-oriented language), FoxPro, IBM Rational EGL (Enterprise
Generation Language), Lycia Querix 4GL, Omnis Studio SDK, Panther, PowerBuilder,
SheerPower4GL (solo Microsoft Windows), SQLWindows/Team Developer, Up ! 5GL,
Uniface, Visual DataFlex (solo Microsoft Windows), WinDev, XBase++
Lenguajes de Consulta de Bases de
Dato
FOCUS, Genero, Informix-4GL, Lycia Querix 4GL, NATURAL, Progress 4GL, Ingres
4GL, SQL
Generadores de Rerporte BuildProfessional, GEMBase, IDL-PV/WAVE, LINC, NATURAL, Oracle Reports,
Progress 4GL Query/Results, Quest, Report Builder, RPG-II
Lenguajes de manipulacin -
anlisis de datos y de generacin de
reportes
Ab Initio, ABAP, Aubit-4GL, Audit Command Language, Clarion Programming
Language, CorVision, Culprit, ADS/Online (plus transaction processing), DASL,
Easytrieve, FOCUS, GraphTalk, IDL, IGOR Pro, Informix-4GL, LANSA, LabVIEW,
MAPPER (Unisys/Sperry) ahora parte de BIS, MARK-IV (Sterling/Informatics) now
VISION:BUILDER of CA, Mathematica, MATLAB, NATURAL, Nomad, PL/SQL,
Progress 4GL, PROIV, Lycia Hermes Querix 4GL, R, Ramis, S, Scilab, SAS, SPSS,
Stata, Synon, XBase++, SQR, Xquery Backward.
Languajes basados en flujos de dato APE, AVS, Iris Explorer
Desarrollo de aplicaciones Gui
controladas por bases de datos
Action Request System, Genexus, SB+/SystemBuilder, Progress Dynamics, UNIFACE
Painters y Generadores de pantalla FOURGEN CASE Tools, SB+/SystemBuilder, Oracle Forms, Progress 4GL ProVision,
Unify Accell
Creadores de GUI 4th Dimension (Software), eDeveloper, MATLAB's GUIDE, Omnis Studio, OpenROAD,
Progress 4GL AppBuilder, Revolution programming language, Sculptor 4GL, XUL
Optimizacin Matemtica AIMMS, AMPL, GAMS
Lenguaje de Desarrollo Web ColdFusion, Wavemaker, Spring, Hibernate, OutSystems
Quinta Generacin (5GL)
Nacen en los 90s
Son lenguajes de programacin que usa las restricciones proporcionadas por el mismo programa de
manera que la computadora pueda resolver un problema sin el programador; de esta manera, el
programador solo se remite a especificar el problema por resolver (restricciones) sin preocuparse en
el como implementar una rutina o algn algoritmo para resolverlo.
Hacen uso de las principales investigaciones en inteligencia artificial
Entre ellos podemos mencionar: Prolog, OPS5 y Mercury
Expositor: Miguel Ataurima Arellano 6
La Programacin Orientada a Objetos en Java
La Programacin Orientada a Objetos en Java
Java posee como paradigmas de programacin a la programacin orientada a objetos, la
programacin estructurada y la programacin imperativa.











Expositor: Miguel Ataurima Arellano 7
PARADIGMA DESCRIPCIN CARACTERSTICAS
Imperativo
Clculos en trminos de sentencias
que son directamente modificadas por
el estado de un programa
Asignaciones directas, Estrucutras de
datos comunes, variables globales.
Estructurado
Es un estilo de programacin
imperativa, con una mayor estructura
lgica a los programas
Estructogramas, Estilo con Sangrado,
ausencia de sentencias GOTO.
Orientado a
Objetos
Trata a los campos (datos) como
objetos manipulados solo mediante
mtodos pre definidos.
Objetos, mtodos, paso de mensajes,
ocultamiento de informacin,
abstraccin de datos, encapsulamiento,
polimorfismo, herencia y Serializacin.
Java es considerado un lenguaje orientado a objetos en la medida que brinda soporte en
las siguientes cuatro caractersticas:
Encapsulamiento
Permite implementar especificaciones de acceso y modularidad de la informacin (abstraccin).
Polimorfismo
Un mismo mensaje enviado a diferentes objetos tiene diferente resultado en su comportamiento, el cual depende
de la naturaleza del objeto receptor.
Herencia
Permite la organizacin y reutilizacin de cdigo definiendo nuevas clases y comportamientos basndose en
clases ya existentes.
Vinculacin Dinmica
Permite una mxima flexibilidad durane la ejecucin de un programa, en la medida que podemos enviar
mensajes a objetos (dispuestos en cualquier parte, incluso a tras de una red) sin tener pleno conocimiento de
sus tipos durante el tiempo de codificacin.

Expositor: Miguel Ataurima Arellano 8
Objetos
Objetos
La tecnologa objeto es una coleccin de metodologas de anlisis, diseo y
programacin que se enfoca en el diseo basado en el modelamiento de caractersticas y
comportamiento de objetos del mundo real.
Los objetos son modelos de programacin software
EJEMPLOS: Botones de una GUI, hojas de clculo, las celdas de una hoja de clculo, una lista de
propiedades, los menus, etc.
Los objetos estn definidos por un estado y un comportamiento.
EJEMPLO:
Mundo real: Un auto
Mundo software: modelamiento de un auto como un objeto
Estado: velocidad a la que va, en cual direccin, su nivel de consumo de combustible, etc.
Comportamiento: arranque, parada, etc.
Mundo real: Un portafolio de activos
Mundo software: modelamiento del activo como un objeto
Estado: precio de apertura, precio de cierre, etc.
Comportamiento: cambios de valor, posee dividendos, etc.
Mundo real: Un maquina de caf expreso
Mundo software: modelamiento de la maquina de caf expreso mediante un objeto
Estado: temperatura del agua, cantidad de caf disponible
Comportamiento: emite vapor, hace ruido, etc.

Expositor: Miguel Ataurima Arellano 9
Los objetos poseen mtodos y variables de instancia.
El comportamiento de los objetos se definen mediante sus mtodos.
Los mtodos de un objeto:
Manipulan las variables de instancia para cerar un nuevo estado
Pueden crear nuevos objetos.
Las varibles de instancia (datos) son encapsulados, dentro del objeto, stas son
rodeadas por los mtodos del objeto
Expositor: Miguel Ataurima Arellano 10
Mtodo
Mtodo
M

t
o
d
o
M

t
o
d
o

Variables
de Instancia
Clases y Objetos
Clases
Es una construccin software que define los datos (estado) y los mtodos
(comportamiento) de los objetos concretos especficos que son subsecuentemente
construidos por medio de dicha clase.
En terminologa Java, los miembros de una clase puede ser
Campos (variables de instancia), que representan los datos para la clase.
Mtodos (mtodos de instancia), que son las secuencias de sentencias que operan sobre los
datos.
El objeto es creado o instanciado a partir de las especificaciones declaradas por la clase.
EJEMPLO: Declaracin de la clase Punto

class Punto extends Object {
public double x; // variable de instancia
public double y; // variable de instancia
}
Expositor: Miguel Ataurima Arellano 11
Instanciamiento de un objeto a partir de su clase.
Consiste en la creacin de un objeto a partir de una clase.
Para crear un objeto a partir de una clase se siguen dos pasos:

1. Declaracin de una variable que haga referencia al objeto del tipo especificado por su clase

Punto miPunto; // declaracin de la variable miPunto que referencia a un objeto Punto

2. Asignacin de una instancia de un objeto del tipo especificado por su clase

miPunto = new Punto(); // asigna una instancia al objeto Punto

El acceso a las variables del objeto se logra referenciando los nombres de las variables
precedidos por el nombre del objeto.

miPunto.x = 10.0
miPunto.y = 27.47

Expositor: Miguel Ataurima Arellano 12
Universidad Nacional de Ingeniera
Facultad de Ingeniera Elctrica y Electrnica
Centro de Estudiantes
Clases
Expositor: Miguel Ataurima Arellano 13
Expositor: Miguel Ataurima Arellano 14
Forma General Bsica de una Clase
class classname {

tipo variable1;
tipo variable2;
:
tipo variableN;


tipo nombreMtodo1(lista de parmetros) {
// cuerpo del mtodo
}

tipo nombreMtodo2(lista de parmetros) {
// cuerpo del mtodo
}

:

tipo nombreMtodoN(lista de parmetros) {
// cuerpo del mtodo
}

}

Los datos o variables declarados
dentro de una clase se denominan
variables instancia o campos
Los mtodos tienen la
misma forma general
que la funcin main( )
Expositor: Miguel Ataurima Arellano 15
Las Variables definidas dentro de una clase son llamadas variables instancia
porque cada instancia de una clase (esto es, cada objeto de la clase) contiene su
propia copia de estas variables.
Ambos, el dato para un objeto es separado y nico de los datos de otro.
Todos los mtodos tienen la misma forma general como main( ).
La mayora de los mtodos no se especifican como static o public.
Las clases de Java no necesitan tener un mtodo main( ). Solo debe especificarse
cual de las clases es el punto de inicio para el programa. Es esta la razn por la
que los applets no requieren un mtodo main( ).

Expositor: Miguel Ataurima Arellano 16
EJEMPLO. Una simple clase llamada Box que define tres variables instancia :
width, height y depth. Box no contiene ningn mtodo.

class Box {
double width;
double height;
double depth;
}

En este caso se define el nuevo tipo de dato Box, el cual podr ser usado para
declarar objetos del tipo Box.

Box mybox = new Box(); // crea un objeto Box llamado mybox

Expositor: Miguel Ataurima Arellano 17
Cada objeto Box contendr sus propias copias de las variables instancia width,
height y depth.
Para acceder a estas variables, se utiliza el operador punto (.).
El operador punto enlaza el nombre del objeto con el nombre de una variable
instancia.

mybox.width = 100;


Expositor: Miguel Ataurima Arellano 18
EJEMPLO: Programa que hace uso de la clase Box

01. class Box {
02. double width;
03. double height;
04. double depth;
05. }
06. // Esta clase declara un objeto del tipo Box.
07. class BoxDemo {
08. public static void main(String args[]) {
09. Box mybox = new Box();
10. double vol;
11. // asigna valores a las variables instancia de mybox
12. mybox.width = 10;
13. mybox.height = 20;
14. mybox.depth = 15;
15. // calcula el volumen de box
16. vol = mybox.width * mybox.height * mybox.depth;
17. System.out.println("El Volumen es " + vol);
18. }
19. }

BoxDemo.java
Expositor: Miguel Ataurima Arellano 19
NOTAS:
El archivo que contenga este programa deber llamarse BoxDemo.java, porque el
mtodo main( ) se encuentra en la clase llamada BoxDemo, mas no en la clase Box.
Al compilar este programa ese crearn dos archivos .class
Box.class (para la clase Box)
BoxDemo.class. (para la clase BoxDemo)
El compilador Java coloca automticamente cada clase en su propio archivo .class.
Sin embargo, no es necesario que las clases Box y BoxDemo estn en el mismo cdigo
fuente. Se puede colocar cada clase en su propia archivo, llamados Box.java y
BoxDemo.java, respectivamente.
Al ejecutar este programa se ejecutara BoxDemo.class. Y se obtendr la siguiente
salida:

El Volumen es 3000.0

Expositor: Miguel Ataurima Arellano 20
EJEMPLO: BoxDemo2.java

...
mybox1.width = 10;
mybox1.height = 20;
mybox1.depth = 15;
...
mybox2.width = 3;
mybox2.height = 6;
mybox2.depth = 9;
...

Observaciones
Los cambios a las variables instancia de un objeto no afectan al de las otras variables
instancia de otro.
Los datos de mybox1s data estn completamente separados de los datos contenidos en
mybox2.


Expositor: Miguel Ataurima Arellano 21
Declaracin de Objetos
Definir un objeto de una clase es un proceso de dos pasos:
Primero, se debe declarar una variable del tipo clase. Esta variable no define un objeto,
solo es una simple referencia a un objeto
Segundo, se debe adquirir un actual, copia fsica del objeto y asignrselo a la variable,
para esto se usa el operador new. new reserva espacio en memoria en forma dinmica
(esto es, en tiempo de ejecucin) para un objeto y retorna una referencia a l. sta
referencia es mas o menos, la direccin en memoria del objeto asignado por new

Sentencia Efecto
Box mybox;
mybox = new Box();
objeto del tipo Box
Primero
Segundo
// Declara un objeto del tipo Box
// Destina un objeto Box
Expositor: Miguel Ataurima Arellano 22
La Forma General de reserva dinmica de memoria para un objeto

class-var = new classname( );

donde
class-var es una variable del tipo class que est siendo creada.
classname es el nombre de la clase que est siendo instanciada.
El nombre de la clase seguido de los parntesis especifican el constructor para la clase.
Un constructor define que ocurre cuando un objeto de una clase es creado.

Expositor: Miguel Ataurima Arellano 23
Asignando variables que referencian objetos
Las siguientes sentencias

Box b1 = new Box();
Box b2 = b1;

hacen que b2 referencie al mismo objeto que b1
objeto del tipo Box
Expositor: Miguel Ataurima Arellano 24
Sin embargo, estas sentencias

Box b1 = new Box();
Box b2 = b1;
// ...
b1 = null;

Hacen que b1 se establezca en null, pero b2 sigue apuntando al objeto original
Expositor: Miguel Ataurima Arellano 25
Mtodos
Forma General

tipo nombre(lista de parmetros) {
// cuerpo del mtodo
}

donde

type especifica el tipo de dato retornado por el mtodo. ste puede ser cualquier tipo de
dato vlido incluyendo tipos clase personalizados. Si el mtodo no retorno un valor, su
valor de retorno deber ser void.
nombre, es el nombre del mtodo. ste puede cualquier identificador que no ste siendo
usado por otros items dentro del actual alcance.
lista de parmetros, es una secuencia de pares tipo-identificador separados por comas.
Los parmetros son esencialmente variables que reciben el valor de los argumentos
pasados al mtodos cuando estos son llamados. Si el mtodo no tiene parmetros,
entonces la lista de parmetros estar vaca..

Expositor: Miguel Ataurima Arellano 26
Los mtodos que tienen un tipo de retorno diferente a void, deben retornar un
valor a la rutina de llamada usando la siguiente forma de la sentencia return:

return valor;

aqu, valor es el valor retornado.

Los mtodos definen la interfaz de una clase, pues comnmente son utilizados
para acceder a las variables instancia definidas en la clase
Expositor: Miguel Ataurima Arellano 27
EJEMPLO: Aada un mtodo que no retorne algn valor, a la clase Box (BoxDemo3.java)

class Box {
double width;
double height;
double depth;

// mtodo que muestra el volumen de una caja (Box)
void volume() {
System.out.print("El volumen es ");
System.out.println(width * height * depth);
}
}

class BoxDemo3 {
public static void main(String args[]) {
Box mybox1 = new Box();
Box mybox2 = new Box();
...
// muestra el volumen del primer Box
mybox1.volume();
// muestra el volumen del segundo Box
mybox2.volume();
}
}


Mtodo volume( ) de la
clase Box
Invoca al mtodo volume( ) de mybox1,
es decir, llama a volume( ) relativo al
objeto mybox1
Invoca al mtodo volume( ) de mybox2,
es decir, llama a volume( ) relativo al
objeto mybox2
Expositor: Miguel Ataurima Arellano 28
EJEMPLO: Aada un mtodo que retorne un valor, a la clase Box (BoxDemo4.java)

class Box {
double width;
double height;
double depth;
// calcula y retorna el volumen
double volume() {
return width * height * depth;
}
}

class BoxDemo4 {
public static void main(String args[]) {
Box mybox1 = new Box();
Box mybox2 = new Box();
double vol;
...
// obtiene el volumen del primer Box
vol = mybox1.volume();
System.out.println("El volumen es " + vol);
// obtiene el volumen del segundo Box
vol = mybox2.volume();
System.out.println("El volumen es " + vol);
}
}


Mtodo volume( ) de la
clase Box
Invoca al mtodo volume( ) de mybox1,
y el valor retornado se le es asignado a
la variable vol
Invoca al mtodo volume( ) de mybox2,
y el valor retornado se le es asignado a
vol
Expositor: Miguel Ataurima Arellano 29
EJEMPLO: Aada un mtodo que tome parmetros, a la clase Box
(BoxDemo5.java)

class Box {
double width;
double height;
double depth;

// Calcula y retorna el volumen
double volume() {
return width * height * depth;
}

// Establece las dimensiones de un Box
void setDim(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
}
Mtodo setDim( ) de la clase
Box, que recibe tres
parmetros, w, h y d y los
asigna a las variables instancia
width, height y depth
respectivamente.
Expositor: Miguel Ataurima Arellano 30
class BoxDemo5 {
public static void main(String args[]) {
Box mybox1 = new Box();
Box mybox2 = new Box();
double vol;
// inicializa cada objeto box
mybox1.setDim(10, 20, 15);
mybox2.setDim(3, 6, 9);
// obtiene el volumen del primer box
vol = mybox1.volume();
System.out.println("El volume es " + vol);
// obtiene el volumen del segundo box
vol = mybox2.volume();
System.out.println("El volume es " + vol);
}
}
Invoca al mtodo setDim( ) de
mybox1, con los valores 10, 20 y 15.
Invoca al mtodo setDim( ) de
mybox2, con los valores 3, 6 y 9.
Expositor: Miguel Ataurima Arellano 31
Constructores
Dado que el requerimiento de inicializacin de variables instancia de una clase es
comn, Java permite a los objetos que se inicializen asimismos cuando son
creados. Esta inicializacin automtica es desarrollada a travs del uso de un
constructor.
Un constructor inicializa un objeto inmediatamente sobre su creacin.
Un constructor tiene el mismo nombre que le clase en la que reside y es
sintcticamente a un mtodo.
Una vez definido, el constructor es automticamente llamado inmediatamente
despus de que el objeto es creado, antes de que el operador new complete su
tarea.
Los constructores no tienen ningn tipo de retorno, ni siquiera void.

Expositor: Miguel Ataurima Arellano 32
EJEMPLO: Aada un constructor, a la clase Box (BoxDemo6.java)

/* Aqu Box usa un constructor para inicializar
las dimensiones de una caja
*/

class Box {
double width;
double height;
double depth;

// Este es el constructor para Box.
Box() {
System.out.println("Construyendo un Box");
width = 10;
height = 10;
depth = 10;
}

// calcula y retorna el volumen
double volume() {
return width * height * depth;
}
}
Expositor: Miguel Ataurima Arellano 33
class BoxDemo6 {
public static void main(String args[]) {
// declara, aloja en Memoria e inicializa objetos Box
Box mybox1 = new Box();
Box mybox2 = new Box();
double vol;
// obtiene el volumen del primer box
vol = mybox1.volume();
System.out.println("El volumen es " + vol);
// obtiene el volumen del segundo box
vol = mybox2.volume();
System.out.println("El volumen es " + vol);
}
}

Cuando se ejecute el programa se obtendr la siguiente salida

Construyendo un Box
Construyendo un Box
Volume is 1000.0
Volume is 1000.0


Expositor: Miguel Ataurima Arellano 34
Constructores Parametrizados
EJEMPLO: Aada un constructor que tome parmetros, a la clase Box
(BoxDemo7.java)

/* Aqu, Box usa un constructor parametrizado para
Inicializar las dimensiones de un box
*/
class Box {
double width;
double height;
double depth;
// Este es el constructor para Box.
Box(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
// Calcula y retorna el volumen.
double volume() {
return width * height * depth;
}
}
Expositor: Miguel Ataurima Arellano 35
class BoxDemo7 {
public static void main(String args[]) {
// declara, aloja en Memoria e inicializa objetos Box
Box mybox1 = new Box(10, 20, 15);
Box mybox2 = new Box(3, 6, 9);
double vol;
// obtiene el volumen del primer box
vol = mybox1.volume();
System.out.println("El volumen es " + vol);
// obtiene el volumen del segundo box
vol = mybox2.volume();
System.out.println("El volumen es " + vol);
}
}
}

La salida de este programa se muestra a continuacin:

Volume is 3000.0
Volume is 162.0


Expositor: Miguel Ataurima Arellano 36
La Palabra Reservada key
A menudo muchos mtodos necesitan referenciar a objetos que los invocan. Para
permitir esto, Java define la palabra reservada this. this puede ser usado dentro de
cualquier mtodo para referenciar al objeto actual.
Esto es, this esta siempre referenciando al ojeto desde el cual el mtodo fue
invocado.
Se puede usar this adonde sea permitida una referencia a un objeto de un tipo de
clase actualmente en uso.

Expositor: Miguel Ataurima Arellano 37
EJEMPLO:

// Un redundante uso de this.
Box(double w, double h, double d) {
this.width = w;
this.height = h;
this.depth = d;
}

Esta versin del constructor parametrizado de Box funciona exactamente igual
que su anterior versin.
En este ejemplo el uso de this es redundante, pero perfectamente correcto.
Expositor: Miguel Ataurima Arellano 38
Como se sabe, es legal en Java declarar dos variables locales con el mismo
nombre dentro del mismo alcance.
Interesantemente, se puede tener variables locales, incluyendo parmetros
formales a mtodos, cuyos nombres se solapen con el de las variables instancia
de la clase.
Cuando una variable local tiene el mismo nombre que una variable instancia, la
variable local oculta la variable instancia. Este la razn por la que width, height, y
depth no fueron usadas como nombres de los parmetros del constructor Box( )
dentro de la clase Box. Si ello hubise ocurrido, entonces width would hubiera
referenciado al parmetro formal, ocultando la variable instancia width.
Otra forma de abordar esta situacin es usando this. Como this permite
referenciar directamente al objeto, se puede usar para resolver cualquier colisin
de espacio de nombres que pudiese ocurrir entre variables instancia y variables
locales.


Expositor: Miguel Ataurima Arellano 39
EJEMPLO: Otra versin de Box(), el cual usa width, height, y depth fcomo
nombres de parmetros y luego usa this para acceder a las variables de la
instancia con el mismo nombre:

// Use this para resolver las colisiones espacio-nombre.
Box(double width, double height, double depth) {
this.width = width;
this.height = height;
this.depth = depth;
}

Expositor: Miguel Ataurima Arellano 40
La coleccin Garbage
Como los objetos son dinmicamente alojados mediante el uso del operador new,
es probable que muchos objetos sean destruidos y sus espacios reservados de
memoria liberados para posteriores reasignaciones.
En muchos lenguajes, tal como C++, los objetos alojados dinmicamente deben
ser manualmente liberados a travs del operador delete. Java toma un enfoque
distinto; ste manipula el desalojamiento en forma automtica. La tcnica que
lleva a cabo esto es llamada la coleccin garbage.
Esta trabaja as: cuando no hay referencias a algn objeto existente, se objeto es
asumido a no ser mucha necesidad, y la memoria ocupada por el objeto puede ser
recuperada. Aqu no hay una necesidad explicita de destruir objetos como en C++.
La coleccin Garbage solo ocurre espordicamente durante la ejecucin de un
programa. Esta no ocurrir simplemente cuando uno o mas objetos existentes que
no han sido usados por largo tiempo.
Adems, las diferentes implementaciones del tiempo de ejecucin de Java
tomaran varios enfoques de la coleccin garbage, pero para la mayor parte, se
debera no tener que pensar de ella mientras se escriba un programa.

Expositor: Miguel Ataurima Arellano 41
El mtodo finalize()
Permite efectuar alguna accin cuando un objeto es destruido.
El mtodo finalize() tiene la siguiente forma general

protected void finalize( )
{
// Aqu va el cdigo de finalizacin
}

donde:
protected es un especificador que previene el acceso a finalize() por cdigo
definido fuera de la clase.

Expositor: Miguel Ataurima Arellano 42
EJEMPLO: Implementacin de una clase Stack (Pila) que contenga 10 valores
enteros
class Stack {

int stck[] = new int[10];
int tos;

// Inicializa la cima de la Pila
Stack() {
tos = -1;
}

// Inserta un item a la Pila
void push(int item) {
if(tos==9)
System.out.println("Pila llena.");
else
stck[++tos] = item;
}

// Extrae un item de la Pila
int pop() {
if(tos < 0) {
System.out.println("Pila vaca.");
return 0;
}
else
return stck[tos--];
}

}

Expositor: Miguel Ataurima Arellano 43
EJEMPLO: Implementacin de una clase Stack (Pila) que demuestre el uso de la clase Stack.
sta crea dos pilas de enteros, coloca algunos valores en cada uno, y luego los retira de ellos.

class TestStack {
public static void main(String args[]) {
Stack mystack1 = new Stack();
Stack mystack2 = new Stack();

// inserta algunos nmeros en la pila
for(int i=0; i<10; i++) mystack1.push(i);
for(int i=10; i<20; i++) mystack2.push(i);

// retira los numeros de las pila
System.out.println("Pila en mystack1:");
for(int i=0; i<10; i++)
System.out.println(mystack1.pop());

System.out.println("Pila en mystack2:");
for(int i=0; i<10; i++)
System.out.println(mystack2.pop());
}
}

Das könnte Ihnen auch gefallen