Anda di halaman 1dari 13

Instituto

de Zitcuaro

Tecnolgico

Materia:

Programacin orientada a objetos


Tarea:
Investigacin: Unidad 2. Clases y objetos
Grupo: 2 N

Carrera: I.S.C.

Alumno (a):
Delgado Rangel Sergio Jonathan.
Docente:
Lic. Jos Alfredo Jimnez Meza

Unidad 2. Clases y objetos


2.1 Declaracin: atributos, mtodos y 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

Visibilidad

public

Pblica (+)

protectec

Protegida / en la herencia(#)

private

Privada(-)

package

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.
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.

2.2 Instanciacin de clases


Una vez creada la clase, ya es posible consumirla mediante la instanciacin.
La instanciacin es el proceso de crear objetos a partir de una clase.
La accin opuesta de la abstraccin es la instanciacin. La abstraccin es
obtenida eliminando algunos detalles, la instanciacin es obtenida llenando
algunos detalles.
Las abstracciones de grandes conjuntos de informacin son obtenidas por el
reemplazo de algunos de sus elementos por abstracciones existentes de estos
elementos.
Una instanciacin se obtiene asignndole un elemento concreto a cada
elemento abstracto. Una vez que todos los elementos fueron instanciados, la
informacin abstracta se comporta como la instanciacin.
La informacin abstracta instanciada se comporta como informacin concreta.
Jerarqua de abstracciones:
Todo elemento de informacin puede ser considerado como una instanciacin
de algo ms abstracto y, al mismo tiempo, como una abstraccin de elementos
ms concretos.

Si pudiramos medir la abstraccin de los elementos de informacin, sera


posible clasificar toda la informacin de manera absoluta. Esto no es posible.
Las razones de porque no es posible son mltiples:
Una estructura de informacin abstracta puede tener elementos de
informacin de varios niveles de abstraccin distintos.
El grado de abstraccin de un elemento depende del contexto con el que
interacta. El mismo elemento puede tener un significado concreto en un
contexto y abstracto en otro.
El grado de abstraccin de un elemento vara tanto como varia la instanciacin.
Las ltimas dos dificultades son causadas por el hecho de que la informacin
est siempre instanciada. Podramos intentar remover toda instanciacin antes
de clasificar, pero entonces toda informacin sera infinitamente abstracta y as
no clasificable.

2.3 Referencias a objetos (this)


Los tipos simples de Java describan el tamao y los valores de las variables.
Cada vez que se crea una clase se aade otro tipo de dato que se puede
utilizar igual que uno de los tipos simples. Por ello al declarar una nueva
variable, se puede utilizar un nombre de clase como tipo. A estas variables se
las conoce como referencias a objeto.

This
Al acceder a variables de instancia de una clase, la palabra clave this hace
referencia a los miembros de la propia clase en el objeto actual; es decir, this
se refiere al objeto actual sobre el que est actuando un mtodo determinado y
se utiliza siempre que se quiera hace referencia al objeto actual de la clase.
2.3 REFERENCIAS A OBJETOS
Las referencias en Java no son punteros ni referencias como en C++. Este
hecho crea un poco de confusin entre los programadores que llegan por
primera vez a Java. Las referencias en Java son identificadores de instancias de
las clases Java. Una referencia dirige la atencin a un objeto de un tipo
especfico. No tenemos por qu saber cmo lo hace ni necesitamos saber qu
hace ni, por supuesto, su implementacin.
Pensemos en una referencia como si se tratase de la llave electrnica de la
habitacin de un hotel. Vamos a utilizar precisamente este ejemplo del Hotel
para demostrar el uso y la utilizacin que podemos hacer de las referencias en
Java. Primero crearemos la clase Habitacion, implementada en el
fichero Habitacion.java, mediante instancias de la cual construiremos nuestro
Hotel:
public class Habitacion {
private int numHabitacion;

private int numCamas;

public Habitacion() {
habitacion( 0 );
}

public Habitacion( int numeroHab ) {


habitacion( numeroHab );
}

public Habitacion( int numeroHab,int camas ) {


habitacion( numeroHab );
camas( camas );
}

public synchornized int habitacion() {


return( numHabitacion );
}

public synchronized void habitacion( int numeroHab ) {


numHabitacion = numeroHab;
}

public synchronized int camas() {


return( camas );
}

public syncronized void camas( int camas ) {


numCamas = camas;
}

}
El cdigo anterior sera el corazn de la aplicacin. Vamos pues a construir
nuestro Hotel creando Habitaciones y asignndole a cada una de ellas su llave
electrnica; tal como muestra el cdigo siguiente,Hotel1.java:
public class Hotel1 {
public static void main( String args[] ) {
Habitacion llaveHab1;

// paso 1

Habitacion llaveHab2;

llaveHab1 = new Habitacion( 222 );

// pasos 2, 3, 4 y 5

llaveHab2 = new Habitacion( 1144,3 );


//

^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^

//

ByD

}
}
Para explicar el proceso, dividimos las acciones en los cinco pasos necesarios
para poder entrar en nuestra habitacin. Aunque no se incluye, podemos
tambin considerar el caso de que necesitemos un cerrajero, para que cuando
perdamos la llave, nos abra la puerta; y que en nuestro caso sera el garbage
collector, que recicla la habitacin una vez que se hayan perdido todas las
llaves.
El primer paso es la creacin de la llave, es decir, definir la variable referencia,
por defecto nula.
El resto de los pasos se agrupan en una sola sentencia Java. La parte B en el
cdigo anterior indica al gerente del Hotel que ya dispone de una nueva
habitacin. La parte C llama al decorador de interiores para que "vista" la
habitacin segn un patrn determinado, para que no desentonen unas
habitaciones con otras y no se pierdan las seas de identidad del hotel. El
cdigo electrnico que nos permitir acceder a la habitacin se genera en la
parte D, una vez conocido el interior de la habitacin y se programa en la llave
en la parte A.
Si dejamos el ejemplo real a un lado y nos vamos a lo que ocurre en la
ejecucin del cdigo, vemos que el operador new busca espacio para una
instancia de un objeto de una clase determinada e inicializa la memoria a los
valores adecuados. Luego invoca al mtodo constructor de la clase,
proporcionndole los argumentos adecuados. El operador new devuelve una
referencia a s mismo, que es inmediatamente asignada a la variable
referencia.

Podemos tener mltiples llaves para una misma habitacin:


...
Habitacion llaveHab3,llaveHab4;
llaveHab3 = llaveHab1;
llaveHab4 = llavehab2;
De este modo conseguimos copias de las llaves. Las habitaciones en s mismas
no se han tocado en este proceso. As que, ya tenemos dos llaves para la
habitacin 222 y otras dos para la habitacin 1144.
Una llave puede ser programada para que funcione solamente con una
habitacin en cualquier momento, pero podemos cambiar su cdigo electrnico
para que funcione con alguna otra habitacin; por ejemplo, para cambiar una
habitacin anteriormente utilizada por un empedernido fumador por otra limpia
de olores y con vistas al mar. Cambiemos pues la llave duplicada de la
habitacin del fumador (la 222) por la habitacin con olor a sal marina, 1144:
...
llaveHab3 = llaveHab2;
Ahora tenemos una llave para la habitacin 222 y tres para la habitacin 1144.
Mantendremos una llave para cada habitacin en la conserjera, para poder
utilizarla como llave maestra, en el caso de que alguien pierda su llave propia.
Alguien con la llave de una habitacin puede hacer cambios en ella, y los
compaeros que tengan llave de esa misma habitacin, no tendrn
conocimiento de esos cambios hasta que vuelvan a entrar en la habitacin. Por
ejemplo, vamos a quitar una de las camas de la habitacin, entrando en ella
con la llave maestra:
...
llaveHab2.camas( 2 );
Ahora cuando los inquilinos entren en la habitacin podrn comprobar el
cambio realizado:
...
llaveHab4.printData();

2.4 Mtodos: declaracin, invocacin,


parmetros, retorno de valores y mensajes

paso

de

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.
Para que se pueda hacer una llamada a un mtodo ste tiene que estar
definido:
[modificadores]
tipo
nombreMtodo ([
Tipo1
Parmetro1,
Tipo2
Parmetro2,
...]) //Declaracin
o
cabecera
del
mtodo
{
Definicin de variables locales; //Slo accesibles desde la funcin
Sentencias;
Cuerpo
del
mtodo.
[return [(] expresin [)]]; // Puede no ser la ltima y puede aparecer ms de
una
vez
en
la
funcin.
}
Para que un mtodo se ejecute hay que llamarlo. La llamada o invocacin a un
mtodo provoca la ejecucin de las instrucciones que lo componen, una vez se
han ejecutado el control de la ejecucin vuelve a quien hizo la llamada.
La llamada al mtodo consta de:
- Nombre del mtodo.
- Posible lista de argumentos, llamados tambin parmetros actuales, entre
parntesis y separados por comas.
Si un mtodo no est definido como static la llamada o invocacin al mtodo
hay que hacerla a travs de un objeto que pertenezca a la clase que define el
mtodo y se dice que se enva un mensaje al objeto.
nombreObjeto.nombreMtodo([lista de argumentos])
El mtodo se aplica al objeto de la clase a travs del operador punto (.)
En este caso el objeto es siempre el argumento implcito del objeto. Los
mtodos pueden tener adems argumentos explcitos que son los que van
entre parntesis a continuacin del nombre del mtodo.
Cuando se accede al mtodo de un objeto se interpreta que el objeto ha
recibido un mensaje y el objeto responde al mensaje ejecutando el mtodo. Los

mensajes que puede recibir un objeto se corresponden con el nombre de los


mtodos de su clase.
Si el mtodo devuelve un valor, la llamada a la funcin debe de formar parte
de una expresin que recoja el valor retornado por la funcin.
ASIGNACIN DE IGUALDAD CON TIPOS PRIMITIVOS Y OBJETOS.
Si como hemos explicado anteriormente los tipos objeto no se almacenan
directamente sino mediante referencias al objeto, Qu efecto tiene hacer una
asignacin de tipo = entre objetos? En primer lugar, hay que tener en cuenta
que para establecer asignaciones de este tipo entre objetos debe haber
coincidencia de tipos.
Es decir, tratar de establecer estudiante478 = deposito3; nos llevar a un
mensaje de error del compilador de tipo Incompatible types found Deposito
but expected Estudiante.
Consideremos que hubiramos definido un tipo Estudiante y que hemos creado
tres objetos referenciados por las variables: estudiante7, estudiante381 ,
estudiante45. Grficamente podramos representarlo as:

Ahora supongamos que establecemos: estudiante381 = estudiante45. El


significado de esta instruccin es que la variable apuntadora de estudiante381
se convierte en idntica a la variable apuntadora estudiante45. Es decir, ahora
ambas variables referencian al mismo objeto. Grficamente:

Mtodos de clase o mtodos static.


Son mtodos que no tienen como finalidad actuar sobre los atributos privados
de los objetos. Se trata de un bloque de sentencias que se agrupan bajo un
mismo nombre por tener alguna relacin lgica que las encamina a realizar una
tarea especfica.
Se aplican en general donde se necesiten, al no actuar sobre objetos, no
pueden acceder a un miembro no static, los objetos no son el argumento
implcito en la llamada, (no actan sobre objetos concretos a travs del
operador punto (.), pero pueden recibir objetos de su clase como argumentos
explcitos). Un miembro static si puede ser accedido a travs de mtodos no
static.
NOTA- Los mtodos static no pueden acceder a variables ni llamar a
mtodos no static.
- Los mtodos y variables static si pueden ser accedidos o llamados
desde miembros no static.
Los mtodos estticos se crean anteponiendo al nombre del mtodo la
palabra static. Si se define un mtodo como esttico es posible llamarlo sin
crear un objeto. Como ocurre con los campos, para invocar un mtodo esttico
hay dos posibilidades:
Invocarlo directamente a travs del nombre de la clase a la que pertenece.
Invocarlo a travs de un objeto de la clase previamente creado.
Pero en la llamada se suele utilizar el nombre de la clase en lugar del nombre
de un objeto de la clase.
Esta es la razn por la que el mtodo main es static, para que pueda ser
invocado aunque no exista un objeto de la clase
Los mtodos y variables de clase es lo ms parecido que tiene Java a las
funciones y variables globales de C/C++.

El mtodo main
Toda aplicacin Java ha de tener un mtodo main y slo uno, es el punto de
entrada y salida de la aplicacin, es public, static y no devuelve nada.
Generalmente en una clase se definir ms de un mtodo. Cuando tras
compilar la clase se ejecuta, Java busca el mtodo llamado main y comienza

ejecutando el programa desde l. Si no existe el mtodo main se produce un


error.
Cuando una clase contiene varios mtodos, el mtodo main suele ser el ltimo
en describirse.

2.5 Constructores y destructores


Constructor:
Los constructores son mtodos pertenecientes a la clase. Se utilizan para
construir o instanciar una clase. Puede haber varios constructores, de acuerdo
a las necesidades del usuario.
public

class

Persona

prvate

public

int

//Atributos
altura;

//Constructores
Persona{
}

public
Persona(int
unaAltura){
this.altura = unaAltura; //
setAltura(unaAltura);
}
}

