Вы находитесь на странице: 1из 73

Curso Lenguaje de Programacin Java

Programacin Orientada a
Objetos
Conceptos bsicos de la programacin
orientada a objetos:

Clase
Atributo
Mtodo
Encapsulamiento
Constructor
Herencia
Polimorfismo
Sobre-Carga
Sobre-Escritura

Programacin Orientada a Objetos.

Encapsulamiento
Una
posible
definicin
de
encapsulamiento sera, la capacidad
de tiene un objeto de ocultar del
exterior su implementacin.
A la parte visible del objeto se le
llama interfaz.

Encapsulamiento
Por qu es necesario el
encapsulamiento?
public class Persona {
public String nombre;
public String apellidos;
public float peso;
}
public class TestPersona {
public static void
main(String[] args){
Persona tu;
tu = new Persona();
tu.nombre = "Juanita";
tu.apellidos = "Perez
Gonzalez";

tu.peso = - 50.45f;
}

Encapsulamiento
Cmo resolvemos este problema?
public class Persona {
public String nombre;
public String apellidos;

private float peso;


public float getPeso(){
return peso;
}
public void setPeso(float
peso){
if(peso >=0){
this.peso =
peso;
}
}
}

public class TestPersona {


public static void
main(String[] args){
Persona tu;
tu = new Persona();
tu.nombre = "Juanita";
tu.apellidos = "Perez
Gonzalez";

tu.setPeso(- 50.45f);
}
}

Encapsulamiento
Pero un buen diseo Orientado a
Objetos
implementar
encapsulamiento
en
todos
los
atributos
del
objeto
quedando
nuestro ejemplo como sigue:

Encapsulamiento
public class Persona {
private String nombre;
private String apellidos;
private float peso;
public String getApellidos() {
return apellidos;}
public void setApellidos(String
apellidos) {
this.apellidos = apellidos;}
public String getNombre() {
return nombre;}
public void setNombre(String nombre)
{
this.nombre = nombre;}
public float getPeso(){
return peso;}
public void setPeso(float peso){
if(peso >=0){
this.peso = peso;}}
}

Encapsulamiento
Una clase que encapsule todos sus
atributos es diseada pensado en el
futuro, por que es mucho ms
reutilizable, como lo veremos ms
adelante en herencia y sobreescritura de mtodos.

Encapsulamiento
Ejercicio de encapsulamiento.

Aplica el encapsulamiento en la
siguiente clase:
Avion
+marca: String
+modelo: String
+tipo: String
+numeroDePlazas: int
+numeroMotores: int
+peso: float
+alturaMaxima: float
+numeroOperadores: int

TestAvion
+static main(args(): String):void

Programacin Orientada a Objetos

Constructores
En la POO se trabajan objetos, todos
los
objetos
tienen
que
ser
construidos, la tarea de construir un
objeto recae en el constructor.
Los constructores se utilizan para
inicializar las variables atributo de la
clase.

Constructores
Los constructores son estructuras muy
parecidas a los mtodos, con algunas
diferencias.
Se ejecutan automticamente.
No tiene tipo de retorno.
Se llaman exactamente igual a la clase.
El constructor va despus de la palabra

reservada new.
Pueden existir varios constructores en una clase.

Avion a = new Avion();


constructor

Este es el

Constructores
Ejercicio de Constructores.
Avion
-marca: String
-modelo: String
-tipo: String
-numeroDePlazas: int
-numeroMotores: int
-peso: float
-alturaMaxima: float
-numeroOperadores: int
+getMarca(): String
+setMarca(marca: String): void
+....()
+Avion()
+Avion(marca: String)
+Avion(marca: String, modelo: String)
+Avion(marca: String, modelo: String, tipo: String)
+Avion(marca: String, modelo: String, tipo: String, numeroPlazas: int)

TestAvion
+static main(args(): String):void

Constructores
Otro ejercicio de constructores.
Persona1
-nombre: String
-apellidos: String
-diaNacimiento: byte
-mesNacimiento: short
-aoNacimiento: long
-fallecido: boolean
+...()
+Persona1()
+Persona1(nombre:
+Persona1(nombre:
+Persona1(nombre:
+Persona1(nombre:

String)
String, apellidos: String)
String, apellidos: String, dia: byte, mes: short, ao: long)
String, apellidos: String, dia: byte, mes: short, ao: long, fallecido: boolean)

Persona1Test
+static main(args(): String):void

Constructores
La llamada a otros constructores en
la misma clase se hace utilizando la
palabra reservada this. Y entre
parntesis el numero de argumentos
que utiliza el constructor, por
ejemplos:
this(marca)
this(marca, modelo).

Constructores
Modifiquemos la clase Avion para ver

como funciona this().


Avion
-marca: String
-modelo: String
-tipo: String
-numeroDePlazas: int
-numeroMotores: int
-peso: float
-alturaMaxima: float
-numeroOperadores: int
+getMarca(): String
+setMarca(marca: String): void
+....()
+Avion()
+Avion(marca: String)
+Avion(marca: String, modelo: String)
+Avion(marca: String, modelo: String, tipo: String)
+Avion(marca: String, modelo: String, tipo: String, numeroPlazas: int)

TestAvion
+static main(args(): String):void

Programacin Orientada a Objetos.

Herencia
La herencia esta en todas partes en
Java, aun y cuando nosotros no
escribamos
cdigo
manejando
intencionalmente la herencia. Todas
las clases que nosotros escribimos
heredan a la Clase Object.
Qu es la herencia?

Herencia
Podemos definir herencia como la
capacidad que tiene un objeto de hacer
propias las caractersticas de un
segundo objeto.
Cuando una persona recibe las riquezas
econmicas de otra se le llama
herencia, de la misma manera un
objeto puede recibir las riquezas
(mtodos y atributos) de otro.

Herencia
La herencia se indica con la palabra
reservada extends. Veamos un
public
class Persona {
ejemplo:
private String nombre;
private String apellidos;
private float peso;
public String getApellidos() {
Sub clase
return apellidos;}
public class Empleado extends
...
}

Super clase

Persona{
private String puesto;
private float salario;
public float getSalario(){
return salario;
}
...
}

Herencia
Ejercicio de Herencia.
Construyamos las clases anteriores y
construyamos objetos de ambas y
observemos sus atributos y mtodos.

Herencia
Notas importante sobre la herencia:
En

java solo se puede utilizar


herencia simple, es decir, una clase
solo puede tener una superclase.
Para simular la herencia mltiple se
utilizan las interfaces, lo veremos
ms adelante.
Los constructores no son heredados.

Encapsulamiento y
Herencia
Ejercicio de Repaso:

Telefono
-marca: String
-modelo: String
+...()
+contestar(): void
+hacerLlamada(numero: String): void

Celular1
-duracionBateria: float
-numeroLlamadas: int
+...()

Celular2
-numeroMensajesEnviados: int
+...()
+enviarMensaje(mensaje: String, numero: String): boolean
+recibirMensaje(mensaje: String, numero: String): boolean

Celular3
+numeroFotos: int
+...()
+tomarFoto(): void

Programacin Orientada a Objetos

Modificadores de Acceso
Al igual que hay ciertas cosas que una
persona no puede heredar de otra.
Tambin nosotros podemos indicar que
riquezas (atributos y mtodos) van a
poder ser heredados de una clase.
Los modificadores de acceso de colocan
generalmente como primer elemento
en la declaracin de una variable o una
clase.

Modificadores de Acceso

Tenemos cuatro diferentes modificadores


de acceso en Java:
public
protected
default (no escribir un modificador)
private
Mientras vayamos bajando en la lista de
arriba cada modificador de acceso ser
ms restrictivo.

Modificadores de Acceso
La siguiente tabla muestra en
resumen las caractersticas de los
modificadores de acceso:
Visibilidad

Publi
c

Protected

Deful
t

Privat
e

Desde la misma clase

Si

Si

Si

Si

Desde cualquier clase en el


mismo paquete

Si

Si

Si

No

Desde una subclase desde


el mismo paquete

Si

Si

Si

No

Desde una subclase fuera


del mismo paquete

Si

Si, a travs
de la
herencia

No

No

Desde cualquier no
subclase fuera del mismo
paquete

Si

No

No

No

Herencia
Hagamos algunos ejemplos para
revisar el comportamiento de los
modificadores de acceso.

Herencia
Cuando utilizamos la herencia, no
heredamos
los
constructores
de
nuestra clase super.
Para poder
invocarlos
utilizamos
la
palabra
reservada super y entre parntesis los
argumentos que utiliza el constructor.
super();
super(n0mbre);
super(nombre, apellidos);

Herencia
Modifiquemos nuestro ejemplo para
ver el uso de super()
Persona1
-nombre: String
-apellidos: String
-diaNacimiento: byte
-mesNacimiento: short
-aoNacimiento: long
-fallecido: boolean
+...()
+Persona1(nombre: String)
+Persona1(nombre: String, apellidos: String)
+Persona1(nombre: String, apellidos: String, dia: byte, mes: short, ao: long)
+Persona1(nombre: String, apellidos: String, dia: byte, mes: short, ao: long, fallecido: boolean)

Empleado
-puesto: String
-salario: float
+...()
+Empleado(nombre:
+Empleado(nombre:
+Empleado(nombre:
+Empleado(nombre:

String)
String, apellidos: String)
String, apellidos: String, puesto: String)
String, apellidos: String, puesto: String, salario: float)

TestsHerencia
+static main(args(): String):void

Herencia
La palabra final puede ser colocada
como un modificador de la clase por
ejemplo:
public final class MyClase {
}

Indicando que la clase no puede ser


heredada, la clase String es un
ejemplo de esto.

Herencia
La palabra reservada final tambin
puede ser colocada como un
modificador de un mtodo, si se
coloca indica que un mtodo no
puede ser sobre-escrito en la
subclase. Ms adelante revisaremos
public class MyClase {
esto.
public final void
metodo(){
}
}

Programacin Orientada a Objetos

Polimorfismo
El polimorfismo puede ser definido
como la capacidad de tratar a un objeto
de varias formas, por ejemplo, un
objeto empleado pude ser tratado como
una persona, al fin y al cabo un
empleado es una persona.
Ejemplo de una lnea que utilic
polimorfismo:
Persona p = new Empleado();

Polimorfismo
Persona p = new Empleado();
Lo que estamos diciendo en la lnea
anterior es que creamos un empleado,
pero de ese empleado solo nos
interesa ver las caractersticas de su
persona.
Pero
como
empleado
tambin tiene un puesto y un salario,
pero no lo podremos ver.

Polimorfismo
Hagamos
ejemplo de
Polimorfismo.

un

Telefono
-marca: String
-modelo: String
+...()
+contestar(): void
+hacerLlamada(numero: String): void

Celular1
-duracionBateria: float
-numeroLlamadas: int
+...()

Polimorfismo
+static main(args(): String):void

Celular2
-numeroMensajesEnviados: int
+...()
+enviarMensaje(mensaje: String, numero: String): boolean
+recibirMensaje(mensaje: String, numero: String): boolean

Celular3
+numeroFotos: int
+...()
+tomarFoto(): void

Polimorfismo
Ahora vemos como
utilizar
el
polimorfismo y el
paso de argumentos
a mtodos.
Polimorfismo
+hacerLlamada(tel: Telefono): void
+static main(args(): String):void

Telefono
-marca: String
-modelo: String
+...()
+contestar(): void
+hacerLlamada(numero: String): void

Celular1
-duracionBateria: float
-numeroLlamadas: int
+...()

Celular2
-numeroMensajesEnviados: int
+...()
+enviarMensaje(mensaje: String, numero: String): boolean
+recibirMensaje(mensaje: String, numero: String): boolean

Celular3
+numeroFotos: int
+...()
+tomarFoto(): void

Programacin Orientada a Objetos(Herencia).

SobreEscritura de
Mtodos
La sobre-escritura consiste en reemplazar
el comportamiento de un mtodo
heredado.
Para sobre-escribir un mtodo simplemente
hay que volver a escribirlo en la sub clase.
Solo pueden sobre-escribirse aquellos
mtodos que sean heredados., por ejemplo
los mtodos private no se heredan, por lo
tanto no se pueden sobre-escribir.

SobreEscritura de
Mtodos
El siguiente es un ejemplo de sobreescritura:
public class TelefonoAnalogo{
public void marcar(int numero){
//Cosas para marcar con un telfono
Anlogo
}//marcar()
}//TelefonoAnalogo
public class TelefonoDigital extends
TelefonoAnalogo{
public void marcar(int numero){
//Cosas para marcar con un telfono
Digital
}//marcar()
}//TelefonoDigital

Sobre-Escritura de
Mtodos
Ejemplo de sobre-escritura de
mtodos:
Mamifero
+sexo: char
+comer(String alimento): void
+comunicarse(): void
+caminar(): void
+respirar(): void
+aparear(pareja: Mamifero): void

J irafa

Leon

Humano

+comer(String alimento): void


+comunicarse(): void
+caminar(): void
+respirar(): void
+aparear(pareja: Mamifero): void

+comer(String alimento): void


+comunicarse(): void
+caminar(): void
+respirar(): void
+aparear(pareja: Mamifero): void

+comer(alimento: String): void


+comunicarse(): void
+caminar(): void
+respirar(): void
+aparear(pareja: Mamifero): void

Programacin Orientada a Objetos(Herencia).

Sobre-Carga de Mtodos
La programacin orientada a objetos
permite el tener varios mtodos con
el mismo nombre pero con diferentes
firmas. Por ejemplo podemos tener 2
mtodos
que
se
llamen,
suma(valor1:int,
valor2:int)
y
suma(valor1:float, valor2:float).

Sobre-Carga de Mtodos
La firma de un mtodo esta formada
por el
nmero y tipo de los
argumentos. En el ejemplo de los
dos mtodos suma, tenia el mismo
nmero de argumentos sin embargo
eran de diferentes tipos, por lo tanto
es un mtodo sobre-cargado.

Sobre-Carga de Mtodos
Ejemplo de sobre-carga con valores
primitivos:
SobreCarga
+metodo(): void
+metodo(valor: byte): void
+metodo(valor;short): void
+metodo(valor: int): void
+metodo(valor: long): void
+metodo(valor: boolean): void
+metodo(valor: float): void
+metodo(valor: double): void
+metodo(valor1: byte, valor2: byte): void
+metodo(valor1: byte, valor2: short): void
+metodo(valor1: byte, valor2: int): void
+metodo(valor1: float, valor2: boolean): void

TestSobreCarga
+static main(args(): String):void

Sobre-Carga de Mtodos
Ejemplo de Sobre-Carga con
Referencias:
SobreCargaReferencias

TestSobreCargaRef

+metodo(): void
+metodo(animal: Animal): void
+metodo(leon: Leon): void
+metodo(jirafa: J irafa): void
+metodo(humano: Humano): void

+static main(args(): String):void

Programacin Orientada a Objetos(Herencia).

Casting con Variables de


Referencia
El casting con variables de referencia
funciona un poco diferente al casting
con primitivos. El casting con
variables de referencia sobre se
puede hacer entre variables que
tenga una relacin de herencia. Y se
puede
hacer
con
algunas
restricciones que veremos con
ejemplos.

Casting con Variables de


Referencia
Ejemplos de casting de variables de
referencia:
Jirafa jirafa = new Jirafa();
Animal a = (Animal)jirafa;
Vertebrado v = (Vertebrado)a;
a = (Animal)v;
jirafa = (Jirafa)a;

Casting con Variables de


Referencia
Creemos
una
jerarqua de clase
para ver que es el
casting
de
referencias
TestCastingReferencias

+static main(args(): String):void

Vertebrado
-numeroVertebras: int
+getNumeroVertebras(): int
+setNumeroVertebras(numero: int): void

Mamifero
-sexo: char
+comer(String alimento): void
+comunicarse(): void
+caminar(): void
+respirar(): void
+aparear(pareja: Mamifero): void

J irafa

Leon

Humano

+comer(String alimento): void


+comunicarse(): void
+caminar(): void
+respirar(): void
+aparear(pareja: Mamifero): void

+comer(String alimento): void


+comunicarse(): void
+caminar(): void
+respirar(): void
+aparear(pareja: Mamifero): void

+comer(alimento: String): void


+comunicarse(): void
+caminar(): void
+respirar(): void
+aparear(pareja: Mamifero): void

Programacin Orientada a Objetos

Miembros Static
Los
atributos
y
mtodos
que
escribimos en una clase y los
marcamos como static, funcionan
diferente. Cuando a un miembro no le
ponemos la palabra static, se crea una
copia de el durante la instancia. Pero
con los miembros static no ocurre lo
mismo, por eso para llamarlos solo
tenemos que poner el nombre de la
clase y el nombre del miembro.

Miembros static
public class Clase {
public int atributo1;
static public int atributo2;
}
Para llamar un miembro no static tengo que
hacer lo siguiente:

Clase miClase = new Clase();


miClase.atributo1 = 5;
Pero para llamar un miembro static solo tengo
que hacer lo as:

Clase.atributo2 = 5;

Miembros Static
Hagamos un ejemplo para identificar
como funcionan los miembros static:
Bicicleta
+static bicicletas: int
-clave: int
-marca: String
-modelo: String
-rodada: int
+Bicicleta()
+Bicicleta(marca: String)
+Bicicleta(marca: String, modelo: String)
+Bicicleta(marca: String, modelo: String, rodada: int)
+...()
+avanzar(): void
+frenar(): void
+cambiarVelocidad(): int

TestBicicleta
+static main(args(): String):void

Miembros Static
Hagamos otro ejercicio
Circulo
+static PI: double
-radio: float
+getRadio(): float
+setRadio(radio: float): void
+calcularDiametro(): float
+calcularPerimetro()

TestCirculo
+static main(args[]: String): void

Programacin Orientada a Objetos

Clases Abstractas
Una clase abstracta es aquella que
tiene uno o varios mtodos sin
implementar (cdigo) y que solo indica
su nombre (firma). A los mtodos sin
implementacin se les coloca la palabra
abstract, si una clase tiene un mtodo
abstract, toda la clase tambin tiene
que ser abstract.
De una clase abstracta no podemos
hacer instancias!

Clases Abstractas
Las clases abstractas no sirven para
incluir funcionalidad que varios tipos
de objetos van a necesitar y no
queremos escribirla varias veces. Y
utilizando la herencias logramos que
unos
objetos
tenga
esa
funcionalidad.

Clases Abstractas
Ejemplo de la declaracin de una
clase abstracta:
public abstract class Vehiculo {
public void encender(){}
public abstract float acelerar();
}
class Carro extends Vehiculo{
public float acelerar(){
return 10.00f;
}
}

Clases Abstractas
Veamos un ejemplo del uso de clases
abstractas:
Vehiculo
-marca: String
-modelo: String
+encendido: boolean
-velocidadMaxima: float
+...()
+encender(): boolean
+apagar(): boolean
+acelerar(): float
+frenar(): float

MotoCicleta

Carro

Lancha

Aeroplano

+acelerar(): float
+frenar(): float

+acelerar(): float
+frenar(): float

+acelerar(): float
+frenar(): float

+acelerar(): float
+frenar(): float

Programacin Orientada a Objetos

Interfaces
Las interfaces en java son como clases en
las cuales solo colocamos mtodos
abstractos.
Una interfaz nos permite
poner los mtodos que debe de tener una
clase. Una interfaz tampoco se puede
instanciar y debe ser implementada por
una clase (concreta) que esta obligada a
poner funcionalidad a los mtodos.
Tambin puede ser implementada por una
clase abstracta sin embargo no esta
obligada a implementar los mtodos.

Interfaces
Un ejemplo de declaracin de
interfaz se hace de la siguiente
manera:
public interface Interfaz {
int atributo = 0;
void metodo();
}
class Clase implements Interfaz{
public void metodo(){
}
}

Interfaces
Cuando declaras un atributo en un
interfaz tiene los siguiente modificadores
por omisin:
public
static

Y un mtodo:
public
Estos no pueden ser cambiados.

Interfaces
Una interfaz puede ser heredada por
otra interfaces ejemplo:
public interface Interfaz1 {
int atributo = 0;
void metodo();
}
interface Interfaz2 extends
Interfaz1{
}

Interfaces
Una
interfaz
puede
ser
implementada
por
una
clase
abstracta, pero no es necesario
implementar
todos
sus
mtodos:
public interface Interfaz1 {
int atributo = 0;
void metodo();
}
abstract class abstracta implements
Interfaz1{
}

Interfaces
Ejercicio de interfaces:
<<Interface>>
Volador
+despegar(): void
+aterrizar(): void

<<Interface>>
Movil
+acelerar(incremento: float): float
+frenar(decremento: float): float

Pajaro

Avion1

MotoCicleta1

AutoMovil

+despegar(): void
+aterrizar(): void

+acelerar(incremento: float): float


+frenar(decremento: float): float

+acelerar(incremento: float): float


+frenar(decremento: float): float

+acelerar(incremento: float): float


+frenar(decremento: float): float

Interfaces
Otro ejercicio de interfaces:
<<Interface>>
Volador

<<Interface>>
Movil

+despegar(): void
+aterrizar(): void

Halcon

+acelerar(incremento: float): float


+frenar(decremento: float): float

Ave

Avion1

MotoCicleta1

AutoMovil

+despegar(): void
+aterrizar(): void
+batirAlas(): void

+acelerar(incremento: float): float


+frenar(decremento: float): float
+moverAlerones(): void

+acelerar(incremento: float): float


+frenar(decremento: float): float

+acelerar(incremento: float): float


+frenar(decremento: float): float

Canario

Boing

F12

DucatiSuperBike

KawasakiNinja

NissanSentra

McLarenF1

Interfaces
Veamos como utilizar el polimorfismo
con las clases abstractas y las
interfaces:
Volador volador = new Halcon();
Ave ave = new Canarioi();
Hagamos un ejemplo!

Ejercicios de Repaso

Ejercicios de Repaso

Preguntas
El instructor ha sabido comunicar las

ideas?
Los contenidos han sido claros?
El material ha sido suficiente para
entender los conceptos?
Qu calificacin le daras a el curso
hasta ahora?
Qu aconsejaras al instructor para
mejorar el curso y entiendas mejor los
conceptos?

Вам также может понравиться