Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 13

UML

(Lenguaje Unificado de Modelado)

Capítulo I

Introducción a los conceptos de orientación a objetos

Para comenzar con el tema de UML, lo haremos presentando los conceptos generales
de la orientación a objetos, para luego detenernos en las actividades del desarrollo de software
bajo este paradigma y utilizando la notación UML.

En primer lugar mencionaremos los objetivos de este capítulo y son los siguientes:
 Conocer los conceptos fundamentales de la teoría de orientación a objetos.
 Diferenciar los distintos conceptos utilizados en la programación orientada a objetos
(POO).
 Entender el paradigma de POO y su aplicación en distintos tipos de problemas.
 Analizar como la orientación a objetos contribuye en los diferentes niveles de
reutilización.
 Aplicar los conceptos de orientación a objetos para el diseño y programación de
sistemas.

Hasta hace algunos años se diseñaban sistemas de información usando el paradigma


estructurado (visto en Introducción a la Ingeniería del Software), pero con el paso de los años
y muchos sistemas desarrollados con este paradigma se comenzaron a notar algunas
deficiencias. La forma de pensar en este paradigma es orientado hacia las funciones que
realizará el sistema una vez que se ponga en funcionamiento. Pero como podrán notar que las
cosas cambian en su forma de hacerse, lo mismo pasa con los sistemas. Los cambios son
cada vez más rápidos y nada se mantiene constante en el tiempo, lo único que permanece es
el cambio.
Esto llevó a repensar la forma de desarrollar los sistemas, tratando de encontrar que es
lo que permanece estable por más tiempo. Se llegó a la conclusión que las “cosas”
permanecen más estable y cambia lo que se hace con esas “cosas”. Por lo tanto la orientación
a objetos centra los desarrollos de sus sistemas en las “cosas” y que hace cada una de ellas, y
no en las funciones, que hoy son, mañana cambian y pasado mañana desaparecen.
El paradigma orientado a objeto identifica las cosas y las llama “objetos” (o clases de
objetos), y se diseña los sistemas basándose en estos objetos.
En el paradigma de la orientación a objeto, un sistema se concibe como un conjunto
de objetos que se comunican entre sí mediante mensajes.

Objetos + Mensajes = Programa.

Mediante este modelo se construyen más fácilmente sistemas complejos a partir de


componentes individuales.
Este paradigma nace a principios de los años 80 (1980). Se puede afirmar que la
orientación a objetos cobró importancia de la mano del lenguaje Smalltalk a principios de los
80. Inmediatamente surgieron otros lenguajes orientados a objetos como Objective C, C++,
Eiffel y CLOS. Luego hacia mediados de los 80 surgieron los primeros métodos de
desarrollo orientado a objetos, publicados por Shlaer/Mellor y Coad/Yourdon. A principios
de los 90 aparecen nuevos métodos publicados por Booch (método de Booch), Rumbaugh et
al. (OMT, Object Modelling Technique), y Jacobson (método Objectory). Este último
método presentó un enfoque diferente a los demás, focalizándose en el concepto de Casos de
uso y en el proceso de desarrollo.
La técnica orientada a objetos sigue con frecuencia el mismo método que aplicamos
en la resolución de problemas de la vida diaria.
El análisis y diseño orientado a objetos modela el mundo en términos de objetos que
tienen distintos estados, comportamiento, y eventos que hacen activar sus operaciones, y por
lo tanto modifican el estado de esos objetos. Los objetos interactúan con otros objetos, y lo
hacen mediante mensajes.
Entre los beneficios que no proporciona la orientación a objetos podemos encontrar
los siguientes:
 Reutilización. Permite reusabilidad de código, y la herencia ahorrando de esa
manera tiempo de desarrollo, lo que conlleva al ahorro de dinero.
 Integridad. Por medio de los mecanismos de encapsulación se protegen sus
propios componentes contra otros procesos que no tengan privilegios de
acceder a ellos.
 La forma de pensar en objetos es más natural a la vida real. Como personas
pensamos en términos de objetos, por lo tanto el diseñador también piensa en
términos de objetos y no en detalles de bajo nivel.
 Programación más sencilla. Los programas se crean a partir de piezas
pequeñas, lo que lo hace más sencillo.
 Los métodos de los objetos pueden ser polimórficos, es decir, tienen la
habilidad de enviar un mismo mensaje a objetos de clases diferentes, se
“comportan” de distintas maneras.
 Es más sencillo modificar código existente, cada clase efectúa sus funciones
