Você está na página 1de 21

Programacin orientada a objetos en Java

Objeto
La programacin orientada a objetos requiere inicialmente identificar y modelar cada uno
de los entes que hace parte del problema, facilita la comprensin del tema, por ejemplo si
necesitramos crear un programa para la nmina de una empresa que cuenta nicamente
con tres empleados cuya informacin se muestra en el siguiente grfico 1, Para un
programador es sencillo identificar los entes, en caso que se necesite incluir un nuevo
empleado, aparece otro objeto como las caracterices descriptivas de cedula, apellido,
nombre y dems a partir de esto podemos definir que un objeto es un concepto, abstraccin
con limites bien definidos y con significado dentro del problema1

Tomada de Programacin orienta a objetos en Java Garcia L, 2010

Clases
1 Garca, L. (2010). Programacin orienta a objetos en Java (pp. 1-5).
Barranquilla, Colombia, Ediciones Uni Norte.

En su forma ms simple, una clase se define por la palabra reservada class seguida del
nombre de la clase. El nombre de la clase debe empezar por mayscula. Si el nombre es
compuesto, entonces cada palabra debe empezar por mayscula. Crculo, Rectngulo,
Triangulo y FiguraGeomtrica son nombres vlidos de clases. Por ejemplo, la clase Circulo
se define con tres atributos: el radio y las coordenadas x, y que definen la posicin del
centro del crculo.2
Ejemplo:
/* Esta clase define los atributos de un crculo */
public class Circulo {
int x;
int y;
int radio;
}
Una vez que se ha declarado una clase, se pueden crear objetos a partir de ella. A la
creacin de un objeto se le denomina instanciacin. Es por esto que se dice que un objeto es
una instancia de una clase y el trmino instancia y objeto se utilizan indistintamente. Para
crear objetos, basta con declarar una variable de alguno de los tipos de figuras geomtricas:
Circulo circulo1;
Circulo circulo2;
2 MARTNEZ LADRN DE GUEVARA, Fundamentos de programacin Java. Editorial EME.
ISBN 978-84-96285-26-32.

Para crear el objeto y asignar un espacio de memoria es necesario realizar la instanciacin


con el operador new.
circulo1 = new Circulo();
circulo2 = new Circulo();
Despus de crear los objetos, circulo1 y circulo2 almacenan los valores predeterminados de
la clase Circulo. A partir de este momento los objetos ya pueden ser referenciados por su
nombre. Los nombres circulo1 y circulo2 son las referencias vlidas para utilizar ambos
objetos.3

Elementos de una clase


Atributo
Un atributo es una propiedad que ayuda a describir un objeto 4
Bsicamente los tipos de datos para los atributos y (variables) pueden ser de dos clases:
TIPOS DE DATOS PRIMITIVOS.
En Java existen adems de objetos tipos de datos primitivos (int, float, etctera). Al
contrario que en C o C++ en Java el tamao de los tipos primitivos no depende del sistema
operativo o de la arquitectura, en todas las arquitecturas y bajo todos los sistemas
operativos el tamao en memoria es el mismo.5

3 MARTNEZ LADRN DE GUEVARA, Jorge. Fundamentos de programacin Java.


Editorial EME. ISBN 978-84-96285-36-2.
4 Garca, L. (2010). Programacin orienta a objetos en Java (pp. 1-5).
Barranquilla, Colombia, Ediciones Uni Norte.

En la Tabla 1 se muestran estos tamaos.


Tipo
boolean
char
byte
short
int
long
float
double

Definicin
true o false
Carcter Unicode de 16 bits
Entero en complemento a dos con signo de 8 bits
Entero en complemento a dos con signo de 16 bits
Entero en complemento a dos con signo de 32 bits
Entero en complemento a dos con signo de 64 bits
Real en punto flotante segn la norma IEEE 754 de 32 bits
Real en punto flotante segn la norma IEEE 754 de 64 bits

Tomado de Fernndez, O. (2005). Introduccin al lenguaje de programacin Java. (ed., Vol., pp. 12-13).
Dominio Publico .

Ejemplo:
public class Vehiculo {
String matricula;
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;
}
En este ejemplo, los atributos matricula, marca, modelo y color son cadenas de caracteres,
tarifa es un nmero real y disponible es un valor lgico.6
Ejemplo 2:
5 Fernndez, O. (2005). Introduccin al lenguaje de programacin Java. (ed.,
Vol., pp. 12-13). Dominio Publico .

