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 En la programación orientada objetos, cada objeto de software creado en ejecución 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 la asociación entre clases se modela en ejecución a través de referencias entre objetos. 01100 10011 101100 Así, la modificación de los atributos de instancia de una 1 0 0 1 1 10110 clase, modifica la representación de los objetos de software 01110 de esa clase, no de las clases asociadas. 1001 1 11 0 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 2
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL Una empresa de telefonía celular ofrece distintos planes a sus abonados. Un plan tiene: un código, un costo mensual y 01100 establece un tope para el número de mensajes de texto y un tope de 1 0 0 1 1 créditos que los abonados consumen con sus llamadas a números dentro 10110 de la comunidad y a otros móviles fuera de la comunidad. 01110 01100 10011 un número asociado, 10110 un plan y 01110 una cantidad de consumos a líneas dentro de la comunidad y a líneas 1 0 0 1 1 11 móviles fuera de la comunidad. 0 0 1 Una línea tiene: Introducción a la Programación Orientada a Objetos IPOO - 2019 3
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL La cantidad de créditos de un plan se consume de modo diferente según la llamada se realice dentro de la comunidad o fuera de ella: – un minuto (o fracción) de llamada dentro de la comunidad 01100 consume 1 crédito, 10011 – un minuto a una línea móvil fuera de la comunidad 10110 01110 consume 2 créditos. 01100 Dos líneas se consideran equivalentes si tienen números 10011 equivalentes y los mismos valores en los demás atributos, en 1 0 1 1 0 01110 particular si están ligadas a un mismo plan. 1001 1 11 0 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 4
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL Linea Plan <<Atributos de instancia>> nro: String plan : Plan consumos. Sms, consumos. AComunidad, consumos. AMoviles : entero <<Constructor>> Linea(nro: String) <<Atributos de instancia>> codigo: entero sms, credito: entero costo: entero <<Constructor>> Plan(c: entero) 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: PLAN DE TELÉFONO MÓVIL Linea <<Comandos>> establecer. Plan(p: Plan) consumir. Sms(c: entero) consumir. ACom(c: entero) consumir. AMov(c: entero) Introducción a la Programación Orientada a Objetos IPOO - 2019 Plan <<Comandos>> establecer. Sms(n: entero) establecer. Credito(n: entero) establecer. Costo(n: entero) 01100 10011 10110 01110 1001 1 11 0 0 1 6
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL Linea Plan <<Consultas>> obtener. Nro(): String obtener. Plan(): Plan obtener. Consumos. Sms(): entero obtener. Consumos. AComunidad (): entero obtener. Consumos. AMoviles(): entero consumo. Credito(): entero sms. Disponibles(): entero credito. Disponible(): entero equals(l: Linea): boolean to. String(): String <<Consultas>> obtener. Sms(): entero obtener. Credito(): entero obtener. Costo(): entero to. String(): String equals(p: Plan): boolean Introducción a la Programación Orientada a Objetos IPOO - 2019 equals(l: Linea): boolean Si l es null retorna false 01100 10011 10110 01110 1001 1 11 0 0 1 7
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL Linea <<Responsablidades>> Requiere que se establezca el plan antes de consumir o ejecutar las consultas. Controla que no se consume más allá del crédito disponible Requiere que el valor consumido es siempre mayor a 0 Toda la entrada y salida se implementa fuera de la Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 clase. 0 0 1 8
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL Cada objeto de clase Linea tiene un atributo de instancia de clase Plan. El atributo de instancia plan no es visible desde el exterior de la clase Linea. 01100 10011 10110 En la realidad a modelar, probablemente varias líneas 00 11 11 10 00 correspondan a un mismo plan, en ejecución varias 10011 instancias de Linea referenciarán a un mismo objeto de 1 0 1 1 0 01110 clase Plan. 1001 1 11 0 0 1 En ejecución este atributo mantiene una referencia a un objeto de clase Plan. Introducción a la Programación Orientada a Objetos IPOO - 2019 9
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL class Linea { /*Requiere que se establezca el plan antes de consumir o ejecutar las consultas se controle que no se consume más allá del crédito disponible. */ //Atributos de Instancia private String nro; private Plan plan ; private int consumos. SMS; private int consumos. AComunidad; private int consumos. AMoviles; //Constructor public Linea (String n){ nro = n; } Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 0 0 1 10
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL //Comandos public void establecer. Plan(Plan p){ //Requiere p ligado plan = p; } 01100 10011 /*Requiere que se controle que no se consume 10110 más allá del crédito disponible. */ 01110 public void consumir. SMS(int n){ 01100 10011 if (consumo. SMS+n < plan. obtener. SMS() ) 10110 consumos. SMS =+ n; 01110 else consumo. SMS = plan. obtener. SMS(); 1001 1 11 } 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 0 11
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL public void consumir. AComunidad(int n){ if (consumo. AComunidad+n < plan. obtener. Credito()) consumos. AComunidad =+ n; else consumos. AComunidad= plan. obtener. Credito()consumos. AMoviles; 0 1 1 0 0 10011 } 10110 public void consumir. AMoviles(int n){ 01110 if (consumo. AMoviles+2*n < 01100 plan. obtener. Credito()) 10011 consumos. AComunidad =+ 2*n; 10110 else consumos. AMoviles= plan. obtener. Credito()- 0 1 1 1 0 consumos. AComunidad; 1 0 0 1 1 11 } 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 0 12
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL //Consultas public String obtener. Nro(){ return nro; } public Plan obtener. Plan(){ return plan; } public int obtener. Consumos. SMS(){ return consumos. SMS; } public int obtener. Consumos. AComunidad(){ return consumos. AComunidad; } public int obtener. Consumos. AMoviles(){ return consumos. AMoviles; } Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 0 0 1 13
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL public int consumo. Credito(){ return consumos. AComunidad + consumos. AMoviles*2; } public int sms. Disponibles(){ //Requiere el plan ligado 01100 return plan. obtener. SMS() - consumos. SMS; 10011 } 10110 01110 public int credito. Disponible(){ 01100 //Requiere el plan ligado 10011 return plan. obtener. Credito() - consumo. Credito(); 10110 } 01110 La clase Linea es cliente de la clase Plan, usa los servicios provistos por Plan. Introducción a la Programación Orientada a Objetos IPOO - 2019 1001 1 11 0 0 1 14
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL public String to. String(){ //Requiere el plan ligado return nro + “ ” + consumo. SMS + “ ” + consumo. AComunidad+ “ ” + consumo. AMoviles+ “ ” + plan. to. String(); 01100 } 10011 public boolean equals(Linea l){ 10110 01110 boolean e=false; 01100 if (l != null) 10011 e = nro. equals(l. obtener. Nro()) && 10110 consumo. SMS == l. obtener. Consumo. SMS()&& 01110 consumo. AComunidad==l. obtener. Consumo. AComunidad()&& 1001 consumo. AMoviles == l. obtener. Consumo. AMoviles() 1&&1 1 0 0 plan == l. obtener. Plan(); 1 return e; } 15
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL El método equals compara en profundidad el atributo de instancia nro y en forma superficial el atributo de instancia plan. Esto es, para que dos líneas sean equivalentes los atributos nro tienen que ser equivalentes y los atributos 0 1 1 0 0 10011 plan tienen que tener la misma identidad. 10110 01110 Observemos que en este caso no se asume que el 01100 parámetro está ligado. 10011 Si la variable l no está ligada el equals retorna false. 1 0 1 1 0 01110 1001 1 11 0 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 16
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL class ventas{ public static void main(String[] a){ Plan p 1 = new Plan(123); p 1. establecer. Sms(100); p 1. establecer. Credito(200); p 1. establecer. Costo(150); Plan p 2 = new Plan(124); p 2. establecer. Sms(200); p 2. establecer. Credito(300); p 2. establecer. Costo(200); … Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 0 0 1 17
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL class ventas{ public static void main(String[] a){ … String tel 11 = “ 2916324567”; String tel 12 = “ 2916324568”; String tel 21 = “ 2912585234”; Linea lin 11 = new Linea(tel 11); lin 11. establecer. Plan(p 1); Linea lin 12 = new Linea(tel 12); lin 12. establecer. Plan(p 1); Linea lin 21 = new Linea(tel 21); lin 21. establecer. Plan(p 1); … Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 0 0 1 18
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL Una asignación al atributo de instancia plan, cambia el valor de la variable, la referencia a un objeto, pero no el estado interno del objeto mismo de clase Plan. En particular el método establecer. Plan(Plan p) en la clase Linea modifica el atributo de instancia plan, esto 0 es 1 1 0 0 10011 el valor de la variable. 10110 La clase Linea asume que cuando un objeto reciba el 0 1 1 1 0 01100 mensaje credito. Disponible() su atributo de instancia 10011 plan estará ligado. 10110 01110 1001 1 11 0 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 19
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL class ventas{ public static void main(String [] a){ … System. out. println(lin 11. to. String()); p 1 = p 2; System. out. println(lin 11. to. String()); lin 11. establecer. Plan(p 2); System. out. println(lin 11. to. String()); p 2. establecer. Costo(220); System. out. println(lin 11. to. String()); … Introducción a la Programación Orientada a Objetos IPOO - 2019 01100 10011 10110 01110 1001 1 11 0 0 1 20
CASO DE ESTUDIO: PLAN DE TELÉFONO MÓVIL Cada línea telefónica está representada en ejecución por un objeto de software que en su estado interno mantiene los valores de los atributos que la caracterizan. Cada plan también está representado por un único objeto 01100 de software, independientemente de cuántas líneas 10011 corresponden a ese plan. 10110 Cada objeto de software de clase Linea mantiene una 0 1 1 1 0 01100 referencia a un objeto de software de clase Plan. 10011 Todos los objetos de software que modelen líneas con un 1 0 1 1 0 01110 mismo plan, mantendrán referencias a un mismo objeto de 1001 clase Plan. 1 11 0 1 Introducción a la Programación Orientada a Objetos IPOO - 2019 0 21
- Slides: 21