Programación Orientada a Objetos Prof. Angela Di Serio Universidad Simón Bolívar Especialización en Telemática Agenda Clase 2 Qué es Orientado a Objetos? Conceptos: objeto, clase, instancias, mensajes Propiedades de OO UML Diagrama de Clases Programación convencional procedimientos y datos Estructuras de datos como variables o parámetros que se tratan separadamente de los procedimientos En programación convencional los programas se dividen en dos componentes: procedimientos y datos. Este método permite empaquetar código de programa en procedimientos, pero ¿Qué sucede con los datos? Las estructuras de datos utilizadas en programación son globales o se pasan como parámetros. En esencia los datos se tratan separadamente de los procedimientos. Programación Orientada a Objetos Idea: Mundo lleno de objetos Resolución de problema en términos de objetos Los objetos no son entes aislados Forman parte de una organización jerárquica se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolución del problema se realiza en términos de objetos, un lenguaje se dice que está basado en objetos si soporta objetos como una característica fundamental del mismo. un objeto no es un dato simple, sino que contiene en su interior cierto número de componentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de una organización jerárquica o de otro tipo. Elemento básico objeto contiene datos que describen su estado y las operaciones que operan sobre esos datos Los datos y funciones se encapsulan en una única entidad En POO un programa se divide en componentes. Cada componente se considera un objeto. Un objeto es una unidad que contiene datos y las funciones que operan sobre esos datos. A los elementos de un objeto se les conoce como miembros; las funciones que operan sobre los datos se denominan métodos El elemento básico de este paradigma no es la función (elemento básico de la programación estructurada), sino un ente denominado Objeto. Un objeto es una unidad que contiene datos y las funciones que operan sobre esos datos. Los datos se denominan miembros dato y las funciones métodos o funciones miembro. Los datos y las funciones se encapsulan en una única entidad. Los datos están ocultos y sólo mediante las funciones miembro es posible acceder a ellos. Estructura de un objeto Relaciones Propiedades Métodos ESTRUCTURA DE UN OBJETO Un objeto puede considerarse como una especie de cápsula dividida en tres partes: 1 - RELACIONES 2 - PROPIEDADES 3 - METODOS Cada uno de estos componentes desempeña un papel totalmente independiente: Las relaciones permiten que el objeto se insterte en la organización y están formadas esencialmente por punteros a otros objetos. Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organización y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organización. Los métodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de ejecutar y que también pone a disposición de sus descendientes a través de la herencia. Estructura de un objeto Relaciones permiten que el objeto se inserte en la organización formado esencialmente por apuntadores a otros objetos Las relaciones permiten que el objeto se insterte en la organización y están formadas esencialmente por punteros a otros objetos. Estructura de un objeto Relaciones Propiedades Métodos ESTRUCTURA DE UN OBJETO Un objeto puede considerarse como una especie de cápsula dividida en tres partes: 1 - RELACIONES 2 - PROPIEDADES 3 - METODOS Cada uno de estos componentes desempeña un papel totalmente independiente: Las relaciones permiten que el objeto se insterte en la organización y están formadas esencialmente por punteros a otros objetos. Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organización y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organización. Los métodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de ejecutar y que también pone a disposición de sus descendientes a través de la herencia. Encapsulamiento y ocultación Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en la OOP. Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores conozcan cómo está distribuída la información o qué información hay disponible. Esta propiedad de los objetos se denomina ocultación de la información. Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que las peticiones de información a un objeto. deben realizarse a través de mensajes dirigidos a él, con la orden de realizar la operación pertinente. La respuesta a estas ordenes será la información requerida, siempre que el objeto considere que quien envía el mensaje está autorizado para obtenerla. El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organización, o incluso a otra organización totalmente diferente que precise de él. Si el objeto ha sido bien construído, sus métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la OOP sea muy apta para la reutilización de programas. La programación orientada a objetos trata de amoldarse al modo de pensar del hombre y no al de la máquina. Esto es posible gracias a la forma racional con la que se manejan las abstracciones que representan las entidades del dominio del problema, y a propiedades como la jerarquía o el encapsulamiento. Estructura de un objeto Propiedades distingue un objeto del resto propiedades pueden ser heredadas a sus descendientes Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organización y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organización. Estructura de un objeto Relaciones Propiedades Métodos ESTRUCTURA DE UN OBJETO Un objeto puede considerarse como una especie de cápsula dividida en tres partes: 1 - RELACIONES 2 - PROPIEDADES 3 - METODOS Cada uno de estos componentes desempeña un papel totalmente independiente: Las relaciones permiten que el objeto se insterte en la organización y están formadas esencialmente por punteros a otros objetos. Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organización y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organización. Los métodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de ejecutar y que también pone a disposición de sus descendientes a través de la herencia. Encapsulamiento y ocultación Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en la OOP. Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores conozcan cómo está distribuída la información o qué información hay disponible. Esta propiedad de los objetos se denomina ocultación de la información. Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que las peticiones de información a un objeto. deben realizarse a través de mensajes dirigidos a él, con la orden de realizar la operación pertinente. La respuesta a estas ordenes será la información requerida, siempre que el objeto considere que quien envía el mensaje está autorizado para obtenerla. El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organización, o incluso a otra organización totalmente diferente que precise de él. Si el objeto ha sido bien construído, sus métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la OOP sea muy apta para la reutilización de programas. La programación orientada a objetos trata de amoldarse al modo de pensar del hombre y no al de la máquina. Esto es posible gracias a la forma racional con la que se manejan las abstracciones que representan las entidades del dominio del problema, y a propiedades como la jerarquía o el encapsulamiento. Estructura de un objeto Métodos operaciones que pueden realizarse sobre el objeto Los métodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de ejecutar y que también pone a disposición de sus descendientes a través de la herencia. Encapsulamiento y ocultación Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en la OOP. Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores conozcan cómo está distribuída la información o qué información hay disponible. Esta propiedad de los objetos se denomina ocultación de la información. Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que las peticiones de información a un objeto. deben realizarse a través de mensajes dirigidos a él, con la orden de realizar la operación pertinente. La respuesta a estas ordenes será la información requerida, siempre que el objeto considere que quien envía el mensaje está autorizado para obtenerla. El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organización, o incluso a otra organización totalmente diferente que precise de él. Si el objeto ha sido bien construído, sus métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la OOP sea muy apta para la reutilización de programas. La programación orientada a objetos trata de amoldarse al modo de pensar del hombre y no al de la máquina. Esto es posible gracias a la forma racional con la que se manejan las abstracciones que representan las entidades del dominio del problema, y a propiedades como la jerarquía o el encapsulamiento. Clase tipo definido por el usuario que determina las estructuras de datos y las operaciones asociadas con ese tipo un objeto de una clase corresponde a una instancia de esa clase. La comunicación con el objeto se realiza a través del paso de mensajes Una clase es un tipo definido por el usuario que determina las estructuras de datos y las operaciones asociadas con ese tipo. Cada vez que se construye un objeto de una clase, se crea una instancia de esa clase. En general, los términos objetos e instancias de una clase se pueden utilizar indistintamente. Una clase es una colección de objetos similares y un objeto es una instancia de una definición de una clase. La comunicación con el objeto se realiza a través del paso de mensajes. El envío a una instancia de una clase produce la ejecución de un método o función miembro. El paso de mensajes es el término utilizado para referirnos a la invocación o llamada de una función iembro de un objeto. Encapsulamiento y ocultación Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en la OOP. Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores conozcan cómo está distribuída la información o qué información hay disponible. Esta propiedad de los objetos se denomina ocultación de la información. Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que las peticiones de información a un objeto. deben realizarse a través de mensajes dirigidos a él, con la orden de realizar la operación pertinente. La respuesta a estas ordenes será la información requerida, siempre que el objeto considere que quien envía el mensaje está autorizado para obtenerla. El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organización, o incluso a otra organización totalmente diferente que precise de él. Si el objeto ha sido bien construído, sus métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la OOP sea muy apta para la reutilización de programas. La programación orientada a objetos trata de amoldarse al modo de pensar del hombre y no al de la máquina. Esto es posible gracias a la forma racional con la que se manejan las abstracciones que representan las entidades del dominio del problema, y a propiedades como la jerarquía o el encapsulamiento. Componentes de un mensaje identidad del objeto receptor función miembro cuya ejecución se está solicitando información adicional que necesite el método clase Perro ? Vainilla Perro es una generalización de Vainilla Vainilla Objeto o instancia Características de la Programación Orientada a Objetos Ab s tra cc ió Cohesión He lim Po n ia nc re Programación orientada a objetos mo fr is o Acoplamiento En ca ps u la mi en to Es la capacidad de concentrar las propiedades y comportamientos necesarios para la correcta representación del objeto dentro del sistema Ab s tra cc Cohesión He lim Po ió n ia nc re Programación orientada a objetos mo fr is o Acoplamiento En ca ps u la mi en to La abstracción Es la capacidad de concentrar las propiedades y comportamientos necesarios para la correcta representación del objeto dentro del sistema, otra definición es que consiste en el aislamiento conceptual de una propiedad de un objeto. En otras palabras, cuando modelamos pensando en objetos, necesitamos tomar las características y propiedades de un ente real, y llevarlo a un objeto, por ejemplo en una escuela existen alumnos, estos tienen diferentes propiedades (miles), pero existen algunas que caracterizan a todos los estudiante, estas son las que debemos tomar, por ejemplo, un estudiante tiene una matricula, tiene materias, tiene un grado, un curso, una calificación, y muchas cosas mas, dependiendo del sistema que este en cuestión, serán las propiedades que se tomaran en cuenta, a esto se le llama abstracción. programación, el término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (característica de caja negra) Ejemplo Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o aparcar. Pues en un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar. Es la capacidad de concentrar las propiedades y comportamientos necesarios para la correcta representación del objeto dentro del sistema Ab s tra cc ió lim Po n Cohesión Programación orientada a objetos mo fr is o Acoplamiento Las propiedades son privadas, accesadas mediante métodos cia en r He o protegidos, permitiendo En públicos en la información ca así consistencia ps el aumento de la cohesión. ul am ien to Encapsulamiento Las propiedades son privadas, accesadas mediante métodos públicos o protegidos, permitiendo así consistencia en la información y el aumento de la cohesión. Mediante el encapsulamiento la información esta oculta a los demás objetos, permitiendo el acceso mediante métodos públicos o protegidos, aquí se habla del alcance de una propiedad o método, que puede ser private, protected o public. Al implementar este concepto, cuando se ha desarrollado un objeto, al utilizarlo no nos interesa como funciona internamente, simplemente lo que nos regresa o lo que hace. Es la capacidad de concentrar las propiedades y comportamientos necesarios para la correcta representación del objeto dentro del sistema Ab s tra cc ió Cohesión Crear nuevos objetos a partir de los existentes de forma que heredan las propiedades y comportamientos de sus ancestros. Existen dos clases de herencia: simple y múltiple. He lim Po n cia n re Programación orientada a objetos mo fr is o Acoplamiento Las propiedades son privadas, accesadas mediante métodos públicos o protegidos, permitiendo así consistencia en la información y el aumento de la cohesión. En ca ps u la mi en to Herencia Crear nuevos objetos a partir de los existentes de forma que heredan las propiedades y comportamientos de sus ancestros. Existen dos clases de herencia: simple y múltiple. La herencia es muy utilizada dentro de la POO, y es que mediante esta se puede especializar el comportamiento de las clases hijas, permitiendo así un buen diseño del sistema. La herencia es la propiedad que permite a los objetos construirse a partir de otros objetos. Una clase se puede dividir en subclases. En C++ la clase original se denomina clase base; las clases que se definen a partir de la clase base, compartiendo sus características y añadiendo otras nuevas, se denominan clases derivadas. Las clases derivadas pueden heredar código y datos de su clase base añadiendo su propio código y datos a la misma. La herencia impone una relación jerárquica entre clases en la cual una clase hija hereda de su clase padre. Si una clase sólo puede recibir características de otra clase base, la herencia se denomina herencia simple. Si una clase recibe propiedades de más de una clase base, la herencia se denomina herencia múltiple. Es la capacidad de concentrar las propiedades y comportamientos necesarios para la correcta representación del objeto dentro del sistema Ab s tra cc ió n Cohesión Crear nuevos objetos a partir de los existentes de forma que heredan las propiedades y comportamientos de sus ancestros. Existen dos clases de herencia: simple y múltiple. He ia nc re Es la capacidad de tener métodos con el mismo nombre, con comportamientos diferentes, conocido como la sobre-escritura de métodos y la sobrecarga de operadores La firma de método Programación orientada a objetos Po o m s i f or m li Acoplamiento Las propiedades son privadas, accesadas mediante métodos públicos o protegidos, permitiendo así consistencia en la información y el aumento de la cohesión. En ca ps u la mi en to Polimorfismo Es la capacidad de tener métodos con el mismo nombre, con comportamientos diferentes, conocido como la sobre-escritura de métodos y la sobrecarga de operadores. El polimorfismo nos permite declarar métodos con el mismo nombre, y comportamientos diferentes, haciendo diferencia entre estos por medio de la firma del método, la firma del método se le conoce a los parámetros que recibe un método, esto es que el numero de parámetros debe de ser diferente, en caso de ser el mismo estos deben ser diferentes en su tipo de dato. Otra manera de aplicar el polimorfismo es cuando una clase hija sobre escribe un método de la clase padre, cambiando o modificando su comportamiento. En un sentido literal, significa la cualidad de tener más de una forma. En el contexto de POO, el polimorfismo se refiere al hecho de que una misma operación puede tener diferente comportamiento en diferentes objetos. Por ejemplo, consideremos la operación sumar. El operador + realiza la suma de dos números de diferente tipo. Además se puede definir la operación de sumar dos cadenas mediante el operador suma. Es la capacidad de concentrar las propiedades y comportamientos necesarios para la correcta representación del objeto dentro del sistema Ab s tra cc ió n Es una medida de la especialización con la que cuenta un objeto dentro de un sistema, entre mas alta sea esta, es mejor. Cohesión Crear nuevos objetos a partir de los existentes de forma que heredan las propiedades y comportamientos de sus ancestros. Existen dos clases de herencia: simple y múltiple. He ia nc re Es la capacidad de tener métodos con el mismo nombre, con comportamientos diferentes, conocido como la sobre-escritura de métodos y la sobrecarga de operadores La firma de método Programación orientada a objetos lim Po mo fr is o Acoplamiento Las propiedades son privadas, accesadas mediante métodos públicos o protegidos, permitiendo así consistencia en la información y el aumento de la cohesión. En ca ps u la mi en to Cohesión Es una medida de la especialización con la que cuenta un objeto dentro de un sistema, entre mas alta sea esta, es mejor. Este concepto viene del paradigma clásico, y este fue un concepto que permitió el salto a este nuevo paradigma. Es la capacidad de concentrar las propiedades y comportamientos necesarios para la correcta representación del objeto dentro del sistema Ab s tra cc ió Es la capacidad de tener métodos con el mismo nombre, con comportamientos diferentes, conocido como la sobre-escritura de métodos y la sobrecarga de operadores n Es una medida de la especialización con la que cuenta un objeto dentro de un sistema, entre mas alta sea esta, es mejor. Cohesión La firma de método Es la medida con la que un objeto depende de otro para funcionar, entre Menor sea esta, es mejor. Programación orientada a objetos Crear nuevos objetos a partir de los existentes de forma que heredan las propiedades y comportamientos de sus ancestros. Existen dos clases de herencia: simple y múltiple. He lim Po mo fr is o ia nc re La información fluye a través de mensajes Acoplamiento Las propiedades son privadas, accesadas mediante métodos públicos o protegidos, permitiendo así consistencia en la información y el aumento de la cohesión. En ca ps u la mi en to Acoplamiento Es la medida con la que un objeto depende de otro para funcionar, entre menor sea esta, es mejor. La información fluye a través de mensajes. Es la capacidad de concentrar las propiedades y comportamientos necesarios para la correcta representación del objeto dentro del sistema Ab s tra cc ió n Es una medida de la especialización con la que cuenta un objeto dentro de un sistema, entre mas alta sea esta, es mejor. Cohesión Crear nuevos objetos a partir de los existentes de forma que heredan las propiedades y comportamientos de sus ancestros. Existen dos clases de herencia: simple y múltiple. He ia nc re Es la capacidad de tener métodos con el mismo nombre, con comportamientos diferentes, conocido como la sobre-escritura de métodos y la sobrecarga de operadores La firma de método lim Po mo fr is o Es la medida con la que un objeto depende de otro para funcionar, entre Menor sea esta, es mejor. Programación orientada a objetos La información fluye a través de mensajes Acoplamiento Las propiedades son privadas, accesadas mediante métodos públicos o protegidos, permitiendo así consistencia en la información y el aumento de la cohesión. En ca ps u la mi en to Unified Modeling Language UML (Unified Modeling Language) es un lenguaje que permite modelar, construir y documentar los elementos que forman un sistema software orientado a objetos. Se ha convertido en el estándar de facto de la industria, debido a que ha sido impulsado por los autores de los tres métodos más usados de orientación a objetos: Grady Booch, Ivar Jacobson y Jim Rumbaugh. Estos autores fueron contratados por la empresa Rational Software Co. para crear una notación unificada en la que basar la construcción de sus herramientas CASE. En el proceso de creación de UML han participado, no obstante, otras empresas de gran peso en la industria como Microsoft, Hewlett-Packard, Oracle o IBM, así como grupos de analistas y desarrolladores. Esta notación ha sido ampliamente aceptada debido al prestigio de sus creadores y debido a que incorpora las principales ventajas de cada uno de los métodos particulares en los que se basa (principalmente Booch, OMT y OOSE). UML ha puesto fin a las llamadas “guerras de métodos” que se han mantenido a lo largo de los 90, en las que los principales métodos sacaban nuevas versiones que incorporaban las técnicas de los demás. Con UML se fusiona la notación de estas técnicas para formar una herramienta compartida entre todos los ingenieros software que trabajan en el desarrollo orientado a objetos. Uno de los objetivos principales de la creación de UML era posibilitar el intercambio de modelos entre las distintas herramientas CASE orientadas a objetos del mercado. Para ello era necesario definir una notación y semántica común. El estándar UML no define un proceso de desarrollo específico, tan solo se trata de una notación. Visualizar Especificar estructura Proporcionar plantillas Documentar decisiones Un modelo representa a un sistema software desde una perspectiva específica. Al igual que la planta y el alzado de una figura en dibujo técnico nos muestran la misma figura vista desde distintos ángulos, cada modelo nos permite fijarnos en un aspecto distinto del sistema. Lenguaje de Modelado Unificado basado en notación gráfica permite especificar, construir, visualizar y documentar los objetos de un sistema ● Vista Estática ● Vista de Casos de Uso ● Vista de Interacción ● Diagrama de Secuencia ● Diagrama de Colaboración ● Vista de la Máquina de Estados ● Vista de Actividades ● Vista Física ● Vista de la Gestión del Modelo ● Constructores de Extensibilidad Componentes UML Vista Diagramas Conceptos Principales Vista Estática Diagrama de Clases Clase, Asociación, Generalización Dependencia, Realización, Interfase Vista de Casos de Uso Diagrama de Casos de Uso Caso de uso, Actor, Asociación, Extensión, Inclusión, Generalización de caso de uso Vista de Implementación Diagrama de Componentes Componente, Interfaz, Dependencia, Realización Vista del despliegue (deployment) Diagrama de Despliegue Nodo, Componente, Dependencia, Locación Diagrama de Clases Modela los conceptos del dominio de la aplicación Permite visualizar las relaciones entre las clases que involucran el sistema Diagrama de clases Clases: atributos, operaciones y visibilidad Relaciones: herencia, composición agregación, asociación y uso Responsabilidades Diagrama de clases Elemento Clases Encapsula toda la información de un objeto Diagrama de clases Elementos Atributo Describen la clase Públicos (+), privados (-) o protegidos (#) public (+, ): Indica que el atributo será visible tanto dentro como fuera de la clase, es decir, es accesible desde todos lados. private (-, ): Indica que el atributo sólo será accesible desde dentro de la clase (sólo sus métodos lo pueden acceder). protected (#, ): Indica que el atributo no será accesible desde fuera de la clase, pero si podrá ser accesado por métodos de la clase además de las subclases que se deriven (herencia) Diagrama de clases Elementos Método Describen la forma en la cual interactúa la clase con su entorno Públicos (+), privados (-) o protegidos (#) Las operaciones o métodos de una clase describen la forma en la cual ésta interactúa con su entorno. Pueden ser Públicas, Privadas o Protegidas public (+, ): Indica que el atributo será visible tanto dentro como fuera de la clase, es decir, es accesible desde todos lados. private (-, ): Indica que el método sólo será accesible desde dentro de la clase (sólo otros métodos de la misma clase lo pueden acceder). protected (#, ): Indica que el atributo no será accesible desde fuera de la clase, pero si podrá ser accesado por métodos de la clase además de las subclases que se deriven (herencia) Diagrama de clases Elementos Relaciones entre clases Dependencia Generalización Asociación Las clases interrelacionadas modelan un sistema en su dimensión estática. Existen tres tipos de relaciones básicas: Dependencia Generalización Asociación Elementos Relaciones entre clases Dependencia La clase Cart usa la clase Product como argumento en la operación de agregar al Cart Un cambio en Product puede requerir un cambio en Cart II.2.2 Dependencias La relación de dependencia es una conección semántica entre dos elementos del modelo, uno independiente y otro dependiente Un cambio en el elemento independiente afectará al elemento dependiente. Un elemento del modelo puede ser una clase, un paquete, un caso de uso, etc. Un ejemplo de dependencia puede ser: una clase que toma otra clase como parámetro, o una clase que accede a un objeto global de otra clase. La relación de dependencia se muestra con una línea pespunteada con una flecha en uno de sus extremos Por ejemplo, en una aplicación de comercio electrónico, la clase Cart (Carrito) depende de la clase Product porque la clase Cart usa Product como un parámetro en la operación de agregar. En un diagrama de clases, la relación de dependencia va de la clase Cart a la clase Product. La clase Cart es dependiente de Product Elementos Relaciones entre clases Generalización La clase Child (subclase) está basada en la clase Padre (superclase) Es una relación en donde un elemento del modelo (hijo) está basado en otro elemento del modelo (padre). Los elementos del modelo deben ser del mismo tipo (clase, componente, etc). Se usan para indicar que el hijo recibe todos los atributos del padre, operaciones y relaciones que están definidas en el padre Se puede agregar generalización para capturar los atributos del elemento del modelo padre y reusarlos en uno o mas elementos del modelo hijo. Dado que el hijo hereda los atributos, operaciones, y relaciones del padre, sólo se deben definir los atributos, operaciones y relaciones que son distintos del padre. El elemento padre puede tener uno o más hijos, y cada hijo puede tener uno o más padres. Estas relaciones no tienen nombre. La relación se indica gráficamente mediante una línea continua que termina con una punta de flecha (del hijo al padre) Elementos Relaciones entre clases Generalización La superclase contiene un atributo Price, y operaciones como setPrice. Las subclases usan los atributos y las operaciones de la superclase y agregan otros atributos y operaciones The following figure illustrates an e-commerce application for a Web site that sells a variety of merchandise. The application has an InventoryItem class that is a parent class (also called a superclass). This class contains the attributes, such as Price, and operations, such as setPrice, that all pieces of merchandise use. After defining the parent class, a child class (also called a subclass) is created for each type of merchandise, such as books and DVDs. The book class uses the attributes and operations in the inventory class and then adds attributes such as author and operations such as setAuthor. A DVD class also uses the attributes and operations in the inventory class, but it adds attributes such as manufacturer and operations such as setManufacturer, which are different from those in the book class. Elementos Relaciones entre clases Generalización - Polimorfismo Da lugar al polimorfismo entre clases en una jerarquía Un objeto de la subclase puede sustituir a un objeto de la superclase Una operación de la subclase con igual firma sustituye a la operación en la superclase Elementos Relaciones entre clases Asociación Relación estructural entre clases Tiene nombre que la describe (verbo) Tiene multiplicidad que especifica el número de objetos de la clase opuesta que se relacionan con un solo objeto de dicha clase In UML models, an association is a relationship between two classifiers, such as classes or use cases, that describes the reasons for the relationship and the rules that govern the relationship. An association represents a structural relationship that connects two classifiers. Like attributes, associations record the properties of classifiers. For example, in relationships between classes, you can use associations to show the design decisions that you made about classes in your application that contain data, and to show which of those classes need to share data. You can use an association's navigability feature, to show how an object of one class gains access to an object of another class or, in a reflexive association, to an object of the same class. The name of an association describes the nature of the relationship between two classifiers and should be a verb or phrase. In the diagram editor, an association appears as a solid line between two classifiers. Association ends An association end specifies the role that the object at one end of a relationship performs. Each end of a relationship has properties that specify the role of the association end, its multiplicity, visibility, navigability, and constraints. Example In an e-commerce application, a customer class has a single association with an account class. The association shows that a customer instance owns one or more instances of the account class. If you have an account, you can locate the customer that owns the account. Given a particular customer, you can navigate to each of the customer’s accounts. The association between the customer class and the account class is important because it shows the structure between the two classifiers. Elementos Relaciones entre clases Asociación Cada individuo está asociado con el banco a través de varias cuentas. El número de cuenta califica la asociación y permite indexar muchas asociaciones En una aplicación bancaria, una clase Bank representa una institución bancaria y tiene una asociación con una clase Person que representa a un individuo. Cada individuo está asociado con el banco a través de varias cuentas bancarias. El número de cuenta califica la asociación y permite indexar muchas asociaciones entre las clases Person y Bank Elementos Relaciones entre clases Asociación Elementos Relaciones entre clases Composición Relación estática en donde el tiempo de vida del objeto incluido está condicionado por el del que lo incluye El objeto base se construye a partir del objeto incluido, es parte/todo como un parámetro pasado por valor Circle Point A composition association relationship represents a whole–part relationship and is a form of aggregation. A composition association relationship specifies that the lifetime of the part classifier is dependent on the lifetime of the whole classifier. In a composition association relationship, data usually flows in only one direction (that is, from the whole classifier to the part classifier). For example, a composition association relationship connects a Student class with a Schedule class, which means that if you remove the student, the schedule is also removed. You can name any association to describe the nature of the relationship between the two classifiers; however, names are unnecessary if you use association end names. As the following figure illustrates, a composition association relationship appears as a solid line with a filled diamond at the association end, which is connected to the whole, or composite, classifier. Elementos Relaciones entre clases Agregación Relación dinámica, donde el tiempo de vida del objeto incluido es independiente del que lo incluye. El objeto base utiliza al incluido para su funcionamiento La clase agregada es en cierta forma el “todo”, y la otra es “parte” del todo The weak form of aggregation is denoted with an open diamond. This relationship denotes that the aggregate class (the class with the white diamond touching it) is in some way the “whole”, and the other class in the relationship is somehow “part” of that whole. In this case, the Empresa class contains many Departamento instances. In UML the ends of a relationship are referred to as its “roles”. Notice that the role at the Depto end of the aggregation is marked with a “ * ”. This indicates that the Empresa contains many Depto instances. Diagrama de clases Elementos Responsabilidades La distribución de responsabilidades en un sistema, se realiza identificando un conjunto de clases que colaboran entre sí para llevar a cabo algún comportamiento. Luego hay que identificar el conjunto de responsabilidades para cada clase Diagrama de Clases