0% encontró este documento útil (0 votos)
12 vistas37 páginas

Programacion Orientada A Objetos

Cargado por

Mario Salcedo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
12 vistas37 páginas

Programacion Orientada A Objetos

Cargado por

Mario Salcedo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 37

1

Unidad #2
Programación Orientada
a Objetos
PILARES DE LA
ORIENTACION A OBJETOS
Abstracción, Encapsulamiento, Herencia, Polimorfismo
Abstracción

Permite centrarse en
lo que hace el objeto
en lugar de como lo
hace.

Abstracción consiste
en imaginar un
objeto para poder
obtener sus
características,
atributos y funciones
esenciales para
luego crear un
modelo de ese
objeto y poder
generalizarlo.
Abstracción

La clave de la POO está en abstraer los métodos y datos


comunes de un conjunto de objetos y representarlos en una
clase.
Encapsulamiento

 Al empaquetamiento
de las variables de un
objeto bajo la
protección de sus
métodos se le llama
encapsulamiento
Encapsulamiento – Por
qué usarlo?
 Proporciona CONTROL
 La utilización del objeto es solamente a través de sus métodos
públicos (interfaz pública). Ocultamiento de su estructura
interna.
 Permite realizar CAMBIOS transparentes para los usuarios
del objeto
 La utilización del objeto no se ve afectada si se producen
cambios en el tipo de datos de la parte privada.
En POO se considera buena
práctica

Ocultar todos los atributos

Publicar métodos de acceso a los


atributos (get/set)

Publicar únicamente los métodos


necesarios
Package 8

Los paquetes en Java (packages) son la forma en la que Java nos


permite agrupar de alguna manera lógica los componentes de
nuestra aplicación que estén relacionados entre sí.

Los paquetes permiten poner en su interior casi cualquier cosa


como: clases, interfaces, archivos de texto, entre otros. De este
modo, los paquetes en Java permiten modularizar o categorizar las
diferentes estructuras que componen nuestro software.

Brindan un nivel adicional de seguridad para nuestras clases,


métodos o interfaces, pues podremos especificar si una clase o
interfaz en particular es accesible por todos los componentes del
software (sin importar el paquete) o si en realidad es solo accesible
por las clases que estén en el mismo paquete que ésta.
Creación de un paquete 9

package ruta.del.paquete;

Consideraciones:
• El paquete en Java se declara antes que
cualquier otra cosa.
• Cada punto en la ruta del paquete es una nueva
carpeta.
• Los paquetes en java se declaran siempre en
minúsculas y en caso de ser necesario las
palabras se separan usando un guion bajo.
• Si no se declara un paquete (paquete por
defecto)
Creación de un paquete 10

