La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería

Presentaciones similares


Presentación del tema: "IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería"— Transcripción de la presentación:

1 Introducción a la Programación Orientada a Objetos Sonia Rueda Herencia y Polimorfismo
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 2017

2 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 de un problema y de su solución. 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. IPOO 2 cuatrimestre 2017

3 Paradigmas de programación
Un paradigma de programación es una guía que orienta el proceso de desarrollo de software y 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 IPOO 2 cuatrimestre 2017

4 Paradigma procedural En el paradigma procedural un sistema de software está conformado por una colección de subprogramas. Cada subprograma resuelve un subproblema de un problema global. Así, la resolución de un problema es atacada aplicando la estrategia dividir para conquistar, durante la etapa de diseño. La división se basa en las acciones, que se agrupan en subprogramas que se comunican a través de parámetros. IPOO 2 cuatrimestre 2017

5 Paradigmas 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 a rápidamente a los cambios que ocurren en entornos dinámicos, el paradigma procedural y los lenguaje imperativos, no son una buena elección. IPOO 2 cuatrimestre 2017

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

7 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 ejecución cada uno de los objetos del problema quedará asociado a un objeto de software. Cada objeto de software tiene un estado interno y cuando recibe un mensaje actúa de acuerdo al comportamiento definido por su clase. Una clase puede pensarse como un tipo de dato a partir del cual se declaran variables y se crean objetos.

8 Proceso de abstracción
Problemas y Soluciones PROBLEMA SOLUCIÓN Proceso de abstracción Principio POO: desarrollar software a partir de las entidades de un modelo de la realidad Sigue siendo válida la estrategia de Dividir y Conquistar

9 Diseño de un Sistema Dividir y Conquistar IMPLEMENTACIÓN DISEÑO
Subproblema 1 Módulo 1 Subproblema 2 Módulo 2 Sistema Problema Subproblema 3 Módulo 3

10 Dividir y Conquistar en base a las ACCIONES
Diseño de un Sistema Dividir y Conquistar en base a las ACCIONES DISEÑO IMPLEMENTACIÓN Internar Internar Controlar SV Controlar SV SISTEMA HOSPITAL HOSPITAL Operar Operar

11 Dividir y Conquistar en base a los OBJETOS
Diseño de un Sistema Dividir y Conquistar en base a los OBJETOS DISEÑO IMPLEMENTACIÓN Paciente Paciente Médico Médico SISTEMA HOSPITAL HOSPITAL Internacion Internacion SignosVitales Signos Vitales

12 Herencia El proceso de clasificación realizado en un diseño orientado a objetos se organiza en niveles. En el primer nivel los objetos se agrupan en clases de acuerdo a sus atributos y comportamientos. En el segundo nivel del proceso de clasificación las clases se estructuran a través de un mecanismo de especialización-generalización llamado herencia. La herencia favorece la reusabilidad y la extensibilidad del software. Introducción a la Programación Orientada a Objetos

13 Caso de Estudio: Signos Vitales Diabetes
El control de signos vitales de un paciente con diabetes requiere controlar el nivel del glucosa y alertar acerca de estados de hipoglucemia o hiperglucemia. Un paciente con diagnóstico de diabetes está en alerta si hay alerta en los signos vitales como cualquier paciente o hay alerta de hipoglucemia o de hiperglucemia. Se consideran valores normales entre 70 y 110 mg/dl, por debajo de 70 es necesario considerar un cuadro de hipoglucemia. Por encima de 110 hay riesgo de hiperglucemia. El modelo puede extenderse agregando una clase SignosVitalesDiabetes que especialice a la clase SignosVitales.

14 Caso de Estudio: Signos Vitales Diabetes
<<Atributos de clase>> umbralMin, umbralMax:real <<Atributos de instancia>> glucemia: real <<Constructor>> SignosVitalesDiabetes(t:real, p:PresionArterial,g:real) <<Consultas>> obtenerGlucemia():real alarmaHipo():boolean alarmaHiper():boolean alarma ():boolean SignosVitales <<Atributos de clase>> umbralTemp:real <<Atributos de instancia>> temperatura: real presion :PresionArterial <<Constructor>> SignosVitales(t:real, p:PresionArterial) <<Consultas>> obtenerTemperatura():real obtenerPresion():PresionArterial alarma ():boolean Requiere temperatura > 0, expresada en grados.