El destructor:
El destructor se utiliza para destruir una instancia de una clase y liberar
memoria. En Java no hay destructores, ya que la liberacin de memoria es
llevada a cabo por el Garbage Collector cuando las instancias de los objetos
quedan des-referenciadas.
El mtodo dispose() de cada objeto se llama previo a ser recolectado.

2.6 Sobrecarga de mtodos


En Java es posible definir dos o ms mtodos dentro de la misma clase que
comparten el mismo
nombre, siempre y cuando sus declaraciones de
parmetro son diferentes. Cuando esto sucede, los mtodos se dicen a
sobrecargarse, y el proceso se conoce como la sobrecarga de mtodos.
Sobrecarga de mtodos es una de las maneras que Java implementa el
polimorfismo. Si nunca ha utilizado un lenguaje que permite la sobrecarga de
mtodos y, a continuacin, el concepto puede parecer extrao al principio. Pero
como puede ver, sobrecarga de mtodos es una de las caractersticas ms

interesantes y tiles de Java. Cuando se invoca un mtodo sobrecargado, Java


utiliza el tipo o el nmero de argumentos como su gua para determinar la
versin del mtodo sobrecargado realmente llamar. Por lo tanto, los mtodos
sobrecargados deben ser diferente en el tipo o el nmero de sus parmetros.
Aunque los mtodos sobrecargados pueden tener diferentes tipos de
devolucin, el tipo devuelto por s sola no basta distinguir dos versiones de un
mtodo. Cuando Java encuentra una llamada a un mtodo sobrecargado,
simplemente ejecuta la versin del mtodo cuyos parmetros coincidan con los
argumentos utilizados en la llamada.

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.

Anda mungkin juga menyukai