Vous êtes sur la page 1sur 12

Conceptos de Programacin

En esta parte del bloque vas a conocer sus principales conceptos, conno son: la
abstraccin, el encapsulamiento, la herencia y el polimorfismo, y te presentaremos
algunos ejemplos que ayudarn a conocer su aplicacin. Adems, aprenders qu
es una clase y cmo crearla.
De manera general, esta meta nos servir para aprender a reutilizar el cdigo y
aminorar el tiempo en el uso de la sintaxis del cdigo en Java.
Qu es la programacin orientada a objetos?
La programacin orientada a objetos es tomar los objetos que hay en el mundo real
(tangibles e intangibles) y escribirlos en cdigo. Para hacer esto hay que realizar una
abstraccin de los objetos que existen en la vida real, esto es, identificar aqullos
que necesitars programar.
Se toman dos propiedades de estos objetos, datos y funcionalidades, los primeros
son las caractersticas que posee el objeto y que se codificarn; color, tamao,
nombre, peso, etc.; y las segundas, son todas aquellas actividades que el objeto
puede desempear.
En el siguiente documento te presentamos el ejemplo de un elevador de un hotel, y
tambin te mostraremos cmo pasar la informacin a cdigo.

Un elevador tiene caractersticas importantes a tomar:


Datos

Funciiiafidades

Peso m.ximo

Subir al sicjuieno piso

Capacidad
mxima de
persona?

Bajar ! siguiente piso

Ajrir puertas
Cerrar puertas

T e preguntars, c m o paso esto a c d i g o ? , para ello primero debemos conocer un concepto


fundamental en nuestro curso, nos referimos al concepto clase. U n a clase en P O O es un conjunto
de caractersticas y funcionalidades, es decir, es la representacin de la abstraccin de los objetos
de la vida real a c d i g o , una clase nos sirve para crear nuevos tipos de datos. Si recuerdas el
bloque anterior, los tipos de datos que una computadora reconoce son muy limitados {inl, float,
char, string), ya que slo representan nmeros, letras y valores bolanos.

Pero, qu pasa cuando quieres representar, como en nuestro ejemplo, un elevador?


Un elevador no es ni nmero, ni letra, tampoco un tipo de dato que reconoce la
computadora, es por eso que, para que la computadora reconozca este nuevo tipo de
dato, es necesario crear la clase.

Las clases se pueden representar en forma de diagrama, mejor conocido como diagrama de
clases, en el cual se describen datos y funciones, como se muestra a continuacin:
<Nombre de la Ciase:;<Ddto de la Clast;>
<Dato de la Ciase>

<Funcin de ia Ciase>
<Funcin de la Ciase>

Para crear el diagrama de clases del elevador, se debe especificar el tipo de dato y
funcin, as como los argumentos que recibe, por lo que quedarla de la siguiente
forma;

Elevador
+ int pesoMaximo
+ int capacidadMaxPersoria
+ int subrPiso(int pIsoAnterior)
+ int bajarPisoint pisoAnterior)
+ void abrirPuertasO
+ void abrirCerrar'O

El siguiente paso es convertir esto a cdigo.


