Sunteți pe pagina 1din 22

Herencia en Java, con ejemplos

El proyecto de este post lo puedes descargar pulsando AQUI.


La Herencia es uno de los 4 pilares de la programacin orientada a objetos (POO) junto
con la Abstraccin, Encapsulacin y Polimorfismo. Al principio cuesta un poco
entender estos conceptos caractersticos del paradigma de la POO porque solemos venir
de otro paradigma de programacin como el paradigma de la programacin estructurada
(ver la entradaParadigmas de Programacin), pero se ha de decir que la complejidad
est en entender este nuevo paradigma y no en otra cosa. En esta entrada vamos a
explicar de la mejor manera posible que es la herencia y lo vamos a explicar con un
ejemplo.
Respecto a la herencia se han dado muchas definiciones como por ejemplo la siguiente:
La herencia es un mecanismo que permite la definicin de una clase a partir de la
definicin de otra ya existente. La herencia permite compartir automticamente
mtodos y datos entre clases, subclases y objetos.. As de primeras esta definicin es
un poco difcil de digerir para aquellos que estis empezando con la POO, as que
vamos a intentar digerir esta definicin con un ejemplo en el que veremos que la
herencia no es ms que un Copy-Paste Dinmico o una forma de sacar factor
comn al cdigo que escribimos.
El ejemplo que proponemos es un caso en el que vamos a simular el comportamiento
que tendran los diferentes integrantes de la seleccin espaola de futbol; tanto los
Futbolistas como el cuerpo tcnico (Entrenadores, Masajistas, etc). Para simular este
comportamiento vamos a definir tres clases que van a representaran a objetos Futbolista,
Entrenador y Masajista. De cada unos de ellos vamos a necesitar algunos datos que
reflejaremos en los atributos y una serie de acciones que reflejaremos en susmtodos.
Estos atributos y mtodos los mostramos en el siguiente diagrama de clases:

NOTA: en este diagrama y en adelante no vamos a poner los constructores y mtodos getter y setter con el fin de que el
diagrama nos quede grande e intendible aunque en un buen diagrama de clases deberan aparecer para respetar el
principio de encapsulacin de la POO

Como se puede observar, vemos que en las tres clases tenemos atributos y mtodos que
con iguales ya que los tres tienen los atributos id, Nombre, Apellidos y Edad; y los tres
tienen los mtodos de Viajar y Concentrarse:

A nivel de cdigo tenemos lo siguiente tras ver el diagrama de clases:

public class
Futbolista
{

public class
Entrenador
{

public class Masajista


{
private int

private int

private int

id;

id;

private
String Nombre;
private
String Apellidos;
private int
Edad;
private int
dorsal;
private
String demarcacion;

private
String Nombre;
private
String Apellidos;
private int
Edad;
private
String idFederacion;

//
constructor, getter y
setter
public void
Concentrarse() {
...
}
public void
Viajar() {

//
constructor, getter y
setter
public void
Concentrarse() {
...
}
public void
Viajar() {
...
}

id;
private String
Nombre;
private String
Apellidos;
private int
Edad;
private String
Titulacion;
private int
aniosExperiencia;
//
constructor, getter y
setter
public void
Concentrarse() {
...
}
public void
Viajar() {
...

...
}
public void
jugarPartido() {
...
}
public void
entrenar() {
...
}
}

}
public void
dirigirPartido() {
...
}
public void
dirigirEntreno() {
...
}
}

public void
darMasaje() {
...
}
}

Lo que podemos ver en este punto es que estamos escribiendo mucho cdigo repetido
ya que las tres clases tienen mtodos y atributos comunes, de ahi y como veremos
enseguida, decimos que la herencia consiste en sacar factor comn para no escribir
cdigo de ms, por tanto lo que haremos sera crearnos una clase con el cdigo que es
comn a las tres clases (a esta clase se le denomina en la herencia como Clase
Padre o SuperClase) y el cdigo que es especifico de cada clase, lo dejaremos en
ella, siendo denominadas estas clases como Clases Hijas, las cuales heredan de la
clase padre todos los atributos y mtodos pblicos o protegidos. Es muy importante
decir que las clases hijas no van a heredar nunca los atributos y mtodos privados de
la clase padre, as que mucho cuidado con esto. En resumen para que veis la ventaja de
la herencia, tenemos ahora una clase padre con n lineas de cdigo y tres clases hijas
con a, b y c lineas de cdigos respectivamente, por tanto si hechis cuentas, hemos
reducido nuestro cdigo en 2n lneas menos ya que antes tenamos (n+a)+(n+b)+
(n+c) lneas de cdigo y ahora tras aplicar herencia tenemos n+a+b+c lneas,
aunque tambin es cierto que tenemos una clase ms, pero veremos un poco ms
adelante la ventaja de tener esa clase padre. En resumen, al sacar factor comn y
aplicar herencia, tenemos las siguientes clases:

A nivel de cdigo, las clases quedaran implementadas de la siguiente forma:

public class
SeleccionFutbol
{
protected int
id;
protected
String Nombre;
protected
String Apellidos;
protected int
Edad;
// constructor,
getter y setter
public void
Concentrarse() {
...
}

public void
Viajar() {
...
}
}

public class Futbolista public class Entrenador public class Masajista


extends SeleccionFutbol extends SeleccionFutbol extends SeleccionFutbol
{
{
{
private int
dorsal;
private String
private String
private String idFederacion;
Titulacion;
demarcacion;
private int
public
aniosExperiencia;
public
Entrenador() {
Futbolista() {
public
super();
Masajista() {
super();
}
super();
}
}
// getter y
// getter y
setter
// getter y
setter
setter
public void
public void
dirigirPartido() {
public void
jugarPartido() {
...
darMasaje() {
...
}
...
}
}
public void
}
public void
dirigirEntreno() {
entrenar() {
...
...
}
}
}
}

Como podis observar ahora queda un cdigo mucho ms limpio, estructurado y con
menos lneas de cdigo, lo que lo hace ms legible, cosa que es muy importante y lo
que todava lo hace ms importante es que es un cdigo reutilizable, lo que significa
que ahora si queremos aadir ms clases a nuestra aplicacin como por ejemplo una
clase Mdico, Utiller@, Jefe/a de prensa etc. que pertenezcan tambin al equipo tcnico
de la seleccin Espaola, lo podemos hacer de forma muy sencilla ya que en la clase
padre (SeleccionFutbol) tenemos implementado parte de sus datos y de su
comportamiento y solo habr que implementar los atributos y mtodos propios de esa
clase. Empezis a ver la utilidad de la herencia?.
Ahora si os habis fijado bien en el cdigo que se ha escrito y sino habis tenido
experiencia con la herencia en Java, habris podido observar dos palabras reservadas

nuevas como son extends, protected y super. Pues bien, ahora vamos a
explicar el significado de ellas:

extends: Esta palabra reservada, indica a la clase hija cual va a ser su clase

padre, es decir que por ejemplo en la clase Futbolista al poner public class
Futbolista extends SeleccionFutbol le estamos indicando a la clase Futbolista
que su clase padre es la clase SeleccionFutbol o dicho de otra manera para que se
entienda mejor, al poner esto estamos haciendo un copy-paste dinmico diciendo
a la clase Futbolista que se copie todos los atributos y mtodos pblicos o
protegidos de la clase SeleccionFutbol. De aqu viene esa definicin que dimos
de que la herencia en un copy-paste dinmico.
protected: sirve para indicar un tipo de visibilidad de los atributos y mtodos de

la clase padre y significa que cuando un atributo es protected o protegido, solo es


visible ese atributo o mtodo desde una de las clases hijas y no desde otra clase.
super: sirve para llamar al constructor de la clase padre. Quizs en el cdigo que
hemos puesto no se ha visto muy bien, pero a continuacin lo mostramos de
formas ms clara, viendo el constructor de los objetos pasndole los atributos:

public class SeleccionFutbol {


......
public SeleccionFutbol() {
}
public SeleccionFutbol(int id, String nombre, String apellidos,
int edad) {
this.id = id;
this.Nombre = nombre;
this.Apellidos = apellidos;
this.Edad = edad;
}
......
public class Futbolista extends SeleccionFutbol {
......
public Futbolista() {
super();
}
public Futbolista(int id, String nombre, String apellidos, int
edad, int dorsal, String demarcacion) {
super(id, nombre, apellidos, edad);
this.dorsal = dorsal;
this.demarcacion = demarcacion;
}
......

Hasta aqu todo correcto, pero ahora vamos a ver como trabajamos con estas clases.
Para ver este funcionamiento de forma clara y sencilla vamos a trabajar con un objeto
de cada clase y vamos a ver como se crean y de que forma ejecutan sus mtodo. Para
ello empecemos mostrando el siguiente fragmento de cdigo:

public class Main {


// ArrayList de objetos SeleccionFutbol. Idenpendientemente de
la clase hija a la que pertenezca el objeto
public static ArrayList<SeleccionFutbol> integrantes = new
ArrayList<SeleccionFutbol>();
public static void main(String[] args) {
Entrenador delBosque = new Entrenador(1, "Vicente",
"Del Bosque", 60, "284EZ89");
Futbolista iniesta = new Futbolista(2, "Andres",
"Iniesta", 29, 6, "Interior Derecho");
Masajista raulMartinez = new Masajista(3, "Ral",
"Martinez", 41, "Licenciado en Fisioterapia", 18);
integrantes.add(delBosque);
integrantes.add(iniesta);
integrantes.add(raulMartinez);
// CONCENTRACION
System.out.println("Todos los integrantes comienzan una
concentracion. (Todos ejecutan el mismo mtodo)");
for (SeleccionFutbol integrante : integrantes) {
System.out.print(integrante.getNombre()+"
"+integrante.getApellidos()+" -> ");
integrante.Concentrarse();
}
// VIAJE
System.out.println("nTodos los integrantes viajan para
jugar un partido. (Todos ejecutan el mismo mtodo)");
for (SeleccionFutbol integrante : integrantes) {
System.out.print(integrante.getNombre()+"
"+integrante.getApellidos()+" -> ");
integrante.Viajar();
}
......

Lo primero que vemos es que nos creamos un objeto de cada clase, pasndole los
atributos al constructor como parmetro y despus sorprendentemente los metemos
en un ArrayList de objetos de la clase SeleccionFutbol que es la clase padre. Esto

evidentemente te lo permite hacer ya que todos los objetos son hijos de la misma clase
padre. Luego como veis, recorremos el ArrayList y ejecutamos sus mtodos comunes
como son el Concentrarse y el Viajar. Este cdigo da como salida lo siguiente:

Todos los integrantes comienzan una concentracion.


(Todos ejecutan el mismo mtodo)
Vicente Del Bosque -> Concentrarse
Andres Iniesta -> Concentrarse
Ral Martinez -> Concentrarse

Todos los integrantes viajan para jugar un partido.


(Todos ejecutan el mismo mtodo)
Vicente Del Bosque -> Viajar
Andres Iniesta -> Viajar
Ral Martinez -> Viajar
Como veis al ejecutar todos el mismo mtodo de la clase padre el cdigo puesto
funciona correctamente.
Posteriormente vamos a ejecutar cdigo especifico de las clases hijas, de ahi que ahora
no podamos recorrer el ArrayList y ejecutar el mismo mtodo para todos los objetos ya
que ahora esos objetos son nicos de la clases hijas. El cdigo es el siguiente:

// ENTRENAMIENTO
System.out.println("nEntrenamiento: Solamente el entrenador y el
futbolista tiene metodos para entrenar:");
System.out.print(delBosque.getNombre()+" "+delBosque.getApellidos()+"
-> ");
delBosque.dirigirEntrenamiento();
System.out.print(iniesta.getNombre()+" "+iniesta.getApellidos()+" ->
");
iniesta.entrenar();
// MASAJE
System.out.println("nMasaje: Solo el masajista tiene el mtodo para
dar un masaje:");
System.out.print(raulMartinez.getNombre()+"
"+raulMartinez.getApellidos()+" -> ");

raulMartinez.darMasaje();
// PARTIDO DE FUTBOL
System.out.println("nPartido de Ftbol: Solamente el entrenador y el
futbolista tiene metodos para el partido de ftbol:");
System.out.print(delBosque.getNombre()+" "+delBosque.getApellidos()+"
-> ");
delBosque.dirigirPartido();
System.out.print(iniesta.getNombre()+" "+iniesta.getApellidos()+" ->
");
iniesta.jugarPartido();

Como vemos aunque el entrenador y los futbolistas asistan a un entrenamiento, los dos
hacen una funcin diferente en el mismo, por tanto hay que hacer mtodos diferente
para cada una de las clases. Ya veremos cuando hablemos del polimorfismo que
podremos ejecutar el mismo mtodo para clases diferentes y que esos mtodos hagan
cosas distintas. Como resultado al cdigo mostrado tenemos lo siguiente:

Entrenamiento: Solamente el entrenador y el futbolista


tiene metodos para entrenar:
Vicente Del Bosque -> Dirige un entrenamiento
Andres Iniesta -> Entrena

Masaje: Solo el masajista tiene el mtodo para dar un


masaje:
Ral Martinez -> Da un masaje

Partido de Ftbol: Solamente el entrenador y el


futbolista tiene metodos para el partido de ftbol:
Vicente Del Bosque -> Dirige un partido
Andres Iniesta -> Juega un partido

CONCLUSIONES Y ACLARACIONES:
Esto ha sido todo lo que hemos contado sobre la herencia en esta entrada. El tema de la
herencia es un tema que puede ser un poco ms complejo de lo que lo hemos contado
aqu, ya que solo hemos contado lo que es la herencia simple (ya que Java por el

momento es el nico tipo de herencia que soporta) y no la herencia mltiple, que es un


tipo de herencia en la que una clase hija puede tener varios padres, aunque por el
momento si estis empezando a aprender el concepto de la herencia, con la herencia
simple tenis ms que suficiente. Para los que os estis iniciando en el mundo de la
ingeniera informtica, habris podido ver que hemos puesto unos ejemplo mostrando
unos diagramas un poco raros; pues bien, estos diagramas se llaman diagramas de
clases (que los hemos realizado con la herramienta web de www.genmymodel.com) y
sirven para representar de forma grfica los atributos y mtodos de las clases y las
relaciones entre ellos, utilizando el lenguaje UML del cual intentaremos hablar ms
adelante en otros tutoriales. Por ltimo decir y aclarar que en esta entrada quizs no
hemos utilizado una terminologa correcta para explicar la herencia, pero lo hemos
explicadode una forma algo distinta a como esta explicada por ahi para que los que
empeceis podais entender la herencia desde otro punto de vista.

Artculos Relacionados

Polimorfismo en Java (Parte I), con ejemplos

Interface en Java 8 -Metodo Default- con ejemplos

Polimorfismo en Java -Interface- (Parte II), con ejemplos

Enum (Enumerados) en Java, con ejemplos

Map en Java, con ejemplos

Excepciones (Exception) en Java, con ejemplos

Configurar formateo de cdigo en Eclipse

Multitarea e Hilos en Java con ejemplos (Thread & Runnable)

Multitarea e Hilos en Java con ejemplos II (Runnable & Executors)

Atributos para diseadores Android (tools:xxxxx)

Comparte esta entrada en:

ENTRADA PUBLICADA EL: 8/abril/2014


CATEGORIA: Ingeniera del Software, Lenguajes de Programacin
TAGS: extends : herencia : java : poo : programacin orientada a objetos : protected

Herencia en Java, con ejemplos por "www.jarroba.com" esta bajo una licencia Creative
Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Creado a partir de la obra en www.jarroba.com

25 Comentarios de Herencia en Java, con ejemplos

1.

Diego Jose

09/01/2015 a las 09:55

Hola amigo, disculpa , Como haces esos diagramas de clases?


Gracias de antemano
RESPONDER

Richard [Admin Jarroba]

o
11/01/2015 a las 18:01

Hola
Diego.
Para hacer los diagramas de clase (en esta entrada) he utilizado esta
web https://api.genmymodel.com que te permite crear algunos diagramas con UML.
SL2
RESPONDER

2.

xxxx

29/12/2014 a las 13:31

que lastima ivan bien, ..hasta que encontr los puntos suspensivos, y por ejemplo
getNombre no lo encontr por ningn lado.
RESPONDER

alias

o
29/12/2014 a las 19:18

Es
que
public
return
}

no

los

ponen

pero
String

van

public
String
return
}
Tienes que hacer los mtodos.

as

en

getApellidos()

la

clase
padre:
getNombre(){
this.Nombre;

{
this.Apellidos;

RESPONDER

Ramn [Admin Jarroba]

o
30/12/2014 a las 19:42

Gracias
Alias.
Los getter y setter, de establecimiento u obtencin de valores de las variables globales,

se han obviado para que el artculo no quedara muy denso, y fuera sencillo de
entender
RESPONDER

3.

alfredo

03/12/2014 a las 03:01

Tengo una duda, si yo quisiera dentro de la clase hija llamar un metodo de otra clase y
ese metodo requiera el objeto herdado, de que forma podria solucionar eso.
EJemplo.
public clase1 extends clase2{
clase3
objeto=
new
clase3();
objeto.metodo1( aqui necesito enviarle el objeto heredado, es decir el objeto de tipo
clase2);
}
cabe aclarar que debe ser ese objeto. no me sirve instanciar uno nuevo. debe ser ese con
la informacion que se ha modificado en esa instancia..
por otro lado muy buena entrada, muchas gracias por compartir el conocimiento y
quisiera me pudieran responder.
Gracias
Saludos.

nuevamente.

RESPONDER

Ramn [Admin Jarroba]

o
08/12/2014 a las 16:31

Hola Alfredo,
creo
que
te
servir
la
inferencia
tipos: https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html

de

RESPONDER

4.

Eduardo

17/11/2014 a las 21:13

Buenas me parece muy interesante el tutorialpero hay dos cosas que no he visto o
faltan:
1 Como es que en el for utilizas otra variable integrante ? con integrantes ya puedes
recorrer el arraylist no ? No veo la necesidad de utilizar otra variable.
2 en integrante.viajar o integrante.concentrarse tendrias que poner un print en la
definicion de cada accion no para que salga el mensaje de pantalla ?
3 No entiendo muy bien a que viene partido de futbol, no es clase ni superclase. no
habeis explicado para que se pone.
Espero ayudar a otros que tengan las mismas dudas o parecidas. Gran trabajo
Saludos
RESPONDER

5.

Ronald

02/09/2014 a las 23:54

Hola..!!
Excelente
explicacin.
Una pregunta la clase Futbolista tambin hereda el Id de la clase padre.?

Es decir al momento de guardar los datos en una base de datos, el Id llave primaria de la
clase
padre,
pasara
como llave fornea a la clase hija?, o tengo que crear una llave primaria para la clase
hija?
Muchas gracias.
RESPONDER

Richard [Admin Jarroba]

o
03/09/2014 a las 08:24

Hola
Ronald.
En la herencia se heredan todos los atributos de la clase padre, as que el id tambin lo
hereda.
Otra cosa es que te plantees (en una base de datos), meter todas las clases que heredan
de una misma clase padre en una misma tabla o en tablas diferentes. Eso ya es un tema
diferente, pero te aconsejaria que lo hicieses en tablas diferentes, salvo que utilizases
bases de datos como MongoDB que lo podrias meter todo en una misma coleccin.
Cualquier otra duda nos dices.
SL2
RESPONDER

6.

angel

23/07/2014 a las 05:28

gracias he aprendido mucho


RESPONDER

diego

o
10/11/2014 a las 21:04

Que bien, Te felicito


RESPONDER

7.

Jazz

22/07/2014 a las 15:54

Muchas gracias por la explicacin.


RESPONDER

8.

Julin

14/07/2014 a las 19:02

Ser que me puede responder esta pregunta?; Puede un objeto heredar atributos y
mtodos de mas de un objeto padre? Que cualidad sustenta o impide esta posibilidad?
RESPONDER

Richard [Admin Jarroba]

o
15/07/2014 a las 10:48

Hola
Julin.
Eso que comentas se llama herencia mltiple y hasta la fecha Java no soporta herencia
mltiple. Hay otros lenguajes como C++ que si tienen herencia mltiple pero si te soy
sincero hasta la fecha no he hecho nada con herencia mltiple, aunque sabiendo bien el
concepto
de
herencia
seria
fcil
aplicarla.
SL2

RESPONDER

9.

Jorge

10/07/2014 a las 17:10

Tengo
una
duda
respecto
a
la
palabra
reservada
protected.
S que de esta manera, todos aquellos atributos de una clase que vienen precedidos del
modificador protected sern visibles desde todas las clases hijas de la clase abstracta
donde
se
declara
ese
atributo
protected.
As pues si en la clase Empleado definimos:
public
{
protected
.
}

abstract

class
int
.

Empleado
sueldo;
.

entonces desde la clase Ejecutivo (que extiende de Empleado) se puede acceder al dato
miembro sueldo, mientras que si se declara private no.
As pues de qu me sirve poner protected, si la puedo poner private y acceder a ella
mediante getters y setters???
RESPONDER

Ramn [Admin Jarroba]

o
10/07/2014 a las 20:27

Hola Jorge,
cualquier clase, herede de algo o no, que tenga variables globales privadas no podrn ser
accedidas desde ningn sitio que no sea desde dentro de su clase, por lo que si quieres
acceder
a
stas
requieres
poner
unos
getters
y
setters.

La diferencia de poner getter o setter o poner las variables pblicas (o protected si son
heredadas) es la seguridad del objeto y por convencin de los programadores.
Un ejemplo de seguridad del objeto sera que si tienes una variable global como:
public
int
noNumeroCero
=
1;
Y por cualquier cosa requieres que nunca sea cero (por ejemplo, porque vayas a usar la
variable como divisor; sabemos que dividir entre cero da error), si pueden acceder desde
fuera directamente al ser pblica, podrn ponerte un cero y el programa fallar. Si
ponemos getter o setter podemos hacer la comprobacin en el propio
setNoNumeroCero(). Evidentemente, dependiendo de la lgica del programa, se podra
hacer la comprobacin antes de usar la variable.
Principalmente los getter y setter son por convencin, para si por ejemplo, yo te pasara
una clase, t sin tener que mirar mucho ms que los getter y setter supieras como usar la
clase.
RESPONDER

Jorge

10/07/2014 a las 23:33

Gracias por responder! A ver si me ha quedado claro el tema de usar o no getters y


setters es por convencin (quieres decir por estndar?), y tambin por seguridad, no?
Vale, pero si tu me pasas una clase con una serie de atributos protected, yo podr,
mediante sus setters cambiar sus valores aunque no sea en ninguna de sus clases hijas
entonces donde est la seguridad? o no les pondras getters ni setters para que no pueda
tocarlos?
De esta manera lo natural sera NO poner setters a los atributos protected de cualquier
clase abstracta (de manera que aseguramos su visibilidad) y usar slo los getters y
setters en las propiedades privadas que nos interesen, excluyendo aquellas que puedan
resultar peligrosas tocarlas desde otro sitio.
Lo he entendido bien?
Gracias de nuevo!
RESPONDER

Ramn [Admin Jarroba]

13/07/2014 a las 20:52

La seguridad puede implicar no tocar las variables globales con un private y no poner
setter, esto lo que hace es que nadie fuera de la clase la pueda tocar. Con seguridad me
refiero a que no se admita cualquier valor en la variable y haya que controlar la entrada
del valor (lo que te deca en el ejemplo anterior de no permitir el cero).
De todas maneras, por norma pon siempre los getter y setter (El nico que se salva es si
programas en Android; en donde est desaconsejado el uso de getter o setter para ahorro
de tiempo de proceso, batera, etc; es la nica excepcin y an as, muchos
programadores los siguen usando).
RESPONDER

Jorge

14/07/2014 a las 10:52

Gracias! aclarado todo.

10.

Andres

08/07/2014 a las 13:45

Hola
gracias
por
los
tutoriales
me
parecen
muy
buenos.
Una pregunta, por que existen dos constructores en cada una de las clases? No entiendo
por
que
uno
esta
vacio
y
el
otro
no.
Gracias!
RESPONDER

Richard [Admin Jarroba]

o
08/07/2014 a las 14:46

Hola
Andrs.
En este caso he puesto dos constructores uno sin atributos y otro con atributos para
poder inicializar el objeto con el propio constructor sin necesidad de crearme un objeto
y luego tener que ir llamando a cada uno de los mtodos setter para asignar un valor a
los atributos, es simplemente por eso por lo que he hecho dos constructores para escribir
algo
menos
de
cdigo
en
definitiva.
SL2
RESPONDER

Andres

08/07/2014 a las 17:18

Ahh
ya
entiendo,
muchas
gracias.
Los felicito por su blog hay muchas cosas en Java que me parecen excelentes.
Gracias.
RESPONDER

11.

Javier

04/07/2014 a las 17:44

Muchas gracias!. Son muy didcticas sus explicaciones.


RESPONDER

12.

Dunkelheit

03/07/2014 a las 01:05

Hola, su Web y explicaciones me parecen de lo mejor. Las explicaciones son claras para
personas que empiezan en el mundo de la informtica, porque no son explicaciones con
mucho lenguaje tcnico.

RESPONDER

Dejanos tu comentario
NOMBRE: OBLIGATORIO

E-MAIL: OBLIGATORIO, NO SERA PUBLICADO

WEB O BLOG:

COMENTARIO:

Enviar Comentario

www.jarroba.com 2015
By Reimon & Richard

S-ar putea să vă placă și