Ejemplos:
package otro_paquete.mi_paquete;
public class mi_clase {

package mis_clases.clases_publicas.clase_1;
public class Clase_1 {

}
Modificadores de acceso 11

PUBLIC:
•Este nivel de acceso permite acceder al elemento desde cualquier clase,
independientemente de que esta pertenezca o no al paquete en que se
encuentra el elemento.
PRIVATE
•Es el modificador más restrictivo y especifica que los elementos que lo
utilizan sólo pueden ser accedidos desde la misma clase en la que se
encuentran.
PROTECTED
•Indica que los elementos sólo pueden ser accedidos desde su mismo paquete y
desde cualquier clase que extienda la clase en que se encuentra,
independientemente de si esta se encuentra en el mismo paquete o no
DEFAULT
•Si no elegimos ningún modificador, se usa el de por defecto, que sólo puede
ser accedido por clases que están en el mismo paquete.
Modificadores de acceso 12
Clases 13

Clase - Sintaxis:
<modificador de acceso> class NombreClase
{
//miembros: atributos y metodos
}

Campos o Atributos – Sintaxis


<modificador de acceso> Tipo_Dato nombreAtributo <= valor_Inicial>;

Métodos – Sintaxis
<modificador de acceso> Tipo_Retorno nombreMetodo (<Parametros>)
{
//instrucciones
}
Objetos 14

Creación Objeto- Sintaxis:


• NombreClase objeto = new NombreClase(<parámetros>);

Atributo.- Para usar el atributo de un objeto,


Sintaxis:
• nombreObjeto.nombreAtributo

Método.- Para invocar o llamar a los métodos


de un objeto, Sintaxis:
• nombreObjeto.nombreMetodo()
Constructor 15

Un constructor es un
Su función es inicializar el
método especial de una
objeto y sirve para
clase que se llama
asegurarnos que los
automáticamente
objetos siempre
siempre que se declara un
contengan valores
objeto a partir de esa
válidos.
clase.

Características:
• Generalmente de tipo publico.
• No tiene de dato para devolver.
• Puede tener o no parámetros de
Los constructores se
entrada. pueden sobrecargar
• Se invoca automáticamente al
crear un objeto.
Constructor - tipos 16

Constructor implicito o
Constructor explicito.
por defecto.
Si para una clase no se Es un constructor
define ningún método incluido por el
constructor se crea programador para
uno realizar alguna tarea
automáticamente por de inicialización en el
defecto. momento de
construcción de la
Es un constructor sin clase.
parámetros que no
hace nada.
Constructor - Ejemplo 17

public class automovil {


private String marca, modelo, color;
private int estado, velocidadActual;

//constructor
public automovil(String marcaNueva, String modeloNuevo,
String colorNuevo)
{
this.color = colorNuevo;
this.marca = marcaNueva;
this.modelo = modeloNuevo;
this.estado = 0;
this.velocidadActual = 0;
}
}
Sobrecarga 18

Hace referencia a la posibilidad de


tener dos o más métodos con el mismo
nombre.

La forma de diferenciar a los métodos


esta dado por:

• La cantidad de parámetros que reciba el


método.
• Si dos métodos tienen la misma cantidad de
parámetros, entonces se los diferencia por el tipo
de dato de los parámetros.
Sobrecarga - Ejemplo 19

public void acelerar() public void acelerar(int velocidadFinal)


{ {
if(this.estado == 1) int i;
{ if(this.estado == 1
this.velocidadActual+=10; {
} …..
} }
}
}
20
Herencia
Es un mecanismo que permite
la definición de una clase
(subclase) a partir de la
definición de otra ya existente
(superclase).

La herencia proviene del hecho


de que la subclase (la nueva
clase creada) contiene las
atributos y métodos de la clase
primaria.

Está fuertemente ligada a la


reutilización del código en la
POO.
Herencia - 21

Tipos
 Simple.- Una clase
hereda de un solo
clase padre

 Múltiple.- Una clase


hereda de más de
una clase padre
Herencia y constructores 22

En una relación de herencia, cuando la superclase posee un


constructor, se recomienda que las subclases incluyan también un
constructor el cual permita inicializar a la subclase e invocar (usando
super) al constructor de la superclase para que se esta se inicialice.
Herencia – Datos importantes
Clase object no tiene superclase.

Cada clase tiene una y solo una superclase directa (herencia única).
•En ausencia de cualquier otra superclase explícita, cada clase es implícitamente una subclase
de la clase object.

Una superclase puede tener cualquier cantidad de subclases. Pero una


subclase solo puede tener una superclase.
•Java no admite herencia múltiple con clases.

Heredar constructores: una subclase hereda todos los miembros (campos,


métodos y clases anidadas) de su superclase.
•Los constructores no son miembros, por lo que no son heredados por subclases, pero el
constructor de la superclase puede invocarse desde la subclase.

Herencia de miembros privados: una subclase no hereda los miembros


privados de su clase principal.
•Sin embargo, si la superclase tiene métodos públicos o protegidos (como getters y setters) para
acceder a sus campos privados, estos también pueden ser utilizados por la subclase.
Clases abstractas 24