Sintaxis para crear una clase en java:
Puedes imptimiV la insicjen del cdk|0 para que lo ifiigas a la mano, ya que lo uliizars nas adelante.
class <nombreDeLaClase> {
<datos> //datos de tu clase
<datos> //
<datos> //
<c:on.stri.ic{or> //funcin especial en java que ayuda a la creacin cJe objetos
<runciones> //funciones f)ue son las aclividades que puede hacer tu objetrj
<funciories> //
<funciones> //

Ahora que ya sabes cmo crear clases, es necesario crear objetos, ya que estos
son la materia prima de este curso, y las clases te servirn para definir el tipo de
dato del objeto. Veamos esto con el siguiente ejemplo:

Un hotel tiene 2 elevadores, uno con una capacidad


mayor de personas que el otro, ambos elevadores
pertenecen a la misma clase elevador, por lo que para
crear estos dos objetos tienes que realizar dos
instancias de la clase elevador.

Clase: Elevador
f-1

I
Una instancia es crear un objeto de una clase, y para crear el objeto en Java se
utiliza el operador new, el cual es una palabra reservada que se encarga de solicitar
memoria a la computadora para que pueda almacenar los datos de los objetos.
Sintaxis para crear un objeto en Java:

<nombreDeLaClase> <nombreDelObJeto> = new (<parametrol>,<parametro1 >,...);

A continuacin te presentamos el video para que aprendas a crear objetos en Java.


Los objetos en Java se almacenan en la memoria RAM, esta memoria es voltil, es
decir, una vez que se apaga la computadora, se elimina todo lo que se haya
ejecutado en tiempo real. Esta memoria es la encargada de ejecutar todos los
programas, no slo los realizados en Java, sino tambin ejecuta programas como
algunos mensajeros, juegos de video en lnea, entre otros.

3'

Consulta el siguiente P D F referente al a l m a c e n a m i e n t o de objetos e n la memoria


RAM

Mquina virtual de Java


Para almacenar los datos, la mquina virtual de J a v a , que s e conecta con el sistema
operativo de la computadora y ejecuta nuestros programas, divide a la memoria R A M en
dos partes: la pila y el cmulo, en la primera s e almacenarn slo referencias a estos
objetos y valores, como int, float, char, etc., y en la segunda, se almacenarn todos los
objetos que desarrollemos.
Ejemplo:

Desarrollemos un objeto elevadorChico con pesoMaximo=400kg y


capacidadMaximaPersona=5
En la computadora se representara de la siguiente manera:

Ram
Pila

Cmulo

pesoM axim o=-40Okg


capacidadMaxPersona=5

La flecha indica que el nombre elevadorCliico e s una referencia a la direccin de


memoria donde s e encuentra creado el objeto y los datos de ste. Un ejemplo de la vida
real, puede ser la C l a v e nica de Registro de Poblacin, ya que sta no e s la persona
fsica, sino una referencia que identifica a la persona, por ello, la C U R P no se puede
repetir, y de la misma manera, el nombre de los objetos tampoco.

S i n t a x i s para a c c e d e r a un elemento del objeto e n J a v a


P a r a utilizar los e l e m e n t o s de los objetos, s e u s a un concepto conocido c o m o p a s o
de m e n s a j e s o l l a m a d a s , esto quiere decir que le p a s a s un m e n s a j e al objeto con
tu solicitud; el m e n s a j e s e realiza con la referencia del objeto, que e s el nombre del
objeto, seguido de! operador "." (punto) y del m e n s a j e que le solicitamos al objeto,
que e n e s t e c a s o e s el nombre del dato o la funcin:

< n om b re Del Ob i t^to > . < n o rm b re D e I El em f> n to >;

V
Ahora debemos revisar un concepto que en Java se conoce como paso

por

referencias. Recordemos que en el cmulo se almacenan los objetos y en la pila


las referencias a estos objetos.
Nosotros slo podemos utilizar la referencia, ya que es el nombre que le dimos al
objeto para manipular sus datos, como vimos-con anterioridad. Esta referencia se
puede copiar a otro nombre de objeto y as se tienen dos referencias, y tener acceso
a sus elementos.
Para explicar cmo se aplican las referencias, retomaremos el ejemplo anterior:
iiirT'i

I ' iiIII

omando el objeto elevadorChico cot peso


m a x i m o = 4 0 0 k g y capacidadMaximaPersona=5,
asignemos esld referencia de objeto a olro
ele\,'ador, que llamaremos OtroElevador.

Al realizar esto, se crearn 2 referencias al mismo objeto.

Ram
Crnuio

Pila

OtroElevador
pe5oMaxlmo=400kg
capacdadMaxPersona=5

elevaclorChico

3Mfe

Por io que, al modificar algn dato de otroElevador, tambin se modificar


de elevadorChico y viceversa.

1. Eticapsulamiento
El lenguaje J a v a se cre con la finalidad de ser un lenguaje seguro, una parte de esa
seguridad es la integridad de los datos, lo cual significa que no tienen libre acceso.
Lo anterior quiere decir que los datos estn encapsulados, pero... a qu no
referimos con esto? El encapsulamiento es limitar el acceso de lectura y escritura a
los datos de un objeto, permitiendo el acceso slo con funciones que nosotros
definamos.
Cuando encontramos un dato con el operador inicial + (public), indica que e s
pblico; por otra parte, cuando lo hallamos con el operador - (prvate), denotamos
que es privado, lo cual nos indica que el elemento deja de ser accesible para todo el
mundo y ahora nicamente lo es para utilizarse dentro de la misma case.
Ahora bien, como ya lo dijimos, las funciones son las que nos ayudan a tener acceso
a los datos de un objeto. Para obtener o editar los datos encapsulados, tenemos dos
funciones; getter y setter, que provienen del ingls, de los vocablos get, "obtener" y
set, "editar".
Para que lo anterior quede ms claro, usaremos el ejemplo del elevador visto
anteriormente, en l se ve el diagrama de clases con encapsulamiento;
Eievador
-intpesoMaximo
-int capacidacIMaximaPersona
+int .$ubirPiso(int pisoAnterior)
+in bajarPiso(int pisoAnterior)
+yoid abrirPuert3.s{)
void abrirCerrarO

int getPesoMaximoO;
H-int getCapacidadMaxPersonai;
4-void setPesoMaxirnoO;
+vid gelCapacidadfvlaxPersonaO;

Herencia
Otra de las caractersticas que hace fuerte a la POO es el poder realizar mduios
con el cdigo (bloques de cdigo), estos generan un archivo, el cual se vuelve
una clase, con lo que, si se necesita realizar un cambio en el programa, slo se
realiza sobre la clase que hay que cambiar y no sobre todo el programa. Esto hace
ms eficiente la parte de correccin de un software.
Adems, los bloques de cdigo nos brindan la oportunidad de reutilizar cdigo, con
lo que se tiene mucho ahorro de cdigo en el desarrollo de sistemas.

La reutilizacin de cdigo basada en h e r e n c i a es crear nuevas clases a partir de


una ya existente, por lo cual la nueva clase hereda el comportamiento, es decir,
las f u n c i o n e s y los d a t o s de su clase p a d r e , s u p e r c a s e o c a s e b a s e ; esta nueva
clase es llamada c i a s e d e r i v a d a , c l a s e liija o s u b c l a s e
En el siguiente d o c u m e n t o , vers un ejemplo de lo anterior.

Veamos un ejemplo: supongamos que te piden que realices un elevador automotriz,


para que las personas puedan subir con sus autos, adems de que se les otorgue el
servicio de combustible en el interior del elevador. Imagina que t quieres ahorrar en el
diseo del nuevo elevador, ya que tienes uno que funciona para personas y slo quieres
agregarle la capacidad para autos y el servicio.
Para pasar el ejemplo a cdigo necesitamos la nueva clase elevadorAutomotriz,
slo
tendr como nuevo dato la cantidad de autos que podr subir y como nueva
f u n c i o n a l i d a d el poder proporcionar gasolina. Por lo que nuestro diagrama de clase
quedara de la siguiente manera:
ElevadorAutonnotriz
-int c a p a c i d a d A u t o s ;
void proporcionarGasonaO;
-rgetObtenerCapacidadAutosO;
+setCapacidadAuto.si!nt capacidadNueva)
A l analizar la nueva clase nos damos cuenta que sta ya cuenta con el principio de
encapsulamiento, pero la nueva clase (derivada) no tiene la funcionalidad que tena la clase
elevador (base), as que surge la siguiente pregunta, c m o le proporciono la funcionalidad de la
clase base a la clase derivada?, para realizar esto se tiene que agregar al c d i g o la palabra
reservada extends que es la encargada de realizar la herencia.

Sintaxis para crear una clase c o n herencia en Java


ciass <nombreDeLaClaseDerivada:> extends <nombreDeLaClasePadre> (
<datos> //datos de tu case
<datos> / /
<datos> / /
<constfuctor> //debe contener al constructor del padre
<funcionGs> //funciones que son las actividades que puede hacer tu objeto
<f unciones > / /
<funciones>.//
i
Terminando lo anterior, el diagrama de clases quedara de la siguiente manera:

-int pesoMaximo
-int capaciciadMaximaPersona
-i-in subirPisoint pisoArvterior)
-i-int bajarPisoiint pisoAnterior)
tvoid abrirPuerlasO
void abrirCerrarO
i ni g et Pe soM a x i m o O;
-^int getCapacidadN'iaxPersona);
-fvoid setPesoMaximoO;
+-void getCapacidadiViaxPersonaO;

