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.

  • Published on
    22-Jan-2016

  • View
    220

  • Download
    6

Transcript

<p>Presentacin de PowerPoint</p> <p>INTRODUCCIN A LA PROGRAMACIN ORIENTADA A OBJETOSObjetos y ReferenciasCaso de estudio: Cta. Cte. BancariaDr. Luciano H. Tamargohttp://cs.uns.edu.ar/~ltDepto. de Ciencias e Ingeniera de la ComputacinUniversidad Nacional del Sur, Baha Blanca20150 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 10 0 1Introduccin a la Programacin Orientada a Objetos IPOO - 20152TEMARIOEl concepto de variable.La memoria.Variables de tipos elementales.Variables de tipo clase.Identidad, Igualdad y Equivalencia.Los cambios en el sistema.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 10 0 1EL CONCEPTO DE VARIABLEUna variable tiene un nombre, un alcance y un tipo de dato.El nombre es un identificador que cumple algunas reglas sintcticas que impone el lenguaje.El alcance depende de la declaracin. En Java una variable puede declararse como un atributo de clase o local a un bloque de cdigo.El tipo de una variable puede ser elemental o una clase.La representacin interna en memoria es diferente en cada caso. Introduccin a la Programacin Orientada a Objetos IPOO - 201530 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 10 0 1Introduccin a la Programacin Orientada a Objetos IPOO - 20154TEMARIOEl concepto de variable.La memoria.Variables de tipos elementales.Variables de tipo clase.Identidad, Igualdad y Equivalencia.Los cambios en el sistema.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 10 0 1LA MEMORIAPodemos pensar que la memoria es una estructura de celdas o bloques de memoria, cada una de las cuales tiene una direccin y un contenido. Introduccin a la Programacin Orientada a Objetos IPOO - 201550000001000100011101000001011101100011011000101000110101direccincontenido0 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 10 0 1Introduccin a la Programacin Orientada a Objetos IPOO - 20156TEMARIOEl concepto de variable.La memoria.Variables de tipos elementales.Variables de tipo clase.Identidad, Igualdad y Equivalencia.Los cambios en el sistema.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 10 0 1VARIABLES DE TIPOS ELEMENTALESEl tipo de dato elemental es un conjunto de valores atmicos 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 ejecucin, una variable de tipo elemental almacena un valor y ocupa una celda o bloque de memoria.Introduccin a la Programacin Orientada a Objetos IPOO - 201570 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 10 0 1VARIABLES DE TIPOS ELEMENTALESCuando en ejecucin se alcanza una declaracin 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. Introduccin a la Programacin Orientada a Objetos IPOO - 20158Representacin en memoriaint i = 3;Int j;i3j0 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 10 0 1VARIABLES DE TIPOS ELEMENTALESLa instruccin de asignacin modifica el contenido del bloque de memoria que corresponde a la variable.En verdad esta es una visin abstracta, en memoria se almacena la representacin binaria de cada valor. Introduccin a la Programacin Orientada a Objetos IPOO - 20159Representacin en memoriaint i = 3;Int j;j = I + 1;i3j40 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 10 0 1VARIABLES DE TIPOS ELEMENTALESLos operadores relacionales comparan el contenido de los bloques de memoria.Introduccin a la Programacin Orientada a Objetos IPOO - 201510Representacin en memoriaint i = 3;Int j;j = I + 1;boolean b1 = 1 == j;boolean b2 = i &lt; j;i3j4b1falseb2true0 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 10 0 1Introduccin a la Programacin Orientada a Objetos IPOO - 201511TEMARIOEl concepto de variable.La memoria.Variables de tipos elementales.Variables de tipo clase.Identidad, Igualdad y Equivalencia.Los cambios en el sistema.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 10 0 1VARIABLES DE TIPO CLASEEl 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 representacin interna de objetos y referencias graficando la memoria, sino dibujando diagramas de objetos. Introduccin a la Programacin Orientada a Objetos IPOO - 201512Representacin en memoriaUn diagrama de objetos es una representacin grfica adecuada para modelar la declaracin de variables, la creacin de objetos, la evolucin de las referencias y la modificacin de sus estados internos.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 10 0 1class CtaCteBancaria{//Requiere cdigo&gt;0 y saldo &gt;= -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;}VARIABLES DE TIPO CLASE14Representacin en memoriaCtaCteBancaria cb;cb = new CtaCteBancaria(111,1000);</p> <p>cb:CtaCteBancariacodigo=111saldo=1000Reserva 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 direccin del bloque de memoria que mantiene el estado interno del objeto. 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 10 0 114VARIABLES DE TIPO CLASE15Representacin en memoriaLa declaracin de cada variable reserva un bloque de memoria que mantiene inicialmente una referencia nula o referencia no ligada. CtaCteBancaria cb1;CtaCteBancaria cb2;cb1cb20 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 10 0 115VARIABLES DE TIPO CLASE16Representacin en memoriacb1 = new CtaCteBancaria (111,1000);cb1cb2public CtaCteBancaria(int cod, float sal) {codigo = cod; saldo = sal;}:CtaCteBancariacodigo=111saldo=10000 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 10 0 116VARIABLES DE TIPO CLASE17Representacin en memoriacb1 = new CtaCteBancaria (111,1000);cb2 = new CtaCteBancaria (112);cb1cb2public CtaCteBancaria(int cod) {codigo = cod; saldo = 0;}:CtaCteBancariacodigo=111saldo=1000:CtaCteBancariacodigo=112saldo=00 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 10 0 117VARIABLES DE TIPO CLASE18Representacin en memoriacb1 = new CtaCteBancaria (111,1000);cb2 = new CtaCteBancaria (112);cb1cb2:CtaCteBancariacodigo=111saldo=1000:CtaCteBancariacodigo=112saldo=0La declaracin de cada objeto reserva un nuevo bloque de memoria, cuya direccin se asigna a cada variable. Las variables cb1 y cb2 estn ligadas. 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 10 0 118VARIABLES DE TIPO CLASE19Representacin en memoriaCtaCteBancaria cb3 = cb2;cb1cb2:CtaCteBancariacodigo=111saldo=1000:CtaCteBancariacodigo=112saldo=0Como las variables de tipo clase mantienen referencias, el operador de asignacin asigna referencias. cb30 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 10 0 119:CtaCteBancariacodigo=112saldo=0VARIABLES DE TIPO CLASE20Representacin en memoriacb2.depositar(250);cb1cb2:CtaCteBancariacodigo=111saldo=1000:CtaCteBancariacodigo=112saldo=250El mensaje depositar modifica el atributo saldo del objeto ligado a las variables cb2 y cb3. cb30 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 10 0 120VARIABLES DE TIPO CLASE21Representacin en memoriaSystem.out.println (cb3.toString());cb1cb2:CtaCteBancariacodigo=111saldo=1000:CtaCteBancariacodigo=112saldo=250cb3</p> <p>112 250.00 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 10 0 121VARIABLES DE TIPO CLASECtaCteBancaria cb4 = cb2.cta_mayorSaldo(cb1);22Representacin en memoriacb1cb2cta:CtaCteBancariacodigo=111saldo=1000:CtaCteBancariacodigo=112saldo=250cb3cb4public CtaCteBancaria cta_mayorSaldo(CtaCteBancaria cta){/**/ if (saldo &gt; cta.obtenerSaldo()) return this; else return cta;}</p> <p>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 10 0 122VARIABLES DE TIPO CLASECtaCteBancaria cb4 = cb2.cta_mayorSaldo(cb1);23Representacin en memoriacb1cb2:CtaCteBancariacodigo=111saldo=1000:CtaCteBancariacodigo=112saldo=250cb3cb40 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 10 0 123VARIABLES DE TIPO CLASECtaCteBancaria cb4 = cb1.cta_mayorSaldo(cb2);24Representacin en memoriacb1cb2:CtaCteBancariacodigo=111saldo=1000:CtaCteBancariacodigo=112saldo=250cb3cb4public CtaCteBancaria cta_mayorSaldo(CtaCteBancaria cta){/**/ if (saldo &gt; cta.obtenerSaldo()) return this; else return cta;}</p> <p>cta0 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 10 0 124VARIABLES DE TIPO CLASEcb3 = new CtaCteBancaria(cb1.obtenerCodigo(), cb1.obtenerSaldo());25Representacin en memoriacb1cb2:CtaCteBancariacodigo=111saldo=1000:CtaCteBancariacodigo=112saldo=250cb3:CtaCteBancariacodigo=111saldo=10000 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 10 0 125Introduccin a la Programacin Orientada a Objetos IPOO - 201526TEMARIOEl concepto de variable.La memoria.Variables de tipos elementales.Variables de tipo clase.Identidad, Igualdad y Equivalencia.Los cambios en el sistema.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 10 0 1IDENTIDAD, IGUALDAD Y EQUIVALENCIACada objeto de software tiene una identidad, una propiedad que lo distingue de los dems. La referencia a un objeto puede ser usada como propiedad para identificarlo. Si varias variables estn ligadas a un mismo objeto, todas mantienen una misma referencia, esto es, comparten una misma identidad. Introduccin a la Programacin Orientada a Objetos IPOO - 2015270 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 10 0 1IDENTIDAD, IGUALDAD Y EQUIVALENCIACtaCteBancaria cb1,cb2,cb3;cb1 = new CtaCteBancaria(101,500);cb2 = new CtaCteBancaria(101,500);cb3 = cb2;28Representacin en memoriacb1cb2:CtaCteBancariacodigo=101saldo=500:CtaCteBancariacodigo=101saldo=500cb30 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 10 0 128IDENTIDAD, IGUALDAD Y EQUIVALENCIAcb2 == cb3;29Representacin en memoriacb1cb2:CtaCteBancariacodigo=101saldo=500:CtaCteBancariacodigo=101saldo=500cb3Computa true ya que cb2 y cb3 tienen una misma identidad, es decir, el valor de las dos variables es la direccin de un mismo bloque de memoria. 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 10 0 129IDENTIDAD, IGUALDAD Y EQUIVALENCIAcb2 == cb1;30Representacin en memoriacb1cb2:CtaCteBancariacodigo=101saldo=500:CtaCteBancariacodigo=101saldo=500cb3Computa false ya que los objetos tienen distinta identidad, es decir, las variables mantienen referencias a distintos 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 10 0 130IDENTIDAD, IGUALDAD Y EQUIVALENCIAcb2.obtenerCodigo() == cb1.obtenerCodigo() &amp;&amp;cb2.obtenerSaldo() == cb1.obtenerSaldo();31Representacin en memoriacb1cb2:CtaCteBancariacodigo=101saldo=500:CtaCteBancariacodigo=101saldo=500cb3Computa true ya que los objetos tienen el mismo estado interno0 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 10 0 131IDENTIDAD, IGUALDAD Y EQUIVALENCIAEl 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. Introduccin a la Programacin Orientada a Objetos IPOO - 2015320 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 10 0 1IDENTIDAD, IGUALDAD Y EQUIVALENCIAPara comparar el estado interno de los objetos podemos agregar una consulta a la clase CtaCteBancaria:Introduccin a la Programacin Orientada a Objetos IPOO - 201533class CtaCteBancaria {public boolean equals(CtaCteBancaria cta){ return codigo == cta.obtenerCodigo() &amp;&amp; saldo == cta.obtenerSaldo();}}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 10 0 1IDENTIDAD, IGUALDAD Y EQUIVALENCIALa 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 comparacin por equivalencia es una operacin binaria, un operando es el objeto que recibe el mensaje, el otro operando es el objeto que pasa como parmetro. Introduccin a la Programacin Orientada a Objetos IPOO - 201534if (cb1.equals(cb2))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 10 0 1Introduccin a la Programacin Orientada a Objetos IPOO - 201535TEMARIOEl concepto de variable.La memoria.Variables de tipos elementales.Variables de tipo clase.Identidad, Igualdad y Equivalencia.Los cambios en el sistema</p> <p>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 10 0 1ALTERNATIVAS DE DISEOEl diseador del sistema decidi modificar la signatura del mtodo extraer y sugiere que el mtodo no retorne valor alguno.Adems, sugiere agregar a las responsabilidades de la clase que se verifique si se puede realizar la extraccin antes de utilizar el mtodo extraer. Analice el impacto del cambio y modifique la clase CtaCteBancaria y todas las clases afectadas. Introduccin a la Programacin Orientada a Objetos IPOO - 2015360 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 10 0 1ALTERNATIVAS DE DISEO37CtaCteBancaria</p> <p>maxDescubierto = 1000</p> <p>codigo: enterosaldo: real</p> <p>CtaCteBancaria(c:entero)CtaCteBancaria(c:entero,s:float) depositar(mto:real)extraer(mto:real)</p> <p>puedeExtraer(mto:real):booleanobtenerCodigo():enteroobtenerSaldo():enterotoString():String</p> <p>Requiere codigo &gt; 0 y Saldo &gt;= -maxDescubiertoRequiere que se haya controlado si se puede extraerRequieren mto &gt; 00 1 1 0 01 0 0 1 11 0 1...</p>

Recommended

View more >