Documentos de Académico
Documentos de Profesional
Documentos de Cultura
METODOLOGIA DE LA
PROGRAMACION II
Programación Orientada a Objetos
Ing. Gerzon Barrientos Copa
TEMA 1
INTRODUCCION A LA PROGRAMACION
ORIENTADA A OBJETOS
Antecedentes
La programación estructurada que se ha estudiado en profundidad en otros semestres viene
representada por lenguajes procedimentales clásicos como Pascal y C, aunque los más antiguos
como FORTRAN, COBOL o BASIC también pertenecen a esta categoría. En estos lenguajes, cada
sentencia (instrucción) del lenguaje indica a la computadora que debe realizar alguna acción o
tarea.
Cuando un programa se vuelve complejo el programa se divide en unidades más pequeñas que se
hagan más comprensibles a las personas que lo utilizan. Estas unidades en C, C++, Java se
denominan funciones; en otros lenguajes el mismo concepto se conoce por el término de
subrutina, procedimiento o subprograma.
Antecedentes
La idea de dividir un programa en funciones se extiende al agrupamiento de un número
determinado de funciones en una entidad más grande llamada módulo (que normalmente se
agrupa en un archivo o fichero).
El principio siempre es el mismo: agrupar componentes que ejecutan una lista de instrucciones.
Desde el punto de vista de un lenguaje procedimental, como C, existen dos tipos de datos: locales y
globales.
Este fundamento se vuelve más claro cuando se consideran objetos físicos en términos de clases,
componentes, propiedades y comportamiento, y sus objetos creados de las clases.
Combinar en una única unidad tanto datos como operaciones que operan sobre los datos.
Esta característica permite modelar los objetos del mundo real de un modo mucho más eficiente
que con funciones y datos.
Las operaciones de un objeto, se llaman funciones miembro (C++) o métodos (Java), son la
única alternativa para acceder o modificar sus datos.
Los datos están ocultos y se dice que junto con las funciones están encapsulados en una entidad
única.
Este paradigma de programación supera las limitaciones que tiene la programación tradicional o
procedimental.
Se piensa en los datos que se necesitan para describir el objeto (estático) y las operaciones que
describirán la interacción con los datos (dinámica).
Propiedades de la POO
Abstracción
Es la propiedad que considera los aspectos más significativos o notables de un problema y expresa
una solución en esos términos.
Una clase es un elemento en C++ o en Java que traduce una abstracción a un tipo definido por el
usuario y combina representaciones de datos y métodos para manipular esa información en un
paquete.
El principio de la abstracción es más fácil de entender con una analogía del mundo real.
Una forma de reducir la complejidad es, la abstracción, donde las características y procesos de
cualquier sistema se resumen en los aspectos esenciales y más relevantes; de este modo, las
características complejas de los sistemas se vuelven más manejables.
Propiedades de la POO
Abstracción
Ejemplo 1
Sin embargo: ¿Sabemos cómo funciona internamente?. ¿Conocemos cómo recibe la señal por la
antena, por cable, o satélite, traduce la señal y la visualiza en pantalla?. La respuesta es:
La abstracción se manifiesta en C++ o Java con el diseño de una clase que implementa la interfaz
y que no es más que un tipo de dato específico.
En este caso, los objetos que poseen las mismas características y comportamiento se agrupan en
clases que son unidades de programación que encapsulan datos y operaciones; la encapsulación
oculta lo que hace un objeto de lo que hacen otros objetos del mundo exterior, por lo que se
denomina también ocultación de datos.
Un objeto tiene que presentar una “cara” con el mundo exterior, para poder iniciar operaciones y ser
la comunicación con el mundo exterior.
Ejemplo 2
• La televisión tiene un conjunto de botones en la misma o en un control remoto.
• Una máquina lavadora tiene un conjunto de mandos e indicadores que establecen la
temperatura y el nivel del agua.
Propiedades de la POO
Encapsulamiento y ocultación de datos
En esencia, la interfaz de una clase representa un contrato de prestación de servicios entre ella y
los demás componentes del sistema; de este modo, los clientes de un componente sólo necesitan
conocer los servicios que éste ofrece y no cómo están implementados internamente.
Se puede modificar la implementación de una clase sin afectar a las restantes relacionadas con
ella, dando lugar la separación entre la interfaz y la implementación. La interfaz establece qué se
puede hacer con el objeto; de hecho, la clase actúa como una caja negra.
Ejemplo 3
• En los automóviles no se necesita conocer el funcionamiento de la caja de cambios, el
sistema de frenos o la climatización para que el conductor utilice todos estos
dispositivos.
Ejemplo 4
• La clase animal se divide en mamíferos, anfibios, insectos, aves, etc.
• La clase vehículo se divide en autos, camiones, autobuses, motocicletas, etc.
• La clase electrodoméstico se divide en lavadora, frigorífico, tostadora, microondas.
La clase principal de la que derivan las restantes se denomina base, padre o superclase; las
subclases se denominan derivadas o hijas. Así también las clases bases también pueden ser
subclases o derivarse de otras superclases.
La idea principal de estas divisiones reside en el hecho de que cada subclase comparte
características con la clase de la cual se deriva.
Propiedades de la POO
Herencia
Ejemplo 5
• Los autos, camiones, autobuses, y motocicletas, tienen motor, ruedas y frenos; pero,
además de estas características compartidas, cada subclase tiene sus propias
características; por ejemplo los autos pueden tener maletero, cinco asientos; los
camiones cabina y caja para transportar carga, etc.
Las clases reflejan que el mundo real contiene objetos con propiedades o atributos y
comportamiento; la herencia manifiesta que dichos objetos tienden a organizarse en jerarquías;
esta jerarquía, desde el punto de vista del modelado, se denomina relación de generalización o
es-un (del inglés is-a).
Ejemplo 6
• Se puede definir una clase Animal que encapsule todas las propiedades o atributos
(altura, peso, número de patas, etc.) y el comportamiento u operaciones (comer, dormir,
andar) que pertenecen a cada uno. Donde los animales específicos como mono, jirafa,
canguro o pingüino tienen a su vez características propias.
Propiedades de la POO
Herencia
Ejemplo 6 (Cont.)
• Como las técnicas de herencia se representan con la citada relación es-un, se puede decir que
mono es-un Animal con características propias: subir a lo árboles, saltar entre ellos, entre otras;
además, comparte con jirafa, canguro y pingüino las características propias de cualquier animal,
como comer, beber, correr, dormir, etc.
En resumen La herencia permite la creación de nuevas clases a partir de otra ya existente; la que
sirve de modelo se llama base y la que se creó, hereda: sus características, además se pueden
personalizar añadiendo rasgos adicionales.
Propiedades de la POO
Herencia
Propiedades de la POO
Herencia
Propiedades de la POO
Polimorfismo
El polimorfismo es la propiedad que le permite a una operación o función tener el mismo nombre en
clases diferentes y actuar de modo distinto en cada una de ellas; por ejemplo:
• Se puede abrir una puerta, una ventana, un libro, un periódico, una cuenta en un banco,
una conversación, un congreso; en cada caso se realiza una acción diferente.
En la práctica, polimorfismo implica la capacidad de una operación de ser interpretada sólo por el
propio objeto que lo invoca; desde un punto de vista práctico de ejecución del programa, el
polimorfismo se realiza en tiempo de ejecución, ya que durante la compilación no se conoce qué
tipo de objeto y por consiguiente cuál operación fue invocada.
Otro ejemplo de polimorfismo es, por ejemplo: la operación típica como cambiar los frenos en un
taller de reparaciones de automóviles donde existen diferentes marcas, modelos, potencias,
carburantes, etc., que constituyen una clase o colección heterogénea, donde la operación es la
misma, los principios de trabajo son iguales, sin embargo, dependiendo del auto en particular, la
operación cambiará e incluirá diferentes acciones.
Propiedades de la POO
Polimorfismo
El polimorfismo es importante en el modelado de sistemas porque el uso de palabras iguales tiene
comportamientos distintos, según el problema a resolver.
El uso de operadores o funciones de forma diferente, dependiendo de los objetos sobre los que
actúan, se denomina polimorfismo (un elemento con diferentes formas).
Sin embargo, cuando a un operador existente, tal como + o =, se le permite operar con diferentes
tipos de datos, dicho operador está sobrecargado, y éste es un tipo especial de polimorfismo y una
característica sobresaliente de los lenguajes de programación orientada a objetos.
Propiedades de la POO
Reutilización (Reusabilidad)
Otra propiedad fundamental de la programación orientada a objetos es la reutilización o
reusabilidad; este concepto significa que una vez que se ha creado, escrito y depurado una clase,
se puede poner a disposición de otros programadores; de manera similar, al uso de las bibliotecas
de funciones en un lenguaje de programación procedimental como C.
Las otras propiedades comunes de varias clases sólo necesitan ser implementadas una vez y sólo
necesitan modificarse una vez si es necesario. También, está soportado el concepto de abstracción
de la funcionalidad común.
La facilidad con la que el software existente se puede reutilizar es una propiedad muy importante de
la POO. La idea de usar código existente no es nueva en programación, ni lógicamente en C++ o
Java. Por ejemplo:
• En C++ cada vez que se imprime algo con cout se está reutilizando código. No se
escribe el código de salida a pantalla para visualizar los datos sino que se utiliza el flujo
ostream existente para realizar el trabajo.
El no tener en cuenta la ventaja de utilizar el código disponible lleva a volver a escribir código ya
existente, comúnmente dicho “inventar la rueda” cada día, o al menos en cada proyecto.
Propiedades de la POO
Reutilización (Reusabilidad)
Es importante en el diseño de un código la escritura de código reusable. Se debe diseñar los
programas de modo que se pueda reutilizar las clases, los algoritmos y las estructuras de datos.
Los programadores de un proyecto en el que se trabaja, se debe poder utilizar los componentes
anteriores, tanto en el proyecto actual como en futuros proyectos.
En general, se debe evitar diseñar código en exceso o específico para casos puntuales; siempre
que sea posible reutilice código existente.
Una técnica del lenguaje C++ para escribir código de propósito general es utilizar plantillas
(templates). En lugar de escribir, por ejemplo, una estructura de datos Pila para tratar números
reales, etc. es preferible diseñar una plantilla o tipo genérico Pila que sirva para cualquier tipo de
dato a procesar.
Objetos
¿Qué es un objeto?
En el mundo real, las personas identifican los objetos como elementos que pueden ser percibidos
por los cinco sentidos; cuentan con propiedades específicas que definen su estado como: posición,
tamaño, color, forma, textura, etc.; además tienen ciertos comportamientos que los hacen diferentes
de otros objetos.
Booch define un objeto como “una entidad (algo) que tiene un estado, un comportamiento y una
identidad”. Supongamos que el estado de la máquina de una fábrica puede estar conformado por:
encendida/apagada (on/off), su potencia, velocidad máxima, velocidad actual, temperatura, etc; su
comportamiento puede incluir diversas acciones para encenderla y apagarla, obtener su
temperatura, activar o desactivar otras máquinas, condiciones de señal de error o cambiar de
velocidad; su identidad se basa en el hecho de que cada instancia de una máquina es única y está
identificada por un número de serie; los que se eligen para enfatizar el estado y el comportamiento
se apoyarán en cómo un objeto máquina se utilizará en una aplicación.
Un mensaje es una instrucción que se envía a un objeto, el cual se ejecutará al recibirlo; incluye el
identificador que contiene la acción a realizar por el objeto junto con los datos que éste necesita
para efectuar su trabajo; los mensajes, por consiguiente, forman una ventana del objeto al mundo
exterior.
El usuario se comunica con el objeto mediante su interfaz, un conjunto de operaciones definidas por
la clase del objeto de modo que todas sean visibles al programa; por ejemplo: un dispositivo
electrónico, como una máquina de fax, tiene una interfaz de usuario bien definida, que incluye un
mecanismo de avance del papel, botones de marcado, receptor y el botón “Enviar”; con lo que el
usuario no tiene que conocer cómo está construida la máquina internamente, como el protocolo de
comunicaciones u otros detalles; inclusive el hecho de abrir la máquina durante el periodo de
garantía puede anular la garantía.
Objetos
El objeto es el centro de la programación orientada a objetos.
Un objeto es algo que se visualiza, se utiliza y que juega un papel o un rol. Cuando se programa de
modo orientado a objetos se trata de descubrir e implementar los objetos que juegan un rol en el
dominio del problema del programa.
Un objeto en software es una entidad individual de un sistema que guarda una relación directa con
los objetos del mundo real.
La correspondencia entre objetos de programación y objetos del mundo real es el resultado práctico
de combinar atributos y operaciones, o datos y funciones.
Un objeto tiene:
• Un estado.
• Un comportamiento.
• Una identidad.
Objetos
Estado
Conjunto de valores de todos los atributos de un objeto en un instante de tiempo determinado.
El estado de un objeto viene determinado por los valores que toman sus datos o atributos. Estos
valores han de cumplir siempre las restricciones (invariantes de clase, para objetos pertenecientes
a la misma clase) que se hayan impuesto.
El estado de un objeto tiene un carácter dinámico que evoluciona con el tiempo, con independencia
de que ciertos elementos del objeto puedan permanecer constantes.
Objetos
Comportamiento
Conjunto de operaciones que se pueden realizar sobre un objeto.
Las operaciones pueden ser de observación del estado interno del objeto, o bien de modificación de
dicho estado.
Es posible distinguir dos objetos en los cuáles todos sus atributos sean iguales.
Cada objeto posee su propia identidad de manera implícita. Cada objeto ocupa su propia posición
en la memoria de la computadora.
Clases
¿Qué es una clase?
En términos prácticos, una clase es un tipo definido por el usuario; son los bloques de construcción
fundamentales de los programas orientados a objetos. Booch denomina una clase como “un
conjunto de objetos que comparten una estructura, comportamiento y semántica comunes”.
Una clase contiene la especificación de los datos que describen un objeto junto con la descripción
de las acciones cuya ejecución conoce; dichas acciones se conocen como servicios o métodos.
Una clase también incluye todos los datos necesarios para describir los objetos creados a partir de
la clase, los cuales se conocen como atributos, variables o variables instancia; el primer término se
utilizará en análisis y diseño orientado a objetos, los otros, en programas orientados a objetos.
Clases
Tipo abstracto de datos (TAD)
Un progreso importante en la historia de los lenguajes de programación se produjo cuando se
comenzó a combinar juntos diferentes elementos de datos y, por consiguiente, encapsular o
empaquetar diferentes propiedades en un tipo de dato. Estos tipos fueron las estructuras o
registros que permiten a una variable contener datos que pertenecen a las circunstancias
representadas por ellas.
Aunque en las estructuras y registros se pueden almacenar las propiedades individuales de los
objetos en los miembros, en la práctica cómo están organizados, no pueden representar qué se
puede hacer con ellos (moverse, acelerar, frenar, etc. en el caso de un coche/carro). Se necesita
que las operaciones que forman la interfaz de un objeto se incorporen también al objeto.
Clases
Tipo abstracto de datos (TAD)
El tipo abstracto de datos (TAD) describe, no sólo los atributos de un objeto sino también su
comportamiento operaciones o funciones y, en consecuencia, se puede incluir una descripción de
los estados que puede tener el objeto. Por ejemplo:
• Un objeto "equipo de baloncesto" no sólo puede describir a los jugadores, la
puntuación, el tiempo transcurrido, el periodo de juego, etc., sino que también se puede
representar operaciones tales como "sustituir un jugador", "solicitar tiempo muerto", o
restricciones tales como, el momento en que comienza 0:00 y en que termina cada
cuarto de juego 15:00, o incluso las paradas del tiempo, por lanzamientos de
personales.
El término tipo abstracto de dato se consigue en programación orientada a objetos con el término
clase. Una clase es la implementación de un tipo abstracto de dato y describe no sólo los
atributos (datos) de un objeto sino también sus operaciones (comportamiento). Por ejemplo:
• La clase carro define que un coche/carro consta de motor, ruedas, placa de matrícula,
etc. y se puede conducir (manejar), acelerar, frenar, etc.
Clases
Todo programa orientado a objetos basa su construcción en un elemento fundamental que es la
clase, la cual es manipulada por los objetos a través de los métodos. La clase es un tipo de dato
definido por el usuario que especifica las estructura de los datos y los métodos correspondientes a
ese tipo de dato particular, sin embargo tiene mayores utilidades que los de simple clasificación o
categoría de objetos.
“Son los moldes con los que se producen los objetos.” (Deitel/Deitel.)
Una clase se compone de atributos y métodos, y es posible definir muchos objetos de la misma
clase, donde todos los miembros de una clase son globales dentro de la clase, independientemente
del tipo de acceso que tengan; es decir, todos los métodos pueden utilizar los atributos de la clase.
Clases
Instancias
Una clase describe un objeto, en la práctica múltiples objetos. En conceptos de programación, una
clase es, realmente, un tipo de dato, y se pueden crear, en consecuencia variables de ese tipo. En
programación orientada a objetos, a estas variables, se las denomina instancias (instances), y
también por sus sinónimos ejemplares, casos, etc.
Las instancias son la implementación de los objetos descritos en una clase. Estas instancias
constan de los datos o atributos descritos en la clase y se pueden manipular con las operaciones
definidas en la propia clase.
En un lenguaje de programación OO, objeto e instancia son términos sinónimos. Así, cuando se
declara una variable de tipo Auto, se crea un objeto auto (una instancia de la clase Auto).
Clases
Estructura
La estructura de una clase esta compuesta por:
En un programa orientado a objetos varias clases pueden tener atributos comunes; por ejemplo:
nombre, en las clases Persona y Calle) pero cada atributo debe ser único dentro de una clase.
Los atributos tienen que ser datos, no objetos. La diferencia entre unos y otros reside en la
identidad: los objetos tienen identidad, pero los atributos no.
En la práctica en un programa orientado a objetos los atributos son los datos con los cuales opera
un método.
Los atributos se representan en el segundo área de los símbolos de clase e instancia. En las
clases, figurará el nombre del atributo, el tipo y el valor por defecto. En las instancias, el valor del
atributo para ese objeto determinado.
Clases
Métodos
En programación orientada a objetos, las operaciones definidas para los objetos, se denominan
métodos. Cuando se llama a una operación de un objeto se interpreta como el envío de un
mensaje a dicho objeto.
Un programa orientado a objetos se forma enviando mensajes a los objetos, que a su vez producen
(envían) más mensajes a otros objetos. Así, cuando se llama a la operación "conducir" (manejar)
para un objeto auto en realidad lo que se hace es enviar el mensaje "conducir" al objeto auto, que
procesa (ejecuta) el método correspondiente.
En la práctica un programa orientado a objetos es una secuencia de operaciones de los objetos que
actúan sus propios datos.
Clases
Ejemplo
En el mundo de la orientación a objetos, una clase es una plantilla (tipo de dato) para hacer o
construir objetos. Por ejemplo:
La realidad es que la gama de casos es infinita y sólo dependen de las características del problema
a resolver y la imaginación del programador.
Modelado y modelos
Algunos casos podrían ser:
La correspondencia entre objetos de programación y objetos del mundo real se muestra en una
combinación entre datos y funciones.
Modelado y modelos
Modelo
Un modelo es una abstracción de cosas reales. Cuando se modela un sistema, se realiza una
abstracción ignorando los detalles que sean irrelevantes.
El modelo es una simplificación de la realidad que se consigue mediante una abstracción de modo
que esta abstracción facilite el diseño y la viabilidad de un sistema y al mismo tiempo que este
pueda ser comprendido, evaluado, analizado y criticado. Este modelo se expresa mediante un
lenguaje de modelado.
Se tiene que mencionar que el instrumento para representar un modelo es el modelado, el cual
pretende capturar las partes fundamentales o esenciales de un sistema, el cual se representa
mediante una notación gráfica.
• Sintaxis, nos indica cómo se utilizan los símbolos para representar elementos y cómo se
combinan los símbolos en el lenguaje de modelado. La sintaxis es comparable con las
palabras del lenguaje natural; es importante conocer cómo se escriben correctamente y
cómo poner los elementos para formar una sentencia.
• Semántica, las reglas semánticas explican lo que significa cada símbolo y cómo se deben
interpretar, bien por sí misma o en el contexto de otros símbolos.
• Pragmática, las reglas de pragmática definen las intenciones de los símbolos a través de
los cuáles se consigue el propósito de un modelo y se hace comprensible para los demás.
Esta característica se corresponde en lenguaje natural con las reglas de construcción de
frases que son claras y comprensibles.
Modelado y modelos
Lenguaje de modelado
En diseño de sistemas, se modela por una importante razón de: gestionar la complejidad.
Para modelar un sistema de modo eficiente, se necesita una cosa muy importante que es: un
lenguaje que pueda describir el modelo.
Con un lenguaje formal de modelado, el lenguaje es abstracto aunque tan preciso como un
lenguaje de programación.
La precisión del lenguaje abstracto permite que un lenguaje sea legible por la máquina, de modo
que pueda ser interpretado, ejecutado y transformado entre sistemas.
Un lenguaje de modelado puede ser cualquier cosa que contiene una notación (un medio de
expresar el modelo) y una descripción de lo que significa esa notación (un meta-modelo).
Modelado y modelos
Lenguaje Unificado de Modelado (UML)
El Lenguaje Unificado de Modelado (UML, Unified Model Language), es el lenguaje estándar de
modelado para desarrollo de sistemas y de software.
UML en si es un lenguaje que tiene tanto sintaxis como semántica y se compone de:
pseudocódigo, código real, dibujos, programas, descripciones, etc.
El bloque básico de construcción de UML es un diagrama. Existen tipos diferentes, algunos con
propósitos muy específicos (diagramas de tiempo) y algunos con usos más genéricos (diagramas
de clases).
Es frecuente que una cosa individual se muestre en diagramas múltiples; donde cada diagrama
demuestra un interés particular, o vista, de la cosa que se esta modelando.
UML consta de un número de elementos gráficos que se combinan para formar diagramas.
Ya que UML es un lenguaje, dispone de reglas para combinar estos elementos; el conocimiento de
estos diagramas será importante para diseñar el modelo.
El propósito de los diagramas es representar múltiples vista de un sistema; este conjunto de vistas
múltiples se llama modelo. En la práctica un modelo será la descripción abstracta de un sistema o
un proceso; es decir una representación simplificada que permite comprender y simular.
Modelado y modelos
Diagrama
En nuestro caso, un modelo es un conjunto de diagramas que se puede examinar, evaluar u
modificar con la finalidad de comprender y desarrollar un sistema.
Se suele utilizar, a veces, el concepto de metamodelo como descripción de modo formal de los
elementos del modelado, la sintaxis y la semántica de la notación que permite su manipulación; en
esencia, es una descripción de la representación de las notaciones empleadas.
Modelado y modelos
Diagramas UML 2.5
Existe 14 diagramas en UML 2.5 que ayudan a modelar este comportamiento. La taxonomía de
estos diagramas se dividen en 2 grandes categorías principales: diagramas de estructura y
comportamiento.
Modelado y modelos
Diagramas de estructura
Los diagramas de estructura se utilizan para capturar la organización física de las cosas del
sistema; por ejemplo como se relacionan unos objetos con otros.
El modelo estructural representa el marco de trabajo del sistema y este marco de trabajo es el lugar
donde existen los demás componentes, de modo que los diagramas representan los elementos y
mecanismos para ensamblarlos.
Sin embargo el modelo estructural nunca describe el comportamiento dinámico del sistema.
Modelado y modelos
Diagramas de comportamiento
Los diagramas de comportamiento se central en el comportamiento de los elementos de un sistema
y describen la interacción en el sistema.