Tema II Delegación y Encapsulamiento + Cliente/Proveedor Proveedor el módulo de software que proporciona los servicios (métodos) de una clase y almacena la información necesitada para procesar la clase. Cliente es un módulo de software que puede crear, invocar y utilizar información de un módulo proveedor. Se puede organizar la relación cliente proveedor de la siguiente forma: * Encapsulamiento - ocultar COMO se hace * Delegación - reusar algo que existe (no herencia) * Diseño por contrato - Establecer la validez de los parámetros de invocación del proveedor * Modelo Vista Controlador - Organizar el manejo de información para separar correctamente el procesamiento, despliegue y manipulación de información + Encapsulamiento. Consiste en ocultar COMO esta una clase codificada. La primera regla de encapsulamiento es ocultar TODAS las propiedades La segunda es que sólo se deben exponer los métodos que son utilizados por alguien externo Las reglas para encapsular son las siguientes: * Toda propiedad de un objeto se debe declarar como privada (private) * Aquellas propiedades que se necesiten poner desde otro modulo (el cliente) deben tener dos métodos: Si la propiedad es de un tipo de dato Tipo Tipo prop; Tipo getPropiedad() { return prop; } void setPropiedad(Tipo valor) { prop=valor; } SIEMPRE se deben llamar asi los métodos, para seguir los estándares de programación de Java Es válido poner más codigo (validaciones) a los métodos get y set * Los métodos que sean auxiliares o internos a una clase se DEBEN declarar private, para evitar su uso por otros módulos clientes * Los métodos que proporcionan los servicios de un objeto se deben declarar sin prefijo o con la palabra public. + Clases Amigas. Cuando un método no tiene el modificador public o private, la regla para que un método se preste a otra clase es que pertenezcan al mismo paquete de clases. Tipicamente, cuando se programa en un directorio común todas las clases pertenecen al mismo paquete y se dicen AMIGAS. + Métodos públicos. Cuando un método se declara público (con la palabra reservada public), se indica al compilador que dicho métodos es disponible desde cualquier módulo o clase, sin importar el paquete.