4-Unidad 1. Paradigma de la Programación-Orientación a Objetos
1. Unidad 1: Paradigma de la
Programación-Orientación a
Objetos
Autor(es):
Ciencias de la Ingeniería
Carrera de Sistemas de Información
Programación Orientada a Objetos
Mg. Luis Fernando Aguas Bucheli
+593 984015184
@Aguaszoft
Laguas@uisrael.edu.ec
Aguaszoft@Outlook.es
2. “Si quieres darlo todo en esta vida,
piensa en positivo” –
(Anónimo)
Ciencias de la Ingeniería
Carrera de Sistemas de Información
Programación Orientada a Objetos
3. Resultado de Aprendizaje
• Solucionar problemas aplicando el razonamiento lógico, con
algoritmos y procedimientos adecuados.
6. Objetivos
• Adquirir los conceptos básicos relacionados con la P.O.O.
• Reconocer las características de la P.O.O.
• Conocer la historia de los lenguajes O.O.
7. Creación de Objetos
• Declaración
o No crea el objeto, sólo notifica al compilador el
tipo de la variable
• Creación
o Crear un ejemplar de una clase
• Asignación de valor inicial (inicialización)
o Por medio de constructores
9. Creación del objeto
• Creación de un ejemplar de una clase
new Clase (parámetros)
Crea el objeto y regresa una referencia
(Separa la memoria para almacenarlo) Constructor de la clase
(método con el mismo
nombre)
en caso necesario
(opcionales)
10. Inicialización del objeto
• Por medio de constructores
nombre = new Clase (parámetros);
Referencia al objeto
en memoria
11. Constructores
• “Métodos” con el mismo nombre de la
clase
• No tienen tipo de regreso, no regresan
ningún valor
• Una clase puede tener varios
constructores, todos con el mismo
nombre, pero diferente cantidad y/o tipo
de parámetros
• Java provee un constructor por omisión
(default): Clase ()
12. Utilización de objetos
• Los objetos se pueden usar después de
que son creados
• Manipular sus variables
o objeto.variable
• Llamar a sus métodos
o objeto.método (parámetros)
• Se puede controlar el acceso a variables y
métodos de un objeto . . . . . . .
13. Garbage Collection
• La creación y destrucción de objetos es
tediosa y propensa a errores
• El proceso de liberación de memoria es
automatizado en Java
• Más práctico y libera al programador de
esta tarea
• Disminución de errores de programación
(bugs)
14. finalize()
• Método que se ejecuta antes de que la
máquina virtual destruya al objeto
• Todos los objetos tienen uno por default
• Util para liberar recursos del sistema
• No se puede asegurar que se ejecutará en
un momento determinado
15. finalize()
protected void finalize () throws Throwable{
x = null;
y.close();
super.finalize();
}
Al final llamar al finalize
de la superclaseLiberar recursos del sistema
archivos, sockets, etc.
16. Clases
public class Rectangulo{
int x, y;
int ancho, alto;
public Rectangulo(){
x = 0;
y = 0;
ancho = 100;
alto = 100;
}
public void mueve(int x, int y){
this.x = x;
this.y = y;
}
public void cambiaTamano(int ancho, int alto){
this.ancho = ancho;
this.alto = alto;
}
protected void finalize () throws Throwable{
x = null;
y.close();
super.finalize();
}
}
Declaración
Cuerpo
Variables
Constructor
Métodos
Limpieza
17. Declaración
• Modificadores
o nada, public, abstract, final
• extends
o identifica superclase
• implements
o identifica interfaz que se debe de implementar
modificador class UnaClase extends Superclase implements Interfaz{}
18. Convenciones
• Nombres de clases
o Primera letra mayúscula y cada palabra subsiguiente
comienza con mayúscula, sin espacios
o Sustantivos cosas
o ClaseDeVariasPalabras
• Nombres de métodos y variables
o Primera letra minúscula y cada palabra subsiguiente
comienza con mayúscula, sin espacios
o Verbos acciones
o variableDeVariasPalabras
19. Cuerpo
• Constructores
• Métodos
• Variables
• finalize()
Las variables y métodos de una clase son llamados miembros
de la clase.
Los constructores no son métodos, no son miembros
20. Constructores
• Mismo nombre de la clase
• Puede haber más de uno (sobrecarga)
• Inicialización del objeto
• Opcional. El compilador crea uno en caso
de que no se especifique en forma
explícita
• Pueden tener variables locales, ciclos y
otros estatutos
21. Uso de this dentro de
constructores
• Indica “este” objeto
• Sirve para diferenciar variables de la clase
de los parámetros con el mismo nombre
• Está implícito en todos los miembros de la
clase
• También se puede usar en métodos
public Rectangulo(int x, int y){
this.x = x;
this.y = y;
ancho = 100;
alto = 100;
}
22. Especificadores de acceso para
constructores
• private
o Ninguna otra clase puede crear un objeto de esta clase.
• protected
o Sólo subclases de esta clase pueden crear objetos de esta clase
• public
o Todas las clases pueden crear objetos de esta clase
• package
o Sólo clases del mismo paquete (package) puede crear instancias de esta
clase
23. Declaración de variables
• Nivel de acceso
o public, protected, package, private
o Discutidos en control de acceso a miembros de una
clase . . . . .
• Atributos
o static, final, transient, volatile
[nivel de acceso] [atributos] tipo nobre;
24. Especificadores de acceso para
variables
• private
o Solo pueden ser utilizadas dentro de la clase donde son definidas
• protected
o Sólo la clase donde son definidas, subclases de ésta y clases del mismo
paquete pueden acceder a estas variables
• public
o Todas las clases pueden acceder a estas variables
• package
o Sólo clases del mismo paquete pueden acceder estas variables, no
subclases, es especificador por omisión
25. Atributos de una variable
• static
o variable de clase (no de ejemplar)
• final
o Valor de la variable no puede cambiar (constante)
• transient
o Variable no debe ser serializada
• volatile
o El compilador no efectua ciertas optimizaciones
Los tres pasos: declaración, creación e incialización se pueden realizar en una sola instrucción.
La declaración no crea un objeto, ni separa memoria para su contenido, simplemente es una notificación al compilador para que haga la verificación de que el objeto se usa adecuadamente.
Al crear un objeto lo que se obtiene es una referencia al objeto, es decir un dirección donde está localizado el objeto.
Los objetos de una clase son de tipo referencia, es decir, no se maneja el valor sino una referencia al objeto (dirección).
Tipo puede ser una clase creada por el programador, una clase ya existente dentro del API de Java, una clase de un API externo al núcleo de Java (creada por alguien externo) o también puede ser una tipo de dato primitivo.
La creación de un objeto regresa una referencia (dirección) al nuevo objeto creado.
Además separa la memoria para contener a todo el objeto.
El constructor le da un estado inicial al objeto, es decir inicializa las variables pertinentes.
Los constructores deben de llevar el mismo nombre de la clase.
Los constructores no son métodos, no regresan tipo, pero son muy similares a los métodos.
No es necesario programar un constructor para una clase, el copilador provee un constructor por default sin parámetros que no realiza absolutamente nada, Clase().
Al crear un objeto se puede hacer invocando este constructor default.
Al llamar algún constructor de una clase para crear un objeto, la llamada regresa una referencia al objeto creado.
Reglas para la programación de constructores:
1.- Deben de tener el mismo nombre de la clase
2.- No se deben de declarar con tipo de regreso, es decir no regresan
ninguna variable
3.- Se pueden declarar varios constructores para una clase, todos con el
mismo nombre, la diferencia estriba en el tipo y/o número de
parámetros
4.- En caso de que no se programe un constructor, el compilador
automáticamente genera uno por omisión, el cual no lleva
parámetros y no realiza ninguna instrucción, solamente lo genera
para poder invocarlo y respetar la sintaxis impuesta por Java
Es importante tener en cuenta que los constructores no son métodos, a pesar de que son muy similares
Para utilizar un objeto es necesario crearlo.
Se pueden manipular sus variables, pero esto no es recomendado por la teoría de Programación Orientada a Objetos.
Lo que se debe de hacer es programar métodos que regresen valores de variables y métodos que modifiquen valores de variables, de esta manera se protege al objeto de alcanzar algún estado inestable por la asignación directa de valores no permitidos, es decir dentro de los métodos se puede realizar la verificación de que el valor que se quiere asignar a una variable es permitido.
Por ejemplo supongamos que tenemos una variable edad dentro de una clase cualquiera, y esta variable representa una edad, en determinado momento se crea un objeto de esta clase (empleado1), y se ejecuta la instrucción:
empleado1.x = -1;
Como se ve esto llevaría a un estado impredecible del objeto ya que obviamente no se contemplan edades negativas. Para este caso se podría programar el siguiente método:
public boolean asignaEdad(int edad){
if (edad < 0)
return false;
else
return true;
}
El error más común de programación es olvidar liberar la memoria utilizada por una variable una vez que esta ya no se necesita, esto normalemente lleva a que el sistema se le acabe la memoria si el programador no tiene cuidado de manejar en forma eficiente este escaso recurso.
Java libera al programador de esta tediosa tarea, automatizando el proceso, dejando que el programador enfoque su energía y su tiempo a producir programas de calidad.
El método finalize(), pertenece a la clase Object, la cual es la madre de todas las clases, esto implica que cualquier clase hereda este método y lo puede reprogramar.
No se puede garantizar cuando se ejecuta este método, ya que el recolector corre en “background” en un thread de baja prioridad.
En este método se pueden liberar recursos del sistema que utiliza el objeto, recursos que normalemente no son recolectados por garbage collection, principalmente archivos y sockets.
El método arroja una excepción (Throwable), esto lo cubriremos más adelante.
Es importante llamar el finalize de la superclase y que esto se realice como última instrucción del método.
Modificadores:
nada: La clase puede ser usada por clases en el mismo paquete
public: La clase puede ser usada por cualquier clase
abstract: La clase no puede ser instanciada, solamente puede ser superclase, algunos métodos pueden estar programados (son genéricos para las subclases). Otros métodos pueden ser abstractos y deben ser programados por la subclase.
final: La clase no puede ser superclase de ninguna clase (por seguridad y diseño)
extends: identifica a una superclase, la clase declarada hereda todos los miembros de la superclase, sólo puede haber una superclase, ya que Java no soporta herencia múltiple.
implements: Es responsabilidad de la clase programar todos los métodos de las interfaces declaradas. Se pueden declarar varias interfaces separadas por coma.
En una interfaz los métodos están declarados mas no programados
private
Ninguna otra clase puede crear una instancia de esta clase. Pero la clase puede tener métodos public que creen una instacia y la regresen como una referencia
protected
Sólo subclases de esta clase pueden crear instancias. Clases independientes no pueden crear instancias esto se hace como protección y modularidad
public
Todas las clases pueden crear instancias de esta clase. Cualquier clase del programador o de otros paquetes pueden instanciar y utilizar objetos de esta clase
package
Sólo clases del mismo paquete puede crear instancias de esta clase. En caso de utilizar un paquete se utiliza package para evitar que alguna otra clase cree un objeto, pero clases del mismo paquete puede crear objetos de esta clase para dar modularidad y seguridad