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...

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 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

Transcript of 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...

Page 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.

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

Objetos y ReferenciasCaso 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

Page 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 Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

2

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

TEMARIO

• El concepto de variable.• La memoria.• Variables de tipos elementales.• Variables de tipo clase.• Identidad, Igualdad y Equivalencia.• Los cambios en el sistema.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

3

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

Page 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 Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

4

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

TEMARIO

• El concepto de variable.• La memoria.• Variables de tipos elementales.• Variables de tipo clase.• Identidad, Igualdad y Equivalencia.• Los cambios en el sistema.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

5

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

0000 0010001

0001 1101000

0010 1110110

0011 0110001

0100 0110101

dirección contenido

Page 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 Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

6

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

TEMARIO

• El concepto de variable.• La memoria.• Variables de tipos elementales.• Variables de tipo clase.• Identidad, Igualdad y Equivalencia.• Los cambios en el sistema.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

7

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

8

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

Representación en memoria

int i = 3;Int j;

i 3

j  

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

9

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

Representación en memoria

int i = 3;Int j;j = I + 1;

i 3

j 4

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

10

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPOS ELEMENTALES

• Los operadores relacionales comparan el contenido de los bloques de memoria.

Representación en memoria

int i = 3;Int j;j = I + 1;boolean b1 = 1 == j;boolean b2 = i < j;

i 3

j 4

b1 false

b2  true

Page 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 Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

11

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

TEMARIO

• El concepto de variable.• La memoria.• Variables de tipos elementales.• Variables de tipo clase.• Identidad, Igualdad y Equivalencia.• Los cambios en el sistema.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

12

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

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.

Page 13: 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.

class CtaCteBancaria{//Requiere código>0 y saldo >= -maxDescubierto//Atributos de claseprivate 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;…}// Constructorespublic CtaCteBancaria(int cod) {

codigo = cod; saldo = 0;}public CtaCteBancaria(int cod, float sal) {

codigo = cod; saldo = sal;}

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

14

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

Representación en memoria

CtaCteBancaria cb;

cb = new CtaCteBancaria(111,1000);

cb :CtaCteBancariacodigo=111saldo=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.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

15

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

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

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

16

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

Representación en memoria

cb1 = new CtaCteBancaria (111,1000);

cb1

cb2

public CtaCteBancaria(int cod, float sal) {

codigo = cod; saldo = sal;}

:CtaCteBancariacodigo=111saldo=1000

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

17

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

Representación en memoria

cb1 = new CtaCteBancaria (111,1000);

cb2 = new CtaCteBancaria (112);

cb1

cb2

public CtaCteBancaria(int cod) {

codigo = cod; saldo = 0;}

:CtaCteBancariacodigo=111saldo=1000

:CtaCteBancariacodigo=112saldo=0

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

18

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

Representación en memoria

cb1 = new CtaCteBancaria (111,1000);

cb2 = new CtaCteBancaria (112);

cb1

cb2

:CtaCteBancariacodigo=111saldo=1000

:CtaCteBancariacodigo=112saldo=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.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

19

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

Representación en memoria

CtaCteBancaria cb3 = cb2;

cb1

cb2

:CtaCteBancariacodigo=111saldo=1000

:CtaCteBancariacodigo=112saldo=0

Como las variables de tipo clase mantienen referencias, el operador de asignación asigna referencias.

cb3

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

20

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

:CtaCteBancariacodigo=112saldo=0

VARIABLES DE TIPO CLASE

Representación en memoria

cb2.depositar(250);

cb1

cb2

:CtaCteBancariacodigo=111saldo=1000

:CtaCteBancariacodigo=112saldo=250

El mensaje depositar modifica el atributo saldo del objeto ligado a las variables cb2 y cb3.

cb3

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

21

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

Representación en memoria

System.out.println (cb3.toString());

cb1

cb2

:CtaCteBancariacodigo=111saldo=1000

:CtaCteBancariacodigo=112saldo=250

cb3

112 250.0

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

22

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

CtaCteBancaria cb4 = cb2.cta_mayorSaldo(cb1);

Representación en memoria

cb1

cb2

cta:CtaCteBancaria

codigo=111saldo=1000

:CtaCteBancariacodigo=112saldo=250

cb3

cb4

public CtaCteBancaria cta_mayorSaldo(CtaCteBancaria cta){/*…*/ if (saldo > cta.obtenerSaldo()) return this; else return cta;}

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

