Professional Documents
Culture Documents
PID_00161675
FUOC PID_00161675 Clases y objetos
ndice
Introduccin ............................................................................................ 5
Objetivos ................................................................................................... 6
Resumen .................................................................................................... 35
Solucionario ............................................................................................. 38
Bibliografa .............................................................................................. 38
FUOC PID_00161675 5 Clases y objetos
Introduccin
Para atender las necesidades de las empresas de software y hacer que las apli-
caciones informticas sean viables econmicamente, es necesario facilitar la
reutilizacin de programas minimizando el trabajo de hacer adaptaciones a las
funcionalidades nuevas. Un prerrequisito para facilitar la reutilizacin es que
el software desarrollado responda a ciertos criterios de calidad.
Objetivos
1. Criterios de calidad
Programacin no estructurada
Programacin procedimental
Programacin modular
Los factores de calidad internos son aquellos que tienen que ver con la calidad
del cdigo de la aplicacin. Estos factores normalmente no son apreciados
por los usuarios finales, pero los factores externos dependen mucho de stos.
Los factores de calidad externos son aquellos que pueden ser evaluados por
un usuario final como, por ejemplo, el grado de usabilidad de la aplicacin.
Ejemplos de cdigo
Se habla de cdigo reutilizable cuando una aplicacin incorpora partes reutilizable
de cdigo (estructuras, principalmente) que inicialmente haban sido
Entrada de datos
implementadas en otras aplicaciones; o tambin cuando una aplicacin Almacenamiento de datos
contiene partes de cdigo que se van a emplear en otras aplicaciones. Representaciones grficas de
los resultados
FUOC PID_00161675 9 Clases y objetos
Esta manera de organizar las partes de una aplicacin se denomina programa- La orientacin a objetos facilita la
sustitucin de un mdulo por otro
cin en tres capas (o niveles). con funcionalidades equivalentes.
1.2.4. Usabilidad
1.2.5. Funcionalidad
Hay otros factores de calidad externos que, aunque importantes para el usuario,
no tienen una implicacin directa con la metodologa de orientacin a objetos.
1.3.1. Precisin
1.3.2. Robustez
1.3.3. Compatibilidad
Por ejemplo, podemos hablar de las interfaces grficas de los diferentes siste-
mas operativos como Windows, Mac OS o GNU/Linux (con Gnome, KDE,
XFace, entre otros), que contienen mens, ventanas, iconos, etc.
1.3.4. Rendimiento
Muchos usuarios, por ejemplo, no compran hardware ms potente para realizar una cier-
ta tarea en la mitad de tiempo, sino para someter el mismo programa a problemas ms
complejos en el mismo tiempo.
En el ao 1996,
1.3.5. Oportunidad Microsoft...
2. El principio de modularidad
En este apartado, discutiremos los criterios que se tienen que cumplir para que Relacionaremos la modularidad
con el concepto de clase en el
una estructura de representacin se pueda calificar de modular y, por lo tanto, apartado siguiente.
2.1.1. Descomposicin
Las dependencias entre mdulos tienen que ser mnimas; en caso contra-
rio, desarrollar un subsistema puede requerir que se implementen correc-
tamente otros subsistemas.
2.1.2. Composicin
2.1.3. Comprensin
2.1.4. Continuidad
Para entender mejor la continuidad, se tiene que relacionar con el campo del
anlisis matemtico. Una funcin continua tiene la caracterstica de que un
cambio pequeo en el argumento comporta un cambio proporcionalmente
pequeo en el resultado. En programacin, se utiliza el concepto por analoga,
es decir, un cambio pequeo en la especificacin tiene que comportar un cam-
bio pequeo en la implementacin de la aplicacin.
2.1.5. Proteccin
Usar variables globales a las cuales se puede acceder desde cualquier mdulo
es contrario a la metodologa de desarrollo modular que utilizaremos en esta
asignatura.
Esta identificacin tambin facilita que se detecten los mdulos que se pueden
ver afectados por un cambio en las especificaciones del problema se preserva
la continuidad.
Las propiedades pblicas son aquellas que los usuarios de nuestro mdulo
pueden consultar y modificar directamente.
En cambio, las propiedades privadas son aqullas a las cuales slo puede
acceder el programador. El usuario no tiene por qu conocer que estn.
3. Clases y objetos
En los apartados anteriores, hemos establecido las bases en las que se funda-
Un tipo abstracto de datos
menta la aplicacin de la metodologa de orientacin a objetos con el fin de (TAD)
alcanzar un buen nivel de calidad en el software. De la misma manera, han ... es una abstraccin del con-
cepto tradicional de tipo de
servido para establecer el marco en el que se sita la clase como estructura de datos presente en todos los
representacin. lenguajes de programacin, y
su utilidad principal reside en
el hecho de que permiten defi-
nir cmodamente los dominios
La clase unifica los principios del diseo modular y la definicin de tipo como de datos que manipulan los
representacin esttica de los datos. La aproximacin de la orientacin a obje- programas.
A veces, se hace difcil diferenciar los conceptos de clase y objeto. Esto es por-
que, coloquialmente, objeto no tiene un significado unvoco: podemos enten-
der por objeto tanto una entidad nica y diferenciada como un grupo de
entidades con ciertas caractersticas comunes, y slo diferenciamos estas dos
interpretaciones por el contexto.
Cuando hablamos del objeto coche, todo el mundo entiende que nos referimos a un ele-
mento que sirve para transportar personas con un nmero suficiente de ruedas que lo
sostienen y un motor que lo hace avanzar. En este caso, el objeto coche no se refiere a
una nica entidad, sino a un conjunto de entidades con unas caractersticas comunes.
En este caso concreto, coche se debe entender como una clase de objetos, ya que repre-
senta un grupo o conjunto de entidades con ciertas caractersticas comunes.
Cuando hablamos del coche de Jos, nos referimos a un coche concreto, hecho de un ma-
terial concreto con unos colores concretos. En este caso, coche se debe entender como un
objeto o instancia que identifica un miembro individual y concreto de la clase de obje-
tos coche.
Es muy importante ver la relacin entre clase y objeto y, sobre todo, la secuen-
cia temporal que lleva del objeto a la clase en la etapa de anlisis y diseo. De
alguna manera, primero es el objeto y despus la clase. Quiz sta es la razn
por la cual hablamos de metodologa de orientacin a objetos y no de orien-
tacin a clases, como algunos autores reivindican.
Ejemplo
Si se nos plantea un problema relacionado con las diferentes categoras de los permisos
de conducir, a la hora de caracterizar los objetos del dominio vehculos de automocin nos
tendremos que fijar en atributos tcnicos como el nmero de ruedas, el peso, la cilindra-
da, si se trata de vehculos articulados, si se destinarn a transportar mercancas o perso-
nas, etc. stos son los aspectos de la realidad que representarn los objetos. As,
hablaremos de vehculos de dos, tres o ms ruedas; de vehculos de hasta 3.500 kg, hasta
16.000 kg o de peso superior, etc. De esta manera, los permisos de conducir establecen
ocho categoras de vehculos relacionadas con los aspectos que hemos destacado.
As, podramos decir que el concepto de clase tiene dos vertientes: una vertien-
te semntica y otra que podramos denominar operacional:
caractersticas de inters para el problema tratado, que llevan a definir las cla-
ses. Una vez definidas las clases, ya podemos hablar de un objeto o instancia
de una clase como un individuo que existe y que tiene sentido en un momen-
to y un contexto determinados. La figura siguiente ilustra estos conceptos:
En la clase Person, estn representadas las propiedades que caracterizan a una persona
(entidad del mundo real), mientras que los diferentes objetos representan a individuos
concretos.
Relacin clase-objeto
Cuando hablamos de objeto, hacemos referencia a una estructura que
Muchos lenguajes de progra-
hay en un momento determinado de la ejecucin del programa, mien- macin permiten averiguar a
tras que cuando hablamos de clase hacemos referencia a una estructura qu clase pertenece un objeto
en tiempo de ejecucin.
que representa a un conjunto de objetos.
FUOC PID_00161675 24 Clases y objetos
Por este motivo, podemos considerar la clase como una estructura esttica,
mientras que el objeto se considera como una estructura dinmica, vistas las
connotaciones temporales de su existencia.
3.2.1. Atributos
Los tipos de datos que puede tener un atributo se corresponden con los consi-
derados convencionalmente como bsicos (enteros, reales, caracteres, etc.) o
con objetos de alguna clase, que puede ser la misma en la que se define el atri-
buto u otra.
Si un atributo de una clase define como tipo de datos un objeto (de otra clase
Esta cuestin...
o de la misma), normalmente indica algn tipo de relacin de asociacin entre
... es de gran importancia en la
las clases implicadas. modelizacin de la realidad
descrita en el problema trata-
do. Lo veremos ms adelante.
Una clase puede tener cualquier nmero de atributos, o incluso puede no te-
ner ninguno.
Ejemplo
La figura 4 muestra la clase Person, con los atributos mencionados, junto con tres obje-
tos en los cuales los atributos toman los valores que identifican a cada uno de los indivi- Los elementos
diferenciadores...
duos representados:
... entre los objetos o instancias
de una misma clase son los va-
lores concretos que toman los
atributos en cada objeto.
Para los atributos tambin utilizaremos un texto que sea ilustrativo, que tiene
que empezar en minscula (por ejemplo, name) y, en caso de utilizar construc-
ciones nominales, irn con mayscula las iniciales de las palabras intermedias
(por ejemplo, birthDate).
Una clase puede tener cualquier nmero no nulo de mtodos. El hecho de ser
no nulo es porque una clase siempre tiene, como mnimo, un mtodo especial
denominado constructor. Este mtodo se ejecuta cada vez que se crea un objeto
durante la ejecucin del programa y, bsicamente, se encarga de asignar la me-
moria necesaria para soportar toda la informacin asociada al objeto e inicia-
lizar variables, entre otras tareas de inicializacin.
Normalmente se distinguen dos tipos de mtodos; los que afectan a los valo-
res de los atributos del objeto y que, por lo tanto, pueden tener efectos colate-
rales (cambian el estado) sobre el mismo objeto o sobre otros, y los que
simplemente calculan ciertos valores y despus son retornados sin afectar a El nombre dado...
ningn otro objeto:
... a mtodos que asignan va-
lor a un atributo acostumbra a
construirse con el verbo ingls
1) Un ejemplo tpico del primer tipo es el conjunto de mtodos accesores de- set (asignar) seguido del
nombre del atributo.
finidos para asignar valores a los atributos del objeto, tambin conocidos
FUOC PID_00161675 26 Clases y objetos
todos accesores de lectura que seran getName y getBirthDate, que nos re-
tornaran los valores de los atributos consultados.
Tambin podemos considerar entre este tipo de mtodos los que elaboran in-
formacin a partir de los atributos declarados en la clase; por ejemplo, dada la
clase Persona, podemos tener un mtodo que nos d la edad del objeto repre-
sentado a partir de un clculo sobre su fecha de nacimiento.
Hasta el momento, sabemos que una clase puede tener un nmero indetermi-
nado de atributos y mtodos y que es conveniente que la clase oculte toda la
informacin que no es relevante para su uso para que se favorezca la modula-
ridad (ocultacin de la informacin).
Recordemos que, cuanta menos informacin pblica tiene una clase es decir,
cuanto menor es la parte visible de la clase por las otras clases que pueden in-
teractuar, menos probable es que se propaguen las modificaciones que se rea-
lizan sobre sta.
Protegido: cualquier clase heredera puede acceder a cualquier atributo o El concepto de herencia lo veremos
en mdulos posteriores.
mtodo declarado como protegido en la clase padre y utilizarlo.
Si llevamos esta cuestin al absurdo, podramos codificar una aplicacin entera como
una nica clase: los atributos haran el papel de las variables globales y los mtodos el
papel de las funciones y procedimientos de una estructuracin funcional. Cada mtodo
tendra las variables locales y, adems, la posibilidad de acceder a todos los atributos (re-
cordad las reglas de visibilidad). Slo hara falta un mtodo que iniciara la ejecucin (pa-
pel del programa principal) para tener una clase que codificara un programa diseado
con el enfoque procedimental.
Obviamente, aunque se haya utilizado una clase, una aplicacin como la descrita ante-
riormente no responde a ninguna de las caractersticas de la orientacin a objetos.
Para conseguir que las clases tengan una estructura modular, a la hora de di-
searlas se deben tener en cuenta los criterios y las reglas de calidad que ya co-
nocemos y que resumimos a continuacin:
Hay que identificar para cada clase, de la manera ms evidente posible, las
entidades de la realidad representadas. De esta manera, cumpliremos la re-
gla del mapeo directo intentando seguir los criterios de descomposicin/
composicin, comprensin y continuidad modular.
Los atributos de una clase siempre deben tener una visibilidad no pblica.
El acceso de los otros objetos a los atributos se har estrictamente mediante
los mtodos accesores y los mtodos definidos como atributos derivados.
Esto no quiere decir que cualquier mtodo, accesor o no, tenga que ser p-
FUOC PID_00161675 28 Clases y objetos
blico: slo se definirn como pblicos los estrictamente necesarios. Con es-
to, cumpliremos la regla de ocultacin de la informacin.
Las clases se representan con una tabla dividida en tres reas: en el tercio su-
perior, se declara el nombre de la clase; en el central, se enumeran los atribu-
tos, y en el tercio inferior, los mtodos:
Para indicar la visibilidad de los atributos y los mtodos, se pueden utilizar los
smbolos siguientes:
+ : pblico
# : protegido
: privado
FUOC PID_00161675 29 Clases y objetos
Ahora estudiaremos el objeto como instancia de una clase que existe durante
la ejecucin del programa.
Durante la ejecucin del programa, un objeto se crea cuando se necesita, y se La sintaxis para crear objetos puede
variar ligeramente de un lenguaje a
otro. Podis ver el mdulo El lenguaje
tiene que eliminar cuando ya no es til. de programacin Java.
Una vez creado el objeto, podemos acceder a sus atributos y mtodos, siempre
que la visibilidad definida en la clase lo permita. En orientacin a objetos, la
demanda de ejecucin de un mtodo se suele entender como un proceso co-
municativo en el que un objeto A pide a un objeto B que realice un servicio
determinado.
Date d = birthDate;
O bien
Date d = getBirthDate();
juan.setBirthDate(23/04/1980);
...
int e = juan.getAge();
FUOC PID_00161675 31 Clases y objetos
En este apartado, hemos hablado de objeto vivo en el sentido de que existe slo durante
la ejecucin de un programa. De hecho, esta expresin es redundante, ya que un objeto
se crea cuando se necesita y slo existe mientras es til. Es decir, un objeto siempre est
vivo, si no, simplemente no existe: cuando un objeto deja de ser til, se tiene que elimi-
nar. La manera de eliminar un objeto depende del lenguaje. En algunos lenguajes como
C++, esta tarea la tiene que realizar el programador; en cambio, en otros como Java, esta
tarea la lleva a cabo el mismo sistema (la mquina virtual Java).
Una clase est constituida por dos tipos de elementos, los atributos y los m-
todos, que caracterizan los objetos creados como instancia de la clase. Hasta
ahora, hemos visto que los atributos y los mtodos definidos en una clase son
replicados en todas las instancias de sta, pero esto no tiene por qu ser siem-
pre as: nos puede interesar que un atributo o mtodo determinado sea comn
y nico para todos los objetos de una clase.
Para representar los atributos o mtodos con alcance de clase en UML, su-
brayaremos el elemento. Si aadimos un contador de instancias de la clase
FUOC PID_00161675 32 Clases y objetos
Los mtodos accesores se han definido como mtodos de clase pero, puesto que son pri-
Dependiendo del lenguaje de
vados, hay que prestar atencin ya que puede ser que en algunos casos, aunque sean m- programacin, la definicin de
atributos y mtodos de clase se realiza
todos accesores a atributos de clase, stos tengan que ser definidos como mtodos de de manera diferente. Podis ver el
mdulo El lenguaje de programacin
instancia. Ms adelante, veremos cmo se puede hacer una llamada a un mtodo de clase Java.
sin que haya ningn objeto de sta.
Cada lenguaje puede tener algunas restricciones sobre los aspectos siguientes:
3.5. Sobrecarga
No todos los lenguajes permiten la sobrecarga es decir, no podemos tener dos Algunos lenguajes que no permiten
la sobrecarga son C, Fortran, etc.
elementos con el mismo identificador. En este caso, lo que podemos hacer es
nombrar los elementos de manera muy parecida para expresar que realizan ta-
reas parecidas.
Lenguajes puros: todos los mdulos de un programa tienen que ser clases. Ejemplos: Java, Smalltalk o Eiffel.
En los lenguajes puros, cualquier definicin (de datos o de cdigo) se tiene que basar en
una clase. Es decir, no existen los conceptos de rutina, funcin o procedimiento y tam-
poco el de programa principal. Slo hay clases, con los mtodos y atributos correspon-
dientes.
Lenguajes hbridos: permiten utilizar clases y objetos que se pueden com- Ejemplos: C++, Delphi
o Object COBOL.
binar con estructuras procedimentales clsicas.
El proceso con el que empieza la ejecucin vara segn el lenguaje. Todos los
lenguajes puros tienen mecanismos que permiten decir al compilador que hay
una clase que es la principal y el mtodo de la clase por la cual debe empezar
la ejecucin del programa.
FUOC PID_00161675 35 Clases y objetos
Resumen
Ejercicios de autoevaluacin
1. Qu factores de calidad destacarais a la hora de disear una aplicacin?
3. Enumerad los tipos de mtodos que hemos explicado en este mdulo y haced una peque-
a descripcin de los mismos.
4. Creis que es viable tener un mtodo accesor de lectura con visibilidad privada? Y uno
con visibilidad protegida?
5. Creis que tiene sentido que todos los mtodos accesores de escritura tengan visibilidad
pblica?
Solucionario
1. En realidad, tendran que estar presentes todos los factores de calidad, pero quiz en la eta-
pa de diseo los que hay que tener ms presentes son la escalabilidad de la aplicacin y la
facilidad de reutilizacin de las estructuras. El primero porque, normalmente, las aplica-
ciones deben crecer con el tiempo y el segundo porque, tanto para el posible crecimiento
de la aplicacin como para desarrollar otras aplicaciones, una buena capacidad de reutili-
zacin de las clases es muy til.
2. El mapeo directo se tiene que entender como la facilidad para identificar la estructura de
representacin de la realidad modelizada en el contexto del problema que se tiene que re-
solver. Normalmente, seguir esta regla ayudar a hacer un buen diseo modular, ya que la
misma estructura del problema da una visin de cul tiene que ser la estructura de la so-
lucin.
4. Los mtodos accesores de lectura (los que pueden consultar el valor de los atributos de la
clase) normalmente se utilizan para dar acceso a los otros objetos, y por esto suelen ser
mtodos pblicos que forman parte de la interfaz de la clase. De todos modos, puede tener
sentido restringir la visibilidad de un accesor de lectura cuando no se quiere que un atri-
buto sea visible por las otras clases. Los mtodos accesores que tienen visibilidad protegida
pueden tener sentido si tenemos herencia entre clases, pero este concepto lo veremos ms
adelante. Recordad que, para cuestiones de calidad, siempre se tendra que acceder a los
atributos por medio de mtodos accesores.
5. La respuesta debe ser rotundamente no. Observad que sera un contrasentido definir como
privados o protegidos todos los atributos (costumbre ms que recomendable) y despus
definir como pblicos todos los accesores de escritura correspondientes. Slo se tendr que
dar visibilidad pblica a aquellos accesores de escritura que tengan que ser necesariamente
visibles por otras clases, siempre que se pueda asegurar que su posible uso externo no com-
prometer el buen funcionamiento de la aplicacin.
6. Las responsabilidades de instancia (tanto si son atributos como si son mtodos) son aque-
llas que se piden a los objetos de una clase, tanto si es de recordar cosas como de hacerlas.
En el caso de las responsabilidades de clase, es la clase y no sus instancias la que alma-
cena datos o realiza los procesos o clculos.
8. Puesto que el constructor nos sirve para crear una instancia de un objeto, no lo podemos
definir como instancia ya que, inicialmente, no tenemos ninguno y, por lo tanto, no po-
demos crear ninguno. Aparte, los mtodos de instancia sirven para modificar el estado de
la instancia, y el propsito del mtodo constructor no es ste.
Bibliografa
Booch, G.; Jacobson, I.; Rumbaugh, J. (1999). El lenguaje de modelado unificado UML. Ma-
drid: Addison-Wesley Iberoamericana.
Rumbaugh, J.; Blaha, M.; Premernali, W.; Eddy, F.; Lorensen, W. (1996). Modelado
y diseo orientado a objetos. Madrid: Prentice Hall.