La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Presentaciones similares


Presentación del tema: "0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos."— Transcripción de la presentación:

1 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos y Referencias Caso de estudio: Cta. Cte. Bancaria Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

2 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2015 2 TEMARIO El concepto de variable. La memoria. Variables de tipos elementales. Variables de tipo clase. Identidad, Igualdad y Equivalencia. Los cambios en el sistema.

3 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 EL CONCEPTO DE VARIABLE Una variable tiene un nombre, un alcance y un tipo de dato. El nombre es un identificador que cumple algunas reglas sintácticas que impone el lenguaje. El alcance depende de la declaración. En Java una variable puede declararse como un atributo de clase o local a un bloque de código. El tipo de una variable puede ser elemental o una clase. La representación interna en memoria es diferente en cada caso. Introducción a la Programación Orientada a Objetos IPOO - 2015 3

4 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2015 4 TEMARIO El concepto de variable. La memoria. Variables de tipos elementales. Variables de tipo clase. Identidad, Igualdad y Equivalencia. Los cambios en el sistema.

5 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 LA MEMORIA Podemos pensar que la memoria es una estructura de celdas o bloques de memoria, cada una de las cuales tiene una dirección y un contenido. Introducción a la Programación Orientada a Objetos IPOO - 2015 5 00000010001 00011101000 00101110110 00110110001 01000110101 … direccióncontenido

6 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2015 6 TEMARIO El concepto de variable. La memoria. Variables de tipos elementales. Variables de tipo clase. Identidad, Igualdad y Equivalencia. Los cambios en el sistema.

7 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPOS ELEMENTALES El tipo de dato elemental es un conjunto de valores atómicos y un conjunto de operaciones que pueden aplicarse sobre el conjunto de valores. Un tipo de dato elemental permite factorizar propiedades y establecer chequeos para prevenir errores. En ejecución, una variable de tipo elemental almacena un valor y ocupa una celda o bloque de memoria. Introducción a la Programación Orientada a Objetos IPOO - 2015 7

8 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPOS ELEMENTALES Cuando en ejecución se alcanza una declaración de variable de tipo elemental, se reserva una celda o bloque de memoria. Cuando se asigna un valor a la variable este valor se almacena directamente en el bloque de memoria. Esto es, el bloque de memoria que corresponde a la variable mantiene un valor dentro del conjunto de valores que determina el tipo de dato. Introducción a la Programación Orientada a Objetos IPOO - 2015 8 Representación en memoria int i = 3; Int j; i3 j

9 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPOS ELEMENTALES La instrucción de asignación modifica el contenido del bloque de memoria que corresponde a la variable. En verdad esta es una visión abstracta, en memoria se almacena la representación binaria de cada valor. Introducción a la Programación Orientada a Objetos IPOO - 2015 9 Representación en memoria int i = 3; Int j; j = I + 1; i3 j4

10 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPOS ELEMENTALES Los operadores relacionales comparan el contenido de los bloques de memoria. Introducción a la Programación Orientada a Objetos IPOO - 2015 10 Representación en memoria int i = 3; Int j; j = I + 1; boolean b1 = 1 == j; boolean b2 = i < j; i3 j4 b1false b2 true

11 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2015 11 TEMARIO El concepto de variable. La memoria. Variables de tipos elementales. Variables de tipo clase. Identidad, Igualdad y Equivalencia. Los cambios en el sistema.

12 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE El valor de una variable de un tipo clase es una referencia. Una referencia puede ser nula o estar ligada a un objeto. No vamos a visualizar la representación interna de objetos y referencias graficando la memoria, sino dibujando diagramas de objetos. Introducción a la Programación Orientada a Objetos IPOO - 2015 12 Representación en memoria Un diagrama de objetos es una representación gráfica adecuada para modelar la declaración de variables, la creación de objetos, la evolución de las referencias y la modificación de sus estados internos.