independientemente de las demás.
 Se construyen clases cada vez más complejas a partir de otras más sencillas ya
existentes.
 Confiabilidad. Generalmente las clases que reutilizamos están probadas y por
lo tanto es más probable que funcionen correctamente.
 Estabilidad de los modelos, ya que las entidades son más estables en el mundo
real.

Los conceptos generales que aprenderemos en esta unidad son:


 Objetos y clases
 Atributos
 Mensajes y métodos
 Encapsulación y ocultamiento
 Interfaces
 Herencia de clases
 Polimorfismo
 Vinculación dinámica
 Composición de objetos

Objetos
Las personas tenemos una idea clara de lo que es un objeto: conceptos adquiridos que
nos permiten sentir y razonar acerca de las cosas del mundo. Un objeto podría ser real o
abstracto, por ejemplo una organización, una factura, una persona, una pantalla de usuario, un
avión, un vuelo de avión, una reservación aérea.
Definiciones:
“Un objeto se define como la unidad que en tiempo de ejecución realiza las
tareas de un programa. También a un nivel más básico se define como la
instancia de una clase. Estos objetos interactúan unos con otros, en
contraposición a la visión tradicional en la cual un programa es una
colección de subrutinas (funciones o procedimientos), o simplemente una
lista de instrucciones para el computador. Cada objeto es capaz de recibir
mensajes, procesar datos y enviar mensajes a otros objetos de manera
similar a un servicio.” Fundación Wikipedia, Inc. (2013).

Un objeto es una entidad provista de un conjunto de propiedades o atributos (datos) y


de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan
a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos
internos del sistema (del programa). Es una instancia a una clase.
Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una
clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus
características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún
método.
Métodos: Los métodos son comportamientos o acciones, especifican la forma en que
se controlan los datos de un objeto.
Los métodos en un objeto sólo hacen referencia a la estructura de datos de ese objeto,
no deben tener acceso directo a las estructuras de datos de otros objetos. Para utilizar la
estructura de datos de otro objeto, deben enviar mensajes a éste.
Las personas tenemos una idea clara de lo que es un objeto: conceptos adquiridos que
nos permiten sentir y razonar acerca de las cosas del mundo. Un objeto podría ser real o
abstracto, por ejemplo una organización, una factura, una figura en un graficador, una pantalla
de usuario, un avión, un vuelo de avión, una reservación aérea.

Dentro del software orientado a objeto, un objeto es cualquier cosa, real o abstracta,
acerca de la cual almacenamos datos y los métodos que controlan dichos datos.
Imagen tomada de Martín, M. Y Odell, M. (1994) y adaptado por Ing. Juan Bournissen

La programación orientada a objetos (POO) encapsula datos (atributos o propiedades)


y métodos (comportamientos o acciones) en objetos; de esta manera los datos y métodos de
un objeto están íntimamente relacionados entre sí.

Imagen tomada de Martín, M. Y Odell, M. (1994) y adaptado por Ing. Juan Bournissen

Un objeto puede estar compuesto por otros objetos y estos a su vez por otros más. Esta
estructura nos permite construir objetos muy complejos.

Clases
Una clase es una descripción generalizada de un conjunto de objetos similares. Es la
descripción de un conjunto de objetos que comparten los mismos atributos, operaciones,
relaciones y semántica. Todos los objetos son ejemplares de una clase. Un objeto es una
instancia de una clase. Un objeto se distingue de otros miembros de la clase por sus atributos.
Para aclarar el tema de las clases y los objetos que la componen lo vamos a hacer con
un ejemplo: tenemos una clase que la podemos denominar auto, esta clase va a contener un
conjunto de objetos similares, que cumplen con un conjunto de características comunes.
Todos tienen motor, ruedas, volante, color, cantidad de puertas, etc. es decir tienen
características en común, y pueden hacer las mismas cosas, como arrancar, moverse, girar,
adelantarse, retroceder, frenar, etc.

Si tenemos la clase auto podemos tener distintos tipos de objetos, donde cada uno de
los objetos sería una instancia de la clase auto.
Cada uno de estos vehículos son objetos de la clase vehículo. Todos tienen las mismas
características (aunque la comodidad, el confort y la potencia cambien).
Clase: vehículo
Métodos (funciones): arrancar, moverse, girar, adelantarse, retroceder, frenar, etc.
Atributos (datos): motor, ruedas, volante, color, cantidad de puertas, etc.

Cada objeto cumple con las mismas características

