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.

Slides:



Advertisements
Presentaciones similares
2. Manejo de memoria Manejo de memoria estática
Advertisements

Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Entendiendo la definición de clases
Programación Orientada a Objetos
El proceso de desarrollo de software
El Proceso de desarrollo de software
Problema abstracción DATOS ACCIONES Problemas y Programas Programa.
El proceso de desarrollo de software
Abstracciones y Modelos
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
El proceso de desarrollo de software
Tratamiento de listas en Java
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Programación Orientada a Objetos en Java
El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Modificadores.
PROGRAMACIÓN ORIENTADA A OBJETOS
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
6. Herencia. Clases abstractas. Genericidad
SCJP Sun Certified Programmer for Java 6
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
El lenguaje de programación Java
Patrones Creacionales
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Clases.
Manejo de Punteros y objetos en memoria dinámica en C++
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
Programación Orientada a Objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Estructuras.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.
Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
Términos algoritmo diseñar algoritmo implementar algoritmo
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
Herencia y Clases Abstractas
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código.
Algunas Características de C++ no presentes en C Agustín J. González ELO-329.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Diferencia entre implementar en RPA e IPOO - Diseño En.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Asociación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Dependencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos y Referencias Caso de estudio: Cta. Cte. Bancaria Dr. Luciano H. Tamargo Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

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

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

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

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 … direccióncontenido

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

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

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 Representación en memoria int i = 3; Int j; i3 j

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 Representación en memoria int i = 3; Int j; j = I + 1; i3 j4

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

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

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

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

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.

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

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

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

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.

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

: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

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 cb

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

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

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

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

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

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

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

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.

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.

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

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

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 class CtaCteBancaria { … public boolean equals(CtaCteBancaria cta){ return codigo == cta.obtenerCodigo() && saldo == cta.obtenerSaldo(); } … }

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 if (cb1.equals(cb2))

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

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

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

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