Orientación a Objetos, una técnicapara mejorar la calidad del software Programación Orientada a Objetos
Desarrollo de software OOMétodo de desarrollo de software que basa la arquitectura del sistema en módulos deducidos de los...
Desarrollo de software OOEncontrar los objetos relevantesEncontrar las operaciones para los tiposde objetosDescribir los t...
Ejemplo: objeto coche Funciones que puede realizar: •Ir ...
Clases de objetosLos objetos con estados similares y el mismocomportamiento se agrupan en clases
Clase Coche Coche color velocidad tamaño carburante ir parar girarDerecha girarIzquierd...
Relaciones entre objetosB es un cliente de A si todo objeto de B puede contenerinformación sobre uno o mas objetos de A ...
Relación de cliente propietario Coche Persona
Relación de Herencia TRANSPORTE
Estructura del software Publicacion AutorRevista Libro Actas ...
Modelo de objetos Programación Orientada a Objetos Métodos de Análisis y Diseño OO M...
Abstracción “Supresión intencionada, u ...
Encapsulación“Proceso de almacenar en un mismo compartimento loselementos de una abstracción que constituyen suestructura ...
El enfoque de la POOPrograma OO Colección estructurada de clases Clase ...
ClasesDEFINICIÓN: Implementación total o parcial de un TADEntidad sintáctica que describen objetos que van atener la misma...
Componentes de un claseAtributos: Determinan una estructura de almacenamiento para cada objeto de la claseMétodos: ...
Ejemplo: Clase Cuenta Cuenta Definición de la clase titular: String; ...
Clase Cuenta en Javaclass Cuenta{ String titular; ATRIBUTOS double saldo; void ingreso (double ca...
Ocultación de InformaciónA las características de una clase (atributos ymétodos) se les puede asignar un modificadorde vis...
Clase Cuenta en Javaclass Cuenta{ private String titular; private double saldo; public void ingreso (doub...
Acceso y modificación de atributosLa única forma de acceder a los atributos es através de métodos públicos Métodos get ...
Clase Cuenta en Javaclass Cuenta{ private String titular; private double saldo; public String getTitular(...
PaquetesUnidad modular del lenguaje que permite agruparclases que están relacionadasAdemás de public y private, se puede e...
PaquetesLa pertenencia de una clase a un paquete sedebe especificar antes de la declaración(package)Para utilizar una clas...
Clase Cuenta en Javapackage banco;import java.util.LinkedList;public class Cuenta{ String titular; double saldo; ...
ObjetosUn objeto es una instancia de una clase,creada en tiempo de ejecuciónEs una estructura de datos formada por tantosc...
Objetos dominio vs. Objetos aplicación Ejemplo: Aplicación Correo electrónicoObjetos externos: Procedentes del dominio ...
cuentaAhorro Cuenta Persona empleado ...
Tipos de los atributosTipos de datos primitivos: Enteros: byte, short, int, long Reales: float, double Carácter: char ...
Enumeradosenum EstadoCuenta{ OPERATIVA, INMOVILIZADA, NUM_ROJOS;}public class Cuenta{ private String titular; ...
Relación clienteCuando en una clase A establecemos que eltipo de un atributo es otra clase B, decimos queA es cliente de B...
Relación de cliente Cuenta Personatitular: Persona; nombre: St...
Semántica referenciaUna referencia es un valor que en tiempo de ejecuciónestá o vacío (null) o conectado.Si está conectado...
Igualdad vs. identidad b da “uno” “uno” “dos”...
Copia de objetosSi la asignación no implica copia deobjetos ¿cómo se pueden copiar? copia = obj.clone(); Constructor de ...
Semántica referenciaVentajas de las referencias: Compartición de objetos integridad referencial Permite definir estructu...
Semántica referenciamiCuenta titular J. Gomez nombre codigo 123456 876...
Semántica referencia Compartición Autorreferencias Objeto Cuenta Objeto C...
Métodos y mensajesUn método está compuesto por: Cabecera: Identificador y Parámetros Cuerpo: Secuencia de instruccionesM...
Ejemplo método vs. mensaje Método reintegro en la clase Cuenta:public double reintegro (double cantidad) { if (pu...
Definición de MétodosTodo método tiene un valor de retorno Si no devuelve nada se indica con voidPara cada método se esta...
Sentencias de control de flujo switch(expresión) { case valor1:if(...
Ejemplosint saldo;…if (saldo<0) estadoCuenta = Estado.NUMEROS_ROJOS;int dia;…switch (dia){ case 1: System.out.println...
EjemploMétodo reintegro teniendo en cuenta el estado de lacuenta:public boolean reintegro (double cantidad){ switch (es...
Bucles (1/2)[inicialización;]do { sentencias; [iteración;]}while (expresión-booleana );[inicialización;]while(...
Ejemplospublic class Cuenta{ … private double[] ultimasOperaciones; public double getSaldo(){ int...
Bucles (2/2)for( inicialización; exp-booleana; iteración ) { sentencias;}Bucle ForEachfor(Tipo valor : nombreColecc...
Ejemplospublic double getSaldo(){ double saldo = 0; for (int index=0; i<ultimasOperaciones.length; index++) sa...
Sobrecarga de métodos Java soporta sobrecarga de métodos el mismo nombre pero con DIFERENTE lista de tipos de argument...
Paso de parámetrosSea el método met (T1 p1,…, Tn pn) Donde p1 … pn son los parámetros formalesy la invocación (mensaje) ...
Paso de parámetrosEl efecto del paso de parámetros es una asignaciónpi = ai En el caso de las referencias, el argumento f...
Paso de parámetrosNo existe ninguna restricción sobre lasoperaciones aplicables sobre los parámetrosformalesEs posible mod...
Paso de parámetrospublic void transferencia(Cuenta emisor, Cuenta receptor, double cantidad) { ...
Instancia actual Cada operación de una computación OO es relativa a cierto objeto, la instancia actual, en el momento d...
Ejemplo: c1.reintegro(300) c1 titular J. Gomez nombre codigo 123456 8...
Instancia actualSi se aplica un método y no se especificael objeto receptor, se asume que es lainstancia actual.public dou...
Referencia thisEl lenguaje Java proporciona la palabra clavethis que referencia a la instancia actual.Utilidad: Distingui...
Referencia this public void trasladar(Sucursal sucursal){ this.sucursal.eliminar(this); ...
Creación de ObjetosLa declaración de una variable cuyo tipo seauna clase no implica la creación del objeto.Se necesita un ...
Declaración vs. CreaciónCuenta c; //declaración c Estado null c = new Cuenta(…) //creación explíc...
ConstructoresMétodo encargado de inicializar correctamente losobjetosMétodos con el mismo nombre de la clase pero sin valo...
Inicialización por defectoTipo Valor Inicialboolean falsechar Carácter 0 (...
Constructores para la clase Cuentapublic Cuenta(Persona quien){//Utilizamos this para invocar al otro constructor// reu...
Creación de objetosLa construcción de un objeto consta de tresetapas: Se reserva espacio en memoria para la estructura de...
Creación de objetos Cuenta cta = new Cuenta (persona, 300.0);cta Objeto titula...
Atributos finalesJava permite especificar que el valor de unatributo no podrá variar una vez construido elobjetoUn atribut...
Atributo finalpublic class Cuenta { //Los atributos se pueden inicializar //en el momento de la declaración ...
Atributos de claseRepresenta una propiedad cuyo valor escompartido por todos los objetos de una mismaclaseEjemplo: Añadim...
Atributos de clasepublic class Cuenta { private static int ultimoCodigo = 0; private int codigo; pr...
ConstantesEn Java no hay una declaración específicapara las constantes.Se consigue el mismo resultado definiendo unatribut...
Constantespublic class Cuenta { private static final int MAX_OPERACIONES = 20; private static final double SAL...
Métodos de clase¿Cómo definimos operaciones que manejanatributos de clase?Un método se define de clase anteponiendo eliden...
Métodos de clasepublic class Cuenta { private static int ultimoCodigo = 0; … public static int getNumeroCuent...
Destrucción de objetosEn Java los objetos no se destruyenexplícitamenteRecolección automática de memoria de losobjetos no ...
Modelo de ejecución OOPara obtener un código ejecutable se deben ensamblarlas clases para formar sistemas (cerrado).Un sis...
Modelo de ejecución OO¿Cómo empieza la ejecución de un programa OO? Creación de un “objeto raíz” Aplicar mensaje sobre “...
Modelo de ejecución OORAIZ obj2 obj7 ...
El método mainDebemos proporcionar el nombre de la claseque conduzca la aplicaciónCuando ejecutamos un programa, el sistem...
El método main Definición del método mainpublic class Eco{ public static void main(String[] args){ for(int i=0; i <...
Principios de diseño de clasesFavorecer la legibilidad del código: Asignar nombres significativos para los identificadore...
Principios de diseño de clasesOcultación de la Información Los atributos de una clase deben ser privados y ofrecer los m...
of 81

Poo java v fin

Published on: Mar 4, 2016
Published in: Education      
Source: www.slideshare.net


Transcripts - Poo java v fin

  • 1. Orientación a Objetos, una técnicapara mejorar la calidad del software Programación Orientada a Objetos
  • 2. Desarrollo de software OOMétodo de desarrollo de software que basa la arquitectura del sistema en módulos deducidos de los tipos de objetos que se manipulan (en lugar de basarse en la función o funciones a las que el sistema está destinado a asegurar).
  • 3. Desarrollo de software OOEncontrar los objetos relevantesEncontrar las operaciones para los tiposde objetosDescribir los tipos de objetosEncontrar relaciones entre objetosUtilizar los tipos de objetos y lasrelaciones para estructurar el software
  • 4. Ejemplo: objeto coche Funciones que puede realizar: •Ir •Parar •Girar a la derecha •Girar a la izquierda •Arrancarid: número de bastidor Tiene las características: •Color •Velocidad •Tamaño •Carburante
  • 5. Clases de objetosLos objetos con estados similares y el mismocomportamiento se agrupan en clases
  • 6. Clase Coche Coche color velocidad tamaño carburante ir parar girarDerecha girarIzquierda arrancar
  • 7. Relaciones entre objetosB es un cliente de A si todo objeto de B puede contenerinformación sobre uno o mas objetos de A B A A atB hereda de A si B denota una versión especializada deA A B
  • 8. Relación de cliente propietario Coche Persona
  • 9. Relación de Herencia TRANSPORTE
  • 10. Estructura del software Publicacion AutorRevista Libro Actas Congreso “Libro es una especialización de Publicacion” “Publicacion usa servicios de Autor”
  • 11. Modelo de objetos Programación Orientada a Objetos Métodos de Análisis y Diseño OO Modelo de Objetos Abstracción Encapsulación Modularidad Herencia Polimorfismo Bases de Datos OOOtros desarrollos se asientan en el paradigma OO Desarrollo basado en componentes Tecnología de objetos distribuidos
  • 12. Abstracción “Supresión intencionada, u ocultamiento, de algunos detalles de un proceso o artefacto, con el objeto de destacar de manera más clara otros aspectos, detalles o estructuras” Tipos de abstracción: Datos, procedural Métodos de abstracción: Parametrización Especificación[Booch’96] Booch, G. Análisis y Diseño Orientado Sofware y con Aplicaciones. Addison-Wesley. 1996 Curso 2009/2010 Calidad del a Objetos OO 57
  • 13. Encapsulación“Proceso de almacenar en un mismo compartimento loselementos de una abstracción que constituyen suestructura y su comportamiento”
  • 14. El enfoque de la POOPrograma OO Colección estructurada de clases Clase Implementación de un Tipo Abstracto de Datos (TAD) Objeto Una instancia de una clase Los objetos se comunican mediante mensajes
  • 15. ClasesDEFINICIÓN: Implementación total o parcial de un TADEntidad sintáctica que describen objetos que van atener la misma estructura y el mismocomportamiento.Doble naturaleza: Módulo + Tipo de Datos Módulo (concepto sintáctico) Mecanismo para organizar el software Tipo (concepto semántico) Mecanismo de definición de nuevos tipos de datos: describe una estructura de datos (objetos) y las operaciones aplicables.
  • 16. Componentes de un claseAtributos: Determinan una estructura de almacenamiento para cada objeto de la claseMétodos: Operaciones aplicables a los objetos Único modo de acceder a los atributosEjemplo : En una aplicación bancaria, encontramos objetos “cuenta”. Todos los objetos “cuenta” tienen propiedades comunes: atributos: saldo, titular, ... operaciones: reintegro, ingreso, … Definimos una clase CUENTA
  • 17. Ejemplo: Clase Cuenta Cuenta Definición de la clase titular: String; Atributos saldo: double; reintegro(valor:double); ingreso (valor:double); MétodosTiempo de ejecución “José Martínez” titular 1200.0 saldo Objeto Cuenta
  • 18. Clase Cuenta en Javaclass Cuenta{ String titular; ATRIBUTOS double saldo; void ingreso (double cantidad){ saldo = saldo + cantidad; } void reintegro (double cantidad){ if (cantidad <= saldo) saldo = saldo – cantidad; } MÉTODOS}
  • 19. Ocultación de InformaciónA las características de una clase (atributos ymétodos) se les puede asignar un modificadorde visibilidad: public: Característica pública, accesible desde todas las clases private: Característica privada, accesible sólo dentro de la clase donde se definePrincipio de diseño: Todos los atributos de una clase son privados Los métodos pueden tener distintos niveles de visibilidad
  • 20. Clase Cuenta en Javaclass Cuenta{ private String titular; private double saldo; public void ingreso (double cantidad){ saldo = saldo + cantidad; } public void reintegro (double cantidad){ if (puedoSacar(cantidad)) saldo = saldo – cantidad; } private boolean puedoSacar(double cantidad){ return cantidad <= saldo; }}
  • 21. Acceso y modificación de atributosLa única forma de acceder a los atributos es através de métodos públicos Métodos get para consultar el valor del atributo Métodos set para establecer el valor del atributoLa implementación de los métodos set/getdepende del nivel de acceso de los atributos.Se aísla al cliente de los cambios en laestructura de datos.
  • 22. Clase Cuenta en Javaclass Cuenta{ private String titular; private double saldo; public String getTitular(){ return titular; } //No setTitular porque es inmutable public double getSaldo(){ return saldo; } /* No setSaldo porque se modifica con ingresos y reintegros */}
  • 23. PaquetesUnidad modular del lenguaje que permite agruparclases que están relacionadasAdemás de public y private, se puede establecerque una característica de la clase tiene visibilidad anivel de paqueteA las clases también se les puede especificar un nivelde visibilidad: public: la clase es visible desde cualquier paquete A nivel de paquete: la clase sólo es visible en el paquete al que pertenece.
  • 24. PaquetesLa pertenencia de una clase a un paquete sedebe especificar antes de la declaración(package)Para utilizar una clase definida en un paquetedistinto: Se utiliza el nombre cualificado de la clase Ejemplo: java.util.LinkedList unaLista; Se importa la clase o el paquete al comienzo de la declaración Se puede utilizar el nombre de la clase sin cualificar import java.util.LinkedList; o bien import java.util.*;
  • 25. Clase Cuenta en Javapackage banco;import java.util.LinkedList;public class Cuenta{ String titular; double saldo; LinkedList ultimasOperaciones; void ingreso (double cantidad){… } void reintegro (double cantidad){… }}
  • 26. ObjetosUn objeto es una instancia de una clase,creada en tiempo de ejecuciónEs una estructura de datos formada por tantoscampos como atributos tiene la clase.El estado de un objeto viene dado por el valorde los campos.Los métodos permiten consultar y modificar elestado del objeto.
  • 27. Objetos dominio vs. Objetos aplicación Ejemplo: Aplicación Correo electrónicoObjetos externos: Procedentes del dominio de la aplicación: “carpeta”, “buzón”, “mensaje”Objetos software: Procedentes del ANALISIS: todos los externos Procedentes del DISEÑO/IMPLEMENTACION: “lista enlazada”, “ventana”,...
  • 28. cuentaAhorro Cuenta Persona empleado CuentaCorriente CuentaAhorro Empleado Cliente cuentaCorriente cliente Sistema Software (Clases) Objetos del mundo real O EÑ S DI EJECUCIÓN AN AL ISI S empleado cuentaAhorro“Cada objeto es instancia cuentaCorriente cliente directa Instancias de las clases (objetos software) de una clase”
  • 29. Tipos de los atributosTipos de datos primitivos: Enteros: byte, short, int, long Reales: float, double Carácter: char Booleano: booleanReferencias: Sus valores son objetos de tipos no básicos, otras clases. Enumerados: son clases que representan un conjunto finito de valores
  • 30. Enumeradosenum EstadoCuenta{ OPERATIVA, INMOVILIZADA, NUM_ROJOS;}public class Cuenta{ private String titular; private double saldo; private EstadoCuenta estado; …}
  • 31. Relación clienteCuando en una clase A establecemos que eltipo de un atributo es otra clase B, decimos queA es cliente de B.Por ejemplo: Definimos la clase Persona Declaramos el tipo del atributo titular (en la clase Cuenta) como Persona. La clase Cuenta es cliente de la clase Persona
  • 32. Relación de cliente Cuenta Personatitular: Persona; nombre: String;saldo: double; dni: String;reintegro(valor:double);ingreso (valor:double); Referencia a otro objeto!! titular “José Martínez” saldo 1200.0 “34789567R” Objeto Cuenta Objeto Persona
  • 33. Semántica referenciaUna referencia es un valor que en tiempo de ejecuciónestá o vacío (null) o conectado.Si está conectado, una referencia identifica a un únicoobjeto.Mientras exista, cada objeto posee una identidad única,independiente de su estado identificador deobjeto (oid): Dos objetos con diferentes oids pueden tener los mismos valores en sus campos. Los valores de los campos de un objeto pueden cambiar, pero su oid es inmutable.Cuando se asigna un objeto a una variable no se asignala estructura de datos del objeto sino el oid.
  • 34. Igualdad vs. identidad b da “uno” “uno” “dos” 23 23 23c Igualdad entre referencias Identidad a == c {true} a == b {false} Igualdad entre objetos Podemos utilizar el método equals
  • 35. Copia de objetosSi la asignación no implica copia deobjetos ¿cómo se pueden copiar? copia = obj.clone(); Constructor de copia: Se pasa como parámetro un objeto de la misma clase Se inicializan los campos del nuevo objeto con los mismos valores de los campos del objeto que se pasa como parámetro.
  • 36. Semántica referenciaVentajas de las referencias: Compartición de objetos integridad referencial Permite definir estructuras recursivas (auto- referencias) Más eficiente manejo objetos complejos Los objetos se crean cuando se necesitan Soporte para el polimorfismo
  • 37. Semántica referenciamiCuenta titular J. Gomez nombre codigo 123456 87654321 dni saldo 100000 Objeto Persona ultimasOperaciones -5000 10000 Objeto Array
  • 38. Semántica referencia Compartición Autorreferencias Objeto Cuenta Objeto Cuenta nombre M. Martinez titular titular categoria Fijocodigo 123456 876234 codigo salario 100000000 saldo 100000 50000 saldo jefeultOper ultOper Objeto Empleado -5000 55000 10000 -5000 J. Gómez nombre 87654321 dni Objeto Persona
  • 39. Métodos y mensajesUn método está compuesto por: Cabecera: Identificador y Parámetros Cuerpo: Secuencia de instruccionesMensaje: Mecanismo básico de la computación OO. Invocación de la aplicación de un método sobre un objeto.Un mensaje está formado por tres partes Objeto receptor Selector o identificador del método a aplicar Argumentos
  • 40. Ejemplo método vs. mensaje Método reintegro en la clase Cuenta:public double reintegro (double cantidad) { if (puedoSacar(cantidad)) saldo = saldo – cantidad;} Mensaje, aplica el método reintegro sobre un objeto cuenta: cuenta.reintegro(600.0);
  • 41. Definición de MétodosTodo método tiene un valor de retorno Si no devuelve nada se indica con voidPara cada método se establece el nivel devisibilidad¿Qué instrucciones podemos incluir en elcuerpo de un método? Asignación Estructuras condicionales Iteración Invocación a otro método = Mensajes Creación de objetos
  • 42. Sentencias de control de flujo switch(expresión) { case valor1:if( expresión-booleana ) sentencias;{ break; sentencias;} case valor2:[else { sentencias; sentencias; break;}] [default: sentencias;] }
  • 43. Ejemplosint saldo;…if (saldo<0) estadoCuenta = Estado.NUMEROS_ROJOS;int dia;…switch (dia){ case 1: System.out.println(“Lunes”); break; case 2: System.out.println(“Martes”); break; … case 7: System.out.println(“Domingo”); break;}
  • 44. EjemploMétodo reintegro teniendo en cuenta el estado de lacuenta:public boolean reintegro (double cantidad){ switch (estadoCuenta) { case INMOVILIZADA: case NUMEROS_ROJOS: return false; case OPERATIVA: if (puedoSacar(cantidad)) saldo = saldo - cantidad; return true; default: return false; }}
  • 45. Bucles (1/2)[inicialización;]do { sentencias; [iteración;]}while (expresión-booleana );[inicialización;]while( expresión-booleana ) { sentencias; [iteración;]}
  • 46. Ejemplospublic class Cuenta{ … private double[] ultimasOperaciones; public double getSaldo(){ int index = 0; double saldo = 0; while (index < ultimasOperaciones.length){ saldo = saldo + ultimasOperaciones[index]; ++index; } return saldo; }}
  • 47. Bucles (2/2)for( inicialización; exp-booleana; iteración ) { sentencias;}Bucle ForEachfor(Tipo valor : nombreColeccion){ //hacer algo con “valor” }
  • 48. Ejemplospublic double getSaldo(){ double saldo = 0; for (int index=0; i<ultimasOperaciones.length; index++) saldo = saldo + ultimasOperaciones[index]; return saldo;}public double getSaldo(){ double saldo = 0; for (double operacion : ultimasOperaciones) saldo = saldo + operacion; return saldo;}
  • 49. Sobrecarga de métodos Java soporta sobrecarga de métodos el mismo nombre pero con DIFERENTE lista de tipos de argumentos. No pueden diferenciarse únicamente en el tipo de retorno.//Pago de una compra en una vezpublic boolean cobrar(Compra ticket){ return reintegro(ticket.getTotal());}//Pago a plazos devuelve el número de plazospublic int cobrar(Compra ticket, boolean aplazado){ …}
  • 50. Paso de parámetrosSea el método met (T1 p1,…, Tn pn) Donde p1 … pn son los parámetros formalesy la invocación (mensaje) obj.met (a1,…,an) Donde a1 … an son los parámetros realesDebemos responder a las siguientes preguntas: ¿Cuál es la correspondencia entre parámetros reales y formales? ¿Qué operaciones se permiten sobre los parámetros formales? ¿Qué efecto tendrán las operaciones aplicadas sobre los parámetros formales sobre los parámetros reales correspondientes?
  • 51. Paso de parámetrosEl efecto del paso de parámetros es una asignaciónpi = ai En el caso de las referencias, el argumento formal referencia al mismo objeto referenciado por el argumento real En el caso de los tipos primitivos pi es una copia de aiPaso de parámetros siempre por valor Al parámetro real no le afectan los cambios en el parámetro formalCuando trabajamos con referencias el efecto de unaoperación sobre el parámetro formal implica que semodifique el estado del parámetro real.
  • 52. Paso de parámetrosNo existe ninguna restricción sobre lasoperaciones aplicables sobre los parámetrosformalesEs posible modificar el parámetro formalEl parámetro real no se cambia porque elparámetro formal era una copia de lareferencia o del tipo primitivo.
  • 53. Paso de parámetrospublic void transferencia(Cuenta emisor, Cuenta receptor, double cantidad) { emisor.reintegro(cantidad); Cambia el estado receptor.ingreso(cantidad); de los dos objetos emisor = null;} No afectaría a la variable cuenta1…banco.transferencia(cuenta1, cuenta2, 3000.0);
  • 54. Instancia actual Cada operación de una computación OO es relativa a cierto objeto, la instancia actual, en el momento de la ejecución de la operación ¿A qué objeto Cuenta se refiere el texto de la rutina reintegro?El cuerpo de una rutina se refiere a la instancia sobre la que se aplica La instancia actual es el receptor de la llamada actual, el objeto receptor del mensaje
  • 55. Ejemplo: c1.reintegro(300) c1 titular J. Gomez nombre codigo 123456 87654321 dnisaldo-300 saldo 600 Objeto Persona ultimasOperaciones -5000 10000 Objeto Arraypublic double reintegro (double cantidad) { if (puedoSacar(cantidad)) saldo = saldo – cantidad;}
  • 56. Instancia actualSi se aplica un método y no se especificael objeto receptor, se asume que es lainstancia actual.public double reintegro (double cantidad) { if (puedoSacar(cantidad)) saldo = saldo – cantidad;}El objeto receptor de puedoSacar seráel objeto receptor del reintegro
  • 57. Referencia thisEl lenguaje Java proporciona la palabra clavethis que referencia a la instancia actual.Utilidad: Distinguir los atributos de los parámetros y variables locales dentro de la implementación de un método. Aplicar un mensaje a otro objeto estableciendo como parámetro la referencia al objeto actual.
  • 58. Referencia this public void trasladar(Sucursal sucursal){ this.sucursal.eliminar(this); sucursal.añadir(this); } Se refiere al parámetro Se refiere a la instancia actual, la cuenta que se va a trasladarSe refiere al atributo de la clase
  • 59. Creación de ObjetosLa declaración de una variable cuyo tipo seauna clase no implica la creación del objeto.Se necesita un mecanismo explícito de creaciónde objetos: new¿Por qué? Evitar cadena de creaciones antes de empezar a hacer nada útil Estructuras recursivas Los objetos se crean cuando se necesitan (referencias vacías, compartir objeto)
  • 60. Declaración vs. CreaciónCuenta c; //declaración c Estado null c = new Cuenta(…) //creación explícita • Estado “conectado”c • c contiene la referencia al objeto • c almacena el oid asignado al objeto CUENTA objeto al crearse
  • 61. ConstructoresMétodo encargado de inicializar correctamente losobjetosMétodos con el mismo nombre de la clase pero sin valorde retornoNo se pueden invocar una vez que el objeto se hacreadoPermite sobrecarga para especificar formas distintasde inicializar los objetosToda clase tiene que tener al menos un constructorSi no se define ningún constructor, el compilador creauno por defecto sin argumentos, vacío, que inicializalos atributos a los valores por defecto.
  • 62. Inicialización por defectoTipo Valor Inicialboolean falsechar Carácter 0 (‘u000’)byte,short,int, 0longfloat +0.0fdouble +0.0dReferencia a objeto null
  • 63. Constructores para la clase Cuentapublic Cuenta(Persona quien){//Utilizamos this para invocar al otro constructor// reutilización de código this(quien, 100);}public Cuenta(Persona quien, double saldoInicial){ titular = quien; saldo = saldoInicial; ultimasOperaciones = new double[20];} El array hay que crearlo!!!
  • 64. Creación de objetosLa construcción de un objeto consta de tresetapas: Se reserva espacio en memoria para la estructura de datos que define la clase. Inicializa los campos de la instancia con los valores por defecto Garantiza que cada atributo de una clase tenga un valor inicial antes de la llamada al constructor Se aplica sobre la instancia el constructor que se invoca
  • 65. Creación de objetos Cuenta cta = new Cuenta (persona, 300.0);cta Objeto titular null Persona saldo 300.0 0.0 codigo 01ultimasOperaciones null …
  • 66. Atributos finalesJava permite especificar que el valor de unatributo no podrá variar una vez construido elobjetoUn atributo se declara de sólo consultaanteponiendo el modificador final a sudeclaraciónLos atributos finales sólo pueden serinicializados en la declaración o en elconstructor
  • 67. Atributo finalpublic class Cuenta { //Los atributos se pueden inicializar //en el momento de la declaración private double saldo = 100; private final Persona titular; public Cuenta(Persona persona) { titular = persona; } Error en tiempo de compilación … public void setTitular(Persona persona){ titular = persona; }}
  • 68. Atributos de claseRepresenta una propiedad cuyo valor escompartido por todos los objetos de una mismaclaseEjemplo: Añadimos a las cuentas un atributo para el código de cuenta. Es necesario una variable que almacene el último código de cuenta asignado.En un lenguaje imperativo se declararía unavariable global.Java es un lenguaje OO puro que no permitedeclaraciones fuera del ámbito de una clase.
  • 69. Atributos de clasepublic class Cuenta { private static int ultimoCodigo = 0; private int codigo; private double saldo; private final Persona titular; private double [] ultimasOperaciones; public Cuenta(Persona nombre, double saldoInicial) { codigo = ++ultimoCodigo; titular = nombre; saldo = saldoInicial; ultimasOperaciones = new double[20]; } …A los atributos de clase se tiene acceso desde cualquier método de la clase
  • 70. ConstantesEn Java no hay una declaración específicapara las constantes.Se consigue el mismo resultado definiendo unatributo de clase y final.Las constantes no pueden ser modificadas. No tiene sentido definir métodos de acceso ymodificación.El nivel de acceso es controlado por suvisibilidad.
  • 71. Constantespublic class Cuenta { private static final int MAX_OPERACIONES = 20; private static final double SALDO_MINIMO = 100; private static int ultimoCodigo = 0; private int codigo; private double saldo; private final Persona titular; private double[] ultimasOperaciones; public Cuenta(Persona persona) { codigo = ++ultimoCodigo; titular = persona; saldo = SALDO_MINIMO; ultimasOperaciones = new double[MAX_OPERACIONES]; }…} Tema 2 Clases y Objetos 68
  • 72. Métodos de clase¿Cómo definimos operaciones que manejanatributos de clase?Un método se define de clase anteponiendo elidentificador static a su declaraciónEn el cuerpo del método de clase sólo sepuede acceder a los atributos de clasePara la aplicación de un método de clase nose hace uso de ningún objeto receptor, sino delnombre de la clase
  • 73. Métodos de clasepublic class Cuenta { private static int ultimoCodigo = 0; … public static int getNumeroCuentas() { return ultimoCodigo; }}Cuenta.getNumeroCuentas();
  • 74. Destrucción de objetosEn Java los objetos no se destruyenexplícitamenteRecolección automática de memoria de losobjetos no referenciados (Garbage Collector)Existe un método finalize() Este método se invocará justo antes de la recolección de basura Interesa para liberar recursos (ej. conexión bases de datos).
  • 75. Modelo de ejecución OOPara obtener un código ejecutable se deben ensamblarlas clases para formar sistemas (cerrado).Un sistema viene dado por: Un conjunto de clases La clase raíz El procedimiento de creación de la clase raíz.La ejecución de un programa OO consiste en: Creación dinámica de objetos Envío de mensajes entre los objetos creados, siguiendo un patrón impredecible en tiempo de compilación
  • 76. Modelo de ejecución OO¿Cómo empieza la ejecución de un programa OO? Creación de un “objeto raíz” Aplicar mensaje sobre “objeto raíz”En tiempo de ejecución, el flujo de ejecución siemprese encuentra: aplicando una operación sobre un objeto (instancia actual) o ejecutando una operación que no es un mensaje (asignación, creación).En un instante dado bien se aplica un mensaje sobre lainstancia actual o sobre un objeto accesible desde él.Un mensaje siempre formará parte del cuerpo de unarutina de una clase
  • 77. Modelo de ejecución OORAIZ obj2 obj7 obj1 obj4 ACTUAL obj5 obj9 obj3 obj8
  • 78. El método mainDebemos proporcionar el nombre de la claseque conduzca la aplicaciónCuando ejecutamos un programa, el sistemalocalizará esta clase y ejecutará el main quecontengaEl método main es un método de clase querecibe como parámetro un array de cadenas detexto que son los parámetros del programa
  • 79. El método main Definición del método mainpublic class Eco{ public static void main(String[] args){ for(int i=0; i < args.length; i++) System.out.println(args[i]+” ”); }} Parámetros del programa: c: java Eco estamos aquí --> SALIDA: estamos aquí
  • 80. Principios de diseño de clasesFavorecer la legibilidad del código: Asignar nombres significativos para los identificadores de atributos, variables y métodos Inicializar los atributosFavorecer la extensibilidad: Utilizar constantes simbólicas significativas Seguir los principios de diseño modular
  • 81. Principios de diseño de clasesOcultación de la Información Los atributos de una clase deben ser privados y ofrecer los métodos de consulta necesarios dependiendo de su nivel de acceso (set y/o get) Diferenciar entre métodos públicos (interfaz de la clase) y métodos privados (métodos auxiliares) Para acceder a una constante, ésta debe ser pública en lugar de ofrecer un método de consulta.Alta Cohesión Fragmentar clases que tengan demasiadas responsabilidadesBajo Acoplamiento Ley de Demeter: “Habla sólo con tus amigos” para un método m de una clase C sólo deberían invocarse los métodos: de la clase C, de los parámetros que recibe el método m, de cualquier objeto creado en el método m, de cualquier atributo (variable de instancia) de la clase C