Objeto: Montacarga
Métodos (funciones): arrancar, moverse, girar, adelantarse, retroceder, frenar, etc.
Atributos (datos): motor, ruedas, volante, color, cantidad de puertas, etc.

Otro ejemplo con teléfonos móviles


Propiedades o atributos
 Tipo de pantalla
 Espacio de memoria
 Cantidad de tonos
 Tipo de antena
 Cantidad de idiomas, etc.

Métodos o comportamientos
 Iniciar alarma
 Asignar tonos
 Registrar llamadas
 Iniciar Juego
 Utilizar Calculadora
 Enviar mensajes, etc.

A su vez las clases pueden tener clases que dependen de ella, por lo tanto podemos de
hablar de superclases, de clases y subclases. Por ejemplo podemos tener la superclase
teléfonos, la clase teléfono móvil y la subclase teléfono móvil digital.
Una clase de alto nivel puede especializarse en clases de bajo nivel. Es decir, una clase
puede tener subclases.
Por ejemplo, una clase Persona puede tener subclases Estudiante y Empleado. A su
vez, la clase Estudiante puede tener como subclase a Estudiante de pregrado y Estudiante de
postgrado, mientras que Empleado puede tener como subclase a Académico y Administrativo.
Existe de este modo una jerarquía de clases y subclases.

Cómo funcionan los métodos


Los métodos son comportamientos o acciones, especifican la forma en que se
controlan los datos de un objeto.
Los métodos en un objeto sólo hacen referencia a la estructura de datos de ese objeto,
no deben tener acceso directo a las estructuras de datos de otros objetos. Para utilizar la
estructura de datos de otro objeto, deben enviar mensajes a éste.
Desde el punto de vista de la programación, los métodos son funciones o
procedimientos que pueden ser llamadas dentro de una clase o por otras clases.
Un método es un algoritmo asociado a un objeto (o a una clase de objetos), cuya
ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del
comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las
propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto
del sistema.
Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus
métodos con ciertos parámetros asociados al evento que lo generó.
Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o
un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje
adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede
desencadenar un objeto, es decir la acción que genera.
Mensajes y métodos: En la programación orientada de objetos, la acción se inicia mediante
la transmisión de un mensaje a un agente (un objeto) responsable de la acción.
El mensaje tiene codificada la petición de una acción y se acompaña de cualquier
información adicional (argumentos) necesaria para llevar a cabo la petición.
El receptor es el agente al cual se envía el mensaje. Si el receptor acepta el mensaje,
acepta la responsabilidad de llevar a cabo la acción indicada.
En respuesta a un mensaje, el receptor ejecutará algún método para satisfacer la
petición.

Estructuralmente, un mensaje consta de 3 partes:


 Identidad del receptor: Nombre del objeto que contiene el método a ejecutar.
 Nombre del método a ejecutar: Solo los métodos declarados públicos.
 Lista de Parámetros que recibe el método (cero o más parámetros)
Su sintaxis algorítmica es: <Variable_Objeto>.<Nombre_Método>([<Lista de Parámetros>] );
Encapsulación
El encapsulado es el resultado de ocultar los detalles de implementación (estado
interno del objeto) de un objeto respecto de su usuario. El empaque conjunto de datos y
métodos se llama encapsulación. Por medio de encapsulado el objeto esconde (protege) sus
datos de los demás objetos y permite el acceso a los datos mediante sus propios métodos. Esto
recibe el nombre de ocultamiento de información y evita la corrupción de los datos de un
objeto. La encapsulación facilita el cambio (de implementación), mejora la modularidad.

Herencia
La herencia es un mecanismo que permite la definición de una clase a partir de la
definición de otra ya existente.
Es la característica clave de los sistemas orientados a objeto para propiciar la
reusabilidad.
Una subclase puede heredar la estructura de datos y los métodos, o algunos métodos,
de su superclase. También puede tener métodos y tipos de datos propios.

Imagen tomada de Martín, M. Y Odell, M. (1994) y adaptado por Ing. Juan Bournissen

