paradigma orientado a objetos
DESCRIPTION
En esta presentación se muestran los puntos más importantes dentro de la programación orientada a objetos, Entendiendo la relación de herencia, y los pilares en la orientación a Objetos.TRANSCRIPT
CAPITULO IIOrientación a Objetos
Alejandro Bolaños Ussa
Temática …
1. Encapsulamiento
2. Herencia “Es-un”(Is-A) y “Tiene un” (Has-A)
3. Polimorfismo
4. Sobrescritura / Sobrecarga1. Métodos sobrescritos
2. Métodos sobrecargados
3. Polimorfismo sobrescritos y sobrecargados
5. Casteo a variables de referencia
...Temática
6. Implementación de interfaces
7. Tipos de retorno
8. Constructores
9. Variables y métodos estáticos
10.Acoplamiento y cohesión
11.Tipos enumerados (Enum)
Encapsulamiento
● Principio de la Orientación a Objetos
● Se utiliza con el fín de tener flexibilidad, buen
mantenimiento y extensibilidad○ Mantener las variables de instancia protegidas (puede ser con un
modificador de acceso. Ej.: private).
○ Hacer métodos de acceso públicos para forzar al acceso a las
variables por medio de dichos métodos en lugar de acceder
directamente.
○ Utilizar las convenciones de código para los nombres de los métodos,
Ej.: set, get , is.
1. Encapsulación
Encapsulamiento
2. Herencia “Es un” (Is-A)
“Tiene un”(Has-A)
● Principio de la Orientación a Objetos
● Se utiliza con el fín de crear nuevas clases teniendo
como base una clase padre, con el fin de reutilizar sus
funcionalidades, agregar nuevos comportamientos
simplemente ajustarlos mediante la sobreescritura y el
polimorfismo.
3. Polimorfismo
● Principio de Orientado a Objeto
● Se refiere a la propiedad por lo que es
posible enviar mensajes sintácticamente
iguales a objetos diferentes.
● Todo objeto Java que cumpla con la relación
IS-A puede ser considerado polimórfico; Por
lo tanto todos los objetos Java son …
… Polimorfismo
● La invocación polimórficas de métodos solo
se aplican a métodos de instancia, esto
quiere decir que ni las variables ni los
métodos estáticos son tenidos en cuenta
para ser sobrescritos en tiempos de
ejecución, dependiendo del tipo de instancia
obtenido.
4. Sobrescritura / Sobrecarga
● El objetivo en este punto de diferenciar
cuando un objeto se está sobrescribiendo y
cuándo se está sobrecargando.
● La sobrescritura se presenta en la herencia,
de esta manera es posible sobrescribir los
métodos de la superclase que no sean final.
Sobrescritura
● El método que sobrescribe no puede tener
un modificador de acceso más restrictivo
que el método que está sobrescribiendo,
pero sí menos restrictivo.
● La lista de argumentos debe ser
exactamente la misma que la del método
sobrescrito
● El tipo devuelto debe ser el mismo, o un
subtipo, del tipo de retorno declarado en
el método original de la superclase.
● El método que sobrescribe no puede
lanzar excepciones más generales que se
declaren en el método sobrescrito. Pero si
puede declarar excepciones más
específicas.
● No podemos sobrescribir un método
marcado como final o private.
● No podemos sobrescribir un método
marcado como static
● Si un método no puede ser heredado, no
podemos sobrescribir
● Para llamar a un método de la clase padre
desde la subclase los hacemos con la
palabra super() permitiéndonos llamar
así, la funcionalidad del método antes de
sobreescribirlo.
Sobrecarga
●Los métodos sobrecargados DEBEN
cambiar la lista de argumentos
●Los métodos sobrecargados PUEDEN
cambiar el tipo de retorno
●Los métodos sobrecargados PUEDEN
cambiar el modificador de acceso
●Los métodos sobrecargados PUEDEN
declarar excepciones checked nuevas o
más genéricas
●No se puede cambiar solamente el tipo de
retorno.
●Un método puede ser sobrecargado en la
misma clase o en una subclase. En otras
palabras, si la clase A define el método
hacerAlgo(int i), la subclase B podría
definir un método hacerAlgo(String s) sin
sobrescribir la versión de la superclase.
Los dos métodos, con el mismo nombre
pero en diferentes clases, siguen
considerándose sobrecargados si la
subclase hereda una versión del método y
declara otra versión sobrecargada en su
definición de clase.
5. Casteo a variables de referencia
Sabemos que en Java es posible tener una
referencia a una clase y tener una instancia a
cualquiera de sus subclases
Animal animal = new Dog();
Pero hacer esto tiene sus limitaciones, en el
caso cuando se requiere utilizar los métodos
implementados en la clase Dog.
6. Implementación de interfaces
Al implementar una interfaz estas también cumple con la relación IS-A
● Cuando se implementa una interfaz es necesario implementar sus
métodos, salvo si la clase es abstracta.
● Se debe tener en cuenta que todos los métodos de una interfaz son
públicos y abstractos así como sus variables son públicas y finales.
● En una clase se pueden implementar n interfaces.
● Una interfaz puede heredar N interfaces, pero nunca implementar otras
interfaces. No es la misma herencia como se trabaja con las clases.
● No se puede crear una instancia directa de una interfaz
MiInterfaz variebla = new MiInterfaz(); //Error
7. Tipos de retorno
En esta parte nos centraremos a los tipos de
retorno que cumplan con la relación IS-A
● Es posible sobrescribir un método y cambiar
el tipo de retorno siempre y cuando se
encuentren dentro del mismo árbol de
herencia
● En un método con un tipo de retorno
primitivo, podemos devolver cualquier valor o
variable que pueda ser implícitamente
convertida al tipo de retorno declarado.
8. Constructores e instanciación.
● Todas las clases contiene un constructor,
incluyendo a las clases abstractas
● Los constructores se invocan en tiempo de
ejecución usando la palabra reservada new
● Cada vez que se hace el llamado a un
constructor, este también hace un llamado
al constructor de su superclase, con una
llamada implícita a super() de esta manera
el código que se ejecuta primero es el
código de la clase padre.
● Un constructor por defecto es un constructor
sin argumentos.
● Sí tenemos un constructor con argumentos,
el compilador NO creará un constructor por
defecto.
● Un constructor sin argumentos no es
necesariamente un constructor por
defecto,pues el constructor por defecto es
el que proporciona el compilador.
● Las interfaces NO tienen constructor.
● la única forma de invocar a un constructor
es desde otro constructor.
¿Cuándo se crea un constructor por
defecto?
Cuándo dentro de la clase no se ha creado
ningún constructor. Ni siquiera un constructor sin
argumentos.
● El constructor por defecto tiene el mismo modificador de acceso que la clase.
● El constructor por defecto no tiene argumentos.
● El constructor por defecto incluye una llamada sin argumentos al super
constructor (super()).
9. Variables y métodos estáticos.
También conocidos como variables y
métodos de clase. De los cuales se
pueden invocar sin tener una instancia.
De igual manera las variables estáticas
mantienen su valor en memoria
independientemente de la instancia que
se cree.
Un método estático sólo puede acceder a
métodos y variables estáticas que están
definidas fuera de la clase.
Recordemos que los métodos estáticos
no se pueden sobrescribir, pero sí pueden
ser redefinidos en una subclase.
10.Acoplamiento y cohesión
Acoplamiento
● Cantidad de conocimiento que
una clase tiene sobre la otra. Lo
único que una clase A conoce
sobre una clase B, es lo que
expone sobre su interfaz.
● Así mismo el acoplamiento va
ligado a la encapsulación de los
datos.
Cohesión
● Cómo una única clase se diseña y
cómo esta se comporta. Las clases
deben ir centradas a un solo fín. de
esta manera la clase debe tener un
enfocado propósito, permitiendo la
reutilización y facilitando la
mantenibilidad.
11.Tipos Enumerados(Enum)
Nos permite restringir las opciones que puedan
existir en un código, permitiéndonos reducir
código innecesario.
● Un enum se puede declarar, dentro de
una clase concreta y abstracta; fuera de
un clase, pero nunca dentro de un método
● Es opcional que al final del enum vaya un
punto y como (;)
● Se puede decir que cada valor de los
enum, es como si fuese una instancia del
mismo enum
● Los enum pueden tener constructores y
variables propias.
● Los constructores de un enumerado
también se pueden sobrecargar.
Sobrescritura en enumeradores
● http://javaes.wikispaces.com/
● es.wikipedia.org/wiki/Polimorfismo_(informática)
● https://docs.oracle.com/javase/tutorial/java/java
OO/enum.html
● http://scjptest.com
E-Fuentes
Gracias…!