// Fecha.java
public class Fecha {

TIPO

public int dia;


public int mes;
public int ao;
}

NOMBRE

Tomado de: http://dalila.sip.ucm.es/~manuel/JSW1/Slides/Encapsulacion.pdf

TIPO DE DATOS DE REFERENCIA.


Corresponde a un objeto de una clase, (no obligatoriamente distinta a la definida) en este
punto es donde radica gran parte de la importancia, flexibilidad y reutilizacin del
paradigma de orientacin a objetos; porque cuando se define atributos cuyo tipo sea una
clase se ampla el espectro de posibilidades, Cuando se define un atributo de este tipo no se

6 MARTNEZ LADRN DE GUEVARA, Jorge. Fundamentos de programacin Java.


Editorial EME. ISBN 978-84-96285-36-2.

separa espacio en memoria a para un nuevo objeto, si no que se define una referencia que
apuntara a un espacio de memoria con la estructura definida en la clase.7
MTODOS Y CONSTRUCTORES
Adems de definir los atributos de un objeto, es necesario definir los mtodos que
determinan su comportamiento. Toda clase debe definir un mtodo especial denominado
constructor para instanciar los objetos de la clase. Este mtodo tiene el mismo nombre de la
clase. Por ejemplo, para la clase Vehiculo, el identificador del mtodo constructor es
Vehiculo. El mtodo constructor se ejecuta cada vez que se instancia un objeto de la clase.
Este mtodo se utiliza para inicializar los atributos del objeto que se instancia. Para
diferenciar entre los atributos del objeto y los identificadores de los parmetros del mtodo
constructor, se utiliza la palabra this. De esta forma, los parmetros del mtodo pueden
tener el mismo nombre que los atributos de la clase. Esto permite hacer una asignacin
como la que se muestra a continuacin, donde this.marca se refiere al atributo del objeto y
marca al parmetro del mtodo. this.marca = marca; 8
Ejemplo:
public class Vehiculo {
String matricula;
String marca;
String modelo;
String color;
7 Garca, L. (2010). Programacin orienta a objetos en Java (pp. 1-8).
Barranquilla, Colombia, Ediciones Uni Norte.
8 MARTNEZ LADRN DE GUEVARA, Jorge. Fundamentos de programacin Java.
Editorial EME. ISBN 978-84-96285-36-2.

double tarifa;
boolean disponible;
// el mtodo constructor de la clase Vehiculo
public Vehiculo(String matricula, String marca, String modelo, String color, double tarifa)
{
this,matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}
}

La instanciacin de un objeto se realiza ejecutando el mtodo constructor de la clase.


Vehiculo vehiculo1 = new Vehiculo("4050 ABJ", "VW", "GTI", "Blanco", 100.0);
En este ejemplo se instancia el objeto vehiculo1. El mtodo constructor crea el objeto
vehiculo1 con la matrcula 4050 ABJ, marca VW, modelo GTI, color Blanco y
tarifa 100.0 euros.

PROPIEDADES DE LA POO
Encapsulamiento.

Es la propiedad del EOO que permite ocultar al mundo exterior la representacin