 Las clases abstractas son aquellas clases base (superclases)


de las que no se permite la creación de objetos. Estas
clases pueden o no contener métodos abstractos

 Un método abstracto es un método que se declara sin una


implementación (sin llaves y seguido de un punto y coma)

 Cuando una clase abstracta es parte de una relación de


herencia, la subclase generalmente proporciona
implementaciones para todos los métodos abstractos de la
superclase.
Clases abstractas 25
Polimorfismo 26

Significado común: Muchas formas.

Fuertemente ligado con el concepto de herencia.

Todo objeto que pertenece a una subclase pertenece


también a la superclase

Una subclase puede sobrescribir el comportamiento de


alguna clase padre en su jerarquía de herencia

Para un mismo mensaje cada clase se comporta de una


manera diferente (la implementación del método es
diferente)
Polimorfismo 27

 En el gráfico se puede apreciar


que la clase “animal” es
abstracta e incluye el método
abstracto “emitirSonido”.

 Las clases “perro” y “gato” son


subclases de “animal”, por lo
que deben incluir la
implementación del método
“emitirSonido” dentro de ellas.

 Como se aprecia las subclases


van a responder de forma
diferente al mismo mensaje
“emitirSonido”
Polimorfismo 28

Upcasting: Se da cuando convertimos un objeto tipo


subclase a un objeto de tipo superclase. En otras palabras
convertir a un supertipo.

•Sucede automáticamente, no hay


necesidad de hacer nada explícitamente.
Downcasting.- Significa convertir el objeto tipo superclase a
un objeto tipo subclase. En otras palabras sería convertir en
un subtipo.

•Downcasting no es directamente posible en


Java, explícitamente tenemos que hacerlo.
•Para llamar al método propio de la subclase
tienes que hacer un downcasting
UpCasting 29

animal a1 = new gato(“Azul ruso", "Felix", 2018);

La línea de codigo muestra la creación de un objeto a partir de


la subclase “gato” (fondo azul) y esta siendo referenciado como
si fuera un objeto de la superclase “animal” (fondo rosado).

Recordemos que al instanciarse un objeto este expone una


interfaz pública (generalmente métodos públicos) con la que
podemos interactuar con el objeto.

En este caso en particular la interfaz que esta disponible es la de


la superclase “animal” y no la de la subclase “gato”
DownCasting 30

gato g1 = (gato)a1;

Si necesitáramos ejecutar algún método particular de la subclase


“gato”, debemos aplicar al objeto “a1” un downcasting al
subtipo “gato (fondo azul)”.

Como se puede apreciar la variable que hace referencia al


objeto “g1” es del mismo tipo de downcasting aplicado

Finalmente “g1” ahora tiene disponible la interfaz de un objeto


de tipo “gato”
Características de la Programación 31

Orientada a Objetos

Polimorfismo
 Permite implementar múltiples
formas de un mismo procedimiento
(método) haciendo una variedad
de funciones con el mismo
nombre.
 Un mensaje puede ser enviado a
diferentes objetos.
Características de la Programación 32

Orientada a Objetos

Polimorfismo - Ejemplo
 Si tuvieras un auto, una moto y una
bicIcleta. ¿Cómo manejarías cada uno?

Lo observamos en ls objetos
 Auto.- Meter cambios,
usar volante
manejar
Moto .- Usar timón, meter
cambios.

Bicicleta.- Usar timón,


Usar los miembros de 33

un objeto
 Atributo.- Para usar el atributo de un objeto
 Sintaxis:
 nombreObjeto.nombreAtributo
 Método.- Para invocar o llamar a los métodos de
un objeto
 Sintaxis:
 nombreObjeto.nombreMetodo()
34
Ejercicio - Almuerzo
Ejercicio - Almuerzo
Ejercicio - Almuerzo

También podría gustarte