Está en la página 1de 40

Bloque III- Tema 5.

Diseño y programación orientada a objetos

De manera formal decimos: un objeto es cualquier cosa, real o


abstracta, a cerca de la cual almacenamos datos y los métodos
que controlan dichos datos.
Un objeto puede estar compuesto por otros objetos; estos
últimos, a su vez, pueden estar compuestos de objetos, del mismo
modo que una máquina está formada por partes y éstas, también,
están formadas por otras partes. Esta estructura intrincada de los
objetos permite definir objetos muy complejos.
El elemento fundamental de la OOP-POO (OOP en inglés, POO ELEMENTO
en español) es, como su nombre lo indica, el objeto. Podemos FUNDAMENTAL DE
definir un objeto (en programación) como un conjunto complejo de LA OOP ES EL
datos y programas que poseen estructura y forman parte de una OBJETO
organización. En primer lugar, un objeto no es un dato simple, sino
que contiene en su interior cierto número de componentes bien
estructurados. En segundo lugar, cada objeto no es un ente aislado, UN OBJETO FORMA
sino que forma parte de una organización jerárquica o de otro PARTE DE OTRO
tipo. OBJETO
Un objeto tiene tres partes:
TRES PARTES:
— Las relaciones permiten que el objeto se inserte en la Relaciones,
organización y están formadas esencialmente por punteros a otros propiedades y
objetos. métodos.

— 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 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.

Un objeto tiene: Estado, Comportamiento e Identidad UN OBJETO TIENE


ESTADO,
La estructura y el comportamiento de objetos similares se definen COMPORTAMIENTO
en sus clases comunes. El término objeto y ejemplo (instance) de E IDENTIDAD
una clase son intercambiables.

Estado de un objeto
ESTADO DE UN
El estado de un objeto abarca todas las propiedades del objeto, y OBJETO
los valores actuales de cada una de esas propiedades. Las
propiedades de los objetos suelen ser estáticas, mientras los valores
que toman estas propiedades cambian con el tiempo.

1
El estado de un objeto está influido por la historia del objeto.
El estado de un objeto representa el efecto acumulado de su
comportamiento.

Identidad de un objeto
IDENTIDAD DE UN Identidad es la propiedad de un objeto que lo lleva a distinguirse de
OBJETO otros.
Comportamiento de un objeto
Comportamiento es como un objeto actúa y reacciona, en términos
COMPORTAMIENTO de sus cambios de estado y de los mensajes que intercambia.
DE UN OBJETO Son las operaciones que una clase realiza (llamadas también
mensajes) las que dan cuenta de cómo se comporta la clase. Por
operación se denota el servicio que una clase ofrece a sus clientes.
Un objeto puede realizar cinco tipos de operaciones sobre otro,
OPERACIONES DE con el propósito de provocar una reacción:
UN OBJETO:
Modificador, selector, Modificador: altera el estado de un objeto.
iterador, constructor y Selector: accede al estado de un objeto, sin alterarlo.
destructor Iterador: permite a todas las partes de un objeto ser accedidas
en un orden.
Constructor: crea un objeto y/o inicializa su estado.
Destructor: libera el estado de un objeto y/o destruye el objeto.
C++ soporta, además de las operaciones, subprogramas libres. En
la terminología de C++ las operaciones que un cliente puede realizar
sobre un objeto se declaran como funciones miembro.

DISEÑO 1.1. Diseño orientado a objetos


ORIENTADO A
OBJETOS 1.1.1. Introducción
El proceso de desarrollo de software es aquel en el que las
necesidades del usuario son traducidas en requisitos de
Desarrollo de software “software”, éstos transformados en diseño y el diseño
implementado en código. Podemos definir el diseño en el software
como el proceso de aplicar distintas técnicas y principios con el
propósito de definir un producto con los suficientes detalles como
para permitir su realización física.

Con el diseño se pretende construir un sistema que satisfaga


determinada especificación del sistema, se ajuste a las limitaciones
impuestas por el medio de destino y respete requisitos sobre forma,
rendimiento, utilización de recursos...

A través del diseño producimos un modelo o representación técnica


del “software” que se va a desarrollar. El diseño es uno de los
procesos básicos sobre el que se asienta la calidad del “software”.
Se trata de un proceso iterativo a través del cual se traducen los
requisitos en una representación del “software”. Se representa a un

2
alto nivel de abstracción, un nivel que se puede seguir hasta
requisitos específicos de datos, funcionales y de comportamiento.

1.1.2. Metodologías de diseño METODOLOGIAS DE


—Diseño de datos. Modelo de información a estructuras de datos. DISEÑO
—Diseño arquitectónico. Define las relaciones entre los elementos Diseño de datos,
estructurales del programa. arquitectónico,
—Diseño procedimental. Se transforman los elementos procedimental y de
estructurales del programa en una descripción procedimental del interfaz
software.
—Diseño de interfaz. Describe cómo se comunica el software
consigo mismo y con su entorno.
1.1.3. Directrices de diseño
— El diseño debe implementar todos los requisitos explícitos DIRECTRICES DE
contenidos en el modelo de análisis y debe acomodar todos los DISEÑO
requisitos implícitos que desee el cliente.
El diseño debe ser una guía que puedan leer y entender los que
construyan el código y los que prueban y mantienen el “software”.
—El diseño debería proporcionar una completa idea de lo que es el
“software”, enfocando los dominios de datos, funcional y de
comportamiento desde la perspectiva de la implementación.
1.1.4. Principios básicos de diseño PRINCIPIOS
— El diseñador debe considerar enfoques alternativos BASICOS DE
juzgando a cada uno en relación a los requisitos del problema, los DISEÑO
resultados disponibles y los criterios de calidad interna.
— Se deben seguir los pasos de diseño hasta el modelo de
análisis.
— El diseño no va a reinventar nada que ya esté inventado.
— El diseño debería presentar uniformidad de integración.
— Debe estructurarse para admitir cambios.
— El diseño no es escribir código y escribir código no es
diseñar.
— Se debería valorar la calidad del diseño mientras se crea,
no después de terminado.

1.1.5. Patrones de diseño


PATRONES DE
Un patrón describe un problema que ocurre una y otra vez en DISEÑO
nuestro entorno, para describir después el núcleo de la solución a
ese problema, de tal manera que esa solución pueda ser usada
varias veces sin hacerlo dos veces de la misma forma. Un patrón
aborda un problema de diseño recurrente que aparece en
situaciones específicas de diseño y presenta una solución para éste.
Los patrones identifican y especifican abstracciones que están por
encima del nivel de las clases e instancias, o de componentes. ELEMENTOS DE
Un patrón tiene 4 elementos esenciales: LOS PATRONES
— El nombre del patrón se usa para describir un problema de
diseño, sus soluciones y consecuencias en una o dos palabras. NOMBRE

3
— El problema describe cuándo aplicar el patrón. Explica el
problema y su contexto. Podría describir problemas específicos de
diseño del tipo de cómo representar algoritmos como objetos. Podría
describir estructuras de clases u objetos que son síntomas de un
diseño inflexible.
— La solución describe los elementos que construyen el diseño,
sus relaciones, responsabilidades y colaboraciones. El patrón
proporciona una descripción abstracta de un problema de diseño y
cómo una disposición general de elementos lo resuelve.
— Las consecuencias son los resultados e inconvenientes de
aplicar el patrón. Aunque las consecuencias se ignoran cuando
describimos las decisiones de diseño, son críticas para evaluar las
alternativas de diseño y para entender los costes y beneficios de
aplicar el patrón.

1.1.6. Tipos de patrones

A) Patrones de creación
Los patrones de creación conciernen el proceso de creación de
objetos. Los patrones de creación proporcionan ayuda a la hora de
crear objetos, principalmente cuando esta cre¬ación requiere tomar
decisiones. Esta toma de decisiones puede ser dinámica. Estos
patro¬nes ayudan a estructurar y encapsular estas decisiones. En
algunas ocasiones existe más de un patrón que se puede aplicar a
la misma situación. En otras ocasiones se pueden com¬binar
múltiples patrones convenientemente. Un patrón de creación
asociado a clases usa la herencia para variar la clase que se
instancia, mientras que un patrón de creación aso¬ciado a objetos
delegará la instanciación a otro objeto.
Hay dos formas de clasificar los patrones de creación basándose en
las clases de obje¬tos que se crean. Una es clasificar las clases que
crean los objetos (Factory Method), otra forma está relacionada con
la composición de objetos; definir un objeto que es responsa¬ble de
conocer las clases de los objetos producto, en esta característica se
apoyan los patro¬nes Abstract Factory, Builder o Prototype.
— Factory method proporciona una interfaz para crear un
objeto, pero deja a las subclases decidir cuál clase instanciar.
Permite a una clase delegar la instanciación a las subclases.
— Abstract Factory proporciona una interfaz para crear
familias de objetos relacio¬nados o dependientes sin especificar su
clase concreta.
— Builder separa la construcción de un objeto complejo de
su representación para que el mismo proceso de construcción pueda
crear diferentes representaciones.
— Prototype especifica el tipo de objetos a crear usando una
instancia prototipo, y crea nuevos objetos copiando este prototipo.
— Singleton asegura que una clase sólo tiene una instancia,
y proporciona un punto de acceso global a ésta.
4
B) Patrones cliente. Permite trabajar juntas a clases que de otra forma no podrían
estructurales hacerlo por incom¬patibilidad de “interfaces”.
— Bridge desacopla una abstracción de su implementación
Tratan de la para que los dos pue¬dan variar independientemente.
composición de clases — Composite compone objetos en estructuras de árbol para
y objetos. Los representar jerarquías parte-todo. Permite a los usuarios tratar
patrones estructurales objetos individuales y composiciones de manera uniforme.
están relacio¬nados — Decorator agrega responsabilidades adicionales a un
con cómo las clases y objeto dinámicamente. Pro-porcionan una alternativa flexible a las
los objetos se subclases para extender funcionalidad.
combinan para dar — Facade proporciona una interfaz unificada a un conjunto de
lugar a estructuras interfaces en un sub¬sistema. Define una interfaz de alto nivel que
más com¬plejas. hace el subsistema más fácil de usar.
Puede hacerse aquí la — Flyweight comparte para proporcionar un gran número de
misma distinción que objetos pequeños efi-cientemente.
hacíamos en los — Proxy proporciona un sustituto para otro objeto, para
patrones de creación y controlar el acceso a él.
hablar de patrones C) Patrones de comportamiento
estructurales Los de comportamiento caracterizan las maneras en las que las
asociados a clases clases u objetos inte- ractúan y se distribuyen las responsabilidades.
(Adapter) y asociados Estos patrones de diseño están relacionados con algoritmos y
a objetos (Bridge, asignación de responsabilidades a los objetos. Los patrones de
Composite, Decorator, compor¬tamiento describen no sólamente patrones de objetos o
Facade, Flyweight, clases sino también patrones de comunicación entre ellos.
Proxy), los primeros Nuevamente se pueden clasificar en función de que trabajen con
utilizarán la herencia, clases (Template Method, Interpreter) u objetos (Chain of
los segundos la Responsability, Command, Iterator, Mediator, Memento, Observer,
composición. State, Strategy, Visitor).
Los patrones La variación de la encapsulación es la base de muchos patrones de
estructurales comportamiento. Cuando un aspecto de un programa cambia
asociados con objetos frecuentemente, estos patrones definen un objeto que encapsula
describen formas de dicho aspecto. Los patrones definen una clase abstracta que
componer los objetos descri¬be la encapsulación del objeto.
para conseguir nueva
funcionalidad. La — Observer define una dependencia uno a varios entre
flexibilidad de la objetos de manera que cuando un objeto cambia su estado, todos
composición de los objetos dependientes son notifi¬cados y actualizados
objetos viene de la automáticamente.
posibilidad de cambiar — Mediator define un objeto que encapsula cómo un
la composición en conjunto de objetos interactúan. Promueve bajo acoplamiento
tiempo de ejecución, evitando que los
lo que es impo¬sible objetos se refieran entre ellos explícitamente, y permite variar su
con la composición interacción independientemente.
estática de clases. — Chain of Responsibility evita el acoplamiento del emisor
— Adapter de una petición a su receptor dando a más de un objeto una
convierte la interfaz de oportunidad para manejar la petición. Encadena los objetos
una clase en otra receptores y pasa la petición a lo largo de la cadena hasta que un
interfaz que espera el objeto la maneja.

5
— Template comportamiento cuando cambia su estado interno. El objeto
Method define un aparenta cambiar su clase.
esqueleto de un — Command encapsula una petición como objeto, por lo
algoritmo en una tanto permite valorar o analizar los usuarios con diferentes
operación, peticiones, colas o peticiones de conexión, y permite operaciones
apla¬zando algunos que se pueden deshacer.
pasos a las subclases. — Iterator proporciona un medio para acceder a los
Permite a las elementos de un objeto agre¬gado secuencialmente sin exponer su
subclases redefinir representación subyacente.
ciertos pasos de un El ámbito especifica cuando los patrones se aplican principalmente
algoritmo sin cambiar a las clases o a los objetos. Los patrones de clase tratan con
la estructura del relaciones entre las clases y sus subclases. Estas relaciones se
algoritmo. establecen a través de la herencia, así que son estáticas, fijas en
— Interpreter, tiempo de compilación. Los patrones de objetos tratan con las
dado un lenguaje, relaciones de objetos, que pueden cambiar en tiempo de ejecución
define una y son más dinámicos. Casi todos los patrones utilizan la herencia en
representación para algún punto.
su gramática y un
intérprete que usa la Los patrones de clase de creación delegan alguna parte de la
representación para creación a subclases, mientras que los de objeto delegan en otro
interpretar las objeto. Los estructurales de clases usan la herencia para componer
sentencias en el las clases, mientras que los de objeto describen maneras de reu¬nir
lenguaje. objetos. Los patrones de clase de comportamiento usan herencia
— Strategy para describir algorit¬mos y flujo de control, mientras que los de
define una familia de objeto describen cómo un grupo de objetos cooperan para realizar
algoritmos, una tarea que no podría llevar a cabo un objeto sólo.
encapsulados Los métodos de diseño orientados a objetos favorecen varios
individualmente, y los enfoques.
hace intercambiables. Se puede escribir el problema y extraer nombres y verbos como
Permite a un algoritmo clases y ope¬
cambiar raciones. Se puede modelar desde el punto de vista de las
independientemente colaboraciones y responsabili¬dades en el sistema. Se puede
de los usuarios que lo modelar el mundo real y trasladar los objetos encontrados en el
usen. análisis al diseño. Los patrones de diseño ayudan a identificar las
— Visitor abstracciones menos obvias y los objetos que pueden capturarlas.
representa una D) Interfaces
operación que va a Cada operación declarada por un objeto especifica el nombre de una
ejecutarse sobre operación, los objetos que toma como parámetros y lo que devuelve.
elementos de una A esto se le llama signatura. Al con¬junto de todas las signaturas
estructura de objetos. definidas por las operaciones de un objeto se le llama la inter¬faz
Permite definir una del objeto. La interfaz de un objeto caracteriza el conjunto completo
nueva operación sin de peticiones que se le pueden mandar a un objeto. Cualquier
cambiar las clases de petición que coincida con una signatura de la interfaz de un objeto
los elementos con los puede ser mandada a ese objeto.
que opera. Un tipo es el nombre que se suele usar para denotar una interfaz
— State determinada. Un objeto puede tener varios tipos, y objetos muy
permite a un objeto diferentes pueden ser del mismo tipo. Dos objetos del mismo tipo
alterar su sólo necesitan compartir parte de sus interfaces. Las interfaces

