Capitulo 3 Anlisis y diseo Orientado a Objetos con aplicaciones-
Clases y Objetos
Cuando se usan mtodos orientados a objetos para analizar o disear un sistema de software complejo, los bloques bsicos de construccin son las clases y los objetos.
3.1 La naturaleza de los objetos Qu es y que no es un objeto? Desde la perspectiva de la cognicin humana, un objeto es cualquiera de las siguientes cosas: Una cosa tangible y/o visible Algo que puede comprenderse intelectualmente Algo hacia lo que se dirige un pensamiento o accin. Un objeto modela alguna parte de la realidad y es, por tanto, algo que existe en el tiempo y el espacio. Los objetos del mundo real no son el nico tipo de objeto de inters en el desarrollo de software. Otros tipos de objetos son invenciones del proceso de diseo cuyas colaboraciones con otros objetos semejantes sirven como mecanismos para desempear algn comportamiento de nivel superior. Definicin de objeto de Smith y Tockey Un objeto representa un elemento, unidad o entidad individual e identificable, ya sea real o abstracta, con un papel bien definido en el dominio del problema Definicin de Grady Un objeto tiene estado, comportamiento e identidad; la estructura y comportamiento de objetos similares esta definida en su clase comn; los trminos instancia y objeto son intercambiables Las tres propiedades de los objetos: Identidad Comportamiento Estado
Estado: El estado de un objeto abarca todas las propiedades (normalmente estticas) del mismo ms los valores actuales (normalmente dinmicos) de cada una de esas propiedades. El numero de serie de una maquina expendedora es una propiedad esttica y el valor es esttico, en contraste, la cantidad de monedas es una propiedad esttica y el valor es dinmico. Una propiedad es una caracterstica inherente o distintiva, un rasgo o cualidad que contribuye a hacer que un objeto sea ese objeto y no otro. Las propiedades suelen ser estticas, por que atributos como estos son inmutables y fundamentales para la naturaleza del objeto. Todas las propiedades tienen algn valor. Este valor puede ser una mera cantidad o puede denotar a otro objeto. Los objetos existen en el tiempo, son modificables, tienen estado, son instanciados, y pueden crearse, destruirse y compartirse. Es una buena prctica de ingeniera encapsular el estado de un objeto en ves de exponerlo.
Ej: 2 +getNombreEmpleado() +getNumeroSeguridadSocial() +getDepartamentoEmpleado() -nombre -numeroSeguridadSocial -departamento -salario Personal Class Personal { public: char *getNombreEmpleado() const; int getNumeroSeguridadSocial() const; char *getDepartamentoEmpleado() const; protected: char nombre[100]; int numeroSeguridadSocial; char departamento[10] flota salario; };
Comportamiento: El comportamiento es como acta y reacciona un objeto, en trminos de sus cambios de estado y paso de mensajes. El comportamiento de un objeto representa su actividad visible y comprobable exteriormente. Una operacin es una accin que un objeto efecta sobre otro con el fin de provocar una reaccin. Un mensaje es una operacin que un objeto realiza sobre otro. El estado de un objeto afecta a su comportamiento. El comportamiento de un objeto es funcin de su estado as como de la operacin que se realiza sobre l, teniendo algunas operaciones el efecto lateral de modificar el estado del objeto. El estado de un objeto representa los resultados acumulados de su comportamiento.
Operaciones: Una operacin denota un servicio que una clase ofrece a sus clientes. Un cliente realiza tpicamente 5 operaciones sobre un objeto Modificador una operacin que altera el estado de un objeto (set) Selector una operacin que accede al estado de un objeto (get) Iterador permite acceder a todas las partes de un objeto en algn orden establecido. Constructor crea un objeto y puede inicializar su estado Destructor libera el estado de un objeto y destruye el propio objeto. C++ permite al desarrollador escribir funciones no miembro las cuales no son miembro de ninguna clase-, a veces llamados subprogramas libres.
Papeles (roles) y responsabilidades: un papel es una mascara que se pone un objeto. Las responsabilidades de un objeto son todos los servicios que proporciona para todos los contratos que soporta. El estado y comportamiento de un objeto definen los papeles que puede representar un objeto en el mundo.
Identidad: La identidad es aquella propiedad de un objeto que lo distingue de todos los dems objetos.
Espacio de vida de un objeto: El tiempo de vida de un objeto se extiende desde el momento en que se crea por primera vez (y consume espacio por primera vez) Hasta que ese espacio se recupera. En el momento de la construccin de un objeto se invoca un constructor del mismo el cual es un mtodo especial de una clase en donde se inicializan variables u objetos agregados que posea. Un objeto puede poseer ms de un constructor, lo nico que debe respetarse es que la firma 3 de cada uno de ellos sea distinta. La firma de un mtodo esta compuesta por el nombre de este, el tipo y la cantidad de parmetros. Los objetos creados en el heap mediante el operador new deben ser destruidos explcitamente con el operador delete. SI NO SE HACE BIEN SE PRODUCIRN PERDIDAS DE MEMORIA. Los destructores son mtodos especiales en las clases utilizados para devolver el espacio utilizado asignado al objeto y sus partes, y llevar a cabo cualquier otra limpieza posterior a la existencia del objeto (como cerrar un archivo o liberar recursos).
3.1 Relaciones entre objetos Tipos de relaciones Hay dos tipos de jerarquas de objetos de inters especial en anlisis y diseo orientado a objetos: Enlaces (antigedad) Agregacin (padre/hijo) Enlaces Semntica: Un enlace denota la asociacin especifica por la cual un objeto (cliente) utiliza los servicios de otro (el servidor o suministrador), o a travs del cual un objeto puede comunicarse con otro. Solo a travs de enlaces un objeto puede enviar mensajes a otro. Como participante de un enlace un objeto puede cumplir uno de estos tres papeles: 1. Actor: un objeto que puede operar sobre otros objetos pero nunca se opera sobre l de parte de otros objetos; en algunos contextos, los trminos objeto activo y actor son equivalentes. 2. Servidor: un objeto que nunca opera sobre otros objetos; solo otros objetos operan sobre l. 3. Agente: un objeto que puede operar sobre otros objetos y adems otros objetos pueden operar sobre l. Visibilidad Considrese dos objetos, A y B, con un enlace entre ambos. Con el fin de que A enve un mensaje a B, B debe ser para A de algn modo. Formas en que un objeto puede tener visibilidad para otro: El objeto servidor es global para el cliente El objeto servidor es un parmetro de alguna operacin de un cliente El objeto servidor es parte del objeto cliente. El objeto servidor es un objeto declarado localmente en alguna operacin del cliente. Agregacin Mientras que los enlaces denotan relaciones de igual a igual o cliente/servidor, la agregacin denota una jerarqua de todo parte, con la capacidad de ir desde el todo tambin llamado agregado hasta sus partes (tambin conocidas como atributos). La agregacin encapsula partes y secretos del todo. Los enlaces permiten acoplamientos mas dbiles entre los objetos.
3.3 La naturaleza de una clase. Qu es y que no es una clase Mientras que un objeto es una entidad concreta que existe en el tiempo y en el espacio, una clase representa slo una abstraccin, la esencia de un objeto. 4 Una clase es una representacin de un conjunto de objetos que comparten una estructura y comportamiento comn. Un objeto no es ms que una instancia de una clase
Interfaz e implementacin. Una clase funciona como una especie de contrato que vincula a una abstraccin y a todos sus clientes. La interfaz representa la visin externa de una clase, mientras que la implementacin es representada en la visin interna. Se puede dividir el interfaz de una clase en tres partes: Public Protected Private
Relaciones entre clases Tipos bsicos de relaciones: Es un (generalizacin/especializacin) Parte de (agregacin, composicin) Asociacin Tipos de relaciones: Asociacin Herencia Agregacin Uso Instanciacin Metaclase Cardinalidad Indica la cantidad de instancias de una clase que se pueden asociar con otra. Uno a uno Uno a muchos Muchos a mucho Herencia Herencia Simple Es una relacin entre clases en la que una clase comparte la estructura y/o el comportamiento definidos en una (herencia simple) o ms clases (herencia mltiple). La clase de las que otras heredan se denomina superclase. La herencia define una jerarqua de tipos entre clases. Una subclase que aumenta el comportamiento de su superclase se dice que utiliza herencia por extensin. Una subclase que restringe el comportamiento de sus superclases se dice que usa herencia por restriccin. Las clases que no es posible instanciarlas (crear objetos de esta) se denominan clases abstractas. La clase mas generalizada de una estructura de clases se denomina clase base. Una clase cualquiera tiene dos tipos de clientes: Instancias Subclases 5 A los clientes instancia solo se expone los comportamientos visibles exteriormente, pero a los clientes subclase se exponen las funciones de asistencia y las representaciones.
Polimorfismo simple Dependiendo del tipo de objeto que ejecute un determinado mtodo este se comportara de una manera u otra. Es necesario que las clases estn relacionadas por una superclase comn para que el polimorfismo pueda darse. El polimorfismo y la ligadura tarda van de la mano, al utilizar polimorfismo muchas veces vamos a realizar mtodos generales que puedan manipular clases de un mismo tipo (con una superclase en comn) y si es de esta manera, es una buena prctica la utilizacin de tipos generales para as poder aplicar el mtodo a distintos tipos especficos.
Herencia mltiple Este tipo de herencia la soportan directamente lenguajes como C++ CLOS. Mediante este tipo de herencia una clase hija debe heredar o derivarse de mas de una clase padre.
Una clase parametrizada (conocida tambin como clase genrica) sirve como modelo para otras clases. Una clase de este tipo debe ser instanciada (ya que sus parmetros deben ser rellenados) antes de que puedan crearse los objetos.
Metaclase Es la clase de una clase.
3.5 La interaccin entre clases y objetos Relaciones entre clases y objetos Todo objeto es una instancia de una clase es decir una foto de una clase con un determinado estado, en un determinado espacio de memoria y con un caracterstico comportamiento definido en la clase. La clase normalmente es esttica mientras que los objetos son dinmicos
El papel de clases y objetos en anlisis y diseo Durante el anlisis y las primeras etapas del diseo, el desarrollador tiene dos tareas principales: Identificar las clases y objetos que forman el vocabulario del dominio del problema Idear las estructuras por las que conjuntos de objetos trabajan juntos para lograr los comportamientos que satisfacen los requerimientos del problema. En conjunto, se llama a esas clases las abstracciones claves del problema, y se denomina a esas estructuras cooperativas los mecanismos de la implantacin.
5.6 De la construccin de clases y objetos de calidad Metricas para saber si una clase u objeto esta bien diseado: 6 Acoplamiento (debe ser bajo para lograr una mayor independencia y por lo tanto una ms sencilla reutilizacin) Cohesin (debe ser alta las llamadas internas suelen ser superiores a las externas) Suficiencia (quiere decirse que la clase captura suficientes caractersticas de la abstraccin como para permitir una interaccin significativa y eficiente) Complecin (Estado completo/plenitud) Ser primitivo.
Siempre que un objeto pasa un mensaje a otro deben estar sincronizados de alguna manera. El paso de mensajes debe as adopta una de las formas siguientes: Sincrono: una operacin comienza solo cuando el emisor ha iniciado la accin y el receptor esta preparado para aceptar el mensaje. El emisor y el receptor esperar indefinidamente hasta que ambas partes estn preparadas para continuar. Abandono inmediato: igual que el sincrono excepto que el emisor abandonar la operacin si el receptor no esta preparado inmediatamente. De intervalo: igual que el sincrono excepto que el emisor esperar un tiempo (intervalo) que el receptor este listo. Asncrono: un emisor puede iniciar una accin independientemente de si el receptor esta esperando o no el mensaje.