interna del objeto. Esto quiere decir que el objeto puede ser utilizado, pero los datos
esenciales del mismo no son conocidos fuera de l. La idea central del encapsulamiento
es esconder los detalles y mostrar lo relevante. Permite el ocultamiento de la informacin
separando el aspecto correspondiente a la especificacin de la implementacin; de esta
forma, distingue el "qu hacer" del "cmo hacer". La especificacin es visible al usuario,
mientras que la implementacin se le oculta. El encapsulamiento en un sistema orientado a
objeto se representa en cada clase u objeto, definiendo sus atributos y mtodos con los
siguientes modos de acceso:
Pblico (+) Atributos o Mtodos que son accesibles fuera de la clase. Pueden ser llamados
por cualquier clase, aun si no est relacionada con ella.
Privado (-) Atributos o Mtodos que solo son accesibles dentro de la implementacin de la
clase.
Protegido (#): Atributos o Mtodos que son accesibles para la propia clase y sus clases
hijas (subclases). Los atributos y los mtodos que son pblicos constituyen la interfaz de la
clase, es decir, lo que el mundo exterior conoce de la misma. Normalmente lo usual es que
se oculten los atributos de la clase y solo sean visibles los mtodos, incluyendo entonces
algunos de consulta para ver los valores de los atributos. El mtodo constructor (Nuevo,
New) siempre es Pblico.9

Ejemplo:

10

9 Recopilacin y Preparacin, Prof. Yusneyi Carballo, Universidad Central de


Venezuela - Escuela de Computacin - Algoritmos y Programacin Oct-05, Julio
07
10 Tomado de: https://gbenussi.wordpress.com/2012/06/01/programacionorientada-a-objetos-parte-ii-encapsulamiento-herencia-y-polimorfismo/

Tenemos cuatro constructores con distintos parmetros


public Vehiculo(String patente, int velocidad) {
this.patente = patente;
this.velocidad = velocidad;
}

public Vehiculo(int velocidad) {


this.patente = "No asignada";
this.velocidad = velocidad;
}

public Vehiculo(String patente) {


this.patente = patente;
this.velocidad = 0;
}

public Vehiculo() {
patente = "No asignada";
velocidad = 0;
}
Podemos notar que es posible implementar un constructor que acepte distinta cantidad de
parmetros, y dependiendo de como instanciemos el objeto, los valores iniciales sern
distintos. Por ejemplo:

Vehiculo miVehiculo1 = new Vehiculo("AB1234",50);//Patente: "AB1234", Velocidad: 50


Vehiculo miVehiculo2 = new Vehiculo(50);//Patente: "No asignada", Velocidad: 50
Vehiculo miVehiculo3 = new Vehiculo("AB1234");//Patente: "AB1234", Velocidad: 0
Vehiculo miVehiculo4 = new Vehiculo();//Patente: "No asignada", Velocidad:

La encapsulacin se refiere al hecho de ocultar una variable de nuestra clase hacia el


exterior, veamos un ejemplo relativo a nuestra clase Vehiculo. Supongamos queremos saber
el valor de la velocidad, para acceder al valor, simplemente tendramos que hacer:
1

System.out.println("Velocidad: " + vehiculo.velocidad );//Mostrar velocidad

2
vehiculo.velocidad = 10;//Asignar velocidad
Pero supongamos que nosotros no queremos que se pueda acceder de esta manera (por
ejemplo, en el contexto que tengamos una clase Cliente, perteneciente a un banco, nosotros
no queremos que se pueda cambiar el valor del saldo del cliente desde afuera de la clase),
por lo tanto, tendramos que hacer una encapsulacin de nuestra variable (en este caso, la
variable velocidad), para esto, en la declaracin de nuestra variable, debemos anteponer
la palabra reservada private antes del tipo de nuestra variable, con esto, le estamos
diciendo que nuestra variable solo puede ser vista desde dentro de nuestra clase (es decir,
solo podremos acceder a ella desde las funciones internas de nuestra clase). Aqu un
ejemplo de como convertir nuestra varible velocidad en privada:
1
private int velocidad;
Ahora si intentamos acceder a nuestra variable velocidad, no podremos hacerlo. Nota: las
variables que no anteponen ninguna palabra antes del tipo, se asume que son publicas (que
es la manera en la que hemos usado hasta ahora).
Mtodos Set Y Get
En Java cada vez es ms habitual la prctica de ocultar las propiedades y trabajar
exclusivamente con los mtodos. La razn es que no es recomendable que las propiedades

sean visibles desde fuera de la clase, por ello se declaran con una visibilidad private (o
protected). Siendo as cmo pueden las otras clases modificar el valor de una propiedad?
Mediante mtodos que permitan la lectura y escritura de esas propiedades, son los mtodos
get (obtener) y set (ajustar). Los get sirven para leer el valor de un atributo, nunca llevan
parmetros y el nombre del mtodo es la palabra get seguida del nombre de la propiedad
(por ejemplo getEdad). Los set permiten variar el valor de una propiedad. Por lo que como
parmetro reciben el nuevo valor y son mtodos siempre de tipo void.11
Ejemplo:
public class Persona {
private String nombre;
private int edad;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre=nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad=edad;
11 Programacin orientada a objetos - fundamentos de la programacin, Jorge
Snchez, 2010

}
}