23

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

CtaCteBancaria cb4 = cb2.cta_mayorSaldo(cb1);

Representación en memoria

cb1

cb2

:CtaCteBancariacodigo=111saldo=1000

:CtaCteBancariacodigo=112saldo=250

cb3

cb4

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

24

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

CtaCteBancaria cb4 = cb1.cta_mayorSaldo(cb2);

Representación en memoria

cb1

cb2

:CtaCteBancariacodigo=111saldo=1000

:CtaCteBancariacodigo=112saldo=250

cb3

cb4

public CtaCteBancaria cta_mayorSaldo(CtaCteBancaria cta){/*…*/ if (saldo > cta.obtenerSaldo()) return this; else return cta;}

cta

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

25

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

VARIABLES DE TIPO CLASE

cb3 = new CtaCteBancaria(cb1.obtenerCodigo(),

cb1.obtenerSaldo());

Representación en memoria

cb1

cb2

:CtaCteBancariacodigo=111saldo=1000

:CtaCteBancariacodigo=112saldo=250

cb3 :CtaCteBancariacodigo=111saldo=1000

Page 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 Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

26

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

TEMARIO

• El concepto de variable.• La memoria.• Variables de tipos elementales.• Variables de tipo clase.• Identidad, Igualdad y Equivalencia.• Los cambios en el sistema.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

27

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

28

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

IDENTIDAD, IGUALDAD Y EQUIVALENCIA

CtaCteBancaria cb1,cb2,cb3;

cb1 = new CtaCteBancaria(101,500);

cb2 = new CtaCteBancaria(101,500);

cb3 = cb2;

Representación en memoria

cb1

cb2

:CtaCteBancariacodigo=101saldo=500

:CtaCteBancariacodigo=101saldo=500

cb3

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

29

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

IDENTIDAD, IGUALDAD Y EQUIVALENCIA

cb2 == cb3;

Representación en memoria

cb1

cb2

:CtaCteBancariacodigo=101saldo=500

:CtaCteBancariacodigo=101saldo=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.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

30

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

IDENTIDAD, IGUALDAD Y EQUIVALENCIA

cb2 == cb1;

Representación en memoria

cb1

cb2

:CtaCteBancariacodigo=101saldo=500

:CtaCteBancariacodigo=101saldo=500

cb3

Computa false ya que los objetos tienen distinta identidad, es decir, las variables mantienen referencias a distintos objetos.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

31

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

IDENTIDAD, IGUALDAD Y EQUIVALENCIA

cb2.obtenerCodigo() == cb1.obtenerCodigo() &&

cb2.obtenerSaldo() == cb1.obtenerSaldo();

Representación en memoria

cb1

cb2

:CtaCteBancariacodigo=101saldo=500

:CtaCteBancariacodigo=101saldo=500

cb3

Computa true ya que los objetos tienen el mismo estado interno

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

32

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

33

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

IDENTIDAD, IGUALDAD Y EQUIVALENCIA

• Para comparar el estado interno de los objetos podemos agregar una consulta a la clase CtaCteBancaria:

class CtaCteBancaria {…public boolean equals(CtaCteBancaria cta){ return codigo == cta.obtenerCodigo() &&

saldo == cta.obtenerSaldo();}…}

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

34

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

if (cb1.equals(cb2))

Page 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 Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

35

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

TEMARIO

• El concepto de variable.• La memoria.• Variables de tipos elementales.• Variables de tipo clase.• Identidad, Igualdad y Equivalencia.• Los cambios en el sistema

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

36

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

37

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 0 1

ALTERNATIVAS DE DISEÑO

CtaCteBancaria<<Atributos de clase>>maxDescubierto = 1000<<Atributos de instancia>>codigo: enterosaldo: real<<constructores>>CtaCteBancaria(c:entero)CtaCteBancaria(c:entero,s:float)<<comandos>> depositar(mto:real)extraer(mto:real)<<consultas>>puedeExtraer(mto:real):booleanobtenerCodigo():enteroobtenerSaldo():enterotoString():String

Requiere codigo > 0 y Saldo >= -maxDescubierto

Requiere que se haya controlado si se puede extraer

Requieren mto > 0

Page 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 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Introducción a la Programación Orientada a Objetos IPOO - 2015

38

0 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 00 1 1 0 01 0 0 1 11 0 1 1 00 1 1 1 01 0 0 11 1 10 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.