6
pue¬den contener escribir programas que esperen un objeto con una interfaz particular,
otras interfaces como sabiendo que cualquier objeto que tenga la interfaz correcta
subconjuntos. Se dice aceptará la petición. Es más, la ligadura dinámica permite sustituir
que un tipo es un objetos que tienen interfaces idénticas entre sí en tiempo de
subtipo de otro si su ejecución (polimorfismo). El poli¬morfismo simplifica las definiciones
interfaz contiene la de los usuarios, desacopla los objetos entre sí, y per¬mite que varíen
interfaz de su sus relaciones en tiempo de ejecución.
supertipo (herencia).
Los “interfaces” son Los patrones de diseño ayudan a definir interfaces identificando sus
fundamentales en los elementos prin¬cipales y los tipo de datos que pueden ser enviados
sistemas orientados a a través de una interfaz. Un patrón de diseño puede indicar también
objetos. Los objetos qué es lo que no se debe poner en una interfaz. El patrón memento
sólo son conocidos a describe cómo encapsular y salvar el estado interno de un objeto
través de sus para que este pueda ser restaurado posteriormente. El patrón
interfaces. No hay estipula que los objetos memento deben definir dos interfaces: una
manera de saber nada restringida para los usuarios, y otra privilegiada para que únicamente
acerca de un objeto o el objeto original pueda guardar y recu¬perar su estado.
de pedirle que haga Los patrones de diseño también especifican las relaciones entre
algo sin pasar a través “interfaces”. En parti¬cular, muchas veces necesitan que algunas
de su interfaz. La clases tengan “interfaces” similares, o añaden restricciones a las
interfaz de un obje¬to interfaces de algunas clases.
no dice nada acerca Existen dos beneficios al manipular los objetos en términos de su
de su implementación, interfaz definida por una clase abstracta:
pues diferentes — Los usuarios ignoran en tipo específico de objeto que
objetos pueden están usando, mientras que respondan a la interfaz que el cliente
implemen- tar las espera.
peticiones de manera — Los usuarios ignoran las clases que implementan los
diferente. objetos. Únicamente deben conocer la clase abstracta que definen
Cuando una petición el interfaz.
se envía a un objeto, la Esto reduce significativamente las dependencias de implementación
operación que se entre los subsis¬temas. Los patrones de creación abstraen el
realiza depende tanto proceso de creación, de manera que ofrecen diferentes maneras de
de la petición como del asociar una interfaz con su implementación de manera
objeto que la recibe. transparen¬te a la instanciación. Los patrones de creación aseguran
La asociación en que el sistema se escribe en tér¬minos de interfaces, no
tiempo de ejecución implementaciones.
de una petición a un 1.1.7. Herencia y composición
objeto y la operación Las dos maneras de reutilizar la funcionalidad en los sistemas
se llama ligadura Orientados a Objetos son la herencia de clases (caja blanca) y la
dinámica. composición de objetos (caja negra). Cada una tiene sus ventajas e
La ligadura dinámica inconvenientes.
significa que hacer — Ventajas: La herencia de clases se define estáticamente
una petición no se en tiempo de compila¬ción, y se usa directamente, ya que está
asocia a una proporcionada por el lenguaje de pro¬gramación. La herencia
implemen¬tación permite modificar de manera más sencilla la implemen- tación que
particular hasta tiempo se está reutilizando. Si se sobrescriben algunos, pero no todos los
de ejecución. Por lo métodos, podría ocurrir que los no sobrescritos llamen a los
tanto, se pueden sobrescritos.

7

Inconvenientes: No se La composición de objetos tiene otro efecto sobre el diseño de
puede cambiar la sistemas.
implementación Cada clase se mantiene encapsulada y enfocada en una tarea. Las
heredada de las clases y jerar¬quías de clases permanecerán pequeñas en lugar de
clases base en tiempo crecer hasta convertirse en
de ejecución, ya que monstruos inmanejables. Por otra parte un diseño basado en la
se define en tiempo de composición de objetos tendrá más objetos (y menos clases).
compilación. La Idealmente, se debería poder conseguir toda la funcionalidad que se
herencia rompe el necesite ensam¬blando componentes existentes mediante
encapsulamiento. Las composición de objetos. Pero este caso no se suele dar, porque el
superclases definen conjunto de componentes nunca es suficientemente rico. La
parte de la reutiliza¬ción mediante la herencia hace más fácil componer nuevos
repre¬sentación física componentes con los antiguos. De esta manera la herencia y la
de las subclases. Las composición trabajan juntos.
dependencias de 1.1.8. Delegación
implementación Sirve para simular la herencia mediante la composición. La principal
pueden causar ventaja de la dele¬gación es que hace fácil componer
problemas cuando se comportamientos en tiempo de ejecución y cambiar la manera en la
intenta reutilizar una que están compuestos. La desventaja es que es más difícil de
subclase... se podría entender, e ine- ficiencias de tiempo de ejecución. Varios patrones
solucio¬nar usan delegación: state, strategy y visitor. La delegación es un
heredando de ejemplo extremo de composición de objetos. Nos muestra que
“interfaces”. siem¬pre se puede reemplazar herencia por composición de objetos
La composición de como mecanismo de reuti¬lización de código.
objetos se define 1.1.9. Diseño
dinámicamente en La llave para maximizar la reutilización está en anticiparse a los
tiempo de ejecución nuevos requisitos y cambios a los requisitos existentes, y diseñar el
median¬te objetos sistema para que pueda evolucionar como corresponde.
que toman referencias Los cambios pueden provocar redefinición de las clases,
a otros objetos. La reimplementación, modifica¬ción del cliente, y nuevos tests. El
composición requiere rediseño afecta a muchas partes del sistema software.
que los objetos Los patrones de diseño nos ayudan a evitarlo asegurando que el
respeten sus sistema puede cam¬biar en ciertos aspectos determinados. Cada
“interfaces”, lo que patrón de diseño permite que algún aspecto de la estructura del
requiere “interfaces” sistema varíe independientemente de otros aspectos, por lo tanto
diseñados hace el sistema más robusto para un tipo determinado de cambio.
cuidadosamente. A Se listan a continuación las causas de rediseño más comunes junto
cam¬bio, no se rompe con los patrones de diseño que las abordan:
el encapsulamiento, y 1. Crear un objeto especificando una clase explícitamente.
cualquier objeto puede Especificar el nombre de una clase cuando se crea un objeto, nos
ser reemplazado por compromete a una implementación par¬ticular en lugar de a una
otro en tiempo de interfaz. Este compromiso puede complicar cambios futuros. Para
ejecución siempre que evitarlo, los objetos se deben crear indirectamente.
tenga el mismo tipo. Patrones de diseño: Factoría abstracta, factory method, prototipo.
Existen menos 2. Dependencias de operaciones específicas. Cuando se
dependencias de especifica una operación par¬ticular, nos comprometemos a una
implementación. manera de satisfacer una petición.

8
Ocultar esta información de los usuarios evita cambios en cascada.
Evitando peticiones Patrones de diseño: factoría abstracta, puente, memento, proxy.
especificadas en 5. Dependencias algorítmicas. Los algoritmos se extienden,
tiempo de optimizan y se reem¬plazan habitualmente durante el desarrollo y la
compilación, se hace reutilización. Los objetos que dependen de un algoritmo tendrán que
más fácil de cambiar la cambiar cuando el algoritmo cambie. Por lo tanto los algoritmos que
manera en la que se tengan pinta de cambiar deben ser aislados.
satisface una petición. Patrones de diseño: buider, iterator, estrategia, template method,
Patrones de diseño: visitor.
Cadena de 6. Acoplamiento fuerte. Las clases que están muy acopladas
responsabilidad, son difíciles de reutilizar individualmente, ya que dependen unas de
comando. otras. El acoplamiento fuerte lleva a sis¬temas monolíticos, donde
3. no se puede cambiar o eliminar una clase sin entender y cambiar
Dependencia de la muchas otras clases. El sistema se convierte en una masa densa
plataforma hardware y que es difícil de aprender, portar y mantener. El acoplamiento débil
software. Las APls de incrementa la proba¬bilidad de que una clase pueda ser reutilizada
los sistemas ope- por sí misma y que el sistema pueda ser aprendido, portado,
rativos son diferentes modificado y extendido más fácilmente.
para las distintas Patrones de diseño: factoría abstracta, puente, cadena de
plataformas. El responsabilidad, comando, fachada, mediador, observador.
“software” que
depende de una 7. Extender la funcionalidad mediante la herencia. Adaptar
plataforma particular un objeto mediante la herencia muchas veces no es fácil. Cada
será más difícil de nueva clase tiene una implementación fija por encima (inicialización,
portar a otras terminación...). Definir una subclase además requiere un
plataformas. Podría entendimiento en profundidad de la clase base. Por ejemplo,
incluso ser difícil de sobres¬cribir una operación puede requerir sobrescribir otra. Una
mantener actualizada operación sobrescrita podría ser necesitada para llamar a una
en su plataforma operación heredada. Y la herencia puede llevar a una explosión de
nativa. Por lo tanto, es clases, porque podrían necesitarse muchas subclases nuevas para
importante diseñar el una simple extensión. La composición de objetos en general y la
“software” para limitar delegación en particular proporciona una alternativa flexible a la
las dependencias de herencia para combinar comportamientos. La nueva funcionalidad
la plataforma. puede añadirse a una apli¬cación componiendo objetos existentes
Patrones de diseño: de nuevas maneras en lugar de definir nuevas subclases de clases
factoría abstracta, existentes. Por otra parte, demasiado uso de la com¬posición puede
puente. hacer los diseños más difíciles de entender. Muchos patrones de
4. diseño producen diseños en los que se pueden intro¬ducir nuevas
Dependencia de las funcionalidades simplemente definiendo una subclase y
representaciones o componiendo las instancias con otras existentes.
implementaciones de Patrones de diseño: puente, cadena de responsabilidad, composite,
objetos. Los usua-rios decorador, observador, estrategia.
que saben como se 8. Incapacidad para alterar las clases convenientemente. A
representa, almacena veces hay que modificar una clase que no puede ser modificada
o implementa podrían convenientemente. Quizás se necesita el código fuente y no se
necesitar ser tiene. O puede que cualquier cambio necesite modificar un montón
cambiados cuando de clases existentes. Los patrones nos ayudan a modificar las clases
cambien los objetos. en estas circunstancias.

9
Patrones de diseño: el mantenimiento exigía menor esfuerzo.
adaptador, decorador, Lo anterior trajo consigo otro beneficio como es la reutilización del
visitor. código, hecho que por sí mismo repercute en una baja en el costo
2. Elementos y del “software” y en el tiempo requerido para el desarrollo de
componentes sistemas.
software: objetos, El primer lenguaje que implementó estas ideas fue el lenguaje
clases, herencia, SIMULA-67. Luego, en la década de los 70, XEROX en sus
métodos, sobrecarga laboratorios de Palo Alto desarrolla SMALL-TALK.
2.1. Evolución de En los años 80 tomando ideas de Simula y de Small-Talk, en los
los objetos laboratorios Bell de ATT, Stroustrup crea el lenguaje C++ como
Las ideas básicas sucesor del Lenguaje C, y a éste se debe la gran extensión de los
sobre los objetos, conceptos de objetos. En el área de la inteligencia artificial, se
nacen a principios de desarrolla Clos, una variante de Lisp orientada a objetos.
los años setenta en la En sistemas operativos, el Next-Step de Sun es un Sistema
uni¬versidad de Operativo Orientado a objetos. Microsoft trabaja en Cairo, IBM y
Noruega donde un Apple trabajan en Pink, como sistemas opera¬tivos que incluyen
equipo dirigido por el conceptos de objetos.
Dr. Nygaard, se En las bases de datos, tenemos al SNAP (Strategic Networed
dedicaba a Applications Plataform), conocido en español como Sistemas
desarro¬llar sistemas distribuidos en línea orientados a obje¬tos. Poco más tarde (1993-
informáticos para 4) Sun crea JAVA, el cual arrasa hasta la actualidad en aplicaciones
realizar simulaciones cliente y en programas ejecutables para Internet (applets).
de sistemas físicos.
Debido a que eran
programas muy Los conceptos de objetos entran en profundidad poco a poco en
complejos y el todos los ámbitos de la computación, y de la misma manera que ha
mantenimiento era sido inevitable aprender programación estructurada o bases de
muy necesario (para datos relacionales, ahora se hace necesario aprender programación
que el software se orientada a objetos. Los conceptos de análisis, diseño y
adaptara a nuevas programación con objetos son fáci¬les de dominar una vez que se
necesidades), se tiene una base de programación en un lenguaje. Para poder
dieron cuenta de las construirnos nuestras propias librerías de clases o para llegar a ser
limitaciones de la un programador de obje¬tos de alto rendimiento, se requiere un
ingeniería de software poco mas de práctica. En el mercado existen biblio¬tecas de clases,
tradicional, para y también varios lenguajes traen bibliotecas de clases que le
solucionar este permiten al programador realizar ciertas tareas sin tener que
problema idearon una programarlas.
forma de diseñar el No obstante, no debemos confundir Programación Orientada a
pro¬grama Objetos donde el pro¬gramador puede usar clases precreadas o
paralelamente al crearlas el mismo con Programación Basada en Objetos donde las
objeto físico, donde clases ya están precreadas y el programador solo puede usarlas o
cada componente del modi¬ficarlas. Ejemplos de lenguajes de Programación Basada en
objeto físico se Objetos son: Clipper que tiene objetos ya creados como el Tbrowse
corres¬pondía con un que permite el manejo de tablas y Visual Basic al igual que Delphi
componente de tienen objetos como botones o cuadros de diálogo con los que
“software”, con lo que permite desa¬rrollar interfaces de usuario con un mínimo de
se simplificaba el programación.
programa y, por tanto,