Herencia
Es el proceso mediante el cual un objeto de una clase adquiere propiedades definidas en
otra clase que lo preceda en una jerarqua de clasificaciones. Permite la definicin de un
nuevo objeto a partir de otros, agregando las diferencias entre ellos (Programacin
Diferencial), evitando repeticin de cdigo y permitiendo la reusabilidad. Las clases
heredan los datos y mtodos de la superclase. Un mtodo heredado puede ser sustituido por
uno propio si ambos tienen el mismo nombre. La herencia puede ser simple (cada clase
tiene slo una superclase) o mltiple (cada clase puede tener asociada varias superclases).
La clase Docente y la clase Estudiante heredan las propiedades de la clase Persona
(superclase, herencia simple). La clase Preparador (subclase) hereda propiedades de la clase
Docente y de la clase Estudiante (herencia mltiple). 12
Codigo de Ejemplo Herencia en Java
Clase Padre Base Alumno

1 public class Alumno {


2
3 public String getNombre() {
4 return nombre;
5 }
12 Recopilacin y Preparacin, Prof. Yusneyi Carballo, Universidad Central de
Venezuela - Escuela de Computacin - Algoritmos y Programacin Oct-05, Julio
07

6
7 public String getClases() {
8 return clases;
9 }
10
11 public String getGrado() {
12 return grado;
13 }
14
15 public String getGrupo() {
16 return grupo;
17 }
18
19 public void setNombre(String nombre) {
20 this.nombre = nombre;
21 }
22
23 public void setClases(String clases) {
24 this.clases = clases;
25 }
26
27 public void setGrado(String grado) {
28 this.grado = grado;
29 }

30
31 public void setGrupo(String grupo) {
32 this.grupo = grupo;
33 }
34 private String nombre;
35 private String clases;
36 private String grado;
37 private String grupo;
38
39 protected void ir_a_clase(){
40
41 }
42
43 protected void estudiar(){
44
45 }
46 }

Clase Hija Alumno Regular

1 public class Regular extends Alumno{


2
3 public Regular(){
4
5 }
6

7 protected void pagar_inscripcion(){


8
9 }
10
11 protected void matricularse(){
12
13 }
14 }

Clase Hija Alumno Becario

1 public class Becario extends Alumno{


2
3 public Becario(){
4
5 }
6
7 protected void pagar_inscripcion(){
8
9 }
10 }

Clase Hija Alumno Intercambio

1 public class Intercambio extends Alumno{


2
3 public Intercambio(String nombre,String clases,String grado,String grupo){
4 super.setNombre(nombre);
5 super.setClases(clases);
6 super.setGrado(grado);
7 super.setGrupo(grupo);
8 }

9
10 protected void matricularse(){
11
12 }
13 }

Clase Principal Main