15 SignosVitalesDiabetes
Caso de Estudio: Signos Vitales Diabetes PresionArterial SignosVitales SignosVitalesDiabetes

16 Caso de Estudio: Clientes y Empleados
Una empresa mantiene información referida a sus empleados y clientes, en el primer caso con el objetivo fundamental de liquidar sueldos y en el segundo para mantener el saldo en cuenta corriente que se actualiza a partir de ventas y cobros. El sueldo de un empleado se calcula a partir de su antigüedad en la empresa, su salario básico y la cantidad de hijos. Esto es, al salario básico se le suma $1000 si tiene entre 10 y 15 años de antigüedad y $2000 si tiene más de 15 años de antigüedad. A este valor se le suma un valor dado por cada hijo. Los días de vacaciones se calculan a partir de la antigüedad. Una semana cuando cumple 1 año, 2 semanas cuando cumple 5 años y 3 semanas cuando su antigüedad es mayor a 10 años.

17 Caso de Estudio: Clientes y Empleados
Cada empleado tiene un nombre y algunos datos postales como calle, número, teléfono y dirección de correo electrónico, una fecha de ingreso a la empresa, un salario básico y una cantidad de hijos. Durante su permanencia en la empresa pueden modificarse los datos postales, el salario o la cantidad de hijos. Introducción a la Programación Orientada a Objetos

18 Caso de Estudio: Clientes y Empleados
Cada cliente tiene un nombre y algunos datos postales como calle, número, teléfono y dirección de correo electrónico, una ciudad, un saldo adeudado, un número de CUIT y una categoría de IVA. El saldo aumenta cada vez que se registra una operación de venta y disminuye con los cobros. Los clientes también pueden tener hijos pero esta información no es relevante para la empresa. Del mismo modo aunque los empleados también viven en una ciudad, todos viven en la misma, de modo que no es necesario representarla como una variable de instancia. Introducción a la Programación Orientada a Objetos

19 Caso de Estudio: Clientes y Empleados
El cliente efectúa compras y pagos de facturas. Ninguno de estos servicios tiene significado para un Empleado, así como no tiene sentido calcular el sueldo de un Cliente. En realidad podría darse el caso que un Empleado de la empresa en ocasiones sea Cliente de la misma. En ese caso una misma entidad del problema está cumpliendo dos roles, pertenece a dos clases. El modelo es entonces un poco más complejo, por el momento no nos ocuparemos de este tipo de situaciones. Introducción a la Programación Orientada a Objetos

20 Caso de Estudio: Clientes y Empleados
Si agrupamos a empleados y clientes en una única clase, por ejemplo, Persona, los atributos podrían ser: Introducción a la Programación Orientada a Objetos Persona <<atributos de instancia>> nombre … calleNro telefono ciudad fechaIngreso basico cantHijos saldo cuit cateIva

21 Si definimos un modelo para cada grupo de entidades:
Caso de Estudio: Clientes y Empleados Si definimos un modelo para cada grupo de entidades: Introducción a la Programación Orientada a Objetos Empleado Cliente <<atributos de instancia>> nombre … calleNro telefono fechaIngreso basico cantHijos <<atributos de instancia>> nombre … calleNro telefono ciudad saldo cuit cateIva

22 Caso de Estudio: Clientes y Empleados
La primera alternativa no es adecuada porque el modelo incluye más atributos y comportamiento que el que realmente caracteriza a un empleado o cliente específico. La segunda alternativa tiene redundancia, parte de los atributos y del comportamiento se repite en las dos clases. Introducción a la Programación Orientada a Objetos

23 Caso de Estudio: Clientes y Empleados
Persona Introducción a la Programación Orientada a Objetos Cliente Empleado Un modelo más adecuado factoriza los atributos y comportamiento compartidos de Cliente y Empleado en una clase general y retiene los atributos y comportamientos específicos en clases especializadas.

24 Caso de Estudio: Clientes y Empleados
Las clases Cliente y Empleado se vinculan con la clase Persona a través de un relación de herencia. La organización es jerárquica, la clase Persona es más general y las clases Cliente y Empleado son más específicas. La colección de clases se dibuja como un árbol, las clases generales ocupan los niveles superiores y las clases más específicas ocupan los niveles inferiores. En Java la clase más general es Object. Todas las clases que implementamos heredan implícitamente de Object. Introducción a la Programación Orientada a Objetos