10
Nota. Hemos de otros utensilios de programación que resultaba difícil relacionar con
destacar que Visual el problema actual. Además, la programación tradicional se
Basic .NET es también concentra en los procedimientos paso a paso, llamados algoritmos,
un lenguaje de última para realizar las tareas deseadas. Por esta razón, a la
generación Orientado programa¬ción tradicional también se le conoce como programación
a Objetos. orientada a procedimientos.
2.2. La Todos los lenguajes de programación están formados por dos
programación elementos: código y datos. Cuando los programas empezaron a
orientada a objetos hacerse complicados y su código es enorme y casi inmanejable, se
(POO-OOP) pensó crear una nueva forma de pensar de la cual surgió la
La idea principal de progra¬mación orientada a objetos. En ella un programa se organiza
POO es construir entorno a sus datos (objetos) y a un conjunto de interfaces bien
programas que utilizan definidas para esos datos.
objetos de software.
Un objeto puede La POO es un modelo de programación que utiliza objetos ligados
considerarse como mediante mensajes para la resolución de problemas. La idea inicial
una entidad siempre ha sido organizar los programas a imagen y semejanza de
independiente de la organización de los objetos en el mundo real.
cómputo con sus Las técnicas orientadas a objetos se basan en organizar el software
propios datos y como una colec¬ción de objetos discretos que incorporan tanto
programación. En estructuras de datos como comportamien¬to. Esto contrasta con la
computadoras programación convencional, en la que las estructuras de datos y el
modernas, las comportamiento estaban escasamente relacionadas.
ventanas, los menús y Las características principales del enfoque orientado a objetos serán
las carpetas de estudiadas con detenimiento en este tema y son:
archivos, por ejemplo, — Abstracción.
suelen representarse — Encapsulación.
con objetos de — Herencia.
“software”. Pero los — Polimorfismo.
objetos pueden — Clase.
aplicarse a muchos — Objeto.
tipos de programas Se — Método.
incluirían datos que — Mensajes.
describen los — Identidad.
atri¬butos físicos, y — Reutilización.
programación — Jerarquía.
(métodos), que — Concurrencia.
gobierna la manera en — Modularidad.
que funciona A partir de estos elementos fundamentales, trataremos de dar un
inter¬namente y en enfoque tanto estructurado como también un enfoque orientado a
que interactúa con objetos.
otras partes Un objeto en el mundo real tiene una apariencia, peso, volumen y se
relacionadas. puede definir por la función que realiza. Tiene por tanto un conjunto
En contraste, la de características (atributos) que describen su naturaleza y
programación funcionalidad. Un objeto es cualquier cosa, real o abstracta, en la
tradicional trabajaba cual almacenamos datos y los métodos que controlan dichos datos,
con “bytes”, variables, pongamos la vista enfrente y estaremos rodeados de objetos.
matrices, índices y

11
La teoría de los diseño estructurados conducen a descomposiciones algorítmicas,
objetos puede ser donde la atención se centra en el flujo del sistema.
aplicada a cualquier — Descomposición orientada a objetos: Trata de identificar
sistema, por que la semánticamente el dominio del problema. El entorno del problema
organiza¬ción de se estudia como un conjunto de agentes autónomos (objetos) que
éstos (objetos) es lo colaboran para realizar un comportamiento complejo.
que define al sistema, Algorítmica. Orientada a objetos.
ya que éste posee Diagramas tipo árbol. Varias posibilidades.
atributos y Desmenuza el problema. Identifica semánticamente el problema.
caracte¬rísticas Se programa en detalle. Se programa a lo grande.
individuales que lo Lenguajes imperativos. Lenguajes declarativos.
hacen organizacional,
desde su En cuanto a las características de las descomposiciones algorítmica
denominación en sí, y orientada a obje¬tos hemos de diferenciar tres términos usados en
su clase, su la orientación a objetos:
poliformismo, el — Análisis Orientado a Objetos: es un método de análisis que
proceso de examina los requeri-mientos desde la perspectiva de clases y
encapsulación, la objetos encontrada en el vocabulario ori¬ginal del problema.
herencia que sucede a — Diseño Orientado a Objetos: es un método de diseño que
otro objeto, los abarca el proceso de descomposición orientado a objetos y una
men¬sajes que de notación para describir modelos lógi¬cos y físicos, dinámicos y
algún modo llevan a estáticos, del sistema bajo diseño.
cabo que se realice — Programación Orientada a Objetos: es el método de
una operación, el implementación en el cual los programas se organizan como
méto¬do como se colecciones cooperantes de objetos, cada uno de los cuales
hace, su identidad, representa un ejemplo de alguna clase, y cuyas clases son todas
que lo difiere de los miembros de una jerarquía de clases unidas por relaciones.
demás, su
reutilización, el orden El concepto renovador de la tecnología de POO es la anexión de
jerarquizado, su procedimientos de programas a elementos de datos. Esta idea
abstracción, cambia la separación tradicional entre datos y programas. A esta
modularidad y, por nueva unión se le llama encapsulamiento y el resultado es un objeto
ultimo, su de software. En JAVA, por ejemplo, todos los procedimientos están
concu¬rrencia. encapsulados y se les llama métodos. Por ejemplo, un objeto de
La solución para tratar ventana en un sistema de interfaz gráfica del usuario contiene las
con la complejidad dimensiones físicas de la ventana, la ubicación en la pan¬talla, los
típica de los colores de primer plano y de fondo, los estilos de borde y otros datos
programas es “Divide relevantes. Encapsulados junto con estos datos, se encuentran los
y ven¬cerás”: métodos
— para mover y modificar el tamaño de la propia ventana, para cambiar
Descomposición sus colores, para des¬plegar texto, para reducirlo a un icono, etc.
Algorítmica (top-down Otras partes del programa de interfaz del usua¬rio sólo llaman a un
o estructural): Rompe objeto de ventana para realizar estas tareas enviándole mensajes
el sistema en par¬tes, bien definidos. El trabajo de un objeto de ventana consiste en
cada una realizar las acciones apropiadas y mantener actualizados sus datos
representando un internos. Para programas fuera del objeto no importa mucho la
pequeño paso del manera exacta en que se realizan estas tareas ni las estructuras de
proceso. Métodos de los datos inter¬nos. La interfaz pública formada por los diferentes

12
tipos de mensajes que métodos internos (privados) de un objeto están fuera de los límites
envía un objeto, del público. El desacoplamiento de los mecanismos privados de los
definen por completo objetos de las rutinas externas a ellos, reducen en gran medida la
la manera de usarlo. complejidad de un pro¬grama.
Ésta es la interfaz de En POO se define una clase para cada tipo diferente de objeto. Se
programación de utilizan una defini¬ción de clase y valores iniciales apropiados para
aplica¬ciones (API, crear una instancia (objeto) de la clase. A esta operación se le
Application conoce como instanciación de objetos.
Programming La tecnología de POO necesita formas fáciles para construir objetos
Interface) del objeto. sobre otros, para eso existen dos métodos principales, composición
El ocultamiento de y herencia. El primero permite que obje¬tos existentes se utilicen
detalles internos hace como componentes para construir otros. Por ejemplo, un objeto de
que un objeto sea calculadora puede estar compuesto por otro de unidad aritmética y
abstracto. uno más de inter¬faz de usuario. La herencia es una función
La separación entre la importante de POO que le permite ampliar y modificar clases
interfaz pública y el existentes sin cambiar su código.
funcionamiento Una subclase hereda código de su superclase y, también, agrega
interno no es difícil de sus propios datos y métodos. La herencia permite la extracción de
comprender. Por elementos comunes entre objetos similares o relacionados. También
ejemplo, cuando permite que se utilicen clases de bibliotecas de software para
montamos en un muchos propósitos diferentes o no previsibles. Heredar de una clase
coche, pensamos en se conoce como herencia simple y heredar de varias clases se
un medio de conoce como herencia múltiple.
transporte que nos Además, POO permite el polimorfismo, que es la capacidad de un
lleve de un lugar a programa para tra¬bajar con diferentes objetos. Se permite la
otro. No pensamos en creación de objetos compatibles que son trans- feribles. La
un masijo de hierros, modificación y el mejoramiento de un programa polimórfico puede
plásti¬co, etc. ser tan sólo cuestión de enlazar objetos actualizados.
Además, si montamos
en el coche del vecino Una clase es como el plano de los objetos. Describe las estructuras
sabremos conducirlo de datos del objeto y sus operaciones asociadas. Una vez que se ha
igualmente pues su definido una clase, es posible declarar los objetos que le pertenecen
forma de utilización es y utilizarlos en un pro¬
la misa. Su grama. Por lo general una clase contiene miembros que pueden ser
funcionamiento campos y métodos. Los primeros son variables que almacenan
interno lo dejamos datos y objetos. Los segundos son funciones que codifican
para cuan¬do falla y operaciones. Es así que ellos reciben argumentos, realizan cálculos
tenemos que pagarle predefinidos y devuelven resultados.
al taller. Cuando se Un mensaje enviado a un objeto invoca un método de ese objeto, le
ejecuta un programa, pasa argumen¬tos y obtiene el valor que devuelve. Los objetos
los objetos se crean, interactúan al enviar y recibir mensajes.
los mensajes se Una clase proporciona el nombre bajo el que se reúnen los
envían y los objetos se miembros para formar una unidad de cálculo que puede operar con
destruyen. Éstas son independencia de otras partes del programa. Con objetos, puede
las únicas construirse un programa grande con muchas unidades pequeñas,
operaciones indepen¬dientes y que interactúan entre sí. La orientación a objetos
permisibles sobre puede reducir significativa¬mente la complejidad del programa,
ellos. Los datos o los aumentar su flexibilidad y mejorar las posibilidades de volver a

13
usarlo. Un programa nivel, nos vamos aden¬trando en él y viendo los subsistemas, en un
puede definir sus tercer nivel nos adentramos en cada uno de los subsistemas, etc.
propias clases, utilizar Ejemplo. Un camión:
las precreadas Si nos abstraemos lo vemos exteriormente como un objeto de
(gene¬ralmente grandes dimensiones y con gran capacidad de carga que puede
guardadas en transportar de un lugar a otro.
bibliotecas de clases) El camión lo podemos dividir en cabina, remolque, usos, coste, etc.
y emplear las que han (subsistemas).
sido creadas por otros Dentro de la cabina vemos que es un habitáculo donde el conductor
programadores. Las se acomoda y controla el camión.
clases pueden estar A su vez dentro del subsistema cabina tenemos: los asientos, la
organizadas en radio, controles, etc. Cada uno de ellos con una función delimitada.
paquetes con un Dentro de cada uno de ellos, ...
nombre. Cada
paquete puede Esta abstracción jerárquica de sistemas en subsistemas se puede
contener uno o más aplicar a los programas que el programador crea y de los datos
archivos de código tradicionales obtenemos su abstracción en objetos. Cada uno de
fuente. estos objetos tiene un comporta¬miento y funcionalidad propio, que
Veamos a se pueden tratar como entidades inde¬
continuación cada uno pendientes y que responden a mensajes (secuencia de pasos de un
de los concepto clave proceso) que les dicen lo que tienen que hacer y en qué orden.
de la programación Una abstracción denota las características esenciales de un objeto
orientada a objetos en que lo distinguen de todos los demás tipos de objetos, y proporciona
profundidad. así fronteras conceptuales definidas con nitidez, desde la
2.3. La perspectiva del observador. Todo objeto es único. Sin embargo, la
abstracción abs¬tracción elimina algunas distinciones para que podamos ver los
La abstracción es una aspectos comunes entre los objetos.
de las bases de la La abstracción es una de las vías fundamentales por la que los
POO. Desde siempre humanos podamos combatir la complejidad. Una abstracción se
el programador ha centra en la visión externa de un objeto y, por lo tanto, sirve para
inten¬tado abstraerse separar el comportamiento esencial de un objeto de su implantación.
y no ver el programa Sin la abstracción sólo sabríamos que cada objeto es diferente de
como un conjunto los demás, con ella se omiten de manera selectiva varias
complejo de código. características distintivas de uno o más objetos, lo que permite
Se pretender ignorar concentrarnos en las características que comparten. Para hacerlo
los detalles y obtener más entendible, diremos que la abstracción: es el acto o resultado
una visión en su de eliminar diferencias entre los objetos, de modo que podamos ver
conjunto. Una forma los aspectos más comunes.
de obtener una buena La abstracción denota las características esenciales que distinguen
abstracción es a un objeto de otros tipos de objetos, definiendo precisas fronteras
utilizando conceptuales, relativas al observador. Las características de la
clasificaciones abstracción son:
jerárquicas. En las — Surge del reconocimiento de similitudes entre ciertos
clasificaciones objetos, situaciones o pro¬cesos en el mundo real.
jerárquicas pri¬mero — Decide concentrarse en estas similitudes e ignorar las
vemos el sistema diferencias.
desde su exterior.
Luego, en un segundo

