Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porInéz Llerena Modificado hace 10 años
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 Clases como tipos Objetos y referencias 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 Repaso. Clases como tipos de datos. Mensajes y métodos. Variables y alcance. Objetos y referencias. Los cambios en el sistema. Objetos, parámetros y resultados. Resumen.
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 PROCESO DE DESARROLLO DE SOFTWARE El desarrollo de un sistema de software es un proceso de abstracción a partir del cual se construye un modelo que es la solución de un problema. En los problemas de mediana y gran escala la construcción del modelo requiere creatividad, capacidad de abstracción y también de un paradigma que guíe, oriente y sistematice cada etapa del proceso. Introducción a la Programación Orientada a Objetos IPOO - 2015 3 Estudio de Factibilidad Desarrollo de Requerimientos Diseño del Sistema Implementación Verificación Mantenimiento DOCUMENTACIONDOCUMENTACION
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 PARADIGMA DE PROGRAMACIÓN Un paradigma de programación brinda: –Un principio que describe propiedades generales que se aplican a todo el proceso de desarrollo –Una metodología que consta de un conjunto integrado de métodos, estrategias y técnicas –Un conjunto de herramientas en particular el lenguaje de modelado y el lenguaje de programación Introducción a la Programación Orientada a Objetos IPOO - 2015 4
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 PARADIGMA PROCEDURAL En el paradigma procedural un programa está conformado por una colección de subprogramas. Cada subprograma resuelve un subproblema de un problema global. Así, la resolución de un problema complejo es atacada aplicando la estrategia dividir para conquistar, durante la etapa de diseño. La división se basa en las acciones, cada una de las cuales se va a implementar como un subprograma. La programación modular requiere que los subprogramas se comuniquen a través de parámetros. Introducción a la Programación Orientada a Objetos IPOO - 2015 5
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 PARADIGMA PROCEDURAL El paradigma procedural es adecuado para resolver problemas de pequeña o mediana escala, con requerimientos más o menos estables. Para los problemas que demandan soluciones flexibles, con capacidad para adaptarse rápidamente a los cambios, el paradigma procedural y los lenguaje imperativos, no son una buena elección. En estos casos es necesario aplicar una metodología que mantenga la estrategia de dividir para conquistar, pero que el modelo de la solución se elabore en base a las entidades del problema. Introducción a la Programación Orientada a Objetos IPOO - 2015 6
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 PROGRAMACIÓN ORIENTADA A OBJETOS La programación orientada a objetos propone identificar durante el desarrollo de requerimientos los objetos del problema, caracterizarlos a través de sus principales atributos y agruparlos en clases. En la etapa de diseño del sistema se completa la especificación de las clases modelando el comportamiento de los objetos. El resultado de un diseño orientado a objetos incluye un diagrama de clases escrito en un lenguaje de modelado. El diagrama especifica la colección de clases y sus relaciones. 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 PROGRAMACIÓN ORIENTADA A OBJETOS Durante la implementación del sistema se escribe el código de cada clase en un lenguaje de programación, manteniendo las relaciones especificadas en el diagrama de clases. En la ejecución del sistema se crean objetos de software que son instancias de una clase. Introducción a la Programación Orientada a Objetos IPOO - 2015 8 Una clase puede pensarse como un tipo de dato a partir del cual se declaran variables y se crean objetos de software.
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 CASO DE ESTUDIO: CUENTA CORRIENTE La especificación de requerimientos Un banco ofrece cajeros automáticos a través de los cuales los clientes pueden realizar: –depósitos, –extracciones y –consultar el saldo de su cuenta corriente. En el momento que se crea una cuenta corriente se establece su código y el saldo se inicializa en 0. También es posible crear una cuenta corriente estableciendo su código y saldo inicial. Una cuenta bancaria puede tener un saldo negativo hasta un máximo establecido por el banco. El código no se modifica, el saldo cambia con cada depósito o extracción. Introducción a la Programación Orientada a Objetos IPOO - 2015 9
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 CASO DE ESTUDIO: CUENTA CORRIENTE El diseño Introducción a la Programación Orientada a Objetos IPOO - 2015 10 CtaCteBancaria > maxDescubierto = 1000 > codigo: entero saldo: real > CtaCteBancaria(c:entero) CtaCteBancaria(c:entero,s:float) > depositar(mto:real) extraer(mto:real):boolean > obtenerCodigo():entero obtenerSaldo():entero toString():String Requiere codigo > 0 y Saldo >= -maxDescubierto Si mto > saldo+maxDescubierto extraer retorna false y la extracción no se realiza Requieren mto > 0
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 CASO DE ESTUDIO: CUENTA CORRIENTE La implementación en Java class CtaCteBancaria{ //Requiere código > 0 y saldo >= -maxDescubierto //Atributos de clase private static final int maxDescubierto=1000; //Atributos de Instancia /*El codigo se establece al crear la cuenta corriente bancaria y no cambia */ private int codigo; private float saldo; … } Introducción a la Programación Orientada a Objetos IPOO - 2015 11
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 CASO DE ESTUDIO: CUENTA CORRIENTE La implementación en Java // Constructores public CtaCteBancaria(int cod) { codigo = cod; saldo = 0; } public CtaCteBancaria(int cod, float sal) { codigo = cod; saldo = sal; } … } Introducción a la Programación Orientada a Objetos IPOO - 2015 12
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 CASO DE ESTUDIO: CUENTA CORRIENTE La implementación en Java // Comandos public void depositar(float mto){ //Requiere mto > 0 saldo+=mto; } public boolean extraer(float mto){ /*si el mto es mayor a saldo+maxDescubierto retorna false y la extracción no se realiza*/ boolean puede = true; if (saldo+maxDescubierto >= mto) saldo=saldo-mto; else puede = false; return puede; } … } Introducción a la Programación Orientada a Objetos IPOO - 2015 13
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 CASO DE ESTUDIO: CUENTA CORRIENTE La implementación en Java // Consultas public int obtenerCodigo(){ return codigo; } public float obtenerSaldo(){ return saldo; } public String toString(){ return codigo+" "+saldo; } Introducción a la Programación Orientada a Objetos IPOO - 2015 14
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 IPOO - 2015 15 TEMARIO Repaso. Clases como tipos de datos. Mensajes y métodos. Variables y alcance. Objetos y referencias. Los cambios en el sistema. Objetos, parámetros y resultados. Resumen.
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 CLASES COMO TIPO DE DATOS La clase CtaCteBancaria incluye atributos y servicios, define por lo tanto un tipo de dato a partir del cual es posible declarar variables. Como todo tipo, el tipo definido por una clase, o tipo clase, establece un conjunto de valores y un conjunto de operaciones. El conjunto de valores queda determinado por los valores de los atributos. El conjunto de operaciones lo definen los servicios provistos por la clase. Introducción a la Programación Orientada a Objetos IPOO - 2015 16
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 CLASES COMO TIPO DE DATOS Declara dos variables de tipo CtaCteBancaria. Introducción a la Programación Orientada a Objetos IPOO - 2015 17 CtaCteBancaria cb, sm;
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 CLASES COMO TIPO DE DATOS Crea un objeto de clase CtaCteBancaria. El constructor está seguido de dos parámetros reales, se invoca entonces el constructor con dos parámetros formales definido en la clase CtaCteBancaria. Introducción a la Programación Orientada a Objetos IPOO - 2015 18 CtaCteBancaria cb, sm; cb = new CtaCteBancaria(111, 1000);
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 CLASES COMO TIPO DE DATOS Crea un objeto de clase CtaCteBancaria. El constructor está seguido de un parámetro real, se invoca entonces el constructor con un parámetro formal definido en la clase CtaCteBancaria. Introducción a la Programación Orientada a Objetos IPOO - 2015 19 CtaCteBancaria cb, sm; cb = new CtaCteBancaria(111, 1000); sm = new CtaCteBancaria(112);
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 CLASES COMO TIPO DE DATOS Alternativamente Java puede usarse adoptando una metodología procedural o imperativo. La clase solo va a incluir entonces una colección de métodos, probablemente relacionados de alguna manera, que brindan una funcionalidad sin definir un tipo. En todos los casos de estudios propuestos adoptamos una metodología orientada a objetos, de modo que cada una de las clases definidas incluye atributos y servicios y define un tipo de dato. Introducción a la Programación Orientada a Objetos IPOO - 2015 20
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 IPOO - 2015 21 TEMARIO Repaso. Clases como tipos de datos. Mensajes y métodos. Variables y alcance. Objetos y referencias. Los cambios en el sistema. Objetos, parámetros y resultados. Resumen.
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 MENSAJES Y MÉTODOS Cuando un objeto recibe un mensaje su clase determina el método que se va a ejecutar en respuesta a ese mensaje. La clase CtaCteBancaria brinda dos comandos para modificar el saldo: depositar y extraer. Ambos reciben como parámetro una variable mto que se requiere no negativa. Cuando una instancia de la clase CtaCteBancaria recibe el mensaje depositar se ejecuta el método del mismo nombre. Introducción a la Programación Orientada a Objetos IPOO - 2015 22
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 MENSAJES Y MÉTODOS Envía el mensaje depositar al objeto ligado a la variable sm. El comando modifica el atributo de instancia saldo incrementando su valor de acuerdo al valor del parámetro mto. El comando depositar se declara de tipo void, para indicar que no retorna un resultado. Introducción a la Programación Orientada a Objetos IPOO - 2015 23 sm.depositar(monto);
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 MENSAJES Y MÉTODOS Envía el mensaje extraer al objeto ligado a la variable sm. El comando evalúa si es posible realizar la extracción considerando los valores de mto, saldo y maxDescubierto. El comando retorna un valor de tipo boolean, compatible con el tipo del resultado, indicando si se pudo concretar la operación. Introducción a la Programación Orientada a Objetos IPOO - 2015 24 if (!sm.extraer(100)) System.out.println ("Error");
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 IPOO - 2015 25 TEMARIO Repaso. Clases como tipos de datos. Mensajes y métodos. Variables y alcance. Objetos y referencias. Los cambios en el sistema. Objetos, parámetros y resultados. Resumen.
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 VARIABLES Y ALCANCE La declaración de una variable establece su alcance. Una variable declarada en una clase como atributo de clase o de instancia, es visible en toda la clase. Si se declara como privada, solo puede ser usada dentro de la clase, esto es, el alcance es la clase completa. Por el momento, adoptaremos la convención de declarar los atributos, de instancia y de clase, como privados. Solo usaremos atributos de clase para representar valores constantes. Introducción a la Programación Orientada a Objetos IPOO - 2015 26
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 VARIABLES Y ALCANCE En el caso de estudio de la Cuenta Corriente Bancaria las variables codigo y saldo son los atributos de instancia de la clase y pueden ser usadas en cualquiera de los servicios provistos por la clase CtaCteBancaria. Como se declaran privados, sus valores sólo pueden ser accedidos desde el exterior por los servicios públicos que brinda la clase. La variable maxDescubierto es un atributo de clase privado, solo es visible en la clase. 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 VARIABLES Y ALCANCE Una variable declarada local a un bloque se crea en el momento que se ejecuta la instrucción de declaración y se destruye cuando termina el bloque que corresponde a la declaración. Una variable local solo es visible en el bloque en el que se declara, su alcance es justamente el bloque que contiene la declaración. Introducción a la Programación Orientada a Objetos IPOO - 2015 28
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 VARIABLES Y ALCANCE public boolean extraer(float mto){ /*si el mto es mayor al saldo retorna false y la extracción no se realiza*/ boolean puede = true; if (saldo >= mto) saldo=saldo-mto; else puede = false; return puede; } 29 La variable puede solo es visible y puede ser accedida en el bloque de código de ese método.
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 VARIABLES Y ALCANCE Un parámetro formal de un servicio se trata como una variable local que se crea en el momento que comienza la ejecución del servicio y se destruye cuando termina. Se inicializa con el valor del argumento o parámetro real. El pasaje de parámetros es entonces por valor. La variable mto en el método extraer es un parámetro formal. Introducción a la Programación Orientada a Objetos IPOO - 2015 30
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 IPOO - 2015 31 TEMARIO Repaso. Clases como tipos de datos. Mensajes y métodos. Variables y alcance. Objetos y referencias. Los cambios en el sistema. Objetos, parámetros y resultados. Resumen.
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 AMBIENTE DE REFERENCIAMIENTO Cada bloque crea un nuevo ambiente de referenciamiento, formado por todos los identificadores que pueden ser usados. Los operandos de una expresión pueden ser constantes, atributos, variables locales y parámetros visibles en el ambiente de referenciamiento en el que aparece la expresión. Java brinda un mecanismo de conversión implícito para los tipos elementales que permite escribir expresiones mixtas, esto es, con operandos de distinto tipo. 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 OBJETOS Y REFERENCIAS El valor de una variable de un tipo clase es una referencia. Una referencia puede ser nula o estar ligada a un objeto. Cuando una variable está ligada mantiene la referencia al estado interno de un objeto. La estructura del estado interno del objeto, depende de las variables de instancia de la clase. El estado interno de un objeto junto con la variable que referencia a este estado, se modelan mediante un diagrama de objetos. Introducción a la Programación Orientada a Objetos IPOO - 2015 33
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 OBJETOS Y REFERENCIAS class CtaCteBancaria{ //Requiere código > 0 y saldo >= -maxDescubierto //Atributos de clase private static final int 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; } … } Introducción a la Programación Orientada a Objetos IPOO - 2015 34
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 OBJETOS Y REFERENCIAS Una declaración como: Crea una referencia nula o referencia no ligada. Introducción a la Programación Orientada a Objetos IPOO - 2015 35 Diagrama de Objetos cb CtaCteBancaria cb;
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 OBJETOS Y REFERENCIAS La asignación: crea un objeto de clase CtaCteBancaria. La variable cb queda ligada al objeto. El estado interno del objeto ligado a la variable cb está formado por los atributos codigo y saldo. Introducción a la Programación Orientada a Objetos IPOO - 2015 36 Diagrama de Objetos cb :CtaCteBancaria codigo=111 saldo=1000 cb = new CtaCteBancaria(111,1000);
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 OBJETOS Y REFERENCIAS Es equivalente a: Introducción a la Programación Orientada a Objetos IPOO - 2015 37 Diagrama de Objetos cb :CtaCteBancaria codigo=111 saldo=1000 CtaCteBancaria cb; cb = new CtaCteBancaria(111,1000); CtaCteBancaria cb = new CtaCteBancaria(111,1000);
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 OBJETOS Y REFERENCIAS Introducción a la Programación Orientada a Objetos IPOO - 2015 38 Diagrama de Objetos cb :CtaCteBancaria codigo=111 saldo=1000 CtaCteBancaria cb = new CtaCteBancaria(111,1000); Crea una variable cb. Invoca al constructor que inicializa el estado interno del objeto. Crea un objeto de software de clase CtaCteBancaria. Liga la variable cb al objeto, es decir, la variable cb mantiene una referencia al estado interno del objeto.
39
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 OBJETOS Y REFERENCIAS CtaCteBancaria cb1,cb2,cb3; cb1 = new CtaCteBancaria(111,1000); cb2 = new CtaCteBancaria(112,250); cb3 = cb2; Introducción a la Programación Orientada a Objetos IPOO - 2015 39 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=250 cb3
40
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 OBJETOS Y REFERENCIAS System.out.println(cb3.toString()); Introducción a la Programación Orientada a Objetos IPOO - 2015 40 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=250 cb3 112 250
41
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 OBJETOS Y REFERENCIAS System.out.println(cb3.toString()); cb2.depositar(100); Introducción a la Programación Orientada a Objetos IPOO - 2015 41 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=250 cb3
42
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 OBJETOS Y REFERENCIAS System.out.println(cb3.toString()); cb2.depositar(100); Introducción a la Programación Orientada a Objetos IPOO - 2015 42 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=350 cb3
43
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 OBJETOS Y REFERENCIAS System.out.println(cb3.toString()); cb2.depositar(100); System.out.println(cb3.toString()); Introducción a la Programación Orientada a Objetos IPOO - 2015 43 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=350 cb3 112 350
44
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 OBJETOS Y REFERENCIAS cb3 = new CtaCteBancaria (112,350); Introducción a la Programación Orientada a Objetos IPOO - 2015 44 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=350 cb3 :CtaCteBancaria codigo=112 saldo=350
45
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 OBJETOS Y REFERENCIAS System.out.println(cb3.toString()); Introducción a la Programación Orientada a Objetos IPOO - 2015 45 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=350 cb3 :CtaCteBancaria codigo=112 saldo=350 112 350
46
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 OBJETOS Y REFERENCIAS System.out.println(cb3.toString()); cb2.depositar(100); Introducción a la Programación Orientada a Objetos IPOO - 2015 46 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=350 cb3 :CtaCteBancaria codigo=112 saldo=350
47
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 OBJETOS Y REFERENCIAS System.out.println(cb3.toString()); cb2.depositar(100); Introducción a la Programación Orientada a Objetos IPOO - 2015 47 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=450 cb3 :CtaCteBancaria codigo=112 saldo=350
48
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 OBJETOS Y REFERENCIAS System.out.println(cb3.toString()); cb2.depositar(100); System.out.println(cb3.toString()); Introducción a la Programación Orientada a Objetos IPOO - 2015 48 Diagrama de Objetos cb1 cb2 :CtaCteBancaria codigo=111 saldo=1000 :CtaCteBancaria codigo=112 saldo=450 cb3 :CtaCteBancaria codigo=112 saldo=350 112 350
49
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 49 TEMARIO Repaso. Clases como tipos de datos. Mensajes y métodos. Variables y alcance. Objetos y referencias. Los cambios en el sistema. Objetos, parámetros y resultados. Resumen.
50
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 LOS CAMBIOS EN LOS REQUERIMIENTOS Un banco ofrece cajeros automáticos a través de los cuales los clientes pueden realizar depósitos, extracciones y consultar el saldo de su cuenta corriente. En el momento que se crea una cuenta corriente se establece su código y el saldo se inicializa en 0. También es posible crear una cuenta corriente estableciendo su código y saldo inicial. Una cuenta bancaria puede tener un saldo negativo hasta un máximo establecido por el banco. El código no se modifica, el saldo cambia con cada depósito o extracción. La clase brinda servicios para determinar el código de la cuenta con menor saldo entre dos cuentas y cuál es la cuenta con menor saldo, entre dos cuentas. Introducción a la Programación Orientada a Objetos IPOO - 2015 50
51
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 LOS CAMBIOS EN EL DISEÑO 51 CtaCteBancaria > maxDescubierto = 1000 > codigo: entero saldo: real > CtaCteBancaria(c:entero) CtaCteBancaria(c:entero,s:float) > depositar(mto:real) extraer(mto:real):boolean > obtenerCodigo():entero obtenerSaldo():entero toString():String mayorSaldo(cta:CtaCteBancaria):entero cta_mayorSaldo(cta:CtaCteBancaria):CtaCteBancaria Requiere codigo > 0 y Saldo >= -maxDescubierto Si mto > saldo+maxDescubierto extraer retorna false y la extracción no se realiza Requieren mto > 0
52
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 LOS CAMBIOS EN LA IMPLEMENTACIÓN // Consultas … public int mayorSaldo(CtaCteBancaria cta){ /*Retorna el código de la cuenta corriente bancaria que tiene mayor saldo. Requiere cta ligada*/ if (saldo > cta.obtenerSaldo()) return codigo; else return cta.obtenerCodigo(); } Introducción a la Programación Orientada a Objetos IPOO - 2015 52 El método mayorSaldo recibe como parámetro a un objeto de clase CtaCteBancaria.
53
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 LOS CAMBIOS EN LA IMPLEMENTACIÓN // Consultas … public CtaCteBancaria mayorSaldo(CtaCteBancaria cta){ /*Retorna la cuenta corriente bancaria que tiene mayor saldo. Requiere cta ligada*/ if (saldo > cta.obtenerSaldo()) return this; else return cta; } Introducción a la Programación Orientada a Objetos IPOO - 2015 53 El método mayorSaldo recibe como parámetro y retorna como resultado un objeto de clase CtaCteBancaria.
54
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 54 TEMARIO Repaso. Clases como tipos de datos. Mensajes y métodos. Variables y alcance. Objetos y referencias. Los cambios en el sistema. Objetos, parámetros y resultados. Resumen.
55
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 OBJETOS, PARÁMETROS Y RESULTADOS La consulta cta_mayorSaldo compara el saldo de la cuenta corriente bancaria que recibe el mensaje con el saldo de la cuenta corriente bancaria que se recibe como parámetro. Retorna la cuenta corriente bancaria con mayor saldo, esto es, un objeto. La palabra reserva this permite nombrar al objeto que recibe el mensaje. Introducción a la Programación Orientada a Objetos IPOO - 2015 55 public CtaCteBancaria mayorSaldo(CtaCteBancaria cta){ if (saldo > cta.obtenerSaldo()) return this; else return cta; }
56
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 OBJETOS, PARÁMETROS Y RESULTADOS Envía el mensaje mayorSaldo al objeto ligado a la variable cb. La consulta compara los valores de los atributos saldo de cada objeto y retorna el código del objeto que recibió el mensaje o el código del objeto que pasó como parámetro. El método retorna un valor compatible con el tipo del resultado, que se asigna a la variable mayor. Introducción a la Programación Orientada a Objetos IPOO - 2015 56 mayor = cb.mayorSaldo(sm);
57
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 OBJETOS, PARÁMETROS Y RESULTADOS Envía el mensaje cta_mayorSaldo al objeto ligado a la variable cb. La consulta compara los valores de los atributos saldo de cada objeto y retorna el objeto que recibió el mensaje o el objeto que pasó como parámetro. El parámetro formal cta en el método cta_mayorSaldo, se liga al parámetro real en cada mensaje. Introducción a la Programación Orientada a Objetos IPOO - 2015 57 cm = cb.cta_mayorSaldo(sm);
58
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 OBJETOS, PARÁMETROS Y RESULTADOS Envía el mensaje toString al objeto ligado a la variable cm. La variable cm está ligada al objeto que retornó como resultado en respuesta al mensaje cta_mayorSaldo enviado en la instrucción anterior. El método toString retorna la concatenación de los valores de los atributos del objeto ligado a la variable cm. Introducción a la Programación Orientada a Objetos IPOO - 2015 58 System.out.println ("Cuenta con Mayor Saldo "+cm.toString());
59
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 OBJETOS, PARÁMETROS Y RESULTADOS La variable cta solo es visible y puede ser usada durante la ejecución de cta_mayorSaldo. Cuando el método termina, la variable se destruye. Si el método envía un mensaje a un objeto, mientras se ejecuta el método ligado a este último mensaje, cta no es visible. Si el objeto ligado al parámetro tiene mayor saldo, el resultado es justamente este objeto. Si el objeto que recibe el mensaje tiene mayor saldo, el resultado es ese mismo objeto. La palabra reservada this permite nombrar al objeto que recibe el mensaje. Introducción a la Programación Orientada a Objetos IPOO - 2015 59
60
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 OBJETOS, PARÁMETROS Y RESULTADOS Introducción a la Programación Orientada a Objetos IPOO - 2015 60 CtaCteBancaria cb, sm; cb = new CtaCteBancaria(111,1000) sm = new CtaCteBancaria(112,500); int mayor; CtaCteBancaria cm; mayor = cb.mayorSaldo(sm); System.out.println ("Codigo de la Cuenta con Mayor Saldo " +mayor); cm = cb.cta_mayorSaldo(sm); System.out.println ("Cuenta con Mayor Saldo "+cm.toString());
61
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 61 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
62
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 62
63
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 63 TEMARIO Repaso. Clases como tipos de datos. Mensajes y métodos. Variables y alcance. Objetos y referencias. Los cambios en el sistema. Objetos, parámetros y resultados. Resumen.
64
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 EN ESTA CLASE Clases como tipos Mensajes y Métodos Variables y Alcance Ambiente de Referenciamiento Objetos y Referencias Parámetros y Resultados Introducción a la Programación Orientada a Objetos IPOO - 2015 64
65
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 EN LA PRÓXIMA CLASE Asumiremos que –Pueden implementar en Java una clase con atributos de tipo elemental, partiendo de un diagrama que incluye atributos de clase y de instancia, constructores, comandos y consultas. –Pueden verificar los servicios provistos por una clase para un conjunto de casos de prueba. –Han completado el práctico 2 y comenzado el 3 Introducción a la Programación Orientada a Objetos IPOO - 2015 65
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.