Está en la página 1de 34

AC8C 8uslness ArchlLecLure SL |Avda.

luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana



!"#$%&'(()*"
,-$%.$/0/1 23(2%1 &3 %453#%16

La programacln orlenLada a ob[eLos es una Lecnlca de programacln, una
forma de consLrulr sofLware que uLlllza el concepLo de ob[eLos y sus lnLeracclones para
llevar a cabo el funclonamlenLo esperado en la apllcacln.
or supuesLo no esLamos hablando de ob[eLos reales, slno ms blen un
con[unLo de pequenas mqulnas que colaboran unas con oLras para llevar a cabo
Lareas. no por casualldad, esLa Lecnlca se empez a uLlllzar en el mundo de la
slmulacln. Con el Llempo, esLa Lecnlca se fue exLendlendo a oLros mblLos ba[o la
promesa de hacer de la programacln algo senclllo rpldo y agradable, especlalmenLe
con el auge de las apllcaclones con lnLerfaz grflca.
A pesar que una de las prlnclpales preLenslones de la programacln orlenLada a
ob[eLos (llamemosla CC a parLlr de ahora para abrevlar) es hacer la vlda ms fcll al
programador, muchas veces esLa Lecnlca parece en prlmera lnsLancla algo a lo que solo
menLes prlvllegladas pueden acceder. uesde el prlnclplo, la CC ha esLado rodeada de
un amblenLe mlsLerloso y aparenLemenLe dlflcll de desenLranar, en parLe debldo a una
Lermlnologla esoLerlca y exceso de Leorla. A lo largo de esLe LuLorlal vamos a ver como
en realldad no es algo Lan ale[ado de nuesLro dla a dla y cmo los concepLos de base
son en realldad muy senclllos.

Problema y nacimiento. A grandes males, muchas soluciones.

Ll prlmer lengua[e que formallz el concepLo de ob[eLo de clase (y por
exLensln el de clase, herencla y dems esoLerlsmos que veremos ms adelanLe) fue
Slmula 67. La ldea de equlparar ob[eLos reales con ob[eLos vlrLuales" fue una brlllanLe
ldea que supuso el germen de la meLodologla de la CC y que faclllL el desarrollo en
el mblLo de la slmulacln de evenLos dlscreLos para el que era uLlllzado Slmula.
or aquel enLonces, en el ano 1968, LA C1An Lra[o conclencla sobre el
problema de la calldad del sofLware, auLodenomlnada crlsls del sofLware": la
programacln esL aun muy verde y aun no cumple su poLenclal al 100. or LanLo es
necesarlo buscar nuevas formas de Lraba[ar, nuevas vlas que me[oren los resulLados.

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

A ralz de aquello comenzaron a prollferar dlsLlnLas Lecnlcas de programacln, Lecnlcas
ms regladas que permlLlan resolver problemas en el desarrollo de sofLware de forma
eflclenLe, como la programacln funclonal, modular, eLc... ? de forma paralela
aparecleron mulLlLud de lengua[es que lmplemenLaban dlchas ldeas muchos de los
cuales han sobrevlvldo a la acLualldad de una manera u oLra.








?a enLrados los 70, Alan kay, en la unlversldad de uLah conocl Slmula y
enconLr en el ldeas lnLeresanLes para su proyecLo uynabook: Alan Lenla el sueno de
crear el prlmer ordenador personal, orlenLado prlnclpalmenLe a la educacln, y que en
muchos aspecLos se podrla conslderar un precursor concepLual del lad. Ll lnLeres de
kay en Slmula venla de la necesldad de Lener un lengua[e con una fllosofla adecuada a
la del proyecLo y con un aprendlza[e ms senclllo que no neceslLara de un experLo para
el desarrollo de apllcaclones para su uyna8ook (su ldea es la de un elemenLo de
creacln acLlva de conLenldos, no solo el consumo). Ms Larde, Alan form parLe del
Learnlng 8esearch Croup de xerox A8C. LsLe grupo Lermln creando el lengua[e
SmallLalk, con especlal hlncaple en los usos educaLlvos, lengua[e que forma parLe de su
vlsln de la auLenLlca compuLacln personal para Lodo y Lodos. La prlmera versln
publlca del lengua[e fue Small1alk-80.
SmallLalk-80 slrvl de lnfluencla dlrecLa a gran canLldad de lengua[es, como
hyLon, 8uby, erl, y por supuesLo Cb[ecLlve-C. una caracLerlsLlca lnLeresanLe de
SmallLalk es que lleva al exLremo la fllosofla orlenLada a ob[eLos y Lodo en su lengua[e
es un ob[eLo, no exlsLen los Llpos prlmlLlvos como el lnL", el double", eLc.. Se puede
conslderar un lengua[e orlenLado a ob[eLos puro. Sln embargo, gran parLe de los
lengua[es orlenLados a ob[eLos que le han Lomado como lnsplracln son hlbrldos: esLn
basados en lengua[es procedurales como C, en el caso de Cb[ecLlve-C, lo que hace que
enconLremos clerLas lncoherenclas y reducLos del pasado pre-orlenLacln a ob[eLos en
casl Lodos ellos.


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana



78 %453#%

Ll ob[eLo es la unldad mlnlma sobre la que se consLruye un programa orlenLado
a ob[eLos
Lll[amos un ob[eLo al azar: por e[emplo una de esas modernas cafeLeras de
cpsulas que Lan fcll nos hacen la vlda a los programadores.
Sl segulmos la ldea de la equlvalencla enLre el
mundo real y el mundo vlrLual llegaremos a la
conclusln de que el ob[eLo cafeLera" puede ser
deflnldo por una serle de aLrlbuLos y unos
comporLamlenLos proplos de su condlcln con los que
lnLeracLuamos mandndole mensa[es. veamos en
deLalle cada uno de esLos punLos para empezar a darle
un poco de senLldo a esLa exLrana comparacln.



93"1/53 : 0;#%&%

Ll ob[eLo cafeLera va a enLender dos mensa[es claros: cafe corLo" y cafe
largo". Ln deLermlnado momenLo, el ob[eLo alumno" envlar uno de esos mensa[es a
la mqulna. LsLa reallzar un proceso lnLerno que no nos lncumbe como degusLadores
de cafe o programadores: nos es lndlferenLe que componenLes Llene la cafeLera o que
pasos slgue para hacer el cafe. SlmplemenLe es una ca[a negra que expone al mundo
una lnLerfaz compuesLa por 2 operaclones o meLodos, lnLerfaz que dlcLa como ha de
ser uLlllzada.
vamos a uLlllzar mucho la palabra lnLerfaz en esLas pglnas: podemos equlparar
la lnLerfaz con el exLerlor del ob[eLo, esas cosas que podemos ver y uLlllzar de ella.



AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

-$%<)3&/&
una propledad es un aLrlbuLo proplo del ob[eLo, y que seguramenLe varle enLre
ob[eLos del mlsmo Llpo. Ln el caso que nos ocupa, una propledad es el color. Ln
nuesLra cafeLera, la propledad color Llene el valor ro[o". Ln oLra cafeLera esLa
propledad Lendr el valor azul" o blanco" probablemenLe. Ll numero de serle de
nuesLra cafeLera Lamblen es una propledad que seguramenLe varlar enLre dlsLlnLas
cafeLeras y que de alguna forma la descrlbe o la hace unlca.
ara acceder a esLas propledades o camblar su valor usaremos Lamblen el paso
de mensa[es. ara ello dlspondremos de los, comunmenLe llamados, geLLers y seLLers
(meLodos para obLener -geL- o aslgnar -seL- un valor a una propledad). ue esLa forma,
sl qulsleramos (y fuera poslble) camblar la propledad color de una cafeLera sobre la
marcha envlarlamos el mensa[e -seLColor en Cb[ecLlve-C como veremos ms adelanLe.
8esumlendo ambos aspecLos podrlamos deflnlr un ob[eLo (la cafeLera) como
una enLldad que reune una serle de comporLamlenLos (meLodos) y aLrlbuLos
(propledades), ofrecldos a oLros ob[eLos, que los puedes uLlllzar medlanLe el paso de
mensa[es.

=/1 (8/>31 &3 8/ -??@ A'; 03(/")10%1 "%1 %B$3(3 : (*0% 13 3C')</$/"
(%" 38 0'"&% $3/8@

Ln el punLo anLerlor hemos hablado del ob[eLo cafeLera y de como se muesLra
al exLerlor, con sus meLodos para
poder ser uLlllzada y sus
propledades caracLerlsLlcas. Sln
embargo la cafeLera es mucho ms
que eso, no confundamos el ob[eLo
en con[unLo con su aparlencla (o
lnLerfaz).
uenLro de la cafeLera
moderna Lendremos una bomba de
agua, un depslLo, un calenLador,
eLc... ero cuando hacemos un cafe no neceslLamos saber nada de esLo. Ls ms: sl a
escondldas algulen camblara la bomba o cualqulera de los componenLes lnLernos no
nos enLerarlamos slempre que el resulLado fuera un cafe corLo o largo como el que
haclamos anLes.


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

Encapsulacin
una de las caracLerlsLlcas prlnclpales de la programacln orlenLada a ob[eLos es
que promueve desde la base la encapsulacln. LsLe Lermlno resume la ldea de que
para uLlllzar o conocer las propledades esenclales de un ob[eLo no deberla ser
necesarlo conocer o enLender el funclonamlenLos o las propledades lnLernas del
mlsmo.
ue la mlsma forma, sl fuera necesarlo camblar la manera en que se reallza una
Larea en nuesLro ob[eLo (por e[emplo aumenLar la presln de la bomba de agua), el
camblo puede hacerse sln afecLar a los ob[eLos que lo uLlllzan. }no Lenemos que volver
a aprender a usar la cafeLera de nuevo solo porque algulen haya camblado algo en su
lnLerlor!
Ln una apllcacln orlenLada a ob[eLos, la lnLerfaz del ob[eLo funclona como una
especle de resumen o carLa de presenLacln en el que aparecen meLodos y aLrlbuLos
que el resLo de ob[eLos pueden uLlllzar del ob[eLo. Como vemos, el funclonamlenLo
lnLerno del ob[eLo puede camblar o no, pero lo lmporLanLe es que a nosoLros, como
usuarlos de ese ob[eLo, nos da lgual porque la lnLerfaz no camblar. LsLo hace poslble,
enLre oLras cosas, que sea exLremadamenLe senclllo acoplar el Lraba[o de un
programador que ha hecho y dlsenando un con[unLo de ob[eLos con el de oLro
programador que crea oLro con[unLo de ob[eLos que usan al prlmero.
Los ob[eLos de la vlda real, al lgual que los de la CC, forman [erarqulas de
especlallzacln. Como slempre, es un concepLo senclllo deLrs de Lermlnos exLranos:
Supongamos que Lenemos dos amlgos, que vamos a LraLar como ob[eLos. Ll
prlmero es Lraba[ador de un mlnlsLerlo (es funclonarlo) y el oLro Lraba[a por cuenLa
propla como plnLor. ? aunque no comparLan caracLerlsLlcas, como su Lraba[o, esL
claro que ambos comparLen muchas caracLerlsLlcas en comun.



AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana



arece claro que dado que comparLen propledades (nombre y edad) asl como
meLodos (Lraba[a, duerme y come) ambos perLenecen a una mlsma famllla de ob[eLos:
podemos generallzarlos y conclulr que ambos son persona", dando lugar a una
relacln de herencla.


Herencia
Como vemos, LanLo los ob[eLos reales, como los proplos de la CC forman
[erarqulas de especlallzacln.



AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

LsLas [erarqulas las podemos ldenLlflcar fcllmenLe pregunLndonos: Ls un?".
or e[emplo: Ls un funclonarlo una persona? or supuesLo que sl, de la mlsma forma
que un plnLor Lamblen es una persona. LsLarlamos sln equlvocacln anLe dos
relaclones de herencla. un funclonarlo es un plnLor? LvldenLemenLe aqul la respuesLa
es un roLundo no, luego plnLor y funclonarlo no esLn relaclonados de forma dlrecLa
por la herencla. un gaLo es un mamlfero? Sl, por LanLo el ob[eLo gaLo podrla ser un
heredero especlallzado del ob[eLo mamlfero, que es ms generlco.
nuesLro amlgo el plnLor o nuesLro amlgo el funclonarlo son personas
especlallzadas en reallzar clerLas Lareas, y por LanLo Llenen Lodo lo proplo de una
persona ms las caracLerlsLlcas proplas de su especlalldad. Ll funclonarlo ha anadldo
una propledad que lndlca el numero de anos como funclonarlo, y el plnLor un meLodo
que le permlLe plnLar al goLele.
Cuando se esLablece una relacln de herencla, lnLernamenLe Lamblen se
produce una relacln de delegacln enLre el ob[eLo hl[o y su ob[eLo padre. Cuando el
ob[eLo lunclonarlo reclbe el mensa[e duerme", esLe lo redlrecclona a su ob[eLo padre
de Llpo ersona, porque es una Larea propla de ser ersona.










Ll funclonarlo por sl mlsmo no enLlende ese mensa[e.
Ln muchos lengua[es de programacln orlenLados a ob[eLos, el ob[eLo lnLerlor"
que represenLa al padre es llamado con la palabra clave super".
Sl el ob[eLo plnLor" reclbe el mensa[e goLele", no hay nlnguna
redlreccln porque los ob[eLos de Llpo lnLor son los especlallzados en esa Larea.

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

or ulLlmo, sl le envlamos el mensa[e goLele" a !uan el funclonarlo no lo
enLender y lo redlrecclonar a su ob[eLo padre, por sl el suplera lnLerpreLarlo. Como
ersona no sabe nada de la operacln goLele" Lendremos un error: nunca deblmos
haber mandado ese mensa[e a algulen que no lo lba a enLender, nl por ser funclonarlo
nl por ser persona...
Cabe pregunLarnos una ulLlma cuesLln: Cul es la lnLerfaz de !uan o Manolo?
Cue muesLran al exLerlor cualqulera de ellos? La respuesLa es que su lnLerfaz esL
formada por los meLodos y propledades del padre ms los meLodos y propledades que
anaden. Cul es la lnLerfaz comun enLre !uan y Manolo? Los meLodos y propledades
de la clase padre comun de ambas, es declr, los proplos de persona".
Ln Lermlnos de CC la herencla es algo muy prcLlco porque cuando un
comporLamlenLo es comparLldo por muchos Llpos de ob[eLos, esLe se puede
generallzar en un solo lugar. Sl en algun momenLo neceslLamos ob[eLos que sean ms
especlallzados, Lan solo Lendremos que programar las dlferenclas con respecLo a los
ob[eLos que ya Lenemos hechos. LsLo nos permlLe manLener y evoluclonar la apllcacln
de forma mucho ms sencllla, opLlmlzar el desarrollo (puesLo que reuLlllzamos cdlgo
consLanLemenLe) y manLener el prlnclplo de encapsulacln que vlmos anLerlormenLe:
no Lenemos que conocer cmo funclona lnLernamenLe la clase padre, solo exLenderla.
PasLa ahora hemos vlsLo como podemos obLener clases herederas de oLra
anadlendo un meLodo nuevo o una propledad. ero Lamblen es poslble crear
herederos sobreescrlblendo meLodos para camblar deLermlnados comporLamlenLos
del ob[eLo padre:












AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

Sobreescritura
Como vemos en la flgura anLerlor, 8enlLo es una especlallzacln de plnLor. no
solo es plnLor, slno que es plnLor experLo. Ls una relacln de herencla porque se puede
apllcar la regla es un": plnLor experLo slempre es plnLor.
8enlLo, como experLo que es, no anade nlngun comporLamlenLo nl propledad
nueva. Sln embargo vuelve a anadlr un meLodo goLele", puesLo que para llevar a cabo
esa Lecnlca de plnLado uLlllza Lecnlcas y maLerlal basLanLe ms avanzados que un
plnLor normal (por eso es plnLor experLo). Ln esLe caso, cuando se le mande dlcho
mensa[e, 8enlLo lo reallzar a su manera y no a la del plnLor convenclonal. Ln esLe caso
no se produce nlnguna redlreccln al ob[eLo padre o super".
un plnLor experLo slmplemenLe sobreescrlbe cmo funclona el meLodo
goLele". La lnLerfaz slgue slendo la mlsma, pero lgualmenLe se ha producldo una
relacln de herencla.
PasLa ahora nos hablamos enconLrado dlsLlnLos Llpos de ob[eLos que se
dlferenclaban claramenLe porque ofreclan dlsLlnLa lnLerfaz, pero por culpa" de la
sobreescrlLura vemos que pueden aparecer ob[eLos que aparenLen ser lguales pero
que en realldad Lraba[en de forma muy dlferenLe. LsLe comporLamlenLo reclbe el
rlmbombanLe nombre de pollmorflsmo.

Polimorfismo
LsLe Lermlno descrlbe la poslbllldad de varlos elemenLos de morfologla
dlferenLe de mosLrarse de una mlsma forma. Ln CC descrlbe la poslbllldad que
hemos descrlLo anLerlormenLe de que ba[o una mlsma aparlencla (lnLerfaz) puedan
darse dlsLlnLos comporLamlenLos. Craclas a esLo podemos, por e[emplo, envlar un
mlsmo mensa[e a un grupo de ob[eLos que sabemos que lo lmplemenLan sln
lmporLarnos de que Llpo son: sln lmporLarnos sl son plnLores o plnLores experLos. Cada
ob[eLo lo lnLerpreLar como debe y no nos debemos preocupar de nada.
Ln la mayorla de los lengua[es orlenLados a ob[eLos (como !ava u Cb[ecLlve-C)
los ob[eLos de aparlencla slmllar se agrupan por su Llpo, es declr, su clase.




AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

Clase
La clase es el elemenLo del lengua[e orlenLado a ob[eLos que deflne el Llpo de
cada uno de los ob[eLos de nuesLra apllcacln. Se puede ver como la receLa a parLlr de
la cual obLenemos los ob[eLos.
Ln esLa receLa se deflnen que caracLerlsLlcas Lendrn mls ob[eLos, cuales son
sus propledades y a que meLodos son capaces de responder y cmo. Ln deflnlLlva:
deflnlmos el aspecLo y comporLamlenLo de los ob[eLos de un Llpo.









veamos un e[emplo:
AnLes, casl de pasada, ya hemos vlsLo un e[emplo de clase cuando hemos
generallzado que LanLo el funclonarlo como el plnLor eran persona". La clase ersona
del dlbu[o deflne que Loda persona va a Lener los aLrlbuLos o propledades nombre" y
edad", y los meLodos Lraba[a", duerme" y come". Adems la clase va a deflnlr que
pasa en el ob[eLo cuando se le mandan esos mensa[es. A esLo ulLlmo lo llamamos
lmplemenLacln y como hemos vlsLo, es una parLe que los oLros ob[eLos no van a
conocer.
Ls lmporLanLe que enLendamos blen la dlferencla enLre clase y ob[eLo (Lamblen
llamado lnsLancla):


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana


Clase es la receLa para hacer ob[eLos, y un ob[eLo es un e[emplo concreLo de
esa clase:
Ln las clases Lamblen se deflnen las relaclones de herencla respecLo a oLras
clases:




Como es lglco, cuando dlsenamos una clase nueva especlallzada a parLlr de
oLra, solo lmplemenLamos las dlferenclas respecLo a la clase padre. LsLe es el moLlvo
por el que la herencla nos permlLe reaprovechar cdlgo ya exlsLenLe.
La herencla de clases no es el unlco meLodo que Lenemos para agrupar ob[eLos
por caracLerlsLlcas slmllares y que queremos LraLar como slmllares.


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

Protocolos
Al lgual que las clases, los proLocolos son una herramlenLa del lengua[e que
uLlllzamos para caLegorlzar clases en base a funclonalldades (meLodos) concreLas que
pueden desempenar. ero al conLrarlo que las clases, los proLocolos no deflnen la
lmplemenLacln de los meLodos. SlmplemenLe slrven como una especle de conLraLo al
que se adhleren las clases para lndlcar que Llenen las capacldades exlgldas por el
proLocolo. or e[emplo:

Ln esLe esquema, la clase ersona lmplemenLa el proLocolo 1raba[ador, que
lmpllca que la clase ersona debe lmplemenLar un meLodo llamado Lraba[a".
Adems LanLo !uan (funclonarlo), Manolo (plnLor), Lucla (persona) y 8enlLo
(plnLor experLo) se pueden conslderar Lraba[adores". Ls declr: como la clase padre de
Lodos ellos lmplemenLa esLe proLocolo Lenemos la LoLal cerLeza de que Lodos ellos
responden al meLodo Lraba[a". Lso sl, graclas al pollmorflsmo puede que cada uno
Lraba[e a su manera.
Los proLocolos son un mecanlsmo muy comun en la CC para consegulr grupos de
ob[eLos que, aun slendo de dlsLlnLas clases, respondan a deLermlnados mensa[es. Ln
oLros lengua[es como !ava, un proLocolo reclbe le nombre de lnLerfaz", que es la
palabra que hemos uLlllzado como slnnlmo de aparlencla: Lenemos que Lener claro
que un proLocolo no lmplemenLa nada, solo es un conLraLo que dlcLa una aparlencla.

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

D*0% &3B)")$ (8/131 : 1'1 $38/()%"31 3" ?453(#)>3ED

uuranLe las prxlmas pglnas vamos a llevar Lodo lo que hemos aprendldo
sobre la programacln orlenLada a ob[eLos al papel. vamos a escrlblr en cdlgo los
e[emplos que vlmos de forma que Lendremos la base suflclenLe de programacln
orlenLada a ob[eLos en Cb[ecLlve-C para comenzar con exlLo nuesLro aprendlza[e de
programacln lCS o CS x.
La gran mayorla de los frameworks
1
de los enLornos de desarrollo de ambos
slsLemas operaLlvos esLn basados en la programacln orlenLada a ob[eLos en
Cb[ecLlve-C, lo que ha hecho de esLe lengua[e uno de los ms populares de la
acLualldad
2
, a pesar de haber pasado prcLlcamenLe desaperclbldo para la gran
comunldad de desarrolladores duranLe decadas. uecadas? LfecLlvamenLe Cb[eLlve-C
no es un reclen llegado preclsamenLe, veamos un poco de hlsLorla.

F" <%(% &3 2)1#%$)/

Cb[ecLlve-C fue creado en los anos 80 prlnclpalmenLe por 8rad Cox y 1om Love
en su companla SLepsLone. ara su desarrollo parLleron del lengua[e C (lengua[e
procedural, no orlenLado a ob[eLos) como unos anos anLes harla Lamblen el creador de
C++ (oLro lengua[e orlenLado a ob[eLos muy popular). La lnsplracln prlnclpal fue
SmallLalk, graclas al cual vleron claramenLe que lengua[es de esLe esLllo lban a ser
necesarlos para solvenLar muchos problemas de reuLlllzacln de sofLware en grandes
corporaclones.
ara ello crearon una exLensln al compllador de C con la que lograban anadlr
las funclonalldades que le permlLlan la uLlllzacln de ob[eLos. LsLo se llam CCC
(Cb[ecL-CrlenLed rogrammlng ln C). ?a en 1986 el lengua[e se presenLaba
oflclalmenLe, en el llbro de Cox Cb[ecL-CrlenLed rogrammlng, An LvoluLlonary
Approach".
A flnales de los 80, nex1, la companla de lnformLlca orlenLada a clencla y
educacln que form SLeve !obs Lras su sallda de Apple llcencl el uso de Cb[ecLlve-C
de SLepSLone. A parLlr de el monLaron su proplo compllador y llbrerlas, que uLlllzarlan
para el desarrollo de la lnLerfaz de usuarlo para esLaclones de Lraba[o nex1 y su

1 Dcese de un conjunto de herramientas (un entorno de desarrollo, un lenguaje) y buenas prcticas orientados a facilitar el desarrollo de
un proyecto o la solucin de problemas concretos dentro del mismo

2 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

slsLema operaLlvo nex1S1L. LvenLualmenLe de[arlan de desarrollar hardware para
cenLrarse en las herramlenLas de sofLware que la crlLlca habla alabado fervlenLemenLe.
aralelamenLe Apple lnLenLaba sobrevlvlr, decanLndose flnalmenLe por la
compra de nex1 y de su slsLema operaLlvo, y devolvlendo a SLeve !obs un puesLo en la
empresa en 1996. Ll resulLado fue el proyecLo 8hapsody, que serla publlcado el verano
de 2001 como Mac CS x 10.0. La mayorla del Al acLual uLlllzada por Apple en lCS y CS
x esL basada en aquel cdlgo, asl como el lengua[e y las herramlenLas de desarrollo.

9/"%1 / 8/ %4$/

Como vemos, Cb[ecLlve-C es un lengua[e maduro y evoluclonado, y adems en
consLanLe evolucln. 1amblen Llene sus ldloslncraclas (comparLldas con oLros
lengua[es de slmllar orlgen) como la forma en que se dlsponen las clases en flcheros.

La clase
or convencln, en Cb[ecLlve-C vamos a Lener un par de flcheros por cada clase
de nuesLra apllcacln, ambos con el mlsmo nombre que la clase que deflnen pero con
dlsLlnLas exLensln:
. llchero de cabecera, con exLensln .h. Ln esLe flchero deflnlmos el aspecLo que
nuesLra clase ofrece al exLerlor: sus propledades y sus meLodos. LsLe flchero va a
conLener el color de la cafeLera y los dos boLones para hacer el cafe.
. llchero de lmplemenLacln, con exLensln .m. Ln esLe flchero deflnlmos el
funclonamlenLo lnLerno de nuesLra clase. LsLe flchero va a conLener la bomba de agua,
el depslLo y dems componenLes y Lareas lnLernas de la cafeLera.
Comencemos deflnlendo el aspecLo o lnLerfaz de nuesLra clase.

Interfaz de la clase. Fichero de cabecera.
Ll flchero de cabecera slgue slempre esLe paLrn:


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

[lnLerface nombreueLaClase : Claseadre

...

[end

uonde nombreueLaClase se corresponde con el de la clase que deflnlmos y
Claseadre el nombre de la clase desde la que heredamos. LnLre [lnLerface y [end
colocaremos los nombres de meLodos y propledades que nuesLra clase proporclona a
oLros ob[eLos. Ms adelanLe veremos cmo.
Ln Cb[ecLlve-C slempre especlflcamos la clase padre, asl que podemos
pregunLarnos: Sl esLamos deflnlendo la clase ersona, que no Lenla una clase padre,
que deberemos lndlcar? Ln ese caso ponemos como clase padre nSCb[ecL. LsLa clase
conLlene meLodos y funclonalldades (como Lemas de gesLln de memorla) que son
necesarlas para que el enLorno de e[ecucln de Cb[ecLlve-C desempene su Lraba[o
correcLamenLe. 1oda clase debe heredar de forma dlrecLa o lndlrecLa de nSCb[ecL.

[lnLerface ersona : nSCb[ecL

...

[end

or e[emplo, nuesLra clase lnLor, el flchero se llamarla lnLor.h y Lendrla la
slgulenLe lnLerfaz:

[lnLerface lnLor : ersona

...

[end

? de la mlsma forma, el lnLor LxperLo Lendrla una lnLerfaz como esLa:


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

[lnLerface lnLorLxperLo : lnLor

...

[end

Ln Cb[ecLlve-C no es poslble que una clase herede de varlas oLras, la herencla
slempre se produce desde una unlca clase. Ln oLros lengua[es orlenLados a ob[eLos
como C++ sl que es poslble que una clase herede de varlas oLras slmulLaneamenLe,
adqulrlendo la habllldad de clases poLenclalmenLe dlspares.
una vez deflnlda la relacln de herencla de nuesLra clase, vamos a rellenar el
lnLerlor de la lnLerfaz. Ln prlmer lugar deflnamos las propledades:

"#$%&'()('*
Las propledades son los aLrlbuLos de nuesLra clase, que guardan su esLado y sus
caracLerlsLlcas. Su slnLaxls es muy sencllla:


[properLy 1lpoueLaropledad nombreueLaropledad,


1lpoueLaropledad es el Llpo de daLos del que esLamos hablando, que puede
ser un Llpo bslco (enLero lnL, booleano 8CCL, coma floLanLe floaL, eLc..) o una clase.
or ulLlmo el nombre de la propledad.
Ln el caso de ersona, Lendrlamos las slgulenLes propledades lncluldas en
nuesLra lnLerfaz:


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

[lnLerface ersona : nSCb[ecL

"#$%#&$'( )*' edad,

"#$%#&$'( +,,'$)*- *nombre,

...

[end

La prlmera es un enLero que va a guardar la edad del lndlvlduo. La segunda es
una cadena de LexLo que va a guardar su nombre. Las cadenas de LexLo en Cb[ecLlve-C
se guardan hablLualmenLe como un ob[eLo de Llpo nSSLrlng*. Como podemos ver, una
propledad de un ob[eLo puede ser oLro ob[eLo, lo que nos va a dar ple para hablar de
una nueva forma de relaclonar ob[eLos:

+) ,$-%$*&,&./
Sl hasLa ahora hablamos vlsLo que los ob[eLos se podlan relaclonar enLre ellos
medlanLe la herencla, Lamblen enconLramos esLa forma de relacln, en la cual un
ob[eLo posee a oLro y lo uLlllza de forma dlrecLa. odemos pensar en los boLones de
hacer cafe de la cafeLera como sl fueran ob[eLos que perLenecen a un ob[eLo mayor,
que es la cafeLera. Ln Cb[ecLlve-C esLo quedarla algo asl:

[properLy 8oLonCafeLera *boLonCafeLargo,

[properLy 8oLonCafeLera *boLonCafeCorLo,








AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana



Lo cual nos va a dar la relacln enLre ob[eLos slgulenLe:
Las relaclones de composlcln enLre ob[eLos nos permlLen crear ob[eLos
comple[os que de oLra forma serla lmposlble obLener. LsLn especlalmenLe
lnvolucrados en las esLrucLuras de daLos: por e[emplo, en Cb[ecLlve-C una llsLa (o
array) es Lan solo un ob[eLo que esL compuesLo de oLros muchos, guardando un clerLo
orden.
Al lgual que con la herencla, Lenemos una manera rplda de ldenLlflcar una
relacln de esLe Llpo: Ll prlmer ob[eLo esL compuesLo del segundo ob[eLo?: La
cafeLera esL compuesLa de un boLn de cafe largo? Como la respuesLa es aflrmaLlva
enLonces esLamos anLe una relacln de composlcln.

Paso de mensajes y mtodos
Los meLodos, en Cb[ecLlve-C Llenen una slnLaxls muy pecullar, que hace que de
prlmeras nos slnLamos un poco perdldos. ero sl comparamos la deflnlcln de una
funcln en un lengua[e como C o !ava con Cb[ecLlve-C enconLraremos rpldamenLe
paralellsmos:

./0&1')2&345
-(vold)dlbu[a8ecLanduloConLadoMayor:(lnL)ladoMayor yLadoMenor:(lnL)ladoMenor,

6&*-780& -&*9$)1%: 1%;% <828 % 45
vold dlbu[a8ecLangulo(lnL ladoMayor, lnL ladoMenor),

Como vemos, la prlnclpal dlferencla enLre Cb[ecLlve-C y los lengua[es que ya
conocemos es que los parmeLros esLn lnLercalados en el nombre de la funcln. C el
nombre de la funcln esL lnLercalado enLre los parmeLros, sl queremos verlo asl.
Ln esLe e[emplo Lenemos un meLodo que cuando flnallza no devuelve nada (su
Llpo de daLo de reLorno es vold) y que reclbe dos parmeLros que se van a lndlcar el
Lamano del lado mayor y menor del recLngulo.

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

Ls muy proplo del lengua[e que los nombres de meLodos sean muy largos, y en
clerLo modo auLoexpllcaLlvos, cosa que se ve especlalmenLe blen cuando llamamos a
esLos meLodos, o me[or dlcho, cuando envlamos un mensa[e a un ob[eLo:

[dlbu[anLe dlbu[a8ecLanduloConLadoMayor:13 yConLadoMenor:10],

Los mensa[es se reallzan slempre enLre corcheLes, slendo el prlmer elemenLo el
ob[eLo al que queremos mandar el mensa[e y a conLlnuacln el nombre del meLodo,
separando cada parLe del nombre de un parmeLro medlanLe los dos punLos (:). 1al y
como declamos, en la llamada el meLodo queda auLoexpllcado y hace un cdlgo muy
leglble.
Ahora vamos a anadlr a la lnLerfaz de la clase ersona las deflnlclones de
meLodos correspondlenLes:
[lnLerface ersona : nSCb[ecL

[properLy lnL edad,

[properLy nSSLrlng *nombre,


- (vold)Lraba[a:(lnL)horas,

- (vold)duerme,

- (vold)come:(AllmenLo *)unAllmenLo,

[end

Sl a un ob[eLo ersona qulsleramos envlarle cualqulera de esLos mensa[es, lo
harlamos de la slgulenLe manera:

[lucla Lraba[a:10],
[lucla seLnombre:["Lucla erez"],


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

un momenLo... La clase ersona no Llene un meLodo seLnombre en la lnLerfaz...
Su clase padre Lampoco lo Llene deflnldo porque es nSCb[ecL... LnLonces, ue dnde
aparece? Como dl[lmos en el aparLado sobre propledades, esLas se acceden Lamblen
medlanLe mensa[es, al lgual que los meLodos. Cuando deflnlmos una propledad
usando [properLy el compllador nos va a generar auLomLlcamenLe dos meLodos:
- (1lpoueLaropledad)nombreueLaropledad,
- (vold)seLnombreueLaropledad:(1lpoueLaropledad)nuevovalor,

Ll prlmero nos recupera el valor del aLrlbuLo y el segundo nos permlLe camblar su
valor.
lgual que anLes hemos camblado el nombre" del ob[eLo lucla", podemos
recuperarlo medlanLe el prlmer meLodo:

nSSLrlng *unnombre = [lucla nombre],

MedlanLe esLa llamada guardamos en la varlable unnombre" el valor del
aLrlbuLo nombre" del ob[eLo lucla".

La implementacin de la clase
La lmplemenLacln, es declr, el funclonamlenLo lnLerno de los ob[eLos se
descrlbe en el flchero de lmplemenLacln (que recordemos que Lendr un nombre del
esLllo de Clase.m):

[lmplemenLaLlon nombreueLaClase

...

[end

Como vemos, aun ms senclllo que el flchero de cabecera. ara nuesLra clase
=&$>%*8 Lendrlamos un flchero ersona.m con el slgulenLe conLenldo:

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana


[lmplemenLaLlon ersona

...

[end


!"#$%"%&'()*+& -% #./#*%-(-%0
LsLe Lraba[o, como vlmos, nos lo ahorra el compllador al generarnos
auLomLlcamenLe, y sln que lo veamos, los meLodos de acceso a la propledad
correspondlenLes. AnLlguamenLe, para cada propledad que deflnleramos, deblamos
lndlcar en el flchero de lmplemenLacln una llamada [synLheslze que generaba la
lmplemenLacln de los meLodos de acceso. AcLualmenLe con deflnlr [properLy
obLenemos el mlsmo efecLo.

0-%1'-'/2),&./ (' 3/ -42$($
Sln embargo, los meLodos debemos lmplemenLarlos nosoLros. La slnLaxls es
muy sencllla y slgue el paLrn vlsLo en la deflnlcln del meLodo en la lnLerfaz de la
clase:

-(vold)dlbu[a8ecLanduloConLadoMayor:(lnL)ladoMayor yLadoMenor:(lnL)ladoMenor
[
...
}


Sl en la lnLerfaz Lan solo colocbamos el nombre del meLodo seguldo de un
punLo y coma, en la lmplemenLacln el nombre del meLodo se conLlnua abrlendo
llaves. A conLlnuacln escrlblrlamos el cdlgo en Cb[ecLlve-C que lmplemenLara el
comporLamlenLo del meLodo, y flnalmenLe cerrarlamos las llaves.
ue esLa manera, la lmplemenLacln de nuesLra clase ersona quedarla
exacLamenLe asl:

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

[lmplemenLaLlon ersona

- (vold)Lraba[a:(lnL)horas
[
...
}

- (vold)duerme
[
...
}

- (vold)come:(nSSLrlng *)unAllmenLo
[
...
}

[end

Implementacin e interfaz de clases que heredan de otras
veamos como serla la lnLerfaz de nuesLra clase lunclonarlo:

[lnLerface lunclonarlo : ersona

[properLy lnL anLlguedad,

[end

Aqul apreclamos el auLenLlco valor de la herencla: la clase lunclonarlo ya no
Llene que deflnlr las propledades nombre" o edad", slno Lan solo deflnlr la herencla
desde la clase padre ersona. A pesar de ello un ob[eLo lunclonarlo responder a
cualquler mensa[e proplo de la clase ersona, porque es su ob[eLo padre.
ue lgual manera, lnLor solo va a anadlr la deflnlcln del nuevo meLodo
goLele":

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana


[lnLerface lnLor : ersona

- (vold)goLele,

[end

Ln esLe caso, como esL anadlendo un nuevo meLodo, deber especlflcar su
lmplemenLacln en su flchero correspondlenLe. Asl, lnLor.m quedarla de la slgulenLe
manera:

[lmplemenLaLlon lnLor

- (vold)goLele
[
nSLog(["lnLo al goLele"),
}

[end

Como vemos, Lan solo escrlblmos la lmplemenLacln del nuevo meLodo. Ln esLe
e[emplo uLlllzamos la funcln nSLog de Cocoa para mosLrar por consola una cadena de
LexLo.
Cue sucede cuando hacemos uso de la sobreescrlLura de meLodos? veamos la
lnLerfaz de la clase lnLor LxperLo, que como recordaremos sobreescrlbla el meLodo
goLele" de la clase lnLor:

[lnLerface lnLorLxperLo : lnLor

[end

La clase lnLor LxperLo va a Lener el mlsmo aspecLo" que la clase lnLor. no
obsLanLe, va a ofrecer un nuevo funclonamlenLo del meLodo goLele" en la seccln de
lmplemenLacln:

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana


[lmplemenLaLlon lnLorLxperLo

- (vold)goLele
[
nSLog(["lnLo al goLele como un experLo"),
}

[end

Pemos sobrescrlLo el meLodo de lnLor y ahora la cadena de LexLo que
aparecerla por panLalla serla oLra.
Cul ser el resulLado por consola de e[ecuLar las slgulenLes llneas de cdlgo?

lnLor *Manolo = [lnLor new],
lnLorLxperLo *8enlLo = [lnLorLxperLo new],

[Manolo goLele],
[8enlLo goLele],

Ln las dos prlmeras llneas creamos los ob[eLos Manolo" y 8enlLo". Ll proceso
es Lan slmple como lanzar el mensa[e new" dlrecLamenLe a la clase. Ln las dos llneas
slgulenLes llamamos al mlsmo meLodo en cada uno de los ob[eLos, con el slgulenLe
resulLado por consola:

poo[13033:303] =)*'% 8? -%'&?9
poo[13033:303] =)*'% 8? -%'&?9 1%;% 7* &@#&$'%

Craclas al pollmorflsmo podemos LraLar como lguales ob[eLos que en realldad
Llenen un funclonamlenLo dlsLlnLo. ue hecho podrlamos hacer pasar al ob[eLo 8enlLo"
como un plnLor comun y LraLarle como Lal:


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

lnLor *manolo = [lnLor new],
=)*'%$ *8enlLo = [=)*'%$A@#&$'% *&B],

[Manolo goLele],
[8enlLo goLele],

? el resulLado por consola serla exacLamenLe el mlsmo vlsLo anLerlormenLe.
LsLo se puede hacer porque lnLorLxperLo es un lnLor Lamblen.
LsLa generallzacln se puede hacer por la relacln de herencla enLre clases.
ero no es el unlco mecanlsmo como vlmos. uno de los ms uLlllzados por Cb[ecLlve-C
en el desarrollo de apllcaclones CS x e lCS es el de los proLocolos.

Definicin de protocolos
Como ya expllcamos, un proLocolo acLua como un conLraLo al que una clase
puede adherlrse, y que lndlca que cumple con clerLas caracLerlsLlcas deflnldas en el
proLocolo.
un proLocolo se puede deflnlr en un flchero proplo (nombreuelroLocolo.h) o
en el flchero de cabecera de una clase. Su slnLaxls es muy pareclda a la de la lnLerfaz de
una clase:

[proLocol nombreuelroLocolo

...

[end

SlmplemenLe Lenemos que lndlcar el nombre que queremos darle al proLocolo
y luego especlflcar los nombres de meLodos que cualquler clase que lo cumpla debe
lmplemenLar. or e[emplo, nuesLro proLocolo Lraba[ador quedarla de la slgulenLe
manera:


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

[proLocol 1raba[ador

- (vold)Lraba[a:(lnL)horas,

[end

Ahora vamos a lndlcar a la clase ersona que cumple el proLocolo 1raba[ador
(ya que Llene un meLodo Lraba[a" que cumple el lndlcado por el proLocolo):

[lnLerface ersona : nSCb[ecL <C$8/808D%$>

[properLy lnL edad,

[properLy nSSLrlng *nombre,


- (vold)Lraba[a:(lnL)horas,

- (vold)duerme,

- (vold)come:(nSSLrlng *)unAllmenLo,

[end

ara ello slmplemenLe lo lndlcamos, enLre < y >", los proLocolos que cumple
separados por comas. Ln esLe caso solo Lenemos uno, pero ser comun ver clases que
lmplemenLen dos o Lres proLocolos dlsLlnLos.
Craclas a esLe mecanlsmo vamos a Lener famlllas de clases ms generlcas (un
proLocolo puede ser adopLado por clases muy dlferenLes y sln relacln muLua) que
podremos LraLar de forma unlflcada:


AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

ld<1raba[ador> Lraba[ador1 = [ersona new],
ld<1raba[ador> Lraba[ador2 = [lunclonarlo new],
ld<1raba[ador> Lraba[ador3 = [lnLorLxperLo new],

[Lraba[ador1 Lraba[a:4],
[Lraba[ador2 Lraba[a:8],
[Lraba[ador3 Lraba[a:7],

Ln las Lres prlmeras llneas creamos ob[eLos del Llpo generlco ld" (ld slmbollza
un punLero a una clase de cualquler Llpo) pero que cumplen el proLocolo 1raba[ador, lo
que se lndlca enLre < y >". LsLa serle de ob[eLos que hemos creado podrlan ser de
cualquler clase que lmplemenLe el proLocolo (sl no fuera asl el compllador nos darla un
avlso). lunclonarlo y lnLorLxperLo lo cumplen Lamblen porque heredan de ersona,
asl que no es necesarlo que lo especlflquemos en su lnLerfaz.
una vez creados les envlamos el mensa[e Lraba[a" con la segurldad de que
Lodos los ob[eLos sabrn responder.



















AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

G3(/<)#'8/"&%@@@

La programacln orlenLada a ob[eLos se basa en una serle de concepLos que
uLlllzaremos recurrenLemenLe para la creacln de nuesLros programas. Como hemos
vlsLo, los concepLos son, pese a lo rlmbombanLe de sus denomlnaclones, muy senclllos.
or suerLe gran parLe de los elemenLos de la CC se puede equlparar con el mundo
real de una forma ms o menos absLracLa, lo que nos deberla hacer ms senclllo el
aprendlza[e.
Ll paso de esLos conoclmlenLos al papel" es lgualmenLe senclllo en cuanLo a slnLaxls,
pues es una Lraslacln dlrecLa de los concepLos vlsLos en la Leorla. La slnLaxls de
Cb[ecLlve-C en prlnclplo parece rebuscada pero con el uso hablLual nos
acosLumbraremos rpldamenLe y pasaremos a hacerlo Lodo de forma auLomLlca.
oslblemenLe ahora mlsmo nos quede la duda y el ansla de saber cmo apllcar, en una
apllcacln real, Lodos esLos conoclmlenLos. uuranLe el prxlmo curso sucedern dos
cosas lmporLanLes de cara a clmenLar nuesLro conoclmlenLo de la CC:

veremos como uLlllzan Lodas esLas Lecnlcas los lngenleros de Apple en el Suk
de lCS y CS x.
Lmpezaremos a crear nuesLras proplas clases y experlmenLaremos por
nosoLros mlsmos las venLa[as de la CC, los problemas que se nos presenLan e
lremos Lenlendo una ldea ms clara de cundo uLlllzar cada elemenLo del
lengua[e.
}Ln unos meses verels como el esfuerzo de camblar el chlp" ha merecldo la pena!








AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana


C&>' D& 87'%&28?781)E*

1. Ln un bollgrafo auLomLlco, Serla una propledad el muelle lnLerno que
lleva?
a) Sl, es una propledad.
b) no, no es una propledad.
2. La herencla lmpllca pollmorflsmo?
a) no, pero el pollmorflsmo slempre esL causado por la herencla.
b) no, son concepLos anLagnlcos.
c) Sl, slempre.
d) no necesarlamenLe.
3. Cue herramlenLa de la CC expllcarla que una ballena, pese a ser un
mamlfero lgual que un elefanLe, vlva ba[o el agua?
a) La encapsulacln.
b) La herencla.
c) Ll pollmorflsmo.
d) nlnguna de las anLerlores.
4. Cul de esLos meLodos no es un seLLer o geLLer vlldo en Cb[ecLlve-C?
a) -seLAlLura:
b) -seLColor:
c) -geLoslclon
d) -color
3. Cue dlferencla clase de ob[eLo?
a) Ll ob[eLo deflne las propledades y la clase los meLodos.
b) La clase deflne las caracLerlsLlcas del ob[eLo y el ob[eLo les da
vlda.
c) Ln el ob[eLo deflnlmos la lmplemenLacln de los meLodos, en la
clase la lnLerfaz.

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

d) Clase y ob[eLo son concepLos ldenLlcos, cada uno se usa en un
conLexLo dlsLlnLo.
e) nlnguna de las anLerlores es correcLa.
6. Cul es la deflnlcln de clase correcLa (en Cb[ecLlve-C) para lndlcar que
nuesLra clase 8allena hereda de Mamlfero y de AnlmalMarlno?
a) [lnLerface 8allena : Mamlfero, AnlmalMarlno.
b) [lnLerface 8allena : nSCb[ecL <Mamlfero, AnlmalMarlno>
c) Ambas son correcLas.
d) nlnguna es correcLa.
7. Cul es la prlnclpal dlferencla enLre un proLocolo y una clase?
a) nlnguna, ambas son lnLercamblables y equlvalenLes.
b) Ll proLocolo se reflere a la lnLerfaz de un ob[eLo y clase a lnLerfaz
e lmplemenLacln.
c) Ll proLocolo deflne solo meLodos.
d) Ll proLocolo no se puede uLlllzar como Llpo de un ob[eLo.
8. Cue fenmeno de[a de produclrse cuando sobrescrlblmos un meLodo de
una clase padre en una clase hl[a?
a) 8edlreccln.
b) ollmorflsmo.
c) Composlcln.
9. 8epresenLa en forma de [erarqula de clases el LexLo mosLrado a
conLlnuacln:
"un clrculo es una flgura geomeLrlca caracLerlzada por abarcar el con[unLo de
punLos slLuados a una dlsLancla r de un punLo. un cuadrado es un elemenLo
geomeLrlco caracLerlzado por una longlLud de lado consLanLe l en sus cuaLro
lados. Ambos se pueden colocar en un punLo del plano, deflnldo por una
coordenada x y una coordenada ?. La longlLud del perlmeLro del clrculo es
2**radlo, mlenLras que la del cuadrado es 4*lado. 1oda flgura Lendr un
nombre proplo."
Se debe lndlcar claramenLe cuales son las propledades o meLodos heredados,
composlclones, herenclas, eLc. or ulLlmo, se debe lndlcar sl se deLecLa
pollmorflsmo en algun punLo del esquema resulLanLe.
10. 1raduce a Cb[ecLlve-C, denLro de lo poslble, la [erarqula de ob[eLos del
e[erclclo anLerlor.

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

,%?71)E* D& ?%> &0&$1)1)%> #$%#7&>'%>

1. La respuesLa correcLa es /F +% &> 7*8 #$%#)&D8D. La razn la Lenemos
que buscar en la deflnlcln que hemos dado de propledad y de
lmplemenLacln: el modelo de muelle, o lncluso su presencla, no es algo que
afecLe de forma dlrecLa al uso que una persona har de ese boll. La persona no
Llene por que conocer que el mecanlsmo auLomLlco se ha lmplemenLado con
un muelle (o de cualquler oLra manera).
2. La respuesLa DF es correcLa: que haya herencla no lmpllca pollmorflsmo
necesarlamenLe. La respuesLa 8F no es correcLa porque el pollmorflsmo puede
aparecer, por e[emplo, al lmplemenLar dos proLocolos de dlferenLe forma, en
dos clases no relaclonadas. Ll pollmorflsmo no es un concepLo conLrarlo a la
herencla, son concepLos relaclonados, luego podemos descarLar /F. ? la
respuesLa 1F Lampoco serla correcLa puesLo que puede haber herencla sln
pollmorflsmo: p. e[. sl la clase hl[a se llmlLa a anadlr meLodos a la clase padre.
3. La respuesLa correcLa es la /F porque es la herencla la que expllca que
ob[eLos que comparLen clase padre se especlallcen.
4. Ln Cb[ecLlve-C, los seLLer Llenen la slnLaxls -seLropledad:, y los geLLers -
propledad, luego el unlco meLodo no vlldo es el 1F 3-&'G?'7$8. Ls lmporLanLe
ver que esLo es una convencln del lengua[e, y que, por e[emplo en !ava la
respuesLa al LesL serla dlferenLe.
3. Ln esLe caso la unlca respuesLa correcLa es la /F: una clase es una
"receLa" que deflne como van a ser los ob[eLos de un deLermlnado Llpo. un
ob[eLo no es ms que un especlmen concreLo y vlvlenLe de ese Llpo.
6. La respuesLa correcLa es DF porque Cb[ecLlve-C no admlLe la herencla
mulLlple. 8allena no podrla heredar de las clases Mamlfero y AnlmalMarlno
slmulLneamenLe.
7. La respuesLa correcLa es 1F: enLre oLras, una dlferencla enLre una clase y
un proLocolo es que un proLocolo solo puede deflnlr meLodos. LsLe con[unLo de
meLodos forman una especle de conLraLo que pueden adopLar las clases. un
proLocolo no Llene relacln dlrecLa con una clase, y sl se puede uLlllzar como un
Llpo de daLo para generallzar ob[eLos, como vlmos con el proLocolo 1raba[ador.
8. La respuesLa 8F es correcLa: cuando una clase hereda de oLra, al llamar a
meLodos de la clase hl[a, esLa los re-dlrecclona a su ob[eLo de la clase padre
(super) para ser e[ecuLados. Cuando la clase hl[a sobrescrlbe un meLodo de la

AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

clase padre, el meLodo e[ecuLado ser el reclen deflnldo en lugar de redlrlglr
hacla el que lmplemenL el padre.
9. La esLrucLura de clases del problema se podrla represenLar de la manera
slgulenLe:









La clase padre es H)-7$8I&%;&'$)18, que generallza a 4J$17?% y 478D$8D%,
slendo ambas flguras geomeLrlcas. La generallzacln lncluye la poslcln, que
vlene represenLada por un ob[eLo =7*'%, uLlllzando 1%;#%>)1)E*. unLo es un
ob[eLo que deflne dos propledades, @ e ( que lndlcan un punLo en un plano de
dos dlmenslones. CLros elemenLos que generallza llguraCeomeLrlca son la
propledad *%;/$& y el meLodo 3#&$J;&'$% pues Loda flgura Lendr un clculo
de perlmeLro.
La clase 4J$17?% anade la propledad $8D)% Llplca de un clrculo, y >%/$&>1$)/& el
meLodo 3#&$J;&'$% con el calculo proplo de un clrculo.
La clase 478D$8D% anade la propledad ?8D% propla de un cuadrado y
>%/$&>1$)/& el meLodo #&$J;&'$% con el clculo de perlmeLro Llplco de un
cuadrado.
LxlsLe una relacln de pollmorflsmo enLre el Clrculo y el Cuadrado respecLo al
clculo de perlmeLro: Ambas son llguraCeomeLrlca pero su meLodo 3#&$J;&'$%
se comporLa de dlsLlnLa forma en cada Llpo de ob[eLo.





AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana

10. La clase unLo esL compuesLa por dos enLeros que deflnen las
coordenadas:

[lnLerface unLo : nSCb[ecL

[properLy lnL x,
[properLy lnL y,

[end
[lmplemenLaLlon unLo

[end

llguraCeomeLrlca deflne el nombre, poslcln (un ob[eLo de Llpo unLo) y el
meLodo -perlmeLro. La lmplemenLacln de -perlmeLro queda vacla pues falLa
lnformacln para calcularlo.
[lnLerface llguraCeomeLrlca : nSCb[ecL

[properLy nSSLrlng *nombre,
[properLy unLo *poslclon,

- (lnL)perlmeLro,

[end
[lmplemenLaLlon llguraCeomeLrlca

- (lnL)perlmeLro
[
reLurn 0,
}

[end

Clrculo exLendlenLe a llguraCeomeLrlca anadlendo radlo y una lmplemenLacln
propla de -perlmeLro (Ml es una consLanLe del lengua[e que represenLa al
numero ):

[lnLerface Clrculo : llguraCeomeLrlca

[properLy lnL radlo,

[end
[lmplemenLaLlon Clrculo

- (lnL)perlmeLro
[
reLurn 2*Ml*self.radlo,
}

[end



AC8C 8uslness ArchlLecLure SL |Avda. luencarral, 44, 8, 30|28108 Alcobendas, Madrld, Lspana


or ulLlmo, Cuadrado anade el lado y oLra lmplemenLacln de -perlmeLro:

[lnLerface Cuadrado : llguraCeomeLrlca

[properLy lnL lado,

[end
[lmplemenLaLlon Cuadrado

- (lnL)perlmeLro
[
reLurn 4*self.lado,
}

[end

También podría gustarte