Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porMaría Dolores Aguilar Córdoba Modificado hace 8 años
1
Introducción a la Programación Orientada a Objetos Sonia Rueda Herencia y Polimorfismo Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 2016 IPOO 2 cuatrimestre 2016
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 2016
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 2016
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 2016
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 2016
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
SOLUCIÓN PROBLEMA Proceso de abstracción Problemas y Soluciones 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
Problema Subproblema 1 Módulo 1 Sistema Subproblema 2 Subproblema 3 Módulo 2 Módulo 3 DISEÑO IMPLEMENTACIÓN Diseño de un Sistema Dividir y Conquistar
10
HOSPITAL Internar SISTEMA HOSPITAL Controlar SV Operar Controlar SV Operar DISEÑO IMPLEMENTACIÓN Diseño de un Sistema Dividir y Conquistar en base a las ACCIONES
11
HOSPITAL Paciente SISTEMA HOSPITAL Médico Signos Vitales DISEÑO IMPLEMENTACIÓN Internacion Paciente Médico Internacion Diseño de un Sistema Dividir y Conquistar en base a los OBJETOS
12
Introducción a la Programación Orientada a Objetos 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. Herencia
13
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. Caso de Estudio: Signos Vitales Diabetes
14
SignosVitales > umbralTemp:real > temperatura: real presion :PresionArterial > SignosVitales(t:real, p:PresionArterial) > obtenerTemperatura():real obtenerPresion():PresionArterial alarma ():boolean Requiere temperatura > 0, expresada en grados. SignosVitalesDiabetes > umbralMin, umbralMax:real > glucemia: real > SignosVitalesDiabetes(t:real, p:PresionArterial,g:real) > obtenerGlucemia():real alarmaHipo():boolean alarmaHiper():boolean alarma ():boolean
15
Caso de Estudio: Signos Vitales Diabetes SignosVitales PresionArterial SignosVitalesDiabetes
16
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. Caso de Estudio: Clientes y Empleados
17
Introducción a la Programación Orientada a Objetos 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. Caso de Estudio: Clientes y Empleados
18
Introducción a la Programación Orientada a Objetos 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. Caso de Estudio: Clientes y Empleados
19
Introducción a la Programación Orientada a Objetos 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. Caso de Estudio: Clientes y Empleados
20
Introducción a la Programación Orientada a Objetos Si agrupamos a empleados y clientes en una única clase, por ejemplo, Persona, los atributos podrían ser: Persona > nombre … calleNro telefono email ciudad fechaIngreso basico cantHijos saldo cuit cateIva Caso de Estudio: Clientes y Empleados
21
Introducción a la Programación Orientada a Objetos Si definimos un modelo para cada grupo de entidades: Empleado > nombre … calleNro telefono email fechaIngreso basico cantHijos Cliente > nombre … calleNro telefono email ciudad saldo cuit cateIva Caso de Estudio: Clientes y Empleados
22
Introducción a la Programación Orientada a Objetos 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. Caso de Estudio: Clientes y Empleados
23
Introducción a la Programación Orientada a Objetos Persona 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. Caso de Estudio: Clientes y Empleados
24
Introducción a la Programación Orientada a Objetos 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. Caso de Estudio: Clientes y Empleados
25
Introducción a la Programación Orientada a Objetos Persona > nombre : String calleNro : String telefono : String email : String > Persona() Persona(nom : String) Persona(nom:String,cn:String, t:String,e:String) Inicializa todos los atributos con cadenas nulas Caso de Estudio: Clientes y Empleados
26
Introducción a la Programación Orientada a Objetos Persona > nombre : String calleNro : String telefono : String email : String > … establecerCalleNro (d: String) … > obtenerCalleNro () : String Caso de Estudio: Clientes y Empleados
27
Introducción a la Programación Orientada a Objetos Cliente > saldo : real ciudad : String CUIT : String cateIVA :char > Cliente() Cliente (nom : String) Cliente(nom:String,cn:String, t:String,e:String, s:real,c:String, cu:String,ci:char) Cliente() Inicializa saldo en 0, ciudad con “Bahía Blanca” CUIT con 12 espacios y categoría de IVA con “I” Caso de Estudio: Clientes y Empleados
28
Introducción a la Programación Orientada a Objetos Cliente > saldo : real ciudad : String CUIT : String cateIVA :char > … registrarVenta ( m : real) registrarCobro (m:real) > obtenerSaldo () : real Caso de Estudio: Clientes y Empleados
29
Introducción a la Programación Orientada a Objetos Empleado > basico : real cantHijos : entero fechaIngreso : Fecha > Empleado() Empleado(nom : String) Empleado(nom:String,cn:String, t:String,e:String, b: real,ch:entero, fi : Fecha) Empleado() Inicializa basico en 5000, cantHijos en 0 y fechaIngreso en 1/1/2005 Caso de Estudio: Clientes y Empleados
30
Introducción a la Programación Orientada a Objetos Empleado > basico : real cantHijos : entero fechaIngreso : Fecha >… > establecerBasico (sb :real ) aumentarBasico (a: real )… > masAntiguo(e :Empleado ) : booleano obtenerBasico () : real sueldoNeto (mh: real) : real diasVacaciones () : entero 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. Retorna verdadero si el empleado que recibe el mensaje es más antiguo que el argumento Caso de Estudio: Clientes y Empleados
31
Introducción a la Programación Orientada a Objetos Persona > … > … > establecerCalleNro (d: String) … > obtenerCalleNro () : String Cliente > saldo : real ciudad : String CUIT : String cateIVA :char > registrarVenta ( m : real) registrarCobro (m:real) > obtenerSaldo () : real Empleado > basico : real cantHijos : entero fechaIngreso : Fecha >… > establecerBasico (real sb) aumentarBasico (real a)… > masAntiguo(Empleado e) : booleano obtenerBasico () : real sueldoNeto (mh : entero) : real diasVacaciones () : entero Caso de Estudio: Clientes y Empleados
32
Introducción a la Programación Orientada a Objetos 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. Caso de Estudio: Clientes y Empleados
33
Introducción a la Programación Orientada a Objetos class Persona { //Atributos de instancia protected String nombre; protected String calleNro; protected String telefono; protected String email; … } Caso de Estudio: Clientes y Empleados 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
Introducción a la Programación Orientada a Objetos //Constructores public Persona(){ nombre = new String(); calleNro = new String(); telefono = new String(); email = new String(); } public Persona (String nom){ nombre = nom; calleNro = new String(); telefono = new String(); email = new String(); } public Persona (String nom, String cn, String tel, String em){ nombre = nom; calleNro = cn; telefono = tel; email = em; } Caso de Estudio: Clientes y Empleados
35
Introducción a la Programación Orientada a Objetos class Empleado extends Persona { //Atributos de instancia protected float basico; protected Fecha fechaIng; protected int hijos; … } Caso de Estudio: Clientes y Empleados
36
Introducción a la Programación Orientada a Objetos //Constructores public Empleado(){ super(); basico = 5000; cantHijos = 0; fechaIngreso = new Fecha(1,1,2005);} public Empleado(String nom){ super(nom); basico = 5000; cantHijos = 0; fechaIngreso = new Fecha(1,1,2005);} 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; }
37
Introducción a la Programación Orientada a Objetos La clase Empleado hereda de la clase Persona todas las variables de clase, de instancia y métodos. nombre calleNro telefono email basico cantHijos fechaingreso Un objeto de clase Empleado tiene todos los atributos de una Persona más los específicos de su clase. Caso de Estudio: Clientes y Empleados
38
Introducción a la Programación Orientada a Objetos class gestionEmpresa{ Empleado e; e = new Empleado (…); String nom = e.obtenerNombre(); float bas= e.obtenerBasico(); } 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. Caso de Estudio: Clientes y Empleados
39
Introducción a la Programación Orientada a Objetos La clase Cliente hereda de la clase Persona todas las variables de clase, de instancia y métodos. nombre calleNro telefono email saldo ciudad CUIT cateIva Un objeto de clase Cliente tiene todos los atributos de una Persona más los específicos de su clase. Caso de Estudio: Clientes y Empleados
40
Introducción a la Programación Orientada a Objetos class gestionEmpresa{ Cliente c; c = new Cliente (…); String nom = e.obtenerNombre(); float s = e.obtenerSaldo(); } 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. Caso de Estudio: Clientes y Empleados
41
Introducción a la Programación Orientada a Objetos 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. Caso de Estudio: Clientes y Empleados
42
Introducción a la Programación Orientada a Objetos 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. Caso de Estudio: Clientes y Empleados
43
Introducción a la Programación Orientada a Objetos Ejecutivo > viaticos = 1200 > productividad:real presupuesto : real > Ejecutivo(nom:String,cn:String, t:String,e:String, b: real,ch:entero, fi : Fecha, pre:real) > establecerProductividad (p:real ) aumentarPresupuesto (a:real )… > obtenerPres () : real diasVacaciones () : entero premioAnual(): real diasVacaciones () : entero 20 días Caso de Estudio: Clientes y Empleados premioAnual(): real El 3% de la productividad
44
Introducción a la Programación Orientada a Objetos Persona Caso de Estudio: Clientes y Empleados 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
Introducción a la Programación Orientada a Objetos Empleado >… Ejecutivo >… Caso de Estudio: Clientes y Empleados Persona >…
46
Introducción a la Programación Orientada a Objetos class Persona { //Atributos de instancia protected String nombre; protected String calleNro; protected String telefono; protected String email; … } Caso de Estudio: Clientes y Empleados
47
Introducción a la Programación Orientada a Objetos class Empleado extends Persona { //Atributos de instancia protected float basico; protected Fecha fechaIng; protected int hijos; … } Caso de Estudio: Clientes y Empleados
48
Introducción a la Programación Orientada a Objetos class Ejecutivo extends Empleado { //Atributos de clase protected float viaticos; //Atributos de instancia protected float presupuesto; protected float productividad; … } Caso de Estudio: Clientes y Empleados
49
Introducción a la Programación Orientada a Objetos public Persona (String nom, String cn, String tel, String em){ nombre = nom; calleNro = cn; telefono = tel; email = em; } Caso de Estudio: Clientes y Empleados
50
Introducción a la Programación Orientada a Objetos 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; } Caso de Estudio: Clientes y Empleados
51
Introducción a la Programación Orientada a Objetos 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; } Caso de Estudio: Clientes y Empleados
52
Introducción a la Programación Orientada a Objetos Caso de Estudio: Clientes y Empleados Empleado > diasVacaciones () : real Ejecutivo > diasVacaciones () : real
53
Introducción a la Programación Orientada a Objetos 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; } 1
54
Introducción a la Programación Orientada a Objetos Caso de Estudio: Clientes y Empleados class Ejecutivo extends Empleado{ … public int diasVacaciones () { //20 días return 20; } 2
55
Introducción a la Programación Orientada a Objetos Caso de Estudio: Clientes y Empleados Dadas las siguientes declaraciones: Empleado emp = new Empleado(e1,e2,e3,e4,e5,e6,e7); Ejecutivo eje=new Ejecutivo(j1,j2,j3,j4,j5,j6,j7,j8); System.out.println(emp.diasVacaciones()); System.out.println(eje.diasVacaciones()); 1 2 System.out.println(emp.obtenerPres()); System.out.println(eje.obtenerPres());
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.