14
— Enfatiza Ejemplo. Estás en tu coche. Si pisas el freno lo que debe de hacer
detalles con el coche es frenar y no debe de activarse el parabrisas, ni acelerar,
significado para el ni aumentar el volu¬men de la radio, etc. Eso sucede gracias a que
usuario, suprimiendo el sistema de frenado está per¬fectamente definido y funciona como
aquellos detalles que, un sistema independiente y con una
por el momento, son función muy definida. Puede comunicarse con otros sistemas como
irrelevantes o distraen las luces para que se activen las luces de frenado, pero esta
de lo esencial. comunicación está perfectamente definida y aunque no funcionen
— Deben las luces el coche ha de frenar igualmente, igualmente, si el coche
seguir el “principio de no frena el fallo es del sistema de frenado y no de otro sistema.
mínimo compromiso”, Con el encapsulado lo único que debemos conocer del sistema es
que significa que la como acceder a él, sin preocuparnos de los detalles internos
inter- face de un objeto (abstracción) y estamos seguros de que no se van a producir efectos
provee su secundarios imprevistos.
comportamiento Por tanto, el encapsulado consiste en ocultar los detalles de
esencial, y nada más instrumentación de un obje¬to, a la vez que se provee de una
que eso. Pero también interfaz pública por medio de sus operaciones permitidas. En los
el “principio de mínimo modelos orientados a objetos, lo que realmente nos importa es el
asombro”: capturar el comportamiento de los objetos y no cómo está instrumentado ese
comportamiento sin comportamiento. Así, si la instrumentación de un objeto cambia pero
ofrecer sorpresas o su interfaz se mantiene igual, los objetos que interactúan con él no
efectos laterales. se verán afectados por esos cambios. Además, el encapsulamiento
2.4. El oculta la complejidad de la instrumentación. El encapsulamiento es
encapsulado el proceso de compartimentar los elementos de una abstracción que
Se trata de un constituyen su estructura y su compartimiento.
mecanismo que Dicho de otro modo, cada objeto es una estructura compleja en cuyo
permite juntar el interior hay datos y código, todos ellos relacionados entre sí, como
código y los datos y si estuvieran encerrados conjuntamente en una cápsula. Es, a esta
que mantiene a ambos propiedad, a lo que se denomina encapsulamiento. Se puede definir
alejados de posibles como el proceso de almacenar en un mismo compartimiento los
usos indebidos. Para elementos de una abstrac¬ción que constituyen su estructura y su
ello el acceso al comportamiento; sirve para separar la interfaz con-tractual de una
código y a los datos se abstracción y su implantación. El hecho de cada objeto sea una
realiza de forma cápsula facili¬ta enormemente que un objeto determinado pueda ser
controlada a través de transportado a otro punto de la organización, o incluso a otra
una interfaz bien organización totalmente diferente que precise de él. Si el obje¬to ha
definida. El sido bien construido, sus métodos seguirán funcionando en el nuevo
encapsulado permite entorno sin pro¬blemas. Esta cualidad hace que la POO sea muy
que se realice la apta para la reutilización de programas.
migración de las El encapsulamiento es importante porque separa el comportamiento
implementaciones tras del objeto de su implantación. Esto permite la modificación de la
el paso del tiempo, sin implantación del objeto sin que se ten¬gan que modificar las
necesidad de aplicaciones que lo utilizan. La encapsulación sirve para separar la
reescribir de nuevo interface de una abstracción y su implementación.
todo el código — Es un concepto complementario al de abstracción.
(reutilización o — La encapsulación esconde la implementación del objeto
reusibilidad). que no contribuye a sus características esenciales.

15
— La objetos, los usuarios, o incluso los programadores conozcan cómo
encapsulación da está distribuida la información o qué infor¬mación hay disponible.
lugar a que las clases Esta propiedad de los objetos se denomina ocultación de la
se dividan en dos infor¬mación. Esto no quiere decir, sin embargo, que sea imposible
partes: conocer lo necesario res¬pecto a un objeto y a lo que contiene. Si
1. Interface: así fuera no se podría hacer gran cosa con él. Lo que sucede es que
captura la visión las peticiones de información a un objeto deben realizarse a través
externa de una clase, de mensajes dirigidos a él, con la orden de realizar la operación
abarcando la pertinente. La respuesta a estas órdenes será la información
abstracción del requerida, siempre que el objeto considere que quien envía el
comportamiento mensaje está autorizado para obtenerla.
común a los ejemplos El hecho de que cada objeto sea una cápsula facilita enormemente
de esa clase. que un objeto determinado pueda ser transportado a otro punto de
la organización, o incluso a otra orga¬nización totalmente diferente
2. que precise de él. Si el objeto ha sido bien construido, sus métodos
Implementación: seguirán funcionando en el nuevo entorno sin problemas. Esta
comprende la cualidad hace que la POO sea muy apta para la reutilización de
representación de la programas.
abstracción, así como Otra forma de ver su definición: Una de las características centrales
los mecanismos que de POO es la par¬tición del programa completo en pequeñas
conducen al entidades autónomas, llamadas objetos, con interacciones bien
comportamiento definidas. Esta característica reduce significativamente la
deseado. complejidad global y ayuda a la calidad del programa de diferentes
— Se conoce maneras. Un objeto organiza datos y operaciones relacionadas en
también como una caja negra, que oculta las estructuras de datos, las
ocultamiento o repre¬sentaciones y el código interno de la vista exterior. Una
privacidad de la estructura de datos es concreta cuando se conocen sus elementos
informa¬ción. exactos. Los métodos de programación tradicional dependen mucho
Como hemos visto, de datos concretos. Una estructura de datos es abstracta, si sólo
cada objeto es una cono¬cemos su comportamiento y no sus detalles de implantación.
estructura compleja en Por tanto, la abstracción de datos pone el énfasis en el ocultamiento
cuyo interior hay datos de los detalles internos de los datos y sólo pre¬senta su
y programas, todos comportamiento externo. Por ejemplo, sin conocer los detalles de la
ellos relacionados construcción de un automóvil, podemos manejarlo con sólo conocer
entre sí, como si comportamientos como: “al girar el volante en el sentido de las
estuvieran encerrados manecillas del reloj se gira a la derecha”. Esto deja la implan¬tación
conjunta¬mente en de la conducción a la caja negra, que puede utilizar una de las varias
una cápsula. Esta alternativas de dirección: normal, hidráulica, de engranes, etc.
propiedad Además, un objeto también contiene mecanismos o códigos que son
(encapsulamiento), es necesarios para operar las estructuras de datos que están adjuntos
una de las a los códigos para formar una unidad inseparable. A esta técnica se
características le llama encapsulación.
fun¬damentales en la En POO el comportamiento externo de un objeto es un contrato de
OOP. interfaz entre el objeto y sus clientes (los programas que utilizan el
No obstante, los objeto). Este convenio contiene datos/operaciones que quedan
objetos son disponibles para los clientes externos a partir de un objeto y que
inaccesibles, e documenta su significado preciso.
impiden que otros

16
cuales añaden otros. Los mamíferos al ser animales, heredan todos
2.5. La herencia los atributos de los animales (algunas de las cuales heredaban de
La herencia es el los seres vivos) a los cuales añaden otros. Los humanos, como
proceso mediante el animales, etc.
cual un objeto Ejemplo 2. imagínate que tienes un molde para hacer bicicletas sin
adquiere las marchas. Has hecho miles de bicicletas y todo va bien. De repente
propiedades de otro. deseas hacer bicicletas con marchas. ¿Qué te parece mas
Gracias a la herencia apropiado: crear un nuevo molde (es decir, crear de nuevo con todo
se consigue llevar a lo que ello conlleva), o coger el molde anterior y acoplarle las
cabo la idea vista marchas? Ésta es la idea de la herencia, a partir de un sistema
anteriormente de creado se crea uno nuevo acoplándole nuevos atributos.
clasificación La herencia es el medio por el cual los objetos de una clase pueden
jerárquica. Si una acceder a varia¬bles y funciones miembro contenidas en una clase
clase dada encapsula previamente definida, sin tener que vol¬ver a realizar esas
algunos atributos definiciones. Existen dos tipos de herencia:
entonces cualquier A) Herencia simple
clase “hija” de la La herencia simple es aquella en la que una clase puede heredar la
anterior (subclase) estructura de datos y operaciones de una superclase. Es una
heredará los atributos relación entre clases en la que una clase compar¬te la estructura o
de la anterior más los el comportamiento definido en una.
que se le quieran B) Herencia múltiple
defi¬nir. La herencia múltiple se da cuando una clase puede heredar la
La herencia nos da estructura de datos y operaciones de más de una superclase. Es la
reusabilidad de relación entre clases en la que una clase com¬parte la estructura
código. El concepto de demás de una clase base.
herencia se refiere a la La herencia múltiple presenta una gran dificultad y es el hecho que
com¬parición de puede heredar dos operaciones con el mismo nombre. Esto hace
atributos y que las colisiones pueden introducir ambi¬güedad en el
operaciones basadas comportamiento de la subclase que hereda en forma múltiple.
en una relación Nota. El lenguaje C++ permite la herencia múltiple, pero JAVA no lo
jerárquica entre varias per¬mite.
clases. Una clase
pude definirse de
forma general y luego Es una de las propiedades más destacadas de la POO, se puede
redefinirse en definir como un meca¬nismo que define nuevos objetos con base en
sucesivas subclases. los existentes. Lenguajes de programación como C++ y JAVA la
Cada clase hereda soportan con extensión de clase, definiendo una nueva clase con
todas las propiedades base en otra ya existente sin modificarla. A la primera se le llama
de sus superclases y subclase o clase extendida, reci¬be a los miembros de una
añade sus superclase y agrega otros de su propiedad. Aunque también es
propiedades posible que la herede dado el surgimiento de jerarquías.
particulares. JAVA soporta herencia sencilla a través de extensión de clase. En
Ejemplo 1. Los seres este tipo de herencia una clase se extiende a partir de una sola
vivos tienen una serie superclase. Por ejemplo, una subclase puede extenderse de la
de propiedades. Los superclase. Algunos lenguajes POO, como C++, soportan herencia
animales al ser seres múlti¬ple porque una subclase puede tener varias superclases. Al
vivos heredan esas anular la herencia múltiple, JAVA evita las dificultades y
propiedades a las complicaciones relacionadas con este tipo de herencia.

17
Si una clase se comunes de clases diferentes: evita que se dupliquen códigos; y
designa final no puede estructuras idénticas o similares de clases diferentes. Se extraen las
extenderse. El uso par¬tes comunes para formar otra clase y permita que las demás las
experto de la herencia hereden.
a tra¬vés de — Organización de objetos en jerarquías: forma grupos de
subclases contribuye objetos que tienen una relación. Las agrupaciones le dan una mejor
en gran medida a un organización a un programa y per¬mite que los objetos de la misma
programa bien jerarquía se utilicen como tipos compatibles, en oposición a los que
diseñado. carecen totalmente de relación.
Varias son las 2.6. El poliformismo
ventajas de la El polimorfismo que en griego significa “muchas formas” es una
herencia, entre las característica que le permite a una interfaz ser utilizada por una
cuales citamos: clase general de acciones. La frase “una inter¬faz, muchas formas”
— Fácil resume la idea de polimorfismo. El polimorfismo permite que se cree
modificación de un código limpio, sensible, legible y resistente.
código: evita la
modificación del Ejemplo. Para abrir un archivo en Windows se pincha dos veces en
código existente y su icono. Para ver el contenido de una carpeta también se pincha
utiliza la herencia para dos veces sobre su icono. Es decir; en ambos casos hemos
agregar nuevas pinchado dos veces para ejecutar la acción correspon¬diente. La
características o interfaz ha sido la misma aunque con dos formas diferentes.
cambiar Este concepto reduce la complejidad permitiendo que la misma
características interfaz se utilice para especificar una clase general de acción. Es el
existentes. compilador o el intérprete el que debe selec¬cionar la acción
— específica a ejecutar.
Reutilización de El polimorfismo se define como la posibilidad de asumir varias
código existente: formas. Permite que una misma operación pueda llevarse a cabo de
usando la herencia varias formas, en clases diferentes. Desde este punto de vista,
como base de código representa un concepto de teoría de tipos en el que un solo nombre
que funciona y está puede denotar objetos de muchas clases diferentes que se
probado podemos relacionan por alguna supercla- se común. Cualquier objeto
crear nuevas clases denotado por este nombre es, por lo tanto, capaz de respon¬der a
fácilmente. algún conjunto común de operaciones. Una operación es una acción
— Adaptación o transforma¬ción que realiza o padece un objeto. La
de programas para implementación específica de una operación determinada a una
trabajar en situaciones clase determinada se denomina método. Aunque los métodos sean
similares pero dis¬tintos, llevan a cabo el mismo propósito operativo, y así
diferentes: evita que estaríamos hablando también, de polimorfismo.
se vuelvan a escribir Según lo dicho, una operación es una abstracción de un
programas muy comportamiento similar (pero no idéntico) en diferentes clases de
similares porque la objetos. La semántica de la operación debe ser la misma para todas
aplicación, el sistema las clases. Sin embargo, cada método concreto seguirá unos pasos
de computadora, el específicos.
formato de datos o el Existe el polimorfismo cuando interactúan las características de la
modo de operación es herencia y el enlace dinámico. Ésta es quizás la característica más
un poco diferente. importante de los lenguajes orientados a obje¬tos después de su
— Extracción capacidad para soportar la abstracción y es lo que distingue la
de elementos progra¬mación orientada a objetos de otra programación más

