Documentos de Académico
Documentos de Profesional
Documentos de Cultura
© EDITORIAL SÍNTESIS, S. A.
Vallehermoso, 34. 28015 Madrid
Teléfono 91 593 20 98
http://www.sintesis.com
ISBN: 978-84-9171-323-4
Depósito Legal: M-12.870-2019
Índice
6 Programación
Glosario ....................................................................................................................................................................... 40
2.1. Introducción .............................................................................................................................................. 41
2.2. Auge de la programación orientada a objetos ................................................................... 42
2.3. Características de la programación orientada a objetos .............................................. 42
2.3.1. Clase ................................................................................................................................................ 42
2.3.2. Objeto ............................................................................................................................................ 45
2.3.3. Encapsulación ............................................................................................................................. 46
2.3.4. Abstracción .................................................................................................................................. 46
2.3.5. Reutilización o reusabilidad .................................................................................................. 47
2.3.6. Visibilidad .................................................................................................................................... 47
2.3.7. Relaciones entre clases ............................................................................................................ 48
2.3.8. Polimorfismo ................................................................................................................................ 49
Resumen ..................................................................................................................................................................... 50
Ejercicios propuestos ......................................................................................................................................... 51
Supuestos prácticos ........................................................................................................................................... 51
Actividades de autoevaluación.................................................................................................................... 52
Índice
Programación 7
Índice
8 Programación
Índice
Programación 9
Índice
10 Programación
Índice
Programación 11
Índice
12 Programación
Índice
2
Programación orientada
a objetos
Objetivos
3 Definir el paradigma de programación orientada a objetos.
3 Conocer los elementos que se emplean en programación orientada a objetos.
3 Comprender la simbología básica de UML para representar objetos y sus rela-
ciones.
3 Familiarizarse con los fundamentos de la programación orientada a objetos.
40 PRogRamacIón
Mapa conceptual
Programación
Se modela mediante Hace uso de
orientada
a objetos
UML Clase
Se fundamenta en
Instancia
Objeto
Encapsulación Polimorfismo Reutilización
Formada por
Glosario
caPÍtuLo 2
PRogRamacIón oRIentada a obJetos 41
2.1. Introducción
sabÍas Que...
caPÍtuLo 2
42 Programación
l Por un lado la POO permite enfocar los problemas a resolver de una forma mucho más
intuitiva de lo que lo hacen otros paradigmas. Mientras que en la programación estruc-
turada datos y código están totalmente separados, en la POO se encuentran mezclados.
En este paradigma se persigue trabajar con un modelo más cercano al mundo real en
el que los diferentes objetos interaccionan entre sí. Implica un cambio en la manera de
enfocar el desarrollo y de diseñar el código, más aún si se viene de un modelo puro de
programación estructurada.
l Este tipo de programación viene a solventar las carencias que la programación estruc-
turada presenta a la hora de afrontar el desarrollo de programas de gran envergadura.
La programación orientada a objetos permite generar programas modulares y muy
escalables.
l Con la creciente necesidad de desarrollar programas con interfaces gráficas muy de-
puradas, la POO consiguió convertirse en la mejor opción para conseguir una buena
experiencia de usuario. Su capacidad para permitir reutilizar código sin necesidad de
reescribirlo nuevamente facilitó mucho la tarea de los programadores, que vieron en
esta tendencia una gran oportunidad de rentabilizar el esfuerzo realizado.
2.3.1. Clase
La clase es el elemento básico de programación en un paradigma orientado a objetos. En ella se
describe un posible conjunto de datos (campos, propiedades o ambos, según el lenguaje de pro-
gramación empleado), un conjunto de operaciones a realizar sobre ellos (métodos), constructores y,
posiblemente, destructores. Todos estos elementos son conocidos como miembros.
Capítulo 2
Programación orientada a objetos 43
A partir de una clase se podrán instanciar tantos objetos de esta como sean necesarios; se
entiende pues que una clase es una plantilla a partir de la cual definir y crear objetos.
Las clases se representan en UML en diagramas de clase mediante una caja dividida en tres
áreas en las que se especifican el nombre de la clase y sus miembros:
Figura 2.1
Representación de una clase.
Investiga
A) Campo
Se denomina campo a un elemento que se comporta como una variable propia de cada ins-
tancia de una clase y que define un atributo de un objeto.
En él se pueden almacenar datos, y sus valores pueden ser inicializados, modificados y leídos
directamente sin ningún tipo de acción adicional; esto último dependiendo siempre en última
instancia de la visibilidad establecida para el campo.
Un campo puede ser declarado de cualquier tipo incluyendo otras clases y su inicialización
puede realizarse a la vez que son declarados o en su constructor.
Capítulo 2
44 Programación
B) Propiedad
Una propiedad, al igual que un campo, define un atributo de un objeto. Pero mientras que
un campo dispone de un área de almacenamiento directamente accesible, la propiedad no tie-
ne asociada una reserva de espacio de memoria para su almacenamiento. En realidad, permite
acceder a un área de almacenamiento a través del campo definido previamente o bien a través
de un método creado para tal efecto. Representa, por tanto, un mecanismo indirecto y flexible
de acceso que permite, si así se desea, establecer una serie de acciones que serán llevadas a cabo
de forma subyacente cada vez que se haga uso de esta para acceder a los datos, proporcionando
un mayor control en el acceso.
Generalmente las propiedades son declaradas con un nombre representativo del dato que
van a almacenar, y los métodos que se emplean para la lectura o modificación de los datos a
través de propiedades son declarados con los prefijos get o set para la lectura o modificación de
los datos, respectivamente.
campoX
getX {
…
propiedadX }
setX (x) {
…
memoria }
Figura 2.2
Acceso mediante campos versus propiedades.
La declaración de propiedades puede ser muy diferente dependiendo del lenguaje de pro-
gramación que se esté utilizando (Delphi, C#…). Algunos lenguajes, como Java, pueden incluso
no ofrecer mecanismos específicos para implementarlas.
C) Método
El método es la implementación de un algoritmo aplicable a todas las instancias de la clase y
que puede, o no, utilizar los datos contenidos en ella.
Un método tomará forma de:
l Función, si al ser invocado el algoritmo contenido en ella ejecuta una serie de instruc-
ciones y finalmente retorna un valor.
l Procedimiento, si al ser invocado el algoritmo contenido en él realiza una serie de accio-
nes basadas generalmente en un conjunto de parámetros o argumentos. A diferencia de
las funciones, un procedimiento no retorna ningún valor.
Capítulo 2
PRogRamacIón oRIentada a obJetos 45
y funciones. En segundo lugar, dependerá de cuál sea el comportamiento que se desee imple-
mentar; si únicamente se persigue realizar una serie de acciones sin retornar ningún valor, es
preferible implementarlo como procedimiento.
D) Constructor
Un método constructor es un tipo especial de método perteneciente a una clase concreta y que
se utiliza para instanciar objetos de esta.
Para cada clase pueden declararse varios métodos constructores, aunque también puede
darse el caso de que no se declare ninguno. El hecho de que no se declare ningún método
constructor no implica que no exista; por defecto, todas las clases disponen de un método cons-
tructor que, en caso de invocarse, inicializará los campos de dicha clase a los valores por defecto.
E) Destructor
Un método destructor se define como aquel método encargado de destruir un objeto y liberar
los recursos que tuviese asignados.
Una clase podrá tener un número indeterminado de destructores, aunque al igual que su-
cede con los constructores puede que no se declare ninguno. Que esto ocurra no implica que
no exista; las clases disponen de un método destructor por defecto.
Será responsabilidad del programador hacer uso de los destructores en aquellas tecnologías
en las que no existan mecanismos de destrucción automática de objetos.
sabÍas Que...
2.3.2. Objeto
Un objeto es una instancia de una clase determinada. Dicho de otra manera, se puede decir que
un objeto es el resultado de crear en tiempo de ejecución un conjunto de datos que se almacena
en memoria y que tiene una estructura como la que se describe en su clase.
Los campos, propiedades y métodos pertenecientes a un objeto pueden estar declarados en
una única clase o bien en varias, en cuyo caso se tratará de un objeto que hereda los campos de
otra clase ancestra. El concepto de herencia será descrito más adelante con detalle.
caPÍtuLo 2
46 Programación
Los objetos pueden ser simples o compuestos. Un objeto simple estará formado por datos
primitivos (un carácter, un dígito, un booleano…), mientras que un objeto compuesto estará
formado por datos primitivos y por otros objetos pertenecientes a otras clases. El concepto de
composición de clases será descrito más adelante con mayor detalle.
El hecho de que dos objetos tengan los mismos datos no significa que sean el mismo objeto.
Cada uno tiene reservado un espacio único en memoria y, por tanto, es único e independiente.
Figura 2.3
Diferentes objetos con mismos valores.
Investiga
Busca información sobre los diagramas de objetos y sobre cómo estos permiten
representar los objetos de una aplicación.
¿Es posible que un objeto contenga objetos de su misma clase? Justifica tu respuesta.
2.3.3. Encapsulación
Se define la encapsulación como el agrupamiento de los datos y las operaciones relacionadas con
ellos en un mismo elemento (la clase ofrece este nivel de encapsulación). Los datos encapsulados
deben ser convenientemente ocultados para que únicamente se pueda acceder a su información
a través de interfaces bien definidas.
2.3.4. Abstracción
La abstracción es un mecanismo de reducción de la complejidad que minimiza la informa-
ción de los objetos a representar únicamente a los aspectos más relevantes. Es importante
Capítulo 2
Programación orientada a objetos 47
conseguir el nivel de abstracción adecuado que permita obviar aspectos insustanciales para el
resultado que, de ser tenidos en cuenta, únicamente dificultarían el desarrollo y penalizarían
el rendimiento.
2.3.6. Visibilidad
Una vez se han abordado los conceptos encapsulación y abstracción, se hace necesario describir
también el concepto de visibilidad. Este nuevo concepto establece la forma en la que los miem-
bros de una clase serán accedidos desde otros puntos del programa. Toma vital importancia
no solo a la hora de implementar los algoritmos, sino también a la hora de crear relaciones de
herencia entre diferentes clases.
Distinguiremos los siguientes niveles de visibilidad:
l Privada: se representa mediante el signo menos (−). Los miembros declarados con
visibilidad privada únicamente serán visibles desde la misma clase en la cual se han
declarado.
l Pública: se representa mediante el signo (+). Los miembros declarados con visibilidad
pública serán visibles desde cualquier lugar del programa.
l Protegida: se representa mediante el signo (#). Los miembros declarados con visibilidad
protegida únicamente serán visibles desde la misma clase en la cual se han declarado y
desde las clases que hereden de ella.
Dependiendo del lenguaje de programación que se utilice para llevar a cabo la implemen-
tación del código, es posible encontrar algún nivel más.
Capítulo 2
48 Programación
Figura 2.4
Ejemplo de representación de la herencia.
Aunque según el paradigma de la POO la herencia puede ser múltiple, lo cual implica
que para una misma clase pueda haber más de una clase padre desde la cual derivar al mismo
tiempo, en realidad son pocos los lenguajes de programación que implementan la herencia
múltiple (C++ o Eiffel son algunos ejemplos de lenguajes que sí implementan la herencia
múltiple).
Ligado al concepto de herencia está también el de visibilidad. Aunque todos los miembros
son heredados, excepto constructores y destructores, únicamente serán accesibles desde la clase
hija aquellos que hayan sido declarados como miembros públicos (+) o protegidos (#). Este con-
cepto será visto con más detalle en apartados posteriores.
Capítulo 2