35
Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan aumentar la calidad y la productividad del software. La productividad implica reducir tiempos y costos en la concepción y construcción de sistemas de software. Uno aspecto importante es mejorar la extensibilidad, es decir la flexibilidad de un sistema de software para adaptarse a cambios en las especificaciones. El otro aspecto clave es la reusabilidad, la posibilidad de aprovechar en la construcción de un Programación Orientada a Objetos

Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Embed Size (px)

Citation preview

Page 1: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan aumentar la calidad y la productividad del software. La productividad implica reducir tiempos y costos en la concepción y construcción de sistemas de software.

Uno aspecto importante es mejorar la extensibilidad, es decir la flexibilidad de un sistema de software para adaptarse a cambios en las especificaciones.

El otro aspecto clave es la reusabilidad, la posibilidad de aprovechar en la construcción de un nuevo sistema los módulos ya implementados y verificados para otra aplicación.

Programación Orientada a Objetos

Page 2: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

La programación orientada a objetos propone identificar los objetos relevantes de un problema y caracterizarlos a través de sus atributos y comportamiento.

En la etapa de diseño de una aplicación los objetos se agrupan en clases. Los objetos de una misma clase comparten los mismos atributos y comportamiento.

Introducción a la Programación Orientada a Objetos

En la etapa de implementación de una aplicación el programador escribe el código de un conjunto de clases.

Programación Orientada a Objetos

Page 3: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

En ejecución cada objeto de software queda asociado a una clase.

La clase determina la estructura del estado interno en el cual mantiene los valores de los atributos que lo caracterizan.

Cuando un objeto reciba un mensaje brindará un servicio acorde al comportamiento que establece su clase.

Introducción a la Programación Orientada a Objetos

Programación Orientada a Objetos

Page 4: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

La descomposición de un sistema en clases favorece la construcción de software extensible y reusable, pero es insuficiente.

Si los cambios en las especificaciones provocan modificaciones en clases ya implementadas y verificadas, va a ser necesario probarlas nuevamente.

Dos aplicaciones diferentes difícilmente tengan exactamente los mismos requerimientos. La modificación de una clase que funciona adecuadamente dentro de un sistema, para adaptarla a las necesidades de una nueva aplicación, puede llegar a provocar un efecto no deseado.

Programación Orientada a Objetos

Page 5: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Por otra parte la organización de las entidades de un problema en clases también presenta algunas limitaciones.

Por lo general cada grupo de objetos relevante en un sistema comparte algunos atributos y comportamiento, pero difiere en otros.

Si diseñamos un modelo para todo el grupo de objetos, que incluya a todos los atributos posibles, la caracterización será excesiva y puede no ser significativa.

Si en cambio descomponemos el grupo en subgrupos de entidades con exactamente los mismos atributos, tendremos alguna redundancia.

Programación Orientada a Objetos

Page 6: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

La herencia es un mecanismo que permite organizar una colección de clases a través de una relación de generalización-especialización.

Consideremos dos o más clases que comparten algunos atributos y servicios y difieren en otros. Es posible definir una clase base, con los atributos y servicios compartidos y luego extender esa clase base en dos o más clases derivadas.

La definición de las clases derivadas incluye solo los atributos y comportamiento específicos, que distinguen a una clase de otra.

Programación Orientada a Objetos

Page 7: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

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

Page 8: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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

Page 9: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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

Page 10: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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

Page 11: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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:

Caso de Estudio: Clientes y Empleados

Persona

<<atributos de instancia>>nombre …calleNrotelefonoemailciudadfechaIngresosalarioBasicocantHijossaldocuitcateIva

Page 12: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Si definimos un modelo para cada grupo de entidades:

Caso de Estudio: Clientes y Empleados

Empleado

<<atributos de instancia>>nombre …calleNrotelefonoemailfechaIngresosalarioBasicocantHijos

Cliente

<<atributos de instancia>>nombre …calleNrotelefonoemailciudadsaldocuitcateIva

Page 13: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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

Page 14: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Persona

Cliente Empleado

Caso de Estudio: Clientes y Empleados

Un modelo más adecuado consistiría en factorizar los atributos y comportamiento compartidos de Cliente y Empleado en una clase general y retener los atributos y comportamientos específicos en clases especializadas.

Page 15: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

La programación orientada a objetos permite relacionar clases usando el mecanismo de herencia.

La organización es jerárquica, las clases de los niveles superiores son más generales y las de los niveles inferiores más específicas.

Una instancia de Cliente es también un objeto de la clase Persona.

Un objeto de la clase Cliente está caracterizada por los atributos y servicios de cualquier objeto de clase Persona pero además tiene otros atributos y/o servicios específicos.

Caso de Estudio: Clientes y Empleados

Page 16: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Persona

<<atributos de instancia>>nombre : StringcalleNro : Stringtelefono : Stringemail : String<<Constructores>>Persona()Persona(nom : String)Persona(nom:String,cn:String, t:String,e:String)

Inicializa todos los atributoscon cadenas nulas

Caso de Estudio: Clientes y Empleados

Page 17: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Persona

<<atributos de instancia>>nombre : StringcalleNro : Stringtelefono : Stringemail : String<<Constructores>>…<<Comandos>>establecerCalleNro (d: String)…<<Consultas>>obtenerCalleNro () : String