18
tradicional con tipos tradicionales de diseño orientado al proceso. Permiten la
abstractos de datos. El reutili¬zación de código y un menor coste de programación.
polimorfismo es 2.7. Clase
también un concepto
central en el diseño La clase es en núcleo de la POO. Se trata de una construcción lógica
orientado a objetos. sobre la que se construye la orientación a objetos. En la clase se
Una de las ventajas define la forma y la naturaleza de un obje¬to. Una clase define un
del polimorfismo es nuevo tipo de dato que se utiliza para crear objetos de ese tipo.
que se puede hacer Dicho de otra forma: una clase es el molde a partir del cual se
una solicitud de una fabri¬can objetos.
ope¬ración sin Una clase está formada por miembros de datos que a su vez son
conocer el método que variables de instan-cia (datos) y métodos. Una clase es, por tanto,
debe ser llamado. No una agrupación de datos (variables o cam¬pos) y de funciones
es otra cosa que la (métodos) que operan sobre esos datos. A estos datos y funciones
posibilidad de per¬tenecientes a una clase se les denomina variables y métodos o
construir varios funciones miembro. La programación orientada a objetos se basa en
métodos con el mismo la programación de clases. Un programa se construye a partir de un
nombre, pero con conjunto de clases.
relación a la clase a la Una vez definida e implementada una clase, es posible declarar
que per¬tenece cada elementos de esta clase. Los elementos declarados de una clase se
uno, con denominan objetos de la clase. De una
comportamientos clase se pueden declarar o crear numerosos objetos. La clase es lo
diferentes. Esto genérico: es el patrón o modelo para crear objetos.
conlleva la habilidad El cuerpo de la clase, encerrado entre { }, es la lista de atributos
de enviar un mismo (variables) y métodos (funciones) que constituyen la clase. No es
mensaje a objetos de obligatorio, pero en general se listan primero los atributos y luego los
clases diferentes. métodos.
Estos objetos La definición de una clase se realiza en la siguiente forma:
recibirían el mismo [ ] class nombredelaclase [datos] {
mensaje global pero [Iista_de_atributos]
responderían a él de [Iista_de_métodos]
formas diferentes. }
El polimorfismo, El esqueleto de cualquier aplicación JAVA se basa en la definición
encapsulado y de una clase. Todos los datos básicos, como los enteros, se deben
herencia son quizás declarar en las clases antes de hacer uso de ellos.
los tres principios En la práctica son pocas las sentencias que se pueden colocar fuera
clave de la del bloque de una clase. La palabra clave import (equivalente al
pro¬gramación #include) puede colocarse al principio de un fichero, fuera del bloque
orientada a objetos. de la clase. Sin embargo, el compilador reemplazará esa senten¬cia
Cuando se aplican con el contenido del fichero que se indique, que consistirá, como es
conjunta y de suponer, en más clases.
adecuadamente Los tipos de clases que podemos definir son:
producen un entorno — Abstract. Una clase abstract tiene al menos un método
de programación que abstracto. Una clase abs¬tracta no se instancia (no se puede crear
admite el desarrollo de ningún objeto de ella), sino que se uti¬liza como clase base para la
programas robustos y herencia.
más fáciles de ampliar
que los modelos

19
— Final. Una 1. Todas las variables y funciones de JAVA deben
clase final se declara pertenecer a una clase. No hay variables y funciones globales.
como la clase que 2. Si una clase deriva de otra (extends), hereda todas sus
termina una cadena variables y métodos.
de heren¬cia. No se 3. JAVA tiene una jerarquía de clases estándar de la que
puede heredar de una pueden derivar las clases que crean los usuarios.
clase final. Por 4. Una clase sólo puede heredar de una única clase (en
ejemplo, la clase Math JAVA no hay herencia múl¬tiple). Si al definir una clase no se
es una clase final. especifica de qué clase deriva, por defecto la clase deriva de Object.
— Public. Las La clase Object es la base de toda la jerarquía de clases de JAVA.
clases public son En C++ sí se permite la herencia múltiple.
accesibles desde 5. En un fichero se pueden definir varias clases, pero en un
otras clases, bien sea fichero no puede haber más que una clase public. Este fichero se
directamente o por debe llamar como la clase public que contiene con extensión *.java.
herencia. Son Con algunas excepciones, lo habitual es escribir una sola clase por
accesibles dentro del fichero.
mismo 6. Si una clase contenida en un fichero no es public, no es
paquete en el que se necesario que el fichero se llame como la clase.
han declarado. Para 7. Los métodos de una clase pueden referirse de modo
acceder desde otros global al objeto de esa clase al que se aplican por medio de la
paquetes, primero referencia this.
tienen que ser 8. Las clases se pueden agrupar en “packages”,
importadas. introduciendo una línea al comien¬zo del fichero (package
— Synchronizable. packageName;).Esta agrupación en packages está rela¬cionada
Este modificador con la jerarquía de directorios y ficheros en las que se guardan las
especifica que todos clases.
los métodos definidos El término clase se refiere a la implantación en software de un tipo
en la clase son de objeto. Especi¬fica una estructura de datos y los métodos
sincronizados, es operativos permisibles que se aplican a cada uno de los objetos. Una
decir, que no se puede clase puede tener sus propios métodos y estructura de datos, así
acceder al mismo como también heredarlos de su superclase. La superclase es la
tiempo a ellos desde clase de la cual hereda otra clase, llamada esta última subclase
distintos threads; el inmediata.
sistema se encarga de
colocar los flags Una clase es una abstracción de un conjunto posiblemente infinito
necesarios para de objetos individuales. Cada uno de estos objetos se dice que es
evitarlo. Este una instancia o ejemplar de dicha clase. Cada instancia de una clase
mecanismo hace que posee sus propios valores para sus atributos, pero comparte el
desde threads nombre de estos atributos y las opera¬
diferentes se puedan ciones con el resto de instancias de su clase. La elección de clases
modificar las mismas es arbitraria, y depende del dominio del problema.
variables sin que haya Nota. La industria utiliza el término clase para hacer referencia a las
problemas de que se implantaciones de los tipos de objetos.
sobrescriban. Se construyen clases a partir de otras clases, las cuales a su vez se
Citaremos ahora integran mediante clases. Así, como los bienes manufacturados se
algunas de las normas fabrican a partir de una serie de materiales de partes y subpartes ya
de las clases en JAVA: existentes, también el software se crea mediante una serie de
materiales de clases ya existentes y probadas.

20
Una clase es un 1. Asociación. Indica relaciones de mandato bidireccionales
conjunto de objetos (punteros ocultos en C++). Conlleva dependencia semántica y no
que comparten una establece una dirección de depen¬dencia. Tienen cardinalidad.
estructura y 2. Herencia. Por esta relación una clase (subclase) comparte
comporta¬miento la estructura o com-portamiento definidos en una (herencia simple)
comunes. o más (herencia múltiple) cla¬ses, llamadas superclases:
— Clase — Representa una relación del tipo “es un” entre clases.
representa una
abstracción, la — Una subclase aumenta o restringe el comportamiento o
esencia que estructura de la superclase (o ambas cosas).
comparten los objetos. — Una clase de la que no existen ejemplos se denomina {\it
— Un objeto es abs¬tracta}.
un ejemplo de una — C++ declara como virtuales todas aquellas
clase. funciones que quiere modificar
— Un objeto no en sus subclases.
es una clase, y una 3. Agregación. Representa una relación del tipo “tener un”
clase no es un objeto entre clases. Cuando la clase contenida no existe
(aunque puede serlo, independientemente de la clase que la contiene se denomina
p.e. en Smalltalk). agregación por valor y además implica contenido físico, mientras
— Las clases que si existe independientemente y se accede a ella indirectamente,
actúan como es agregación por referencia.
intermediarias entre 4. Uso. Es un refinamiento de la asociación donde se
una abstracción y los especifica cuál es el cliente y cuál el servidor de ciertos servicios,
clientes que pretenden permitiendo a los clientes acceder sólo a las interfaces públicas de
utilizar la abstracción. los servidores, ofreciendo mayor encapsulación de la infor¬mación.
De esta forma, la clase 5. Ejemplificación. Se usa en lenguajes que soportan
muestra: genericidad (declaración de clases parametrizadas y argumentos
1. Visión tipo “template”). Representa las relaciones entre las clases
externa de parametrizadas, que admiten parámetros formales, y las clases
comportamiento obtenidas cuando se concretan estos parámetros formales,
(interface), que ejemplificados o ini- cializados con un ejemplo.
enfatiza la abstracción 6. Metaclases. Son clases cuyos ejemplos son a su vez
escondiendo su clases. No se admiten en C++.
estructura y secretos 2.7.2. Relaciones entre clases y objetos
de comportamiento. — Todo objeto es el ejemplo de una clase, y toda clase tiene
2. Visión 0 0 más objetos.
interna — Mientras las clases son estáticas, con semántica,
(implementación), que relaciones y existencia fijas pre¬viamente a la ejecución de un
abarca el código que programa, los objetos se crean y destruyen rápi¬damente durante la
se ofrece en la actividad de una aplicación.
interface de la clase. El diseño de clases y objetos es un proceso incremental e iterativo.
2.7.1. Relaciones Debe asegurar la optimización en los parámetros:
entre clases 1. Acoplamiento: Grado de acoplamiento entre módulos.
Representan tipos de 2. Cohesión: Mide el grado de conectividad entre elementos
compartición entre de un módulo, y entre objetos de una clase.
clases, o relaciones 3. Suficiencia: Indica que las clases capturan suficientes
semánticas. características de la abstrac¬ción para conseguir un
comportamiento e interacción eficiente y con sentido.

21
4. Completitud: variables de ese tipo y crear objetos de ese tipo.
Indica que la interface Una vez que se ha declarado una clase pueden crearse sus objetos.
de la clase captura La definición de una clase es el plano de construcción de los objetos,
todo el significado y éstos se conocen como instancias de la clase. El nombre de ésta
carac¬terístico de una se vuelve un nombre de tipo y puede utilizarse para decla¬rar
abstracción, escrito en variables. Una variable de tipo de clase es una variable de referencia
el mínimo espacio. que puede conte¬ner la dirección de memoria (o referencia) de un
objeto de la clase o null para una refe¬rencia no válida.
5. Primitividad: La inicialización del objeto creado de una clase se hace por medio
Las operaciones del constructor (un método especial de una clase). El operador new
deben implementarse de JAVA asigna espacio dinámicamente (al momento de la
si dan acceso a una ejecución) y se utiliza para crear objetos. En lenguajes como JAVA,
repre¬sentación todos los objetos se crean al momento de la ejecución con el
fundamental de la operador new.
abstracción. Cuáles Veamos un ejemplo:
son operaciones Tenemos una clase llamada cochazo y queremos crear un objeto
primitivas y cuáles no llamado mi coche de esa clase:
(se pueden realizar a cochazo mi_coche = new cochazo();
partir de otras) es un o
asunto subjetivo y cochazo mi_coche; mi_coche = new cochazo();
afecta a la eficiencia El objeto es un concepto, una abstracción o una cosa con unos
en la implementación. límites definidos y que es relevante para el tema en cuestión,
2.8. Objeto podemos decir además que estos poseen identidad y son
La construcción clase distinguibles, aunque dos objetos tengan los mismos valores para
(class) de JAVA todos, sus atribu¬tos son diferentes.
soporta abstracción y En la vida real se llama objeto a cualquier cosa real o abstracta, en
encapsulación de la cual podemos almacenar datos y los métodos para controlar
datos. Una clase dichos datos.
describe la
construcción de un — Un objeto es una cosa tangible, algo a que se puede
objeto y sirve como aprehender intelectualmente o algo hacia lo que se puede dirigir una
plano para construirlo; acción o pensamiento.
espe¬cifica su — Un objeto representa un ítem individual e identificable, o
funcionamiento una entidad real o abstracta, con un papel definido en el dominio del
interno y su interfaz problema.
pública. Cada clase — Un objeto tiene:
tiene un nombre y • Estado.
espe¬cifica a los • Comportamiento.
miembros que • Identidad.
pertenecen a ella; La estructura y el comportamiento de objetos similares se definen
éstos pueden ser en sus clases comu¬nes. El término objeto e instancia de una clase
campos (datos) y son idénticas.
métodos (funciones). Estado de un objeto. El estado de un objeto abarca todas las
Una vez que se define propiedades del objeto, y los valores actuales de cada una de esas
una clase, su nombre propiedades. Las propiedades de los objetos sue¬len ser estáticas,
se vuelve un nuevo mientras los valores que toman estas propiedades cambian con el
tipo de dato y se usa tiempo.
para declarar

22
— El hecho de de los mensajes que intercambia.
que los objetos tengan El comportamiento de un objeto representa su actividad
estado implica que externamente visible y testa- ble. Son las operaciones que una clase
ocupan un realiza (llamadas también mensajes) las que dan cuenta de cómo se
espacio, ya comporta la clase. Por operación se denota el servicio que una clase
en ofrece a sus clientes. Un objeto puede realizar cinco tipos de
el mundo físico, ya en operaciones sobre otro, con el propósito de provocar una reacción:
la memoria del 1. Modificador: altera el estado de un objeto.
ordenador. 2. Selector: accede al estado de un objeto, sin alterarlo.
— El estado de 3. Iterador: permite a todas las partes de un objeto ser
un objeto está influido accedidas en un orden.
por la historia del 4. Constructor: crea un objeto o inicializa su estado.
objeto.
— No deben 5. Destructor: libera el estado de un objeto o destruye el
confundirse los objeto.
objetos, que existen C++ soporta, además de las operaciones, subprogramas libres. En
en el tiempo, son la ter¬minología de C++ las operaciones que un cliente puede
mutables, realizar sobre un obje¬to se declaran como funciones miembro.
tie¬ 2.8.1. Relaciones entre objetos
nen estado, pueden Las relaciones entre objetos abarcan las operaciones, resultados y
ser creados, suposiciones que unos hacen sobre los otros.
destruidos y 1. Links: son conexiones físicas o conceptuales entre
compartidos..., con los objetos. Denota la asociación específica por la que un objeto
valores (los asignados (cliente) usa o solicita el servicio de otro objeto (servidor). El paso
a una variable, por de mensajes entre objetos los sincroniza.
ejemplo) que son 2. Agregaciones: denota relaciones todo/parte, con
cantidades con las capacidad para gobernar desde el todo las partes. Es equivalente a
propiedades de ser la relación “tener un”. El todo puede conte¬ner a la parte.
atemporales, Agregación es conveniente en las ocasiones en que el
inmutables. encapsulamiento de las partes es prioritario. Si se requiere que las
— El estado de relaciones entre objetos estén vagamente acopladas, se utilizan
un objeto representa “links”.
el efecto acumulado 2.9. Propiedades y métodos
de su El método es la especificación de un proceso de una operación, es
comportamiento. un proceso disci¬plinado para generar un conjunto de modelo que
Identidad de un objeto. describen varios aspectos de un sistema de “software” en desarrollo,
Identidad es la utilizando alguna notación bien definida.
propiedad de un Los métodos especifican la forma en que se controlan los datos de
objeto que lo lleva a un objeto. Los
distin¬guirse de otros. métodos en un tipo de objeto sólo hacen referencia a las estructuras
Comportamiento de de datos de ese tipo de objeto. No deben tener acceso directo a las
un objeto. estructuras de datos de otros de objeto. Para utilizar la estructura de
Comportamiento es datos de otro objeto, debe enviar un mensaje a este. El tipo de
como un objeto actúa obje¬to empaca junto los tipos de datos y los métodos.
y reaccio¬na, en 2.9.1. Propiedades
términos de sus Todo objeto puede tener cierto número de propiedades, cada una
cambios de estado y de las cuales ten¬drá, a su vez, uno o varios valores. En POO, las
propiedades corresponden a las clásicas “variables” de la

23
programación porque el objeto las posee por el mero hecho de ser miembro de una
estructurada. Son, por clase.
lo tanto, datos 2.9.2. Métodos
encapsulados dentro Podemos definir al método como un programa procedimental o
del objeto, junto con procedural escrito en cualquier lenguaje, que está asociado a un
los métodos objeto determinado y cuya ejecución sólo puede desencadenarse a
(programas) y las través de un mensaje recibido por éste o por sus descendientes.
relaciones (punteros a Son sinónimos de “método” todos aquellos términos que se han
otros objetos). Las aplicado tradicio¬nalmente a los programas, como procedimiento,
propiedades de un función, rutina, etc. Sin embargo, es con¬veniente utilizar el término
objeto pueden tener “método” para que se distingan claramente las propiedades
un valor único o especiales que adquiere un programa en el entorno POO, que
pueden contener un afectan fundamentalmente a la forma de invocarlo (únicamente a
conjunto de valores través de un mensaje) y a su campo de acción, limi¬tado a un objeto
más o menos y a sus descendientes (no tiene por qué a todos).
estructurados Dado que los métodos son partes de los programas pueden tener
(matrices, vectores, argumentos o pará¬metros. Puesto que los métodos pueden
listas, etc.). Además, heredarse de unos objetos a otros, un objeto puede disponer de un
los valores pueden ser método de dos maneras diferentes (al igual que sucedía con las
de cualquier tipo propiedades):
(numérico, alfabético, — Métodos propios. Están incluidos dentro de la cápsula del
etc.) si el sistema de objeto.
programación lo — Métodos heredados. Están definidos en un objeto en un
permite. objeto antepasado del actual. A veces estos métodos se llaman
Pero existe una “métodos miembro” porque el objeto los posee por el mero hecho de
diferencia con las ser miembro de una clase.
“variables”, y es que — La sobrecarga de métodos consiste en poner varios
las propiedades se métodos con el mismo nom¬bre en la misma clase, pero siempre
pueden here¬dar de que su lista de argumentos sea distinta. El compilador sabría a cuál
unos objetos a otros. de todas las sobrecargas nos referimos por los argu¬mentos que se
En consecuencia, un le pasen en la llamada. Lo que diferencia las listas de argumentos
objeto puede tener de las diferentes sobrecargas no es el nombre de las variables, sino
una propiedad de el tipo de cada una de ellas.
maneras diferentes: Los métodos sobrecargados dan a los programadores la flexibilidad
— Propiedades de llamar a un método similar para diferentes tipos de datos.
propias. Están Un método es un procedimiento de cálculo definido en una clase.
formadas dentro de la Cada método con¬tiene instrucciones que especifican una
cápsula del obje¬to. secuencia de acciones de cálculo que habrán de realizarse, y
variables que se utilizan para almacenar y producir los valores
necesarios. Algu¬nas de las variables pueden ser objetos y el
— proceso de cálculo incluye interacciones entre los mismos,
Propiedades generalmente.
heredadas. Están
definidas en un objeto Un método toma argumentos como entrada, realiza una secuencia
antepasado del actual. de pasos progra¬mados y devuelve un resultado del tipo declarado
A veces estas (existen métodos que no devuelven obligatoriamente un valor,
propiedades se llaman pueden sencillamente cambiar el valor de una propiedad o inicializar
propiedades miembro

24
una de esas molde para hacer objetos (clase) nos debemos plantear muy a
propiedades). conciencia qué propiedades y qué métodos queremos que tenga esa
También puede clase.
lla¬mar a otros Hoy en día casi todos los lenguajes de programación se basan en
métodos en el curso propiedades y méto¬dos, pudiendo el usuario del programa cambiar
de sus cálculos. los valores de estas propiedades a su gusto (ejemplo: escritorio,
Una definición de propiedad: papel tapiz, podemos nosotros configurarlo a nuestro
método contiene un antojo).
encabezado y un 2.10. Mensajes
cuerpo. El Para que el objeto haga algo, enviamos una solicitud. Ésta hace que
encabezado defi¬ne el se produzca una operación. La operación ejecuta el método
nombre del método y apropiado y, de manera opcional, produce una respuesta. El
el tipo del valor de mensaje que constituye la solicitud contiene el nombre del objeto, el
regreso. El nom¬bre de una operación, a veces, un grupo de parámetros.
encabezado también Un mensaje es una solicitud para que se lleve a cabo la operación
especifica variables, indicada y se pro¬duzca el resultado. Por tanto, los mensajes son
conocidas como solicitudes que invocan operaciones espe¬cíficas, con uno o más
parámetros formales, objetos como parámetros. La respuesta a estas órdenes será la
que reciben los infor¬mación requerida, siempre que el objeto considere que quien
argumentos de envía el mensaje está autorizado para obtenerla.
entrada y se utilizan 2.11. Identidad
en el cuerpo del La identidad es aquella propiedad de un objeto que los distingue de
método para realizar todos los demás objetos. La identidad única (pero no
cálculos. necesariamente el nombre) de cada objeto se preser¬va durante el
Mientras que el cuerpo tiempo de vida del mismo, incluso cuando su estado cambia. La
incluye una secuencia identidad es la naturaleza de un objeto que lo distingue de todos los
de declaraciones e demás.
instrucciones 2.12. Reutilización o reusabilidad
encerra¬das entre
llaves, { }, una Es volver a generar una clase, teniendo en cuenta que puede ser útil
declaración para varios siste¬mas, sin tener que volver a generarlos, ahorrando
proporciona con esto tiempo para pro¬gramación, etc. Las clases están definidas
información al para que se reutilicen en muchos sis¬temas. Para que ésta sea
compilador y una efectiva, las clases se deben construir a partir de un modo que
instrucción especifica puedan ser adaptables y reutilizables indefinidamente.
las acciones que Un objetivo de las técnicas orientadas a objetos es lograr la
habrán de ejecutarse. reutilización masiva al construir un “software”. Los sistemas suelen
En general, a las ser construidos a través de objetos ya exis¬tentes, que se lleva a un
propiedades y a los alto grado de reutilización, esto conlleva a un ahorro de dinero, un
métodos de una clase menor tiempo de desarrollo y una mayor confiabilidad de sistemas.
se les suele llamar Por lo tanto, si ya hemos puesto a prueba una clase en un sistema,
miem¬bros de datos tendremos la garantía y la confiabilidad que podrá volver a ser
pues realmente son reutilizada.
los únicos elementos 2.13. Jerarquía
que aparecen La jerarquía es una clasificación u ordenación de abstracciones. Las
físicamente dentro de dos jerarquías más importantes en un sistema complejo son su
la clase. Antes de estructura de clases y su estructura de objetos,
pretender crear un jerarquía de clase y jerarquía de partes correspondientemente.

25
Como ya habíamos de computadores para la implanta¬ción que se persigue o utilizar
mencionado procesadores capaces de realizar multitareas, a través de un hilo de
anteriormente la control, mediante la cual se producen acciones dinámicas
herencia es el ejemplo independientes dentro del sistema. La concurrencia permite a
más claro de una diferentes objetos actuar al mismo tiempo.
jerarquía de clases. 2.14.2. Persistencia
Ésta define una Es la propiedad por la cual la existencia de un objeto trasciende en
relación entre clases, el tiempo (esto es, el objeto sigue existiendo después de que su
en la que una clase creador deja de existir) o en el espacio (esto es, la localización del
compar¬te la objeto cambia respecto a la dirección en la que fue creado).
estructura de 2.14.3. Tipificado
comportamiento
definida en una o más Tipificar es la imposición de una clase a un objeto, de tal modo que
clases (herencia obje¬tos de diferentes tipos no se puedan intercambiar, o se puedan
simple o heren¬cia intercambiar sólo de forma restringida.
múltiple, — Tipo es una caracterización precisa de las propiedades
respectivamente). estructurales y de com-portamiento que comparten una colección de
2.14. entidades.
Concurrencia, — Una clase define un nuevo tipo de objetos, por tanto, clase
persistencia y y tipo muchos pro¬gramadores los consideran sinónimos.
tipificado — Existen lenguajes fuertemente tipificados (Ada) y
2.14.1. débilmente tipificados. Estos últimos soportan polimorfismo,
Concurrencia mientras que los fuertemente tipificados no.
Es la propiedad que 2.15. Modularidad
distingue un objeto La modularidad es la propiedad que posee un sistema que ha sido
activo de uno no descompuesto en un conjunto de módulos cohesivos y débilmente
activo. Concurrencia acoplados. La modularización consiste en dividir un programa en
permite que diferentes módulos que pueden compilarse separadamente, pero que tiene
objetos actúen al conexiones con otros módulos. Así, los principios de abstracción,
mismo tiempo, usando encapsulamiento y modularidad son sinérgicos (puede haber
distintos threads muchas más abstracciones diferentes de las que se pueden
(hilos) de control. comprender simultáneamente, el encapsulamiento ayuda a manejar
Para cierto tipos de esta com¬plejidad ocultando la visión interna de las abstracciones.
problemas, un sistema La modularidad ayuda ofreciendo una vía para agrupar
automatizado puede abstracciones relacionadas lógicamente).
tener que manejar 2.16. Relaciones entre los conceptos asociados al modelo de
muchos eventos objetos
diferentes — Los conceptos de abstracción y encapsulación son
simultáneamente, en conceptos complementarios: abstracción hace referencia al
otro problema pueden comportamiento observable de un objeto, mien¬tras encapsulación
implicar tantos hace referencia a la implementación que la hace alcanzar este
cálculos que excedan comportamiento.
la capacidad de — Existe una tensión entre los conceptos de encapsulación
cualquier procesador de la información y el concepto de jerarquía de herencia, que
individual. En ambos requiere una apertura en el acceso a la información.
casos es natural — C++ ofrece mucha flexibilidad, pudiendo disponer de tres
considerar el uso de compartimentos en cada clase:
un conjunto distribuido

26
1. Privado: suceder a otro la posesión de bienes o acciones.
declaraciones MENSAJE Información que se le envía a alguien.
accesibles sólo a la MÉTODO Modo de hacer en orden una cosa, modo habitual
clase (completamente de procede.
encapsulado). IDENTIDAD Cualidad de ser lo mismo que otra cosa con que
2. Protegido: se compara.
declaraciones REUSABILIDAD Acción de volver a utilizar. Que puede volver a
accesibles a la clase y ser utilizado.
a sus subclases. JERARQUÍA Orden o grados de una especie.
3. Público: ABSTRACCIÓN Separación, apartamiento, aislamiento,
declaraciones prescindir.
accesibles a todos los CONCURRENCIA Asistencia, reunión simultánea de personas o
clientes. cosas.
Además de estos tres MODULARIDAD Acción de pasar de un término a otro.
tipos, C++ soporta la
definición de clases 3. Ventajas e inconvenientes
cooperativas a las que 3.1. Ventajas de POO
se les permite acceder Un programa grande de computadora se encuentra entre las
a la parte privada de la construcciones más com¬plejas. El costo del diseño, la
implementación. Estas implantación, la verificación, el mantenimiento y la revisión de
clases se denominan sistemas grandes de “software” es muy alto. Por tanto, es importante
friends. encontrar mane¬ras de facilitar estas tareas. En este sentido, POO
tiene un potencial enorme.
Los sistemas orientados a objetos son también más resistentes al
Vamos a realizar un cambio y, por lo tanto, están mejor preparados para evolucionar en
esquema de cada uno el tiempo, porque su diseño esta basa¬do en formas intermedias
de los términos vistos: estables.
OBJETO Fin, intento, El modelo de objetos ha influido incluso en las fases iniciales del
propósito. Materia y ciclo de vida del desa¬rrollo del software. El análisis orientado a
sujeto de una ciencia. objetos (AOO) enfatiza la construcción de mode¬los del mundo real
CLASE Orden de utilizando una visión del mundo orientado a objetos. El análisis
cosas de una misma orien¬tado a objetos es un método de análisis que examina los
especie. Conjunto de requisitos desde la perspectiva de las clases y objetos que se
órdenes. encuentran en el vocabulario del dominio del problema.
POLIMORFISMO
Propiedad Básicamente los productos del análisis orientado a objetos sirven
de los cuerpos que como modelos de los que se puede partir para un diseño orientado
cambian de forma sin a objetos; los productos del diseño orien¬tado a objetos pueden
cambiar su naturaleza. utilizarse entonces como anteproyectos para la imple- mentación
Presencia de distintas completa de unos sistemas utilizando métodos de programación
formas individuales en orientado a objetos, de esta forma se relacionan AOO, DOO y POO.
una sola especie. La Programación Orientada a Objetos ofrece las siguientes ventajas
ENCAPSULACIÓN principales:
Proceso de — Simplicidad: como los objetos de “software” son modelos
constitución de una de objetos reales en el dominio de la aplicación, la complejidad del
cápsula. programa se reduce y su estructura se vuelve clara y simple.
HERENCIA
Derecho de

27
— interacción entre los objetos sin alterarlos.
Modularidad: cada — Facilidad para darle mantenimiento: los objetos pueden
objeto forma una mantenerse por separa¬do, lo que facilita la localización y el arreglo
entidad separada cuyo de problemas, así como la adición de otros elementos.
funcionamiento — Reusabilidad: los objetos pueden emplearse en diferentes
interno está programas. Por ejem¬plo, si se tiene uno que construye tablas
desacoplado de otras puede utilizarse en cualquier programa que requiera cierto tipo de
partes del sistema. tabla. Por tanto, es posible construir programas a par¬tir de
— Facilidad componentes prefabricados y preprobados en una fracción del
para hacer tiempo requerido para elaborar nuevos programas desde el
modificaciones: es principio.
sencillo hacer cambios — Dominio del problema: el paradigma O.O. es más que una
menores en la forma de programar. Es una forma de pensar acerca de un problema
representación de los desde el punto de vista del mundo real en vez de desde el punto de
datos o los vista del ordenador. El AOO permite analizar mejor el dominio del
procedimientos problema, sin pensar en términos de implementar el sistema de un
utilizados en un ordenador, permite, además, pasar directamente el dominio del
programa Orientado a problema al modelo del sistema.
Objetos (O.O.). Las — Comunicación: el concepto O.O. es más simple y está
modificaciones menos relacionado con la informática que el concepto de flujo de
hechas en el interior datos. Esto permite una mejor comuni¬cación entre el analista y el
de un obje¬to no experto en el dominio del problema.
afectan ninguna otra
parte del programa, — Consistencia: los objetos encapsulan tanto atributos como
siempre y cuando se operaciones. Debido a esto, el AOO reduce la distancia entre el
preserve su punto de vista de los datos y el punto de vista del proceso, dejando
comportamiento menos lugar a incon¬sistencias disparidades entre ambos modelos.
externo. — Expresión de características comunes: el paradigma lo
— Posibilidad utiliza la herencia para expresar explícitamente las características
de extenderlo: la comunes de una serie de objetos estas característica comunes
adición de nuevas quedan escondidas en otros enfoques y llevan a duplicar entidades
funciones o la en el análisis y código en los programas. Sin embargo, el paradigma
respuesta a ambientes O.O. pone especial énfasis en la reutilización y proporciona
operativos cambiantes mecanismos efecti¬vos que permiten reutilizar aquello que es
puede lograrse con común sin impedir por ello describir las diferencias.
sólo introducir algunos — Resistencia al cambio: los cambios en los requisitos
objetos nuevos y afectan notablemente a la funcionalidad de un sistema por lo que
variar algunos afectan mucho al software desarrollando con métodos
existentes. estructurados. Sin embargo, los cambios afectan en mucha menos
— Flexibilidad: medida a los objetos que componen o maneja el sistema, que son
un programa mucho más estables. Las modificaciones necesarias para adaptar
Orientado a Objetos una aplicación basada en objetos a un cambio de requisitos suelen
(O.O.) puede ser muy estar mucho más localizadas.
maneja¬ble al — Reutilización: aparte de la reutilización interna, basada en
adaptarse a diferentes la expresión explícita de características comunes, el paradigma O.O.
situaciones, porque es desarrolla modelos mucho más próximos al mundo real, con lo que
posible cambiar los aumentan las posibilidades de reutilización. Es probable que en
patrones de

28
futuras aplicaciones software sea más intuitivo porque la gente piensa naturalmente en
nos encontremos con términos de objetos más que en términos de algoritmos de
objetos iguales o “software”.
similares a los de la 3.2. Inconvenientes de la POO
actual. En un sistema orientado a objetos los problemas (si los hubiese)
Todos los problemas suelen surgir en la implementación de tal sistema. Muchas
aún no han sido compañías oyen acerca de los beneficios de un sis¬tema orientado
solucionados en forma a objetos e invierten gran cantidad de recursos luego comienzan a
completa. Pero como darse cuenta que han impuesto una nueva cultura que es ajena a
los objetos son los programadores actuales. A pesar de ser muy pocos los
portables mientras inconvenientes de la POO, citaremos los siguientes:
que la herencia
permite la reusabilidad — Curvas de aprendizaje largas. Al hacer la transición a un
del código orienta¬do sistema orientado a obje¬tos la mayoría de los programadores
a objetos, es más deben capacitarse nuevamente antes de poder usarlo.
sencillo modificar — Dependencia del lenguaje. La elección de un lenguaje
código existente orientado a objetos u otro tiene ramificaciones de diseño muy
porque los objetos no importantes.
interaccio- nan — Determinación de las clases. Una clase es un molde que
excepto a través de se utiliza para crear nue¬vos objetos. Si bien hay muchas jerarquías
mensajes; en de clase predefinidas usualmente se deben crear clases específicas
consecuencia un para la aplicación que se esté desarrollando. En con¬secuencia, es
cambio en la importante crear el conjunto de clases adecuado para un proyecto.
codificación de un — Descomposición funcional. El análisis estructurado se
objeto no afectará la basa en la descomposición funcional del sistema que queremos
operación con otro construir. El problema es que no existe un mecanismo para
objeto siempre que los comprobar si la especificación del sistema expresa con exactitud los
métodos respectivos requisitos del sistema.
per¬manezcan — Flujos de datos. El análisis estructurado muestra cómo
intactos. La fluye la información a tra¬vés del sistema. Aunque este enfoque se
introducción de adapta bien al uso de sistemas infor¬máticos para implementar al
tecnología de objetos sistema, no es la forma habitual de pensar.
como una herramienta — Modelo de datos. El análisis estructurado moderno
con¬ceptual para incorpora modelos de datos, además de modelos de procesos y de
analizar, diseñar e comportamiento. Sin embargo, la relación entre los modelos es muy
implementar débil, y hay muy poca influencia de un modelo en otro.
aplicaciones permite 4. Patrones de diseño y lenguaje de modelado unificado
obtener aplicaciones (UML)
más modificables, 4.1. UML
fácilmente extensibles UML, Lenguaje Unificado de Modelado (Unified Modeling Language)
y a partir de es el lenguaje de modelado de sistemas de software. Es un lenguaje
componentes gráfico para visualizar, especificar, construir y documentar un
reusables. Esta sistema de software. UML ofrece un estándar para describir un
reusabilidad del “plano” del sistema (modelo), incluyendo aspectos conceptuales
código disminuye el tales como procesos de negocios y funciones del sistema, y
tiempo que se utiliza aspectos concretos como expresiones de lenguajes de
en el desarrollo y hace programación, esquemas de bases de datos y componentes de
que el desarrollo del software reutilizables.

29
Es importante — Construir, a partir de los modelos especificados.
remarcar que UML es — Documentar, los propios elementos gráficos sirven de
un “lenguaje” para documentación.
especificar y no un 4.1.1. Bloques de construcción de un modelo UML
método o un proceso, Un modelo UML está compuesto por tres clases de bloques de
se utiliza para definir construcción:
un sistema de A) Elementos
software, para detallar Los elementos son abstracciones de cosas reales o ficticias (objetos,
los artefactos en el acciones, etc.).
sistema y para — Pueden ser estructurales, de comportamiento de
documentar y agrupación o de anotación.
construir -es el — Elementos estructurales: actores, casos de uso,
lenguaje en el que clases, objetos.
está descrito el — Elementos de comportamiento: mensajes.
mode¬lo-. Se puede — Elementos de agrupación: paquetes.
aplicar en una gran
variedad de formas
para soportar una B) Relaciones
metodología de Relacionan los elementos entre sí. Las relaciones pueden ser del
desarrollo de software tipo:
pero no especifica en • Dependencia
sí mismo qué Es una relación semántica entre dos elementos, en la cual un
metodología o cambio en un elemen¬to puede afectar a la semántica de otro
proceso usar. elemento. Existen varios tipos de dependencia pre¬definidas que se
UML es un lenguaje. indican mediante extend o include para casos de uso.
Un lenguaje • Asociación
proporciona un Es una relación estructural entre dos elementos, que describen las
vocabulario y unas conexiones entre ellos (suele ser bidireccional). Puede presentarse
reglas para per¬mitir como agregación o composición.
una comunicación.
Este lenguaje nos • Generalización
indica cómo crear y Es una relación entre un elemento más general (el padre) y un
leer los modelos, pero elemento más específico (el hijo).
no dice cómo crearlos. • Implementación
Esto último es el Es una relación en la que un elemento (hijo) realiza las acciones
objetivo de las indicadas por el padre.
metodologías de 4.2. Diagramas
desarrollo. Los Son colecciones de elementos con sus relaciones. UML cuenta con
obje¬tivos de UML varios tipos de dia¬gramas, los cuales muestran diferentes aspectos
son: de las entidades representadas. Los vere¬mos en esta sección:
— Visualizar,
expresa de forma
gráfica. 4.2.1. Diagramas de estructura
— Especificar, Enfatizan en los elementos que deben existir en el sistema
las características de modelado. Los diagramas estructurales representan elementos y así
un sistema. componen un sistema o una función. Estos dia¬gramas pueden
reflejar las relaciones estáticas de una estructura, como lo hacen los
dia¬gramas de clases o de paquetes, o arquitecturas en tiempo de