^ ^ ^ ^

ElevadOrAutomotriz
-int capacidaHAiitos;
void proporcionarGasolinaJ:

+ini: getObtenerCapacidadAistos);
+void setCapacidacAutoclunt capacidacINueva)

Ahora que la clase derivada hered los mtodos (funciones) de la clase base,
cmo los implemento si quiero usarlos de manera diferente? Para ello surge
un

concepto, sobreescritura de

mtodos,

donde

los

argumentos

el

comportamiento pueden variar, pero los mtodos deben de regresar el mismo


valor de retorno y debe ser el mismo nombre, vemoslo con el ejemplo que s e
muestra a continuacin:
Tenemos la clase animal, la cual contiene los datos: peso, nombre y altura.
Asimismo, las funciones: desplazarse, respirar y comunicarse. Tambin tres
clases llamadas Ave, Pez y MamiferoTerrestrerespectivamente, las cuales s e
heredan de la clase animal, no tienen datos diferentes y realizan las mismas
acciones que el padre, pero las implementan de diferente manera. Revisa el
siguiente diagrama de clases:

Animal
- int peso
- int altura
- String nombre
+ void desplazarseO;
+ void comunicarse);

MamiferoTerrestre,
-int peso
- int altura
- String nombre

- int peso
- int altura
- String nombre

