Академический Документы
Профессиональный Документы
Культура Документы
Programacin Orientada a
Objetos
Conceptos bsicos de la programacin
orientada a objetos:
Clase
Atributo
Mtodo
Encapsulamiento
Constructor
Herencia
Polimorfismo
Sobre-Carga
Sobre-Escritura
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;
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
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.
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
TestAvion
+static main(args(): String):void
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
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
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
Modificadores de Acceso
La siguiente tabla muestra en
resumen las caractersticas de los
modificadores de acceso:
Visibilidad
Publi
c
Protected
Deful
t
Privat
e
Si
Si
Si
Si
Si
Si
Si
No
Si
Si
Si
No
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 {
}
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(){
}
}
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
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
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
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
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.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
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
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
Interfaces
Otro ejercicio de interfaces:
<<Interface>>
Volador
<<Interface>>
Movil
+despegar(): void
+aterrizar(): void
Halcon
Ave
Avion1
MotoCicleta1
AutoMovil
+despegar(): void
+aterrizar(): void
+batirAlas(): void
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?