30
ejecución, tales como serían: la marca, tamaño, color y peso.
dia¬gramas de — Operaciones: son aquellas actividades o verbos que se
Objetos o de pueden realizar con/para
Estructura de este objeto, como por ejemplo abrir, cerrar, buscar, cancelar,
Composición. acreditar, cargar. De la misma manera que el nombre de un atributo,
• Diagrama de clases el nombre de una operación se escribe con minúsculas si consta de
una sola palabra. Si el nombre contiene más de una palabra, cada
Los diagramas de palabra será unida a la anterior y comenzará con una letra
clases son utilizados mayúscula, a excepción de la primera palabra que comenzará en
durante el proceso de minúscula. Por ejemplo: abrirPuerta, cerrarPuerta, buscarPuerta,
análisis y diseño de los etc.
sistemas informáticos, — Interfaz: es un conjunto de operaciones o propiedades que
donde se crea el permiten a un obje¬to comportarse de cierta manera, por lo
diseño conceptual de que define los requerimientos mínimos
la información que se del objeto.
manejara en el — Herencia: se define como la reutilización de un objeto
sistema, y los padre ya definido para poder extender la funcionalidad en un objeto
componentes que se hijo. Los objetos hijos heredan todas las operaciones o propiedades
encar¬ de un objeto padre. Por ejemplo: una per¬sona puede subdividirse
garan del en Proveedores, Acreedores, Clientes, Accionistas, Empleados;
funcionamiento y la todos comparten datos basicos como una persona, pero además
relación entre uno y ten¬drá información adicional que depende del tipo de persona,
otro. Muestra una como saldo del cliente, total de inversión del accionista, salario del
colección de empleado, etc.
ele¬mentos de • Diagrama de componentes
modelado declarativo Un diagrama de componentes representa la separación de un
(estáticos), tales como sistema de “sofware” en componentes físicos (por ejemplo archivos,
clases, tipos y sus cabeceras, módulos, paquetes, etc.) y muestra las dependecias
contenidos y entre estos componentes. Representa los componentes que
relaciones. Se basan componen una aplicación, sistema o empresa. Los componentes,
en: sus relaciones, interacciones y sus interfaces públicas.
— Los diagramas de componentes describen los elementos físicos del
Propiedades: también sistema y sus rela¬ciones. Muestran las opciones de realización
llamados atributos o incluyendo código fuente, binario y ejecuta¬ble. Los componentes
características, son representan todos los tipos de elementos software que entran en la
valores que fabricación de aplicaciones informáticas. Pueden ser simples
corresponden a un archivos, paquetes de Ada, bibliotecas cargadas dinámicamente,
objeto, como color, etc. Las relaciones de dependencia se utilizan en los diagramas de
material, cantidad, componentes para indicar que un componente utiliza los servicios
ubicación. ofrecidos por otro componente.
General¬mente se
conoce como la Un diagrama de componentes representa las dependencias entre
información detallada compo¬nentes “software”, incluyendo componentes de código
del objeto. fuente, componentes del código binario, y componentes ejecutables.
Suponiendo que el Un módulo de “software” se
objeto es una puerta, puede representar como componente. Algunos componentes
sus propiedades existen en tiempo de com¬pilación, algunos en tiempo de enlace y
algunos en tiempo de ejecución, otros en varias de éstas.