- int peso
- int altura
- String nombre

+ void desplazarseO;
+ void comunicarse);

+ void despidzarseO;
+ void comunicarseO;

t void desplazarse);
+ void comunicarseO;

immsssss

Ahora

codifiquemos

la s o b r e e s c r i t u r a d e

mtodos,

para

que

Ave,

Pez

MamiferoTerrestre s e a n c a p a c e s de d e s p l a z a r s e , pero que c a d a uno lo h a g a a s u


m a n e r a . T e lo e x p l i c a m o s e n el siguiente video:
Cmo sobreescribir mtodos heredados en Java
Ahora

codifiquemos

la s o b r e e s c r i t u r a de

mtodos,

para

que

Ave.

Pez

MamiferoTerrestre s e a n c a p a c e s de d e s p l a z a r s e , pero que c a d a uno lo h a g a a s u


m a n e r a T e lo e x p l i c a m o s e n el siguiente video:
3. Polimorfismo

Da clic sobre b s controles de audio para escuchar

El polimorfismo e s un concepto muy til para la creacin de funciones genricas: por


ejemplo, si n e c e s i t a m o s una funcin que imprima el nombre de un objeto Animal,
requerir que le e n v i e m o s un objeto de tipo animal, y si le p a s a m o s un objeto de otro
tipo, causar un error, pero g r a c i a s a la herencia podemos enviarle un objeto de
tipo Pez, de tipo A v e , o de tipo MamiferoTerrestre, as la funcin gennca s e
ejecutar sin emitir algn error, y a que e s t o s tres tipos son tambin de tipo Animal

Consulta e s t e video para que a p r e n d a s cmo s e utiliza el polimorfismo e n funciones


en J a v a .