25 Inicializa todos los atributos
Caso de Estudio: Clientes y Empleados Persona <<atributos de instancia>> nombre : String calleNro : String telefono : String String <<Constructores>> Persona() Persona(nom : String) Persona(nom:String,cn:String, t:String,e:String) Introducción a la Programación Orientada a Objetos Inicializa todos los atributos con cadenas nulas

26 Caso de Estudio: Clientes y Empleados
Persona <<atributos de instancia>> nombre : String calleNro : String telefono : String String <<Constructores>> <<Comandos>> establecerCalleNro (d: String) <<Consultas>> obtenerCalleNro () : String Introducción a la Programación Orientada a Objetos

27 Caso de Estudio: Clientes y Empleados
<<atributos de instancia>> saldo : real ciudad : String CUIT : String cateIVA :char <<Constructores>> Cliente() Cliente (nom : String) Cliente(nom:String,cn:String, t:String,e:String, s:real,c:String, cu:String,ci:char) Introducción a la Programación Orientada a Objetos Cliente() Inicializa saldo en 0, ciudad con “Bahía Blanca” CUIT con 12 espacios y categoría de IVA con “I”

28 Caso de Estudio: Clientes y Empleados
<<atributos de instancia>> saldo : real ciudad : String CUIT : String cateIVA :char <<Constructores>> <<Comandos>> registrarVenta ( m : real) registrarCobro (m:real) <<Consultas>> obtenerSaldo () : real Introducción a la Programación Orientada a Objetos

29 Caso de Estudio: Clientes y Empleados
<<atributos de instancia>> basico : real cantHijos : entero fechaIngreso : Fecha <<Constructores>> Empleado() Empleado(nom : String) Empleado(nom:String,cn:String, t:String,e:String, b: real,ch:entero, fi : Fecha) Introducción a la Programación Orientada a Objetos Empleado() Inicializa basico en 5000, cantHijos en 0 y fechaIngreso en 1/1/2005

30 Caso de Estudio: Clientes y Empleados
Retorna verdadero si el empleado que recibe el mensaje es más antiguo que el argumento <<atributos de instancia>> basico : real cantHijos : entero fechaIngreso : Fecha <<Constructores>>… <<Comandos>> establecerBasico (sb :real ) aumentarBasico (a: real )… <<Consultas>> masAntiguo(e :Empleado ) : booleano obtenerBasico () : real sueldoNeto (mh: real) : real diasVacaciones () : entero Introducción a la Programación Orientada a Objetos Al salario básico se le suma $1000 si tiene entre 10 y 15 años de antigüedad y $2000 si tiene más de 15 años de antigüedad. A este valor se le suma $h por cada hijo. Una semana cuando cumple 1 año, 2 semanas cuando cumple 5 años y 3 semanas cuando su antigüedad es mayor a 10 años.

31 Caso de Estudio: Clientes y Empleados
Persona <<atributos de instancia>> <<Constructores>> <<Comandos>> establecerCalleNro (d: String) <<Consultas>> obtenerCalleNro () : String Introducción a la Programación Orientada a Objetos Cliente Empleado <<atributos de instancia>> basico : real cantHijos : entero fechaIngreso : Fecha <<Constructores>>… <<Comandos>> establecerBasico (real sb) aumentarBasico (real a)… <<Consultas>> masAntiguo(Empleado e) : booleano obtenerBasico () : real sueldoNeto (mh : entero) : real diasVacaciones () : entero <<atributos de instancia>> saldo : real ciudad : String CUIT : String cateIVA :char <<Constructores>> <<Comandos>> registrarVenta ( m : real) registrarCobro (m:real) <<Consultas>> obtenerSaldo () : real

32 Caso de Estudio: Clientes y Empleados
Las clases Cliente y Empleado especializan a la clase Persona. Alternativamente podemos decir que Persona generaliza a las clases Cliente y Empleado. Cliente y Empleado son subclases o clase derivadas de la superclase o clase base Persona. El acceso a los atributos y servicios de una clase desde sus clases derivadas depende del nivel de encapsulamiento. Introducción a la Programación Orientada a Objetos