31
Un componente de un componente proveedor del que depende. Los tipos de
sólo compilación es dependencias son específicos del lenguaje y se pueden
aquel que es repre¬sentar como estereotipos de las dependencias.
significativo El diagrama también puede usarse para mostrar interfaces y las
únicamente en tiempo dependencias de lla¬mada entre componentes, usando flechas con
de compilación. Un líneas discontinuas desde los componentes a las interfaces de otros
componente componentes.
ejecutable es un El diagrama de componente hace parte de la vista física de un
programa ejecutable. sistema, la cual mode¬la la estructura de implementación de la
Un diagrama de aplicación por sí misma, su organización en com¬ponentes y su
componentes tiene despliegue en nodos de ejecución. Esta vista proporciona la
sólo una versión con oportunidad de establecer correspondecias entre las clases y los
descriptores, no tiene componentes de implementación y nodos. La vista de
ver¬sión con implementación se representa con los diagramas de componentes.
instancias. Para • Diagrama de objetos
mostrar las instancias Los diagramas de objetos son utilizados durante el proceso de
de los componentes Análisis y Diseño de los sistemas informáticos en la metodología
se debe usar un UML.
dia¬grama de Se puede considerar un caso especial de un diagrama de clases en
despliegue. el que se muestran instancias específicas de clases (objetos) en un
Un diagrama de momento particular del sistema. Los dia¬gramas de objetos utilizan
componentes muestra un subconjunto de los elementos de un diagrama de clase. Los
clasificadores de diagramas de objetos no muestran la multiplicidad ni los roles,
componentes, las aunque su notación es similar a los diagramas de clase. Una
clases defi¬nidas en diferencia con los diagramas de clase es que el com¬partimiento de
ellos, y las relaciones arriba va en la forma, Nombre de objeto: Nombre de clase. Por
entre ellas. Los ejemplo, Miguel: Persona.
clasificadores de
componentes también Un diagrama que presenta los objetos y sus relaciones en un punto
se pueden anidar del tiempo. Un diagrama de objetos se puede considerar como un
dentro de otros caso especial de un diagrama de clases o un diagrama de
clasificadores de comunicaciones.
componentes para • Diagrama de despliegue
mostrar relaciones de El Diagrama de Despliegue es un tipo de diagrama del Lenguaje
definición. Unificado de Mode¬lado que se utiliza para modelar el hardware
Un diagrama que utilizado en la implementaciones de sistemas y las relaciones entre
contiene sus componentes.
clasificadores de Los elementos usados por este tipo de diagrama son nodos
componentes y de (representados como un prisma), componentes (representados
nodo se puede utilizar como una caja rectangular con dos protuberancias del lado
para mostrar las izquierdo) y asociaciones.
dependencias del En el UML 2.0 los componentes ya no están dentro de nodos. En
compilador, que se cambio, puede haber artefactos u otros nodos dentro de un nodo.
representa como Un artefacto puede ser algo como un archivo, un programa, una
flechas con líneas biblioteca, o una base de datos construida o modificada en un
discontinuas proyecto. Estos artefactos implementan colecciones de
(dependencias) de un componentes. Los nodos internos indican ambientes, un concepto
componente cliente a más amplio que el hardware propiamente dicho, ya que un ambiente

32
puede incluir al de la jerarquía lógica de un sistema.
lenguaje de Los paquetes están normalmente organizados para maximizar la
programación, a un coherencia interna dentro de cada paquete y minimizar el
sistema operativo, un acoplamiento externo entre los paquetes. Con estas líneas maestras
ordenador o un cluster sobre la mesa, los paquetes son buenos elementos de gestión. Cada
de terminales. paque¬te puede asignarse a un individuo o a un equipo, y las
Un diagrama de dependencias entre ellos pueden indicar el orden de desarrollo
despliegue físico requerido.
muestra cómo y dónde Un diagrama que presenta cómo se organizan los elementos de
se desplegará el modelado en paque¬tes y las dependencias entre ellos, incluyendo
sistema. Las importaciones y extensiones de paquetes.
máquinas físicas y los • Diagrama de Estructura de Composición
procesadores se Representa la estructura interna de un clasificador (tal como una
representan como clase, un componente o un caso de uso), incluyendo los puntos de
nodos y la interacción de clasificador con otras partes del sistema.
construcción interna
puede ser
representada por Los diagramas de composición de estructuras fueron
nodos o artefactos específicamente diseñados para la representación de patrones de
embebidos. Como los diseño, y son una de las modificaciones de mayor impac¬to dentro
artefactos se ubican de UML 2.0. Los diagramas de composición de estructuras permiten,
en los nodos para potencial¬mente, documentar arquitecturas de software de manera
modelar el despliegue un poco más clara que en ver¬siones anteriores del UML 2.0.
del sistema, la 4.2.2. Diagramas de comportamiento
ubicación es guiada Enfatizan en lo que debe suceder en el sistema modelado. Los
por el uso de las diagramas de compor¬tamiento representan las características de
especificaciones de comportamiento de un sistema o proceso de negocios y, a su vez,
despliegue. incluyen a los diagramas de: actividades, casos de uso, máquinas
• Diagrama de estados, tiempos, secuencias, repaso de interacciones y
de paquetes comunicaciones.
En el Lenguaje • Diagrama de actividades
Unificado de En el Lenguaje de Modelado Unificado, un diagrama de actividades
Modelado, un representa los flu¬jos de trabajo paso a paso de negocio y
diagrama de paquetes operacionales de los componentes en un sistema. Un Diagrama de
muestra cómo un Actividades muestra el flujo de control general.
sistema está dividido En SysML el diagrama de Actividades ha sido extendido para indicar
en agrupaciones flujos entre pasos que mueven elementos físicos (e.g., gasolina) o
lógicas mostrando las energía (e.g., presión). Los cambios adi¬cionales permiten al
dependencias entre diagrama soportar mejor flujos de comportamiento y datos
esas agru¬paciones. continuos.
Dado que Muchos cambios fueron realizados en los diagramas de actividad en
normalmente un la versión 2 de UML. Los cambios realizados son tendentes a:
paquete está pensado — Dar soporte en la definición de procesos de negocio.
como un directorio, los — Brindar una semántica similar al de las redes de Petri.
dia¬gramas de — Permitir una mayor y más flexible representación de
paquetes suministran paralelismo.
una descomposición