13 class CtaCteBancaria{ //Requiere código>0 y saldo >= -maxDescubierto //Atributos de clase private static final maxDescubierto=1000; //Atributos de Instancia /*El codigo se establece al crear la cuenta corriente bancaria y no cambia */ private int codigo; private float saldo; … } // Constructores public CtaCteBancaria(int cod) { codigo = cod; saldo = 0; } public CtaCteBancaria(int cod, float sal) { codigo = cod; saldo = sal; }

14 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE 14 Representación en memoria CtaCteBancaria cb; cb = new CtaCteBancaria(111,1000); cb :CtaCteBancaria codigo=111 saldo=1000 Reserva un bloque de memoria para la variable cb. Reserva un bloque en memoria para mantener el estado interno del objeto. Invoca al constructor que inicializa el estado interno del objeto. Liga la variable cb al objeto, almacenando en cb la dirección del bloque de memoria que mantiene el estado interno del objeto.

15 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE 15 Representación en memoria La declaración de cada variable reserva un bloque de memoria que mantiene inicialmente una referencia nula o referencia no ligada. CtaCteBancaria cb1; CtaCteBancaria cb2; cb1 cb2

16 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE 16 Representación en memoria cb1 = new CtaCteBancaria (111,1000); cb1 cb2 public CtaCteBancaria(int cod, float sal) { codigo = cod; saldo = sal; } :CtaCteBancaria codigo=111 saldo=1000

17 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE 17 Representación en memoria cb1 = new CtaCteBancaria (111,1000); cb2 = new CtaCteBancaria (112); cb1 cb2 public CtaCteBancaria(int cod) { codigo = cod; saldo = 0; } :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=0

18 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE 18 Representación en memoria cb1 = new CtaCteBancaria (111,1000); cb2 = new CtaCteBancaria (112); cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=0 La declaración de cada objeto reserva un nuevo bloque de memoria, cuya dirección se asigna a cada variable. Las variables cb1 y cb2 están ligadas.

19 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE 19 Representación en memoria CtaCteBancaria cb3 = cb2; cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=0 Como las variables de tipo clase mantienen referencias, el operador de asignación asigna referencias. cb3

20 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 :CtaCteBancaria codigo=112 saldo=0 VARIABLES DE TIPO CLASE 20 Representación en memoria cb2.depositar(250); cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=250 El mensaje depositar modifica el atributo saldo del objeto ligado a las variables cb2 y cb3. cb3

21 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE 21 Representación en memoria System.out.println (cb3.toString()); cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=250 cb3 112 250.0

22 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE CtaCteBancaria cb4 = cb2.cta_mayorSaldo(cb1); 22 Representación en memoria cb1 cb2 cta :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=250 cb3 cb4 public CtaCteBancaria cta_mayorSaldo(CtaCteBancaria cta){ /*…*/ if (saldo > cta.obtenerSaldo()) return this; else return cta; }

23 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE CtaCteBancaria cb4 = cb2.cta_mayorSaldo(cb1); 23 Representación en memoria cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=250 cb3 cb4

24 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE CtaCteBancaria cb4 = cb1.cta_mayorSaldo(cb2); 24 Representación en memoria cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=250 cb3 cb4 public CtaCteBancaria cta_mayorSaldo(CtaCteBancaria cta){ /*…*/ if (saldo > cta.obtenerSaldo()) return this; else return cta; } cta

25 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES DE TIPO CLASE cb3 = new CtaCteBancaria(cb1.obtenerCodigo(), cb1.obtenerSaldo()); 25 Representación en memoria cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=250 cb3 :CtaCteBancaria codigo=111 saldo=1000

26 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2015 26 TEMARIO El concepto de variable. La memoria. Variables de tipos elementales. Variables de tipo clase. Identidad, Igualdad y Equivalencia. Los cambios en el sistema.

27 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 IDENTIDAD, IGUALDAD Y EQUIVALENCIA Cada objeto de software tiene una identidad, una propiedad que lo distingue de los demás. La referencia a un objeto puede ser usada como propiedad para identificarlo. Si varias variables están ligadas a un mismo objeto, todas mantienen una misma referencia, esto es, comparten una misma identidad. Introducción a la Programación Orientada a Objetos IPOO - 2015 27

28 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 IDENTIDAD, IGUALDAD Y EQUIVALENCIA CtaCteBancaria cb1,cb2,cb3; cb1 = new CtaCteBancaria(101,500); cb2 = new CtaCteBancaria(101,500); cb3 = cb2; 28 Representación en memoria cb1 cb2 :CtaCteBancaria codigo=101 saldo=500 :CtaCteBancaria codigo=101 saldo=500 cb3

29 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 IDENTIDAD, IGUALDAD Y EQUIVALENCIA cb2 == cb3; 29 Representación en memoria cb1 cb2 :CtaCteBancaria codigo=101 saldo=500 :CtaCteBancaria codigo=101 saldo=500 cb3 Computa true ya que cb2 y cb3 tienen una misma identidad, es decir, el valor de las dos variables es la dirección de un mismo bloque de memoria.

30 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 IDENTIDAD, IGUALDAD Y EQUIVALENCIA cb2 == cb1; 30 Representación en memoria cb1 cb2 :CtaCteBancaria codigo=101 saldo=500 :CtaCteBancaria codigo=101 saldo=500 cb3 Computa false ya que los objetos tienen distinta identidad, es decir, las variables mantienen referencias a distintos objetos.

31 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 IDENTIDAD, IGUALDAD Y EQUIVALENCIA cb2.obtenerCodigo() == cb1.obtenerCodigo() && cb2.obtenerSaldo() == cb1.obtenerSaldo(); 31 Representación en memoria cb1 cb2 :CtaCteBancaria codigo=101 saldo=500 :CtaCteBancaria codigo=101 saldo=500 cb3 Computa true ya que los objetos tienen el mismo estado interno

32 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 IDENTIDAD, IGUALDAD Y EQUIVALENCIA El operador relacional compara el contenido de las variables, si las variables son de tipo clase, se comparan referencias, esto es, identidades. Para comparar el estado interno de los objetos debemos comparar los valores de los atributos. Un objetivo de la POO es reducir el impacto de los cambios. Si se agrega un atributo titular de clase String a la clase CtaCteBancaria, la expectativa es modificar solo la clase CtaCteBancaria. Introducción a la Programación Orientada a Objetos IPOO - 2015 32

33 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 IDENTIDAD, IGUALDAD Y EQUIVALENCIA Para comparar el estado interno de los objetos podemos agregar una consulta a la clase CtaCteBancaria : Introducción a la Programación Orientada a Objetos IPOO - 2015 33 class CtaCteBancaria { … public boolean equals(CtaCteBancaria cta){ return codigo == cta.obtenerCodigo() && saldo == cta.obtenerSaldo(); } … }

34 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 IDENTIDAD, IGUALDAD Y EQUIVALENCIA La clase tester verifica el servicio equals provisto por la clase CtaCteBancaria. Los objetos ligados cb1 y cb2 tienen distinta identidad pero pueden considerarse equivalentes, en el sentido de que modelan a un mismo objeto del problema. La comparación por equivalencia es una operación binaria, un operando es el objeto que recibe el mensaje, el otro operando es el objeto que pasa como parámetro. Introducción a la Programación Orientada a Objetos IPOO - 2015 34 if (cb1.equals(cb2))

35 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2015 35 TEMARIO El concepto de variable. La memoria. Variables de tipos elementales. Variables de tipo clase. Identidad, Igualdad y Equivalencia. Los cambios en el sistema

36 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 ALTERNATIVAS DE DISEÑO El diseñador del sistema decidió modificar la signatura del método extraer y sugiere que el método no retorne valor alguno. Además, sugiere agregar a las responsabilidades de la clase que se verifique si se puede realizar la extracción antes de utilizar el método extraer. Analice el impacto del cambio y modifique la clase CtaCteBancaria y todas las clases afectadas. Introducción a la Programación Orientada a Objetos IPOO - 2015 36

37 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 ALTERNATIVAS DE DISEÑO 37 CtaCteBancaria > maxDescubierto = 1000 > codigo: entero saldo: real > CtaCteBancaria(c:entero) CtaCteBancaria(c:entero,s:float) > depositar(mto:real) extraer(mto:real) > puedeExtraer(mto:real):boolean obtenerCodigo():entero obtenerSaldo():entero toString():String Requiere codigo > 0 y Saldo >= -maxDescubierto Requiere que se haya controlado si se puede extraer Requieren mto > 0

38 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 ALTERNATIVAS DE DISEÑO El software para los cajeros automáticos fue desarrollado e instalado correctamente y un tiempo después surge la necesidad de realizar un cambio. Cuando el titular de una cuenta corriente desea retirar un monto y su saldo más el máximo en descubierto no alcanzan a cubrirlo, se entrega el monto que deja a la cuenta con un saldo de –máximo en descubierto. El diseñador decide mantener la signatura del método extraer, el comando retorna false si la operación no pudo completarse, aunque el cliente haya podido realizar una extracción parcial. Analice el impacto del cambio e implemente las modificaciones pertinentes. Introducción a la Programación Orientada a Objetos IPOO - 2015 38


Descargar ppt "0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos."

Presentaciones similares


Anuncios Google