Caso de Estudio: Clientes y Empleados

Page 18: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Cliente

<<atributos de instancia>>saldo : realciudad : StringCUIT : StringcateIVA :char<<Constructores>>Cliente()Cliente (nom : String)Cliente(nom:String,cn:String, t:String,e:String, s:real,c:String, cu:String,ci:char)

Inicializa saldo en 0, ciudadcon “Bahía Blanca” CUIT con 12

espacios y categoría de IVA con“I”

Caso de Estudio: Clientes y Empleados

Page 19: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Cliente

<<atributos de instancia>>saldo : realciudad : StringCUIT : StringcateIVA :char<<Constructores>>…<<Comandos>>registrarVenta ( m : real)registrarCobro (m:real) <<Consultas>>obtenerSaldo () : real

Caso de Estudio: Clientes y Empleados

Page 20: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Empleado

<<atributos de instancia>>basico : realcantHijos : enterofechaIngreso : Fecha<<Constructores>>Empleado()Empleado(nom : String)Empleado(nom:String,cn:String, t:String,e:String, b: real,ch:entero, fi : Fecha)

Inicializa básico en 1000, cantHijos en 0 y fechaIngreso en 1/1/2005

Caso de Estudio: Clientes y Empleados

Page 21: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Empleado

<<atributos de instancia>>basico : realcantHijos : enterofechaIngreso : Fecha<<Constructores>>…<<Comandos>>establecerBasico (sb :real )aumentarBasico (a: real )…<<Consultas>>masAntiguo(e :Empleado ) : booleanoobtenerBasico () : realsueldoNeto (mh: real) : realdiasVacaciones () : entero

Al salario básico se le suma $5000 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

Page 22: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Persona<<atributos de instancia>>…

<<Constructores>>…<<Comandos>>establecerCalleNro (d: String)…<<Consultas>>obtenerCalleNro () : String

Cliente

<<atributos de instancia>>saldo : realciudad : StringCUIT : StringcateIVA :char<<Constructores>><<Comandos>>registrarVenta ( m : real)registrarCobro (m:real) <<Consultas>>obtenerSaldo () : real

Empleado<<atributos de instancia>>basico : realcantHijos : enterofechaIngreso : Fecha<<Constructores>>…<<Comandos>>establecerBasico (real sb)aumentarBasico (real a)…<<Consultas>>masAntiguo(Empleado e) : booleanoobtenerBasico () : realsueldoNeto (mh : entero) : realdiasVacaciones () : entero

Caso de Estudio: Clientes y Empleados

Page 23: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Caso de Estudio: Clientes y Empleados

La clase Cliente está vinculada a la clase Persona por una relación de herencia.

La relación de 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 el comportamiento propio de la clase, pero además por todos los atributos y el comportamiento de la clase Persona.

Análogamente entre la clase Empleado y la clase Persona existe una relación de tipo es-un.

Page 24: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Las clases Cliente y Empleado especializan a la clase Persona.

Cliente y Empleado son subclases o clase derivadas de la superclase o clase base Persona.

Las instancias de una clase Empleado son también instancias de la clase Persona, de modo que heredan sus atributos y métodos.

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

Page 25: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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.

nombrecalleNrotelefonoemailbasicocantHijosfechaingreso

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

Page 26: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

class gestionEmpresa{

Empleado e;e = new Empleado (…);

String nom = e.obtenerNombre();int c = e.obtenerCantHijos();

}

Caso de Estudio: Clientes y Empleados

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.

Page 27: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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.

nombrecalleNrotelefonoemailsaldociudadCUITcateIva

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

Page 28: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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

Page 29: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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

Page 30: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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

Page 31: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

//Constructores public Empleado(){ super(); basico = 5000; cantHijos = 0; fechaIngreso = new Fecha(1,1,2005);}

//Constructores public Empleado(String nom){ super(nom); basico = 5000; cantHijos = 0; fechaIngreso = new Fecha(1,1,2005);}

Caso de Estudio: Clientes y Empleados

Page 32: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

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

Page 33: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

class Persona { public String toString (){ return nombre+” “+calleNro+” “+ telefono+” “+email;}

class Empleado extends Persona { public String toString (){ return nombre+” “+calleNro+” “+ telefono+” “+email+” “+basico+ ” “ +

cantHijos+fechaIngreso.toString(); }

El método toString() de la clase Empleado redefine al método toString() de la clase persona,

Caso de Estudio: Clientes y Empleados

Page 34: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

El método más específico puede invocar al más general usando super. Si la clase Persona se modifica para agregar un atributo DNI, el cambio no requiere modificar el método toString() en Empleado.

class Empleado extends Persona { public String toString (){ String cad = super.toString(); return cad+” “+ basico+” “+cantHijos+” “+ fechaIngreso.toString(); }}

Caso de Estudio: Clientes y Empleados

Page 35: Introducción a la Programación Orientada a Objetos En los últimos años se ha destinado mucho esfuerzo a desarrollar lenguajes y metodologías que permitan

Introducción a la Programación Orientada a Objetos

Java: An Introduction to Problem Solving & Programming

Walter Savitch

Fourth Edition Capítulo 7

Fifth Edition Chapter 8

Bibliografía