1
2 public class Main {
3 public static void main(String args[]){
4 Regular pepe = new Regular();
5 pepe.setNombre("Pepe");
6 pepe.setClases("Biologia,matematicas");
7 pepe.setGrado("2");
8 pepe.setGrupo("G");
9 pepe.ir_a_clase();
10
11 Intercambio luis = new Intercambio("Luis","Fisica,Ecologia","3","B");
12 luis.ir_a_clase();
13 luis.estudiar();
14 luis.matricularse();
15

Tomado de: http://jonathanmelgoza.com/blog/herencia-en-java/

Polimorfismo
POLI: Mltiple
MORFISMO: Formas

Es una propiedad del EOO que permite que un mtodo tenga mltiples implementaciones,
que se seleccionan en base al tipo objeto indicado al solicitar la ejecucin del mtodo. El

polimorfismo operacional o Sobrecarga operacional permite aplicar operaciones con igual


nombre a diferentes clases o estn relacionados en trminos de inclusin.
En este tipo de polimorfismo, los mtodos son interpretados en el contexto del objeto
particular, ya que los mtodos con nombres comunes son implementados de diferente
manera dependiendo de cada clase.
Por ejemplo, el rea de un cuadrado, rectngulo y crculo, son calculados de manera
distinta; sin embargo, en sus clases respectivas puede existir la implementacin del rea
bajo el nombre comn rea.
En la prctica y dependiendo del objeto que llame al mtodo, se usar el cdigo
correspondiente.
Ejemplos, Superclase: Clase Animal Subclases: Clases Mamfero, Ave, Pez Se puede
definir un mtodo Comer en cada subclase, cuya implementacin cambia de acuerdo a la
clase invocada, sin embargo el nombre del mtodo es el mismo. Mamifero.Comer
Ave.Comer Pez.Comer
Otro ejemplo de polimorfismo es el operador +. Este operador tiene dos funciones
diferentes de acuerdo al tipo de dato de los operandos a los que se aplica. Si los dos
elementos son numricos, el operador + significa suma algebraica de los mismos, en
cambio si por lo menos uno de los operandos es un String o Carcter, el operador es la
concatenacin de cadenas de caracteres.
Otro ejemplo de sobrecarga es cuando tenemos un mtodo definido originalmente en la
clase madre, que ha sido adaptado o modificado en la clase hija. Por ejemplo, un mtodo
Comer para la clase Animal y otro Comer que ha sido adaptado para la clase Ave, quien
est heredando de la clase Animal. Cuando se desea indicar que se est invocando (o
llamando) a un mtodo sobrecargado y que pertenece a otra clase (por ejemplo, a la clase

padre) lo indicamos con la siguiente sintaxis: Clase_Madre::nombre_mtodo; Para el


ejemplo, la llamada en la clase hija Ave del mtodo sobrecargado Comer de la clase madre
Animal sera: Animal::Comer13
Para poner en prctica se har un ejemplo bastante sencillo. Se har una librera de clases
que represente figuras tridimensionales y bidimensionales, y su respectiva jerarqua de
clases. Las clases deben ser capaces de tener funcionamiento bastante bsico, como obtener
reas, volmenes y permetros de la figura correspondiente.
La representacin de la jerarqua sera como sta:14

La superclase de dicha jerarqua podra ser muy parecida a sta:


public abstract class figura {
protected String nombre;
protected int color;
protected int grosorBorde;
public String getNombre(){
return this.nombre;
13 Recopilacin y Preparacin, Prof. Yusneyi Carballo, Universidad Central de
Venezuela - Escuela de Computacin - Algoritmos y Programacin Oct-05, Julio
07
14 Tomado de http://sobrepolimorfismo.blogspot.com.co/2013/07/elpolimorfismo-en-java-netbeans.html

}
public void setNombre(String n){
this.nombre=n;
}
public int getColor(){
return this.color;
}
public void setColor(int c){
this.color=c;
}
public int getGrosorBorde(){
return this.grosorBorde;
}
public void setGrosorBorde(int g){
this.grosorBorde=g;
}
public abstract void dibujar();
}
Las siguientes clases en el nivel de la jerarqua podran quedar muy parecidas a stas:
public abstract class figura2D extends figura {
public abstract int calcularArea();
public abstract int calcularPerimetro();
}
public abstract class figura3D extends figura {
public abstract int calcularVolumen();
}

Se le pide que forme las clases de la parte inferior de la jerarqua y que representaran los
objetos a instanciarse.
Adems, debe de realizar una implementacin de esta librera, en donde el usuario pueda
crear nuevas figuras y que stas se almacenen en un arreglo de figuras.

Mtodo concreto:

Figura a = new Crculo ();


Figura b = new Tringulo ();
Este fragmento de cdigo muestra el concepto de polimorfismo

RELACIN

Fuente: Departamento de informtica y sistemas, universidad de Murcia Espaa,


recuperado de
http://dis.um.es/~lopezquesada/documentos/IES_1213/IAW/curso/UT3/ActividadesAlumn
os/13/poli.htm - 12- 07-17

CUESTIONARIO
1- Cul es la descripcin que crees que define mejor el concepto 'clase' en la programacin
orientada a objetos?
Es un concepto similar al de 'array'
Es un tipo particular de variable
Es un modelo o plantilla a partir de la cual creamos objetos
Es una categoria de datos ordenada secuencialmente

2- Qu elementos crees que definen a un objeto?


Sus cardinalidad y su tipo
Sus atributos y sus mtodos
La forma en que establece comunicacin e intercambia mensajes
Su interfaz y los eventos asociados
3- Qu cdigo de los siguientes tiene que ver con la herencia?
public class Componente extends Producto
public class Componente inherit Producto
public class Componente implements Producto
public class Componente belong to Producto

4. Qu es Eclipse?
Una libreria de Java
Una versin de Java especial para servidores
Un IDE para desarrollar aplicaciones
Ninguna de las anteriores
Fuente: http://www.digitallearning.es/tests/java-poo.html

Você também pode gostar