Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programación I
Escuela de Ingeniería de sistemas Informáticos
01/01/2017
Escuela de Ingeniería de Sistemas Informáticos UES/FIA
Programación I
Contenido de la Unidad:
1. Programación Orientada a Objetos.
2. PE frente a POO.
3. Terminología Básica.
4. Técnicas de la POO.
5. El Lenguaje Unificado de Modelado (UML)
6. Diseño dirigido por responsabilidades.
7. Diagrama de clases
8. Diagrama de caso de uso
Introducción.
Los conceptos de la Programación Orientada a Objetos (POO) tienen origen en Simula 67,
un lenguaje diseñado para hacer simulaciones con naves aéreas. La idea surgió al agrupar
los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de
objetos de definir sus propios datos y comportamientos. Fueron refinados más tarde en
Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre
BASIC) pero diseñado para ser un sistema completamente dinámico en el cual los objetos
se podrían crear y modificar en tiempo de ejecución en lugar de tener un sistema basado
en programas estáticos.
Abstracción.
Encapsulamiento y Ocultación de datos.
Polimorfismo.
Herencia.
Reusabilidad o Reutilización de Código
ninguna relación entre ellos; ya que lo único que se busca es el procesamiento de unos
datos de entrada para obtener otros de salida.
Los programadores que emplean POO, en cambio, primero definen objetos para luego
enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.
Para realizar una comparación, se listarán las ventajas y desventajas de estas dos formas
de programación:
inicios de los años 60’s), sigue estando en vigencia y es muy utilizada para iniciar el
aprendizaje de la programación.
del objeto. Estos datos o variables son los que con sus valores en un momento dado,
indican el estado de un objeto.
Por ejemplo, para un objeto automóvil, algunos de sus atributos son: propietario, marca,
año de matrícula, potencia etc.
Para un objeto estudiante, algunos de sus atributos podrían ser: carnet, nombre,
carrera, asignaturas aprobadas, etc.
La identidad y estado de los objetos, tienen que ver con los atributos, y estos pueden ser
modificados por el comportamiento de los objetos.
Clase: es la representación de un conjunto de objetos del mismo tipo, es decir que los
distinguen los mismos atributos y las mismas funciones (o comportamiento).
Es la definición (o implantación) de un tipo abstracto de datos; es decir que una clase
describe no sólo los atributos de los objetos que la forman, sino que también incluye sus
procesos (funciones o comportamiento).
Según Luis Joyanes Aguilar, “una clase es una caracterización abstracta de un conjunto de
objetos”.
Métodos: son las operaciones (acciones o funciones) definidas para los objetos, y
permiten crearlos, cambiar su estado o consultar el valor de los atributos. Cuando se llama
a una operación de un objeto se interpreta como el envío de mensaje a dicho objeto. En
otras palabras, un método es una subrutina asociada a una clase.
Algunos de los diferentes tipos de método que existen son los siguientes:
Relaciones entre Clases: los objetos del medio ambiente no permanecen aislados y
separados unos de los otros, todo lo contrario se comunican entre sí para poder apoyarse
y ayudarse entre sí. De la misma forma las clases que forman parte del ambiente de un
problema se relacionan entre sí y con ello se permite que los objetos colaboren entre sí e
intercambien información.
Asociación: Es la relación más importante y común entre clases. Refleja una relación
entre dos clases independientes que se mantiene durante la vida de los objetos de
dichas clases o al menos durante un tiempo prolongado.
Composición: Este tipo de relación entre clases indica dependencia entre ellas, indica
que una clase es parte esencial de otra; es una relación mucho más fuerte que la
agregación ya que de eliminarse una clase, deja de existir la otra. Dicho de otra forma, si
la clase origen “el todo” se elimina o destruye, las otras clases (o “las partes”) también se
destruyen.
Dependencia: Esta relación indica la necesidad de una clase hacia otra, es decir que la
implantación de una clase depende de otra; los métodos u operaciones de una clase
requieren de los atributos de los objetos de la otra clase.
Herencia: Indica que una subclase hereda los métodos y atributos especificados por una
Superclase, por ende la subclase además de poseer sus propios métodos y atributos,
poseerá las características y atributos visibles de la superclase.
Si los miembros de autos o las diferencias entre autos individuales no son relevantes,
entonces se utilizan expresiones y operaciones tales como: se fabrican autos, se usan
autos para trasladarse de un lado a otro, se descompone el auto en sus partes, etc.
4.3 Polimorfismo
Es la capacidad del código de un programa para ser utilizado con diferentes tipos de datos
u objetos. También se puede aplicar a la propiedad que poseen algunas operaciones de
tener un comportamiento diferente, dependiendo del objeto (o tipo de dato) sobre el que
se aplican. Así, en un lenguaje de programación el operador “+” representa la suma de dos
números ( x + y ) de diferentes tipos: enteros, flotantes. Pero también, el mismo operador
puede definir la operación de sumar dos cadenas: concatenación. De modo similar,
suponiendo un número de figuras geométricas que responden todas al mensaje
CalcularArea; cada objeto reacciona a este mensaje haciendo el cálculo correspondiente
de la superficie, el cual difiere de una figura a otra.
Ilustración 1
4.4 Herencia
Se refiere al comportamiento y a las técnicas que garantizan que una parte o la totalidad
de un programa informático existente se puedan emplear en la construcción de otro
programa. De esta forma se aprovecha el trabajo anterior, se economiza tiempo, y se
reduce la redundancia.
Para que el código existente se pueda reutilizar, debe definir alguna forma de
comunicación o interfaz. Esto se puede dar por llamadas a una subrutina, a un objeto, o a
una clase.
En la primera mitad de la década de los 90’s, los lenguajes de modelado que imperaban
eran OMT-2 (Object Modeling Technique), creado por James Rumbaugh, OOSE (Object
Oriented Software Engineering), creado por Ivan Jacobson y Booch93, creado por Grady
Booch.
Grady Booch llamó a James Rumbaugh y formaron equipo en una nueva empresa llamada
Rational Corporation (cuyo propietario era Grady) con el objetivo de fusionar sus dos
En 1997 OMG aceptó UML como estándar (versión 1.1) y nació el primer lenguaje de
modelado visual orientado a objetos como estándar abierto de la industria. En 1998, OMG
lanzó dos revisiones más, 1.2 y 1.3. En el año 2000 se presentó UML 1.4 con la importante
aportación de la semántica de acción, que describe el comportamiento de un conjunto de
acciones permitidas que se pueden implementar mediante lenguajes de acción. La versión
1.5 siguió a las ya citadas.
Un modelo es una abstracción de cosas reales, es decir es una simplificación del sistema
real; en pocas palabras es la representación gráfica de una situación real, mediante una
simbología que esquematiza clases, objetos, relaciones, etc. Entonces, si un modelo es la
representación gráfica de una situación real; por lo tanto, modelado implica realizar un
esquema (gráfico o dibujo).
Con un lenguaje formal de modelado, el lenguaje es abstracto aunque tan preciso como
un lenguaje de programación. Esta precisión permite que un lenguaje sea legible y que
pueda ser interpretado, ejecutado y transformado entre sistemas.
La siguiente figura presenta una forma de clasificación de los diferentes diagramas UML:
Ilustración 2
Los diagramas estructurados se utilizan para capturar la organización física de las cosas del
sistema. Por ejemplo, cómo se relacionan unos objetos con otros. Mientras que, los
diagramas de comportamiento se centran en el comportamiento de los elementos de un
sistema.
Una vez que se ha establecido la estructura de alto nivel para el modelo mediante la
identificación de las entidades y las relaciones entre , el siguiente paso es identificar las
Finalmente, se describen los patrones esperados del comportamiento del modelo por
medio de gráficos que representan los cambios a lo largo del tiempo en los valores de las
variables del sistema que se consideran más importantes.
Existen dos estrategias generales para identificar los componentes del modelo: una de
ellas consiste en incluir pocos componentes y posteriormente añadir aquellos
componentes críticos que inicialmente fueron omitidos; la otra consiste en incluir todos
los componentes que podrían ser de importancia en la etapa inicial, para luego descartar
aquellos que parecen superfluos.
Teóricamente el resultado final de las dos estrategias debería ser un modelo conceptual
con el grado mínimo de complejidad que permita abordar el problema. En la práctica es
mejor comenzar con un modelo que sea lo más simple posible.
Este diagrama se utiliza en la etapa de análisis del problema y diseño de la solución. Los
símbolos más utilizados en este diagrama son:
RECTANGULO: representa una clase, dividido en tres partes, una para el nombre de la
clase, otra para los atributos y la última para los métodos o funciones.
Ilustración 3
FLECHAS: indican la relación que existe entre dos clases. Las flechas pueden ser continuas
o punteadas, pueden tener punta o no y puede ser sustituída por rombos, según sea la
relación que indique, como se verá más adelante:
Ilustración 4
Para poder distinguir una clase de otra, siempre es importante y necesario identificarlos
con un nombre que las diferencie entre sí, para los atributos y métodos debe hacerse
también esta distinción. Existen las siguientes reglas básicas o convenciones que guardar
para nombrarlos:
Para poder ejemplificar un diagrama de clases, que incluye las clases y sus relaciones, se
va a ampliar un poco más sobre las relaciones de asociación y agregación, que son las que
se utilizan con frecuencia:
Asociación
Esta relación se establece cuando dos clases tienen una dependencia de utilización, es
decir que una clase utiliza atributos y/o métodos de otra clase para funcionar, ambas
clases tienen la misma jerarquía, es decir que ninguna es parte de la otra. La relación entre
clases conocida como Asociación, permite asociar objetos que colaboran entre sí.
Ejemplo:
Notar que las dos clases están unidas
por una línea y no por una flecha,
porque: Cuando las flechas van de
izquierda a derecha y de arriba hacia
abajo, se puede omitir la punta
Ilustración 5 de la flecha.
Un cliente puede tener asociadas muchas Ordenes de Compra, en cambio una Orden de
Compra sólo puede tener asociado a un cliente.
Agregación
Con este tipo de relación se indica que un objeto forma parte de otro objeto; por ejemplo
si se tiene el objeto: computadora, esta tiene un monitor, que es otro objeto; el monitor
forma parte de la computadora; por lo tanto tienen una relación de agregación. Esta
relación también es conocida como “forma parte de …” Ejemplo:
Aquí las flechas tienen punta ya que están
inclinadas.
Un Almacén posee Clientes y Cuentas (los rombos van en el objeto que posee las
referencias, es decir el objeto que está formado por los otros: el todo y las partes).
Cuando se destruye el Objeto Almacén también son destruidos los objetos Cuenta
asociados, en cambio no son afectados los objetos Cliente asociados.
Enunciado: En un juego de dados, un jugador toma dos dados y los lanza. Luego, se suman
los valores de las caras superiores de los dados. Si el valor es 7 gana el juego, de lo
contrario pierde.
Listar clases:
Juego de Dados
Jugador
Dado Atributo de cada Dado: Valor de la cara Resultado es la suma de las caras
Ilustración 7
3. Agregar asociaciones:
Ilustración 8
4. Agregar atributos:
De esta manera el Diagrama de clases, únicamente con atributos y relaciones, queda así:
Ilustración 9
Los conceptos básicos del paradigma OO son clase y objeto. En el modelo OO se combina
la estructura y el comportamiento de los datos en una única entidad, los objetos. Los
objetos son simplemente entidades que tienen sentido en el contexto de una aplicación
(dominio del problema).
Todos los objetos son ejemplares o instancias de alguna clase, los términos instancia y
objeto son intercambiables. Los objetos de una misma clase tienen las mismas
responsabilidades. Los objetos con las mismas responsabilidades pueden ser agrupados en
una clase. Las clases son abstracciones que generalizan dominios de objetos.
La POO se basa en el modelo OO. Los objetos del mundo real son representados como
objetos en el diseño y en la programación. En el modelo OO, toda entidad del dominio del
problema se expresa a través del concepto de objeto y éstos se generalizan a través del
concepto de clase. Entendemos por dominio del problema, al problema que se intenta
resolver en término de complejidades específicas, terminologías, retos, etc.
Comúnmente, como respuesta a este ejemplo se enuncia el peón, el caballo, la torre, etc.,
pero sin dudas estos son conceptos o abstracciones que agrupan a las piezas concretas
que aparecen en el juego de ajedrez, es decir, peón, caballo y torre entre otras,
constituyen clases, que entre sus responsabilidades tienen el color, la posición que
ocupan, la forma de avanzar y comer, etc. Los objetos son entonces los 16 peones (8
negros y 8 blancos), los 4 caballos, las 4 torres, el tablero, etc.
Durante una partida de ajedrez, dos peones negros que hayan sido comidos tienen
exactamente las mismas características y sin embargo son objetos distintos. Precisamente,
una de las características de los objetos que permite su identificación es su identidad.
“Identidad significa que los datos son divididos en entidades discretas y distintas,
denominadas objetos”.
Además los objetos pueden ser concretos o conceptuales, como el método de Gauss para
determinar raíces en sistemas de ecuaciones lineales.
Todo objeto tiene su propia identidad, que le es inherente, significa que los objetos se
distinguen por su propia existencia y no por las propiedades descriptivas que puedan
tener. Es esto lo que lo diferencia de los otros objetos semejantes. En otras palabras, dos
objetos son diferentes, incluso si todos los valores de sus características son idénticos.
Sin dudas que la forma de cada una de las piezas, el color, la manera de avanzar y comer,
en conclusión, las características (forma y color) y funcionalidades (manera de avanzar y
comer) de cada una de las piezas, que no son más que sus responsabilidades, facilitaron
determinar los objetos en el ejemplo anterior.
Podemos concluir que el estado de un objeto viene dado por el valor de sus características
y el comportamiento del objeto por las acciones u operaciones que realiza. Es decir las
responsabilidades podemos dividirlas en dos grupos, aquellas que determinan el estado
(atributos) y las que determinan el comportamiento (métodos).
Los atributos son valores almacenados por los objetos de una clase mientras que los
métodos son secuencias de pasos para determinar un comportamiento. Los métodos
pueden ser llamados (invocados) en principio, solamente desde dentro de la clase o a
través de una instancia u objeto de la misma.
Como se verá en secciones posteriores, es útil distinguir los métodos que tienen efectos
colaterales, es decir, que pueden cambiar el estado del objeto (métodos de
transformación), de los que apenas consultan el valor de algún atributo o realizan un
cálculo funcional sin modificar ningún el estado del objeto (método de consulta o acceso).
Referencias
Chávez, R. P. (2003). Programación orientada a objetos con c#. La Habana: Universidad de Ciencias
Informáticas.