Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
S4 p2
1. Programación 2
Tema: 2 Clases
Mg. Luis Fernando Aguas Bucheli
+593 984015184
@Aguaszoft
Laguas@uisrael.edu.ec
2. Tu voluntad se encuentra siempre bajo tu control,
por lo que nada puede detenerte
3. Objetivo
1. Adquirir los conceptos
básicos relacionados con
la POO
2. Reconocer las
características de la POO
● 2.2 Tipos de Clases e
Interfaces
Contenido
4. Objetivos de Desarrollo Sostenible
4.3 De aquí a 2030, asegurar el acceso igualitario de todos los
hombres y las mujeres a una formación técnica, profesional y
superior de calidad, incluida la enseñanza universitaria
7. Creación de Objetos
● Declaración
○ No crea el objeto, sólo notifica al compilador el tipo de la
variable
● Creación
○ Crear un ejemplar de una clase
● Asignación de valor inicial (inicialización)
○ 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
○ objeto.variable
● Llamar a sus métodos
○ 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 superclase
Liberar 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
○ nada, public, abstract, final
● extends
○ identifica superclase
● implements
○ identifica interfaz que se debe de implementar
modificador class UnaClase extends Superclase implements Interfaz{}
18. Convenciones
● Nombres de clases
○ Primera letra mayúscula y cada palabra subsiguiente comienza
con mayúscula, sin espacios
○ Sustantivos cosas
○ ClaseDeVariasPalabras
● Nombres de métodos y variables
○ Primera letra minúscula y cada palabra subsiguiente comienza con
mayúscula, sin espacios
○ Verbos acciones
○ 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
○ Ninguna otra clase puede crear un objeto de esta clase.
● protected
○ Sólo subclases de esta clase pueden crear objetos de esta clase
● public
○ Todas las clases pueden crear objetos de esta clase
● package
○ Sólo clases del mismo paquete (package) puede crear instancias de
esta clase
23. Declaración de variables
● Nivel de acceso
○ public, protected, package, private
○ Discutidos en control de acceso a miembros de una clase . . . . .
● Atributos
○ static, final, transient, volatile
[nivel de acceso] [atributos] tipo nobre;
24. Especificadores de acceso para
variables
● private
○ Solo pueden ser utilizadas dentro de la clase donde son definidas
● protected
○ Sólo la clase donde son definidas, subclases de ésta y clases del
mismo paquete pueden acceder a estas variables
● public
○ Todas las clases pueden acceder a estas variables
● package
○ Sólo clases del mismo paquete pueden acceder estas variables, no
subclases, es especificador por omisión
25. Atributos de una variable
● static
○ variable de clase (no de ejemplar)
● final
○ Valor de la variable no puede cambiar (constante)
● transient
○ Variable no debe ser serializada
● volatile
○ 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