La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Diseño y Programación Orientada a Objetos"— Transcripción de la presentación:

1 Diseño y Programación Orientada a Objetos
Conferencia # 2: Construcción y destrucción de objetos Facultad Ing. Informática ISPJAE

2 Ciclo de vida de un objeto
ejecución Creación e inicialización Constructor Destrucción Destructor

3 Constructores Métodos sin tipo. Igual nombre que la clase.
Permiten crear e incicializar un objeto de la clase. Se invocan a continuación de un operador new. Una clase puede tener ninguno, uno o varios constructores homónimos.

4 Distribución de datos en la memoria en Java
p v o stack heap 10 3 class A{ public uno(int p){ int v= 3; Objeto o; o= new Objeto(); } constructor A a= new A(); a.uno(10);

5 Tareas de un constructor
asignar espacio en memoria para el objeto asociar dicho espacio a su referencia (new) Crear Inicializar escribir valores iniciales en el área de datos del objeto establecer condiciones iniciales básicas para su manipulación

6 ¿Cuántos constructores declarar?
Ninguno Uno Varios

7 Sin constructor declarado explícitamente
Si la clase no declara explícita-mente algún constructor, el com-pilador crea uno por omisión, que inicializa la instancia en los valores por defecto según el tipo de dato.

8 Ejemplo Rectangle r= new Rectangle(); Constructor por omisión
class Rectangle{ private float sideA; private float sideB; public float getSideA(){…} public float getSideB(){…} public void setSideA(float a) {…} public void setSideB(float b) {…} public float area(){…} public float perimeter(){…} } Constructor por omisión Rectangle r= new Rectangle();

9 Con un constructor declarado explícitamente
class Rectangle { private float sideA; private float sideB; public Rectangle() { sideA= 1; sideB= 1; } ... Constructor Rectangle R= new Rectangle();

10 Con varios constructores declarados explícitamente
class Rectangle{ public Rectangle() { sideA=1; sideB=1;} public Rectangle(float a, float b) { if (a >= 1 && b >= 1) { sideA = a; sideB = b; } else { sideA = 1; sideB = 1;} } ... Rectangle r1=new Rectangle(1,3); Rectangle r2=new Rectangle();

11 Constructor copia Recibe un objeto de la misma clase.
class Rectangle { private float sideA; private float sideB; public Rectangle(){…} public Rectangle(float a,float b=1){…} public Rectangle(Rectangle r) { sideA=r.getSideA(); sideB=r.getSideB(); } ...}

12 Constructor copia. Invocación
constructor sin parámetros Rectangle r= new Rectangle(); Rectangle s= new Rectangle(r); constructor copia

13 Comprobación ¿Cuántos constructores puede tener una clase?
Describir el estado de la memoria: Rectangle r= new Rectangle(); r= new Rectangle(1,3); Rectangle s= new Rectangle(r); Rectangle h = r;

14 Comprobación Si la clase Rectangle solo tiene: ¿qué ocurre si?
public Rectangle(float a,float b=1){…} ¿qué ocurre si? Rectangle r= new Rectangle(); ¿Una clase puede tener un único constructor y que este sea un constructor copia?

15 Puntero this Se crea automáticamente cuando se construye un objeto.
Todo objeto tiene uno asociado. Apunta al objeto. A través de él se puede acceder a cualquier miembro del objeto. Se usa dentro de los propios métodos de la clase.

16 Uso del puntero this Dos maneras:
Para acceder a los miembros del objeto Sintaxis: this.miembro Ejemplo: this.sideB Para acceder a un constructor Sintaxis: this(argumentos) Ejemplo: this(1,2.58f)

17 Ejemplo class Rectangle { private float sideA, sideB;
public Rectangle(){sideA=1; sideB=1;} public Rectangle(float sideA,float sideB) {if (sideA >= 1 && sideB >= 1) { this.sideA= sideA; this.sideB= sideB; } else this();} public Rectangle(Rectangle r) { this(r.getSideA(),r.getSideB()); } ...}

18 Construcción de instancias miembros
Circulo Punto Composición (tiene-un) UML Cuando una instancia se construye deben construirse también todas sus instancias miembros.

19 public class Point { private int x; private int y; public Point(int x,int y){ this.x= x; this.y= y;} public Point(Point p) { this(p.getX(),p.getY());} public int getX() {return x;} public int getY() {return y;} ...}

20 public class Circle { private Point point; private float radius; public Circle(int x, int y, float radius) { this.radius = radius; point= new Point(x,y); } public Circle(Point point, float radius) { this.radius = radius; this.point = new Point(point); } ...}

21 Agregación (conoce-un)
¿Diferencia? public class Circle { public Circle(Point point, float radius) { this.radius = radius; this.point = new Point(point); } ...} Curso Estudiante Agregación (conoce-un) public class Circle{ public Circle(Point point, float radius) { this.radius = radius; this.point = point;} ...}

22 Miembros static Miembros static no están atados a algún objeto de la clase, sino a la clase. Si no se ha creado un objeto de la clase se puede invocar a un método estático o acceder a datos estáticos. A los campos y métodos estáticos se les dice también variables y métodos de clase respectivamente. Los miembros no estáticos (variables/métodos de instancia) solo pueden ser referenciados desde objetos.

23 Miembros static. Ejemplo
public class Rectangle { public static int count; public Rectangle() { sideA=1; sideB=1; count++;} public static void decremCount() { count--;} ... } …Rectangle.count… …Rectangle.decremCount()…

24 Inicialización en Java
De las variables locales: Chequeo de compilación. 2. De las variables de clase: Cuando se acceden por 1ra vez Cuando se construye el 1er objeto 3. De las variables de instancia: automáticamente dentro de los constructores

25 Ejemplo public class Ejemplo { private int x; private int y=1;
public static int z= 1; public Ejemplo(int x, int y) { System.out.println("x="+this.x+“ y=“+ this.y); this.x= x; this.y= y; z++; System.out.println("x="+this.x+“ y=“+this.y); System.out.println("z="+ z); } Ejemplo

26 Ejemplo public class ValoresIniciales {
public static void main(String[] args) { System.out.println("z=" + Ejemplo.z); Ejemplo e= new Ejemplo(1,2); } z=1 x=0 y=1 x=1 y=2 z=2

27 Destructores Cuando un objeto no se usará más se debe liberar el espacio de memoria que le fue asignado. Esta responsabilidad será cumplida por el destructor y será lo último que se hace sobre el objeto.

28 Durabilidad y limpieza
Garbage collector class A{ public uno(int p){ int v= 3; Objeto o; o= new Objeto(); } stack heap p v o 10 3 A a= new A(); a.uno(10);

29 Tipos de clases Según sus funciones: De entidad De vista o frontera
De control o controladoras Contenedoras o colecciones Iteradoras Etc.

30 Patrones de diseño ¿Qué son? Principios generales que guían el diseño.
Soluciones probadas que se pueden aplicar con éxito a ciertos problemas que aparecen repetidamente en el desarrollo de software. Describen el problema y su solución. Facilitan la generalización y reutilización. Tienen nombre.

31 Patrones para asignación de responsabilidades
“… se deben seguir ciertos patrones para la distribución de responsabilida-des, ya que, decisiones poco acertadas sobre la asignación de responsabilida-des de cada clase, dan origen a siste-mas y componentes frágiles y difíciles de mantener, entender, reutilizar o extender.” Larman. Patrones

32 Responsabilidad VS Método
Responsabilidad != Método Implementan las lógicas necesarias para cumplir con las responsabilidades Se implementan a través de métodos que operen solos o en colaboración con otros métodos y objetos

33 Patrones para la asignación de responsabilidades
Experto Creador Controlador

34 Experto Problema: ¿Cuál es el principio fundamental en virtud del cual se asignan las responsabilidades en el DOO? Solución: Asignar una responsabili-dad al experto en información: la clase que tiene la información necesaria para cumplir la responsabilidad.

35 Creador Problema: ¿Quién debería crear un nuevo objeto de una clase?
Solución: Asignarle a B la responsabili-dad de crear un objeto de A si: · B contiene los objetos de A · B registra los objetos de A. · B tiene los datos necesarios para inicializar A cuando el objeto sea creado (B: experto respecto a la creación de A).

36 Controlador Problema: ¿Quién debería atender un evento del sistema?

37 Controlador Solución: Asignar la responsabilidad del manejo de mensajes de los eventos del sistema a una clase que represente alguna de las siguientes opciones: El "sistema" global La empresa u organización Objeto real activo y que pueda participar en la tarea Manejador artificial de todos los eventos del sistema para una funcionalidad dada.

38 Conclusiones En un POO, los objetos nacen, viven y mueren. Un objeto nace cuando se construye a través de un método especial llamado constructor que tiene las siguientes características: Su nombre coincide con el de la clase. No tiene valor de retorno (ni void) Pueden ser homónimos.

39 Conclusiones Si existe uno solo, todos los objetos de la clase se construyen de igual manera. Si tiene parámetros deben suministrarse en la invocación. Si no se declara, el compilador genera uno por defecto (sin parámetros, inicializa cada atributo con el valor nulo por defecto).

40 Conclusiones Java implementa un recolector de basura que elimina del Heap los objetos que no están siendo referenciados. Los patrones de diseño son normas de diseño que ofrecen soluciones probadas a problemas frecuentes.


Descargar ppt "Diseño y Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google