public class Elevador {


prvate int pesoMaxlmo;
prvate Int capacldadMaxlmaPersona;

/**
* @param args the command Une
arguments
*/
publlc statlc vold main(String[] args) {
// TODO code application loglc here
// Elevador elevadorChico = new
Elevador(400, 5);

publlc Elevador(lnt pm, Int c){


pesoMaxlmo = pm;
capacldadMaxlmaPersona = c;
}
publlc int sublrPlso(int piso Actual) {
Int nuevoPlso = plsoActual + 1;
return nuevoPlso;

/* System.out.prlntln("ElevadorChlco
peso " + elevadorChico.pesoMaximo
+
"
capacidad
"
+
elevadorChico.capacldadMaxlmaPersona

}
publlc Int bajarPlso(lnt plsoActual) {
Int nuevoPlso = plsoActual - 1;
return nuevoPlso;
}
publlc void abrirPuertas(){
System.out.prlntln("Estoy abriendo
puertas");

);
Elevador elevadorGrande = new
Elevador(800, 10);
System.out.prlntln("ElevadorChico
peso " + elevadorGrande.pesoMaximo
+
"
capacidad
"
+
elevadorGrande.capacldadMaxlmaPerson
a);

}
publlc vold cerrarPuertasQI
System.out.prlntln("Estoy
puertas");

System.out.println("Soy el elevador
chico");
elevadorChico.abrirPuertasQ;

cerrando

}
int
piso
elevadorChico.bajarPlso(6);
System.out.println(plso);*/

public int getPesoMaximo(){


return pesoMaxlmo;
}
publlc
int
getCapacldadMaxlmaPersonaO {
return capacidadMaxlmaPersona;

/*
Elevador otroElevador =
elevadorChico;
//System.out.prlntln(elevadorChico);
//System.out.prlntln(otroElevador);
System.out.println("Peso:
"
+
elevadorChico.capacldadMaxlmaPersona)

}
publlc void setPesoMaximo(int pm){
pesoMaxlmo = pm;
}
publlc
void
setCapacidadMaxlmaPersona(int c){
capacldadMaxlmaPersona = c;
}
}

System.out.prlntln("Peso;
"
+
otroElevador.capacldadMaxlmaPersona);

elevadorChico.capacldadMaxlmaPersona
= 7;

ublic class Principal {

10

System.out.println("Peso:
"
+
elevadorChico. capacidadMaximaPersona)

System.out.println("Estoy
proporcionando gasolina");
}

System.out.println("Peso:
"
+
otroElevador.capacidadMaximaPersona);
*/
/*3
Elevador elevadorChico = new
Elevador(400, 5);

public int getCapacidadAutos(){


return capacidadAutos;

}
public void setCapacidadAutos(int ca){
capacidadAutos = ca;

//System.out.println(elevadorChico.peso
Mximo);
System.out.println(elevadorChico.getPeso
MaximoQ);
System.out.println(elevadorChico.getCap
acidadMaximaPersonaQ);
elevadorChico.setPesoMaximo(700);

}
******
public class Animal {
prvate int peso;
prvate int altura;
prvate String nombre;

elevadorChico.setCapacidadMaximaPerso
na(7);

public void desplazarseO

{
System.out.println(elevadorChico.getPeso
MaximoO);
System.out.println(elevadorChico.getCap
acidadMaximaPersonaO);
*/
ElevadorAutos
ea
=
new
ElevadorAutos( 100,5);

System.out.println("Soy un animal y
me desplazo");
}

}
********
public class A v e extends Animal {
@Override
public void desplazarseO

ea.proporcionarGasolinaQ;
System.out.println(ea.subirPiso(5));
System.out.println(ea.bajarPiso(5));
ea.abrirPuertasO;
System.out.println(ea.getPesoMaximo());
}

{
System.out.println("Soy un ave y me
desplazo volando");

}
}
public class Pez extends Animal {
public void desplazarseO

{
}

System.out.println("Soy un pez y me

**********************
public
class
ElevadorAutos
extends
Elevador {
prvate int capacidadAutos;
//constructor
public ElevadorAutos(int pm, int c ) {
super(pm,c);

}
public void proporcionarGasolina(){

desplazo nadando");
}

}
public class Mamfero Terrestre extends
Animal {
public void desplazarseO
\

System.out.println("Soy
un
mamfero y me desplazo caminando");

A v e ave = new AveQ;

Pez pez = new Pez();

***************
MamiferoTerrestre
MamiferoTerrestreO;

public class PruebaAnimal {


public static void main(String[] args) {
/* Animal animal = new AnimalQ;
animal.desplazarseQ;

new

DesplazarAnimal(animal);
Desplazar Animal(ave);
DesplazarAnimal(pez);
DesplazarAnimal(mt);

Ave ave = new AveQ;


ave.desplazarseQ;
Pez pez = new Pez();
pez.desplazarseO;
MamiferoTerrestre
MamiferoTerrestreO;
mt.desplazarseO;

mt

}
mt

public
static
DesplazarAnimal(Animal a ) {
a.desplazarseO;

new

*/
}

Animal animal = new AnimalQ;

12

void