33
Representa los mucho más detallados que los diagramas de casos de uso.
procesos de negocios El estándar de Lenguaje de Modelado Unificado de OMG define una
de alto nivel, incluidos notación gráfi¬ca para realizar diagramas de casos de uso, pero no
el flujo de datos. el formato para describir casos de uso. Mucha gente sufre la
También puede equivocación pensando que un caso de uso es una notación gráfica
utilizarse para modelar (o es su descripción). Mientras la notación gráfica y las
lógica compleja o descripciones son importantes, ellas son documentación de un caso
paralela dentro de un de uso: un propósito para el que el actor puede usar el sis¬tema. los
sistema. diagramas de casos de uso son diagramas que muestran las
• Diagrama relaciones entre acto¬res y el sistema.
de casos de uso Un diagrama que muestra las relaciones entre los actores y el sujeto
En el Lenguaje de (sistema), y los casos de uso.
Modelado Unificado, El valor verdadero de un caso de uso reposa en dos áreas:
un diagrama de casos — La descripción escrita del comportamiento del sistema al
de uso es una especie afrontar una tarea de negocio o un requisito de negocio. Esta
de diagrama de descripción se enfoca en el valor sumi¬nistrado por el sistema a
comportamiento. El entidades externas tales como usuarios humanos u otros sistemas.
Lenguaje de — La posición o contexto del caso de uso entre otros casos
Modelado Unificado de uso. Dado que es un mecanismo de organización, un conjunto de
define una notación casos de uso coherentes, consis¬tentes promueve una imágen fácil
grá¬fica para del comportamiento del sistema, un entendi¬miento común entre el
representar casos de cliente/propietario/usuario y el equipo de desarrollo.
uso llamada modelo Es práctica común crear especificaciones suplementarias para
de casos de uso. UML capturar detalles de requisitos que caen fuera del ámbito de las
no define estánda¬res descripciones de los casos de uso. Ejemplos de esos temas incluyen
para que el formato rendimiento, temas de escalabilidad/gestión, o cumplimiento de
escrito describa los estándares.
casos de uso, y así Relaciones de Casos de Uso. Las tres relaciones principales entre
mucha gente no los casos de uso son soportadas por el estándar UML, el cual
entiende que esta describe notación gráfica para esas relaciones.
notación gráfica define Include. En una forma de interacción, un caso de uso dado puede
la naturaleza de un “incluir” otro. El primer caso de uso a menudo depende del resultado
caso de uso; sin del caso de uso incluido. Esto es útil para extraer comportamientos
embargo una notación verdaderamente comunes desde múltiples casos de uso a una
gráfi¬ca puede solo descripción individual. La notación es una flecha rayada desde el
dar una vista general caso de uso que lo incluye hasta el caso de uso incluido, con la
simple de un caso de etiqueta “include”. Este uso se asemeja a una expansión de una
uso o un conjunto de macro donde el comportamiento del caso incluido es colocado
casos de uso. Los dentro del comportamiento del caso de uso base. No hay parámetros
diagramas de casos o valores de retorno.
de uso son a menudo
confundidos con los Extend. En otra forma de interacción, un caso de uso dado (la
casos de uso. extensión), puede extender a otro. Esta relación indica que el
comportamiento del caso de uso extensión puede ser insertado en
Mientras los dos el caso de uso extendido bajo ciertas condiciones. La notación es
conceptos están una flecha rayada desde el caso de uso extensión al caso de uso
relacionados, los extendido, con la etique¬ta “extend”. Esto puede ser útil para lidiar
casos de uso son

34
con casos especiales, computador a procesos de negocio.
o para acomodar Un diagrama de Máquina de Estados ilustra cómo un elemento,
nuevos requisitos muchas veces una clase, se puede mover entre estados que
durante el clasifican su comportamiento, de acuerdo con dis¬paradores de
mantenimiento del transiciones, guardias de restricciones y otros aspectos de los
sistema y su diagramas de Máquinas de Estados, que representan y explican el
extensión. movimiento y el comportamiento.
Generalization. En la Lo siguiente son los elementos básicos de notación que pueden
tercera forma de usarse para compo¬ner un diagrama:
relación entre casos — Círculo lleno, apuntando a un estado inicial
de uso, existe una — Círculo hueco que contiene un círculo lleno más pequeño
relación en el interior, indi¬cando el estado final (si existiera)
generalización/especi — Rectángulo redondeado, denotando un estado. En la parte
alización. Un caso de superior del rectán¬gulo está el nombre del estado. Puede contener
uso dado puede estar una línea horizontal en la mitad, debajo de la cual se indican las
en una forma actividades que se hacen en el estado
especializada de un — Flecha, denotando transición. El nombre del evento (si
caso de uso existente. existiera) que causa esta transición etiqueta el cuerpo de la flecha.
La notación es una Se puede añadir una expresión de Guar¬da, encerrada en corchetes
línea solida ([]) denotando que esta expresión debe ser cierta para que la
ter¬minada en un transición tenga lugar. Si se realiza una acción durante la transición,
triángulo dibujado se añade a la etiqueta después de “/”.
desde el caso de uso NombreDeEvento[ExpresiónGuarda]/acción
especializado al caso — Línea horizontal gruesa con x>i líneas entrando y i línea
de uso gene¬ral. Esto saliendo o i línea entran¬do y x>i líneas saliendo. Éstas denotan
se asemeja al Unión/Separación, respectivamente.
concepto orientado a
objetos de sub-clases, Un diagrama de Máquina de Estados ilustra cómo un elemento,
en la práctica puede muchas veces una clase, se puede mover entre estados que
ser útil factorizar clasifican su comportamiento, de acuerdo con disparado¬res de
comportamientos transiciones, guardias de restricciones y otros aspectos de los
comunes, diagramas de Máquinas de Estados, que representan y explican el
restricciones al caso movimiento y el comportamiento. Al igual que los diagramas de
de uso general, secuencia, las Máquinas de Estados permiten un mejor rehúso, a
descríbelos una vez, y través del agre¬gado de Puntos de Entrada y Puntos de Salida
enfréntate a los (Entry/Exit Points). Las máquinas de estados son ahora
detalles excepcionales generalizables y soportan una vista centrada en la transición. Las
en los casos de uso capacidades de generalización incluyen: agregar estados y
especializados. transiciones, extender estados, reem¬plazar transiciones,
• Diagrama de estados reemplazar maquinas compuestas, etc. Lo que permite que, por
El diagrama de ejemplo, dada una clase que hereda de otra, especificar ambas
estados de UML es un clases mediante máquinas de estados que heredan funcionalidad.
diagrama de estados 4.2.3. Diagramas de interacción
con notación Son un subtipo de diagramas de comportamiento, que enfatiza sobre
estandariza¬da que el flujo de con¬trol y de datos entre los elementos del sistema
puede describir los modelado. El UML 2.0 se encuentra dise–ado de manera Orientada
elementos, desde un a Objetos, dentro de la nueva organización interna, y cuenta con los
programa de llamados “Diagramas de Interacciones”, que son una subcategoría

35
de los diagra¬mas de que el diagrama de casos de uso permite el modelado de una vista
comportamiento. “busi- ness” del escenario, el diagrama de secuencia contiene
Estos diagramas detalles de implementación del escenario, incluyendo los objetos y
muestran la clases que se usan para implementar el escenario, y mensajes
interacción entre pasados entre los objetos. Típicamente uno examina la descripción
distintos de un caso de uso para determinar qué objetos son necesarios para
clasifica¬dores de un la implementación del escenario. Si tienes modelada la descripción
modelo desde de cada caso de uso como una secuencia de varios pasos, entonces
distintos puntos de puedes “caminar sobre” esos pasos para descubrir qué objetos son
vista, es decir, necesarios para que se puedan seguir los pasos. Un diagrama de
haciendo foco en secuencia muestra los objetos que intervienen en el escenario con
distintos aspectos de líneas discontinuas verticales, y los mensajes pasados entre los
la interacción. Esto objetos como vectores horizontales. Los mensajes se dibujan
hace que todos los cronológicamente desde la parte superior del diagrama a la parte
diagramas de inferior; la distribución horizontal de los objetos es arbitraria. Durante
interacción tengan el análisis inicial, el modelador típicamente coloca el nombre “busi-
ciertas características ness” de un mensaje en la línea del mensaje. Más tarde, durante el
compartidas, como diseño, el nombre “business” es reemplazado con el nombre del
por ejemplo la método que está siendo llamado por un objeto en el otro. El método
capacidad de crear llamado, o invocado, pertenece a la definición de la case ins-
Diagramas de tanciada por el objeto en la recepción final del mensaje.
des¬cripción de Las modificaciones de los diagramas de secuencias tienden
interacción y la básicamente a permitir la reutilización de los diagramas, agregando
utilización de los elementos de tipos Fragmento Combinado.
fragmentos Un diagrama que representa una interacción, poniendo el foco en la
combinados. Dichos secuencia de los mensajes que se intercambian, junto con sus
conceptos serán correspondientes ocurrencias de eventos en las Líneas de Vida.
descriptos a
continuación • Diagrama de comunicación (Antiguos diagramas de
utilizando los colaboración)
diagramas de Anteriormente tenían el nombre de “Diagramas de Colaboración”.
secuencias. Por ser las colaboraciones un diagrama de interacción, al igual que
• Diagrama los diagramas
de secuencia de secuencias, heredan la misma capacidad de soportar fragmentos
El diagrama de combinados. En UML 2.0, un diagrama de comunicación es una
secuencia es uno de versión simplificada del diagrama de colabora¬ción de la versión de
los diagramas más UML i.x.
efectivos para modelar Un diagrama de Comunicación modela las interacciones entre
inte¬racción entre objetos o partes en tér¬minos de mensajes en secuencia. Los
objetos en un sistema. diagramas de Comunicación representan una com¬binación de
Un diagrama de información tomada desde el diagrama de Clases, Secuencia, y
secuencia muestra la Diagrama de casos de uso describiendo tanto la estructura estática
interacción de un como el comportamiento dinámico de un sistema.
conjunto de objetos en Los diagramas de comunicación y de secuencia describen
una aplicación a información similar, y con ciertas transformaciones, pueden ser
través del tiempo y se transformados unos en otros sin dificultad.
modela para cada Para mantener el orden de los mensajes en un diagrama de
caso de uso. Mientras comunicación, los men¬sajes son etiquetados con un número

36
cronológico y tiempo especificado, y el instan¬te exacto en que cualquiera de las
colocados cerca del señales cambia de estado con respecto a las restantes.
enlace por el cual se El propósito primario de los diagramas de tiempos (o temporizados)
desplaza el mensaje. es mostrar los cambios en el estado, o la condición, de una línea de
Leer un diagrama de vida de una instancia (de un Clasifi¬cador o un Rol de un
comunicación conlleva clasificador), a lo largo del tiempo y de manera lineal. El uso más
comenzar en el común es mostrar el cambio de estado de un objeto a lo largo del
men¬saje i.o, y seguir tiempo, en respuesta a los eventos o estímulos aceptados.
los mensajes desde El propósito primario del diagrama de tiempos es mostrar los
un objeto hasta el cambios en el estado o la condición de una línea de vida
siguiente, (representando una Instancia de un Clasificador o un Rol de un
sucesivamente. clasificador) a lo largo del tiempo lineal. El uso más común es
Es un diagrama que mostrar el cambio de estado de un objeto a lo largo del tiempo, en
enfoca la interacción respuesta a los eventos o estímulos acepta¬dos. Los eventos que
entre líneas de vida, se reciben se anotan, a medida que muestran cuándo se desea
donde es central la mostrar el evento que causa el cambio en la condición o en el
arqui¬tectura de la estado.
estructura interna y
cómo ella se
corresponde con el • Diagramas de Revisión de interacciones
pasaje de mensajes. Es un diagrama que muestra cómo interactúan varios diagramas de
La secuencia de los interacciones. Este tipo de diagramas es muy útil para mostrar de
mensajes se da a qué manera distintos escenarios se combinan.
través de un esquema Los Diagramas de Revisión de la Interacción enfocan la revisión del
de numerado de la flujo de control, donde los nodos son Interacciones u Ocurrencias de
secuencia. Interacciones. Las Líneas de Vida los Mensajes no aparecen en este
• Diagrama de tiempos nivel de revisión.
Un diagrama de 4.2.4. Diagramas UML 2.0
tiempos o cronograma La superestructura del UML es la definición formal de los elementos
es una gráfica de que componen el UML 2.0. Éste se encuentra organizado en
formas de onda paquetes, que definen los elementos inter¬nos del UML y de qué
digitales que muestra manera se relacionan. El diseño interno del UML 2.0 se encuentra
la relación temporal orientado a objetos.
entre varias señales, y
cómo varía cada señal
en relación a las
demás.
Un cronograma puede
contener cualquier
número de señales
relacionadas entre sí.
Examinando un
diagrama de tiempos,
se puede determinar
los estados, nivel alto
o nivel bajo, de cada
una de las señales en
cualquier instante de

37
38
40

También podría gustarte