33 Caso de Estudio: Clientes y Empleados
class Persona { //Atributos de instancia protected String nombre; protected String calleNro; protected String telefono; protected String ; } Introducción a la Programación Orientada a Objetos Las clases derivadas de la clase Persona acceden a sus constructores usando el comando super(). Si un constructor usa el constructor de la clase base, la instrucción super() debe ser la primera del bloque.

34 Caso de Estudio: Clientes y Empleados
//Constructores public Persona(){ nombre = new String(); calleNro = new String(); telefono = new String(); = new String(); } Introducción a la Programación Orientada a Objetos public Persona (String nom){ nombre = nom; calleNro = new String(); telefono = new String(); = new String(); } public Persona (String nom, String cn, String tel, String em){ nombre = nom; calleNro = cn; telefono = tel; = em; }

35 Caso de Estudio: Clientes y Empleados
class Empleado extends Persona { //Atributos de instancia protected float basico; protected Fecha fechaIng; protected int hijos; } Introducción a la Programación Orientada a Objetos

36 Caso de Estudio: Clientes y Empleados
//Constructores public Empleado(){ super(); basico = 5000; cantHijos = 0; fechaIngreso = new Fecha(1,1,2005);} Introducción a la Programación Orientada a Objetos public Empleado(String nom){ super(nom); basico = 5000; cantHijos = 0; fechaIngreso = new Fecha(1,1,2005);} public Empleado(String nom, String cn, String te,String em, float sb, int ch, Fecha f ){ super(nom,cn,te,em); basico = sb; cantHijos = ch; fechaIngreso = f; }

37 Caso de Estudio: Clientes y Empleados
La clase Empleado hereda de la clase Persona todas las variables de clase, de instancia y métodos. Introducción a la Programación Orientada a Objetos nombre calleNro telefono basico cantHijos fechaingreso Un objeto de clase Empleado tiene todos los atributos de una Persona más los específicos de su clase.

38 Caso de Estudio: Clientes y Empleados
class gestionEmpresa{ Empleado e; e = new Empleado (…); String nom = e.obtenerNombre(); float bas= e.obtenerBasico(); } Introducción a la Programación Orientada a Objetos Un objeto de clase Empleado puede recibir todos los mensajes válidos para los objetos de clase Persona más los específicos de su clase.

39 Caso de Estudio: Clientes y Empleados
La clase Cliente hereda de la clase Persona todas las variables de clase, de instancia y métodos. Introducción a la Programación Orientada a Objetos nombre calleNro telefono saldo ciudad CUIT cateIva Un objeto de clase Cliente tiene todos los atributos de una Persona más los específicos de su clase.

40 Caso de Estudio: Clientes y Empleados
class gestionEmpresa{ Cliente c; c = new Cliente (…); String nom = e.obtenerNombre(); float s = e.obtenerSaldo(); } Introducción a la Programación Orientada a Objetos Un objeto de clase Cliente puede recibir todos los mensajes válidos para los objetos de clase Persona más los específicos de su clase.

41 Caso de Estudio: Clientes y Empleados
La herencia establece una relación de tipo es-un (isa) ya que todo objeto de clase Cliente es también un objeto de clase Persona. Un objeto de clase Cliente estará caracterizado por todos los atributos y servicios definidos en la clase, pero además hereda los atributos y servicios de la clase Persona. Análogamente entre la clase Empleado y la clase Persona existe una relación de tipo es-un. Una objeto de clase Empleado está caracterizado por todos los atributos definidos en su clase , pero además hereda los atributos y servicios de la clase Persona. Un objeto de clase Persona no puede recibir mensajes que correspondan a servicios provistos por las clases derivadas. Introducción a la Programación Orientada a Objetos

42 Caso de Estudio: Clientes y Empleados
La empresa decide establecer un monto por productividad y un presupuesto para cada ejecutivo y un monto diario para viáticos común para todos los ejecutivos. Además se decide que todos los ejecutivos tengan 20 días de vacaciones. Cada ejecutivo recibe un premio anual equivalente al 3% de su productividad. Introducción a la Programación Orientada a Objetos

43 Caso de Estudio: Clientes y Empleados
Ejecutivo <<atributos de clase>> viaticos = 1200 <<atributos de instancia>> productividad:real presupuesto : real <<Constructores>> Ejecutivo(nom:String,cn:String, t:String,e:String, b: real,ch:entero, fi : Fecha, pre:real) <<Comandos>> establecerProductividad (p:real ) aumentarPresupuesto (a:real )… <<Consultas>> obtenerPres () : real diasVacaciones () : entero premioAnual(): real Introducción a la Programación Orientada a Objetos diasVacaciones () : entero 20 días premioAnual(): real El 3% de la productividad

44 Caso de Estudio: Clientes y Empleados
Persona Introducción a la Programación Orientada a Objetos Cliente Empleado Ejecutivo La clase Ejecutivo especializa a la clase Persona. Todo objeto de clase Ejecutivo es también instancia de las clases Empleado y Persona.

45 Caso de Estudio: Clientes y Empleados
Persona <<atributos de instancia>>… <<Constructores>>… <<Comandos>>… <<Consultas>>… Introducción a la Programación Orientada a Objetos Empleado <<atributos de instancia>>… <<Constructores>>… <<Comandos>>… <<Consultas>>… Ejecutivo <<atributos de instancia>>… <<Constructores>>… <<Comandos>>… <<Consultas>>…

46 Caso de Estudio: Clientes y Empleados
class Persona { //Atributos de instancia protected String nombre; protected String calleNro; protected String telefono; protected String ; } Introducción a la Programación Orientada a Objetos

47 Caso de Estudio: Clientes y Empleados
class Empleado extends Persona { //Atributos de instancia protected float basico; protected Fecha fechaIng; protected int hijos; } Introducción a la Programación Orientada a Objetos

48 Caso de Estudio: Clientes y Empleados
class Ejecutivo extends Empleado { //Atributos de clase protected float viaticos; //Atributos de instancia protected float presupuesto; protected float productividad; } Introducción a la Programación Orientada a Objetos

49 Caso de Estudio: Clientes y Empleados
public Persona (String nom, String cn, String tel, String em){ nombre = nom; calleNro = cn; telefono = tel; = em; } Introducción a la Programación Orientada a Objetos

50 Caso de Estudio: Clientes y Empleados
public Empleado(String nom, String cn, String te, String em, float sb, int ch, Fecha f ){ super(nom,cn,te,em); basico = sb; cantHijos = ch; fechaIngreso = f; } Introducción a la Programación Orientada a Objetos

51 Caso de Estudio: Clientes y Empleados
public Ejecutivo (String nom, String cn, String te, String em, float sb, int ch, Fecha f, float pres ){ super(nom,cn,te,em,sb,ch,f); productividad = 0; presupuesto = pres; } Introducción a la Programación Orientada a Objetos

52 Caso de Estudio: Clientes y Empleados
Introducción a la Programación Orientada a Objetos <<Consultas>> diasVacaciones () : real Ejecutivo <<Consultas>> diasVacaciones () : real

53 Caso de Estudio: Clientes y Empleados
class Empleado extends Persona{ public int diasVacaciones() { /*Una semana cuando cumple 1 año, 2semanas cuando cumple 5 años y 3semanas cuando es mayor a 10 años*/ int ant = fechaIng.difHoy(); int vac = 0; if (ant > 10) vac =21; else if (ant >= 5) vac = 14; else if (ant > 0) vac = 7; return vac; } Introducción a la Programación Orientada a Objetos 1

54 Caso de Estudio: Clientes y Empleados
class Ejecutivo extends Empleado{ public int diasVacaciones () { //20 días return 20; } Introducción a la Programación Orientada a Objetos 2

55 Caso de Estudio: Clientes y Empleados
Dadas las siguientes declaraciones: Introducción a la Programación Orientada a Objetos Empleado emp = new Empleado(e1,e2,e3,e4,e5,e6,e7); Ejecutivo eje=new Ejecutivo(j1,j2,j3,j4,j5,j6,j7,j8); 1 System.out.println(emp.diasVacaciones()); System.out.println(eje.diasVacaciones()); 2 System.out.println(emp.obtenerPres()); System.out.println(eje.obtenerPres());


Descargar ppt "IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería"

Presentaciones similares


Anuncios Google