INTRODUCCIN A LA PROGRAMACIN ORIENTADA A OBJETOS Asociacin
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Asociación y Dependencia de Clases Sonia Rueda Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 01100 10011 10110 01110 1001 1 11 0 0 1
PROVEEDORES Y CLIENTES Cuando dos clases están relacionadas una asume el rol de CLIENTE y otra asume el rol de PROVEEDORA. Entre la clase CLIENTE y la clase PROVEEDORA se establece un contrato a través del cual cada una asume 01100 algunas responsabilidades. 10011 Cada servicio provisto por la clase PROVEEDORA va a ser 10110 01110 usado desde una clase CLIENTE, de acuerdo a las 01100 condiciones que establece el contrato. 10011 10110 Un mismo problema puede modelarse de maneras 01110 diferentes. 1001 1 11 En cada diseño alternativo la asignación de 0 0 responsabilidades puede variar. 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 2
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE En un negocio se desea mantener información referida a las facturas imputadas a los vendedores. De cada factura se mantiene: el número, el monto y el vendedor que realizó la venta. De cada vendedor se mantiene: el nombre del vendedor y las ventas acumuladas. Cuando se registra una factura, las ventas acumuladas del vendedor aumentan de acuerdo al monto de la factura. Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 0 0 1 3
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Factura <<atributos de instancia>> nro. Fact: String monto. Fact: real vendedor: Vendedor << Constructores>> Factura(nro: String, m: float, ven: Vendedor). . . Introducción a la Programación Orientada a Objetos IPOO - 2019 Vendedor <<atributos de instancia>> nombre: String vta. Acum: real <<Constructor>> Vendedor(n: String) … 01100 10011 10110 01110 1001 1 11 0 0 1 4
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Factura <<atributos de instancia>> Vendedor <<atributos de instancia>> nombre: String nro. Fact: String vta. Acum: real monto. Fact: real … vendedor: Vendedor. . . <<Comandos>> establecer. Vta. Acum(m: real) establecer. Vendedor(ven: Vendedor) actualizar. Vta. Acum(m: real) establecer. Monto. Fact(m: real) <<Consultas>> obtener. Nombre(): String obtener. Nro. Fact(): String obtener. Vta. Acum(): real obtener. Vendedor(): Vendedor obtener. Monto. Fact(): real Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 0 0 1 5
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Las clases Factura, String y Vendedor están asociadas, la relación es de tipo tiene. Un comando de la clase Factura puede recibir como parámetro una variable de una clase asociada, como por 01100 ejemplo Vendedor. Una consulta puede retornar una referencia a un objeto alguna de las clases asociadas. En este caso se crea también una dependencia, consecuencia de la asociación entre clases. Introducción a la Programación Orientada a Objetos IPOO - 2019 10011 de 101100 10011 10110 01110 1001 1 11 0 0 1 6
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Cuando se emite una factura la modificación de las ventas acumuladas del vendedor puede hacerse a través de un mensaje enviado: – desde un servicio provisto por la clase Factura que registra la venta, como en la primera solución que 0 1 1 0 0 10011 propondremos. 10110 – desde el método que invoca al servicio de la clase 0 1 1 1 0 Factura que registra la venta, como en la segunda 01 10 10 01 01 solución que propondremos. 10110 01110 1001 1 11 0 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 7
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE • El diseñador del sistema establece la responsabilidad de cada clase. • El implementador debe generar código adecuado para garantizar que cada clase cumple con sus 01100 responsabilidades. 10011 101100 10011 10110 01110 1001 1 11 0 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 8
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Alternativa 1 Factura <<atributos de instancia>> nro. Fact: String monto. Fact: real Vendedor: Vendedor. . . <<Responsabilidades>> Cuando se crea una factura se actualiza las ventas acumuladas del vendedor. Requiere que nro y ven sean referencias ligadas. Introducción a la Programación Orientada a Objetos IPOO - 2019 Vendedor <<atributos de instancia>> nombre: String vta. Acum: real … <<Responsabilidades>> Requiere que nom sea una referencia ligada. 01100 10011 10110 01110 1001 1 11 0 0 1 9
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Alternativa 2 Factura <<atributos de instancia>> nro. Fact: String monto. Fact: real vendedor: Vendedor. . . <<Responsabilidades>> Requiere que se modifiquen las ventas acumuladas del vendedor consistentemente. Requiere que nro y ven sean referencias ligadas. Introducción a la Programación Orientada a Objetos IPOO - 2019 Vendedor <<atributos de instancia>> nombre: String vta. Acum: real … <<Responsabilidades>> Requiere que nom sea una referencia ligada. 01100 10011 10110 01110 1001 1 11 0 0 1 10
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Alternativa 1 public Factura(String n, float m, Vendedor ven){ /*Crea una factura, guarda número, monto y vendedor, y actualiza la vta. Acum con el mismo monto. Requiere 01100 que n y ven estén ligadas */ 10011 nro. Fact = n; monto. Fact = m; vendedor = ven; vendedor. actualizar. Vta. Acum(m); } Introducción a la Programación Orientada a Objetos IPOO - 2019 101100 10011 10110 01110 1001 1 11 0 0 1 11
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Alternativa 1 class Ventas { … String num 1 = new String(“A-0001”); String num 2 = new String(“A-0002”); Vendedor v = new Vendedor(“Gomez”); … Factura f 1 = new Factura (num 1, 1500, v); Factura f 2 = new Factura (num 2, 1200, v); … } Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 0 0 1 12
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Alternativa 2 public Factura (String n, float m, Vendedor ven){ /* Requiere que se actualicen las ventas acumuladas del vendedor consistetemente */ 01100 nro. Fact = n; monto. Fact = m; vendedor = ven; } Introducción a la Programación Orientada a Objetos IPOO - 2019 10011 101100 10011 10110 01110 1001 1 11 0 0 1 13
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Alternativa 2 class Ventas { … String num 1 = new String(“A-0001”); String num 2 = new String(“A-0002”); Vendedor v = new Vendedor(“Gomez”); … Factura f 1 = new Factura (num 1, 1500, v); v. actualizar. Vta. Acum(1500); Factura f 2 = new Factura (num 2, 1200, v); v. actualizar. Vta. Acum(1200); … } Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 0 0 1 14
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE class Vendedor{ //Atributos de Instancia private String nombre; private float vta. Acum; //Constructores 01100 public Vendedor(String nom){ 10011 //Requiere nom ligada 10110 nombre = nom; 01110 01100 } 10011 //Comandos 10110 public void actualizar. Vta. Acum(float s) { 01110 vta. Acum += s; } 1001 1 11 … 0 0 } 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 15
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE La clase Vendedor se implementa de la misma manera, sea cual sea la alternativa de diseño elegida para Factura. Si el diseñador elige una de las alternativas y cambia de 01100 decisión una vez que las clases están implementadas, el 1 0 0 1 1 cambio va a requerir modificar tanto la clase proveedora, 1 0 1 1 0 01110 como todas las clases que la usan. 01100 10011 10110 01110 1001 1 11 0 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 16
CASO DE ESTUDIO: FACTURA Y CUENTA CORRIENTE Una modificación de diseño que cambia las responsabilidades afecta a la colección de clases asociadas. Si solo se modifica una de las clases, por ejemplo la clase Vendedor, va a producirse un error de aplicación, que 0 1 1 0 0 10011 pasa desapercibido para el compilador. 101100 10011 10110 01110 1001 1 11 0 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 17
REPRESENTACIÓN EN MEMORIA • Una variable de tipo clase mantiene una referencia a un objeto de software. • El atributo de instancia vendedor mantiene una referencia a un objeto de clase Vendedor. • 01100 Todos los objetos de software que modelen facturas 1 0 0 1 1 10110 emitidas para un mismo Vendedor, estarán ligados a una 01110 misma cuenta corriente, esto es, a un mismo o objeto de 01100 10011 clase Vendedor. 10110 01110 1001 1 11 0 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 18
REPRESENTACIÓN EN MEMORIA Representación por Referencia (ALTERNATIVA 2) String num 1 = new String(“A-0001”); String num 2 = new String(“A-0002”); Cta. Cte v = new Vendedor (“Gomez”); … Factura f 1 = new Factura (num 1, 1500, v); v. actualizar. Saldo (1500); Factura f 2 = new Factura (num 2, 1200, v); v. actualizar. Saldo (1200); f 1 f 2 : Factura num 1 numero. Fact monto. Fact = 1500 vendedor : Factura numero. Fact monto. Fact = 1200 vendedor : String = A-001 v num 2 : String = A-002 : Vendedor nombre 0 vta. Acum= 2700 1500 01100 10011 10110 01110 1001 : String 1 11 0 =0 Gomez 1 19
REPRESENTACIÓN EN MEMORIA • • Representación por Referencia Cada objeto de software modela a un objeto del problema identificado en la etapa de diseño. El estado interno de un objeto puede contener referencias a otros objetos, de modo que un sistema 0 1 1 0 0 complejo puede modelarse a partir de objetos simples. 1 0 0 1 1 10110 La modificación de la representación de un objeto no 0 1 1 1 0 afecta a la representación de los objetos que lo 01100 10011 referencian. En este caso si cambia la representación interna de la 10 01 11 11 00 clase Vendedor, la modificación no afecta a la clase 1 0 0 1 Factura. 1 11 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 0 20
- Slides: 20