Una clase puede tener sus propios métodos y estructura de datos, así como también
heredarlos de su superclase. (Por ejemplo, herencia de la clase X a la clase Y) Es la facilidad
mediante la cual la clase Y hereda en ella cada uno de los atributos y operaciones de X, como
si esos atributos y operaciones hubiesen sido definidos por la misma Y. Por lo tanto, puede
usar los mismos métodos y variables públicas declaradas en X. Los componentes registrados
como "privados" (private) también se heredan, pero como no pertenecen a la clase, se
mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos
públicos. Esto es así para mantener hegemónico el ideal de OOP.
Para modelar las relaciones de herencia: Dado un conjunto de clases, hay que buscar
atributos y operaciones comunes a dos o más clases y elevar a una clase más general. Indicar
que las clases más específicas heredan de la clase más general a través de una relación de
generalización desde cada clase especializada a su padre.
En orientación a objetos la herencia es el mecanismo fundamental para implementar la
reutilización y extensibilidad del software. A través de ella los diseñadores pueden construir
nuevas clases partiendo de una jerarquía de clases ya existente (comprobadas y verificadas)
evitando con ello el rediseño, la modificación y verificación de la parte ya implementada. La
herencia facilita la creación de objetos a partir de otros ya existentes, obteniendo
características (métodos y atributos) similares a los ya existentes.
Es la relación entre una clase general y otra clase más específica. Por ejemplo: Si
declaramos una clase párrafo derivada de una clase texto, todos los métodos y variables
asociadas con la clase texto, son automáticamente heredados por la subclase párrafo.
“La herencia es uno de los mecanismos de la programación orientada a
objetos, por medio del cual una clase se deriva de otra, llamada entonces
clase base o clase padre,(a veces se le denomina superclase pero no es muy
común), de manera que extiende su funcionalidad.
Una de sus funciones más importantes es la de proveer Polimorfismo y
binding.” Wikipedia, (2013b)

Agregaciones
Es una forma especial de asociación que especifica una relación todo-parte entre el agregado
(el todo) y un componente (la parte). (parte de).
Es importante notar que en un extremo de las líneas que unen las clases se encuentra
un rombo vacío (de color blanco). Esto indica que esta agregación es débil, es decir que si la
clases padre deja de existir, las clases hijas pueden seguir existiendo por si solas. Es decir si
desarmo la PC, cada una de sus partes componentes siguen siendo clases con sentido de
existencia.
La herencia puede ser simple (cada clase tiene sólo una superclase) o múltiple (cada
clase puede tener asociada varias superclases).

Composición
Es una forma de agregación con fuerte pertenencia y un tiempo de vida coincidente
entre las partes y el todo. (parte de). Los objetos que contienen a otros objetos se denominan
objetos compuestos. Los atributos de un objeto se pueden usar de dos maneras:
1. Para almacenar valores
2. Para contener referencia a otros objetos
Esta última propiedad permite enviar mensajes apropiados a todos los objetos
contenidos.
Notarán que las líneas que unen las clases tienen en un extremo un rombo relleno de
color negro. Esto indica que si la clase padre desaparece, no tiene sentido que las clases hijas
sigan existiendo.
Polimorfismo
La palabra polimorfismo proviene del griego y significa que posee varias formas
diferentes. Este es uno de los conceptos esenciales de una programación orientada a objetos.
Así como la herencia está relacionada con las clases y su jerarquía, el polimorfismo se
relaciona con los métodos.
El polimorfismo se aplica a métodos que adoptan varias formas de implementación
según el tipo de objeto, pero cumple siempre el mismo objetivo.
Los métodos son polimórficos se aplican a objetos de distintas clases para conseguir el
mismo significado semántico. Por ejemplo, lanzar puede ser implementado tanto para un
objeto Tenis como para el objeto Béisbol o Fútbol.
Por ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de la
superclase Animal. La clase Animal tiene el método abstracto mover que se implementa de
forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta).
Una de las ventajas del polimorfismo es que se puede hacer una solicitud de una
operación sin conocer el método que será llamado, es decir, existe un enlace tardío entre el
mensaje y el método.
Por ejemplo se aplica el método área, en una clase Figura, y esto se aplica en sus
subclases Cuadrado y Rectángulo, es decir se pidió que se calculara el área sin necesidad de
especificar a qué tipo de figura se aplicaría.

Visibilidad
Toda Clase encapsula unos elementos (atributos y operaciones) que disponen de
ciertos criterios de visibilidad y manipulación para otras Clases.
+ Pública: un elemento siempre es visible en cualquier parte del programa y puede ser
llamado y modificado por cualquier objeto del sistema. Todas las operaciones son públicas
por defecto.
- Privada: un elemento sólo puede ser usado por la clase que lo define.
# Protegida: un elemento sólo puede ser usado por la clase que lo define, o por las subclases
de dicha clase
Package (paquete): un elemento sólo puede ser usado por otras clases que compartan el
mismo paquete.
Abstracción
Es el conocimiento que se tiene de una cosa prescindiendo de las demás que están con
ella. La abstracción localiza y oculta los detalles de un modelo o diseño para generar y
manipular objetos. Conocemos un objeto viéndolo, sabemos qué es sin necesidad de ver su
interior, su implementación o su forma de construcción.

Los tipos de datos abstractos (TDA) permiten describir una estructura de datos en
función a las operaciones que pueden efectuar, dejando a un lado su implementación.
Los TDA mezclan estructuras de datos junto a una serie de operaciones de
manipulación. Incluyen una interfaz pública, que es lo que verá el usuario, y una
implementación (algoritmos de operaciones sobre las estructuras de datos y su representación
en un lenguaje de programación), que el usuario no tiene necesariamente que conocer para
manipular correctamente los tipos de datos abstractos.
Los objetos están representados por medio de los TDA y se caracterizan por el
encapsulamiento.
Una clase abstracta es una descripción incompleta de un objeto. Un conjunto de
operaciones y atributos que por sí solos no describen nada.
Las clases abstractas no pueden ser instanciadas, no es posible crear objetos o
variables (no se puede usar new).
Creadas por generalización, tienen características comunes, pero no completas. Son
utilizadas para definir operaciones comunes y aplicar polimorfismo.
Interfaces
Colección de operaciones que se utiliza para especificar un servicio de una clase. Se
trata de declarar métodos abstractos y constantes que posteriormente puedan ser
implementados de diferentes maneras según las necesidades de un programa. Una interface
sirve para establecer un 'protocolo' entre clases.

Características generales de los objetos


Un objeto se identifica por un nombre o un identificador único que lo diferencia de los
demás. Ejemplo: el objeto cuenta corriente 135 es diferente al objeto cuenta corriente 246. En
este caso el identificador que los hace únicos es el número de la cuenta.
Un objeto posee estados. El estado de un objeto está determinado por los valores que
poseen sus atributos en un momento dado.
Un objeto tiene un conjunto de métodos. El comportamiento general de los objetos
dentro de un sistema se describe o representa mediante sus operaciones o métodos. Los
métodos se utilizarán para obtener o cambiar el estado de los objetos, así como para
proporcionar un medio de comunicación entre objetos.
Un objeto tiene un conjunto de atributos. Los atributos de un objeto contienen valores
que determinan el estado del objeto durante su tiempo de vida. Se implementan con variables,
constantes y estructuras de datos (similares a los campos de un registro).
Los objetos soportan encapsulamiento. La estructura interna de un objeto normalmente
está oculta a los usuarios del mismo. Los datos del objeto están disponibles solo para ser
manipulados por los propios métodos del objeto. El único mecanismo que lo conecta con el
mundo exterior es el paso de mensajes.
Un objeto tiene un tiempo de vida dentro del programa o sistema que lo crea y utiliza.
Para ser utilizado en un algoritmo el objeto debe ser creado con una instrucción particular
(New ó Nuevo) y al finalizar su utilización es destruido con el uso de otra instrucción o de
manera automática.
Un objeto es una instancia de una clase. Cada objeto concreto dentro de un sistema es
miembro de una clase específica y tiene el conjunto de atributos y métodos especificados en la
misma

Resumen
 Un programa orientado a objetos es un conjunto de clases que describe el
comportamiento de los objetos del sistema
 Los objetos se comunican mediante mensajes
 Cada objeto tiene su propio estado
 Cada objeto es un ejemplar de una clase (agrupación de objetos)
 Todos los objetos que son ejemplares de una misma clase pueden realizar las
mismas acciones
 Las clases están organizadas en una jerarquía de herencia
 objeto es cualquier cosa, real o abstracta, acerca de la cual almacenamos datos y
los métodos que controlan dichos datos.
 Una clase es una descripción generalizada de un conjunto de objetos similares.
 Una clase de alto nivel puede especializarse en clases de bajo nivel. Es decir, un
clase puede tener subclases.
 Los métodos son comportamientos o acciones, especifican la forma en que se
controlan los datos de un objeto.
 Los atributos son las características individuales que diferencian un objeto de otro
y determinan su apariencia, estado u otras cualidades.
 El mensaje tiene codificada la petición de una acción y se acompaña de cualquier
información adicional (argumentos) necesaria para llevar a cabo la petición
 El encapsulado es el resultado de ocultar los detalles de implementación (estado
interno) de un objeto respecto de su usuario.

También podría gustarte