Final de Programación Orientada a Objetos Proto%pos y Clases Profesor: Máximo Prieto Jefe de Trabajos Prác%cos: Hernán Wilkinson Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Federico Larumbe fl[email protected] L.U.: 260/01 10 de marzo de 2008 Se realiza un análisis de los lenguajes orientados a objetos con proto%pos y con clases. Se adjuntan síntesis de los arUculos fundacionales de la programación con proto%pos. Se comparan ambos enfoques con sus ventajas y sus desventajas. Introducción En este informe se sinte%zan los arUculos fundacionales de la programación orientada a objetos con proto%pos. La síntesis de cada arUculo va acompañada con una breve conclusión del mismo. Luego de los cuatro arUculos se presenta un análisis compara%vo entre el uso de sistemas con clases y de sistemas con proto%pos. Este análisis está acompañado de una conclusión que muestra las ventajas y desventajas de ambos enfoques en dis%ntas situaciones. De Tipos y Prototipos El Tratado de Orlando L ynn Andrea Stei n, Henry L i eberman, Davi d Ungar El obj e%vo de l a programaci ón ori entada a obj etos es proveer una forma natural y di recta para descri bi r conceptos del mundo real . Una parte fundamental es l a posi bi l i dad de compar%r datos, códi go y defini ci ones. Así mi smo, todos l os l enguaj es ori entados a obj etos proveen al guna forma de defini r un obj eto en térmi nos de uno exi stente. Muchos l enguaj es i mpl ementaron el compar%r a través de cl ases. Si n embargo, esto i mpone una j erarquí a de %pos rí gi da. L os firmantes de este tratado proponen di s%ntas sol uci ones a este probl ema: L i eberman propuso rempl azar l a herenci a tradi ci onal por del egaci ón y l as cl ases abstractas por obj etos protoUpi cos; Ungar y Smi th tambi én propusi eron un enfoque basado en proto%pos y real i zaron una drás%ca si mpl i ficaci ón del model o de Smal l tal k en l a cual un si mpl e enl ace al obj eto padre reempl aza el protocol o cl ase/subcl ase/i nstanci a; Stei n señal ó que l a rel aci ón cl ase/subcl ase es esenci al mente l a “ del egaci ón” , o “ herenci a di námi ca” . Reconocen en común dos mecani smos fundamental es que l os l enguaj es ori entados a obj etos deben i mpl ementar para compar%r: l a empaUa, es deci r, l a posi bi l i dad de un obj eto de compar%r el comportami ento de otro obj eto si n redefini ci ón expl í ci ta; y l a posi bi l i dad de crear un nuevo obj eto basado en un templ ate que garan%za en parte caracterí s%cas del nuevo obj eto. L os mecani smos para compar%r pueden ser anal i zados real i zando el ecci ones de di seño sobre l as si gui entes tres di mensi ones: está%cos o di námi cos, i mpl í ci tos o expl í ci tos y por obj eto o por grupo. Según l as si tuaci ones de programaci ón, di ferentes combi naci ones de estas caracterí s%cas son más apropi adas: en un entorno de programaci ón experi mental , compar%r en forma di námi ca, expl í ci ta y por obj eto; en l a producci ón de sobware extenso y ru%nari o, estri ctamente está%co, i mpl í ci to y ori entado a grupo. Como l os si stemas evol uci onan natural mente de di námi cos y desorgani zados haci a está%cos y más op%mi zados, l a representaci ón en obj etos tambi én deberí a evol uci onar en este sen%do. El entorno de desarrol l o deberí a proveer representaci ones flexi bl es j unto a herrami entas para agregar estructuras mi entras el di seño se estabi l i za. Conclusión Me parece una buena di recci ón haci a donde i r el rel aj ar l a j erarquí a de l os %pos y enfocarse en l o más concreto que son l os obj etos. Par%cul armente, me atraj o l a si mpl i ficaci ón de Ungar y Smi th en el l enguaj e Sel f y su proto%pado. L as tres di mensi ones de l a forma de compar%r resul ta ú%l para cl asi ficar l os l enguaj es de obj etos. En el si gui ente arUcul o, se anal i za más detal l adamente. Una visión compartida sobre compartir El Tratado de Orlando L ynn Andrea Stei n, Henry L i eberman, Davi d Ungar Iden%ficamos dos mecani smos fundamental es: templ ates y empaUa. L os templ ates crean nuevos obj etos basados en su propi a i magen y proveen garanUas sobre l a si mi l i tud de l os mi embros del grupo. L a empaUa permi te a un obj eto actuar como si fuera otro y así permi te compar%r el estado y el comportami ento. Dos formas de compar%r aparecen en l os si stemas ori entados a obj etos. Uno es el an%ci pado, si mi l i tudes que se advi erten en l a fase conceptual del di seño. En l os l enguaj es ori entados a obj etos tradi ci onal es, l as cl ases si rven para este propósi to. L a otra forma de compar%r es no an%ci pada. L a del egaci ón, o herenci a di námi ca, permi te a l os nuevos obj etos reu%l i zar el comportami ento de exi stentes si n requeri r l a especi ficaci ón previ a de esta rel aci ón. L a empaUa puede ser expl í ci ta, “ Ej ecuto thi sObj ect:thi sRou%ne en mi entorno” , o puede ser por defecto, “ Todo l o que no puedo resol ver l ocal mente, l o busco en mi padre y l o ej ecuto en mi entorno” . L a herenci a de Si mul a y Smal l tal k es l a determi naci ón preprogramada de l os cami nos de del egaci ón por defecto y por grupo. Un templ ate con%ene todos l os métodos y defini ci ones de vari abl es, punteros a padre, etc., requeri dos para defini r un nuevo obj eto del mi smo %po. Si el obj eto no puede ganar o perder atri butos, l o l l amamos templ ate estri cto. Un templ ate mi ni mal es el que permi te a l os obj etos creados defini r otros atri butos. El model o del l enguaj e actor es%pul a úni camente obj etos ac%vos y pase de mensaj es en paral el o. L os si stemas actor se cl asi fican como di námi cos, expl í ci tos y por obj eto. No hay templ ates en el núcl eo de estos si stemas. Del ega%on es un fruto de l os l enguaj es actor. Un nuevo obj eto se crea con un obj eto vací o que apunta a otro y l uego se i ngresan l os detal l es que debe contener. En Del ega%on, l a empaUa puede ser i mpl í ci ta o expl í ci ta. Sel f es un l enguaj e basado en templ ates. Un nuevo obj eto es creado a par%r de l a cl onaci ón de otro. L os templ ates son no estri ctos y l a empaUa es por obj eto, di námi ca e i mpl í ci ta. Hybri d permi te a l a tradi ci onal mente está%ca y estri cta rel aci ón de herenci a ser di námi ca y flexi bl e. Conclusión Se anal i zan dos conceptos fundamental es de l a programaci ón ori entada a obj etos: cómo nacen l os obj etos y cómo comparten comportami ento. L a extensi ón del di nami smo permi te agi l i zar l a programaci ón y, por l o tanto, acortar l a brecha entre l os entes y l os obj etos. En mi opi ni ón, es cómodo tener templ ates, ya sea en forma de cl ase o de proto%po. De acuerdo a l os obj etos en cues%ón, uno deberí a poder deci di r l a forma en que son creados: si basados en una cl ase, en un proto%po y si cada obj eto %ene comportami ento par%cul ar. L a empaUa i mpl í ci ta en uno o vari os “ padres” es ú%l porque permi te compar%r el comportami ento fáci l mente. Tambi én se puede anal i zar l a forma de compar%r comportami ento con construcci ones sobre el l enguaj e tal es como composi ci ón o decoraci ón. Self: El Poder de la Simpleza Davi d Ungar y Randal l B. Smi th Sel f es un l enguaj e ori entado a obj etos para programaci ón expl oratori a basado en un reduci do número de i deas si mpl es y concretas: proto%pos, sl ots y comportami ento. A di ferenci a de Smal l tal k, no i ncl uye ni cl ases ni vari abl es. Sel f adoptó una metáfora de proto%po para l a creaci ón de obj etos. A su vez, l os obj etos de Sel f acceden a l a i nformaci ón de su estado con el enví o de mensaj es a “ sel f” , el receptor del mensaj e actual . A estos mensaj es Sel f debe su nombre. Como Smal l tal k, tampoco %ene estructuras de control ; si no que l as cl áusul as y el pol i morfismo permi ten estructuras de control arbi trari as dentro del l enguaj e. A di ferenci a de Smal l tal k, se uni fican obj etos, procedi mi entos y cl áusul as como proto%pos de regi stros de ac%vaci ón. Para hacer l os obj etos l o más concreto posi bl es, el egi mos l os proto%pos y no l as cl ases. En l os l enguaj es basados en cl ases un obj eto se crea i nstanci ando un pl an en su cl ase. En un l enguaj e basado en proto%pos como Sel f, un obj eto se crea cl onando un proto%po. En l ugar de un puntero de cl ase, un obj eto de Sel f con%ene sl ots con nombre que al macenan estado ó comportami ento. Si un obj eto reci be un mensaj e y no %ene el sl ot correspondi ente, l a búsqueda con%núa a través del puntero a su padre. De esta forma, en Sel f no exi sten dos rel aci ones di s%ntas entre obj eto y su cl ase y entre su cl ase y otra cl ase, si no que hay una úni ca rel aci ón: un obj eto hereda de otro obj eto. Un si stema basado en proto%pos permi te al usuari o exami nar un representante Upi co en vez de tener que darl e sen%do a par%r de l a descri pci ón de l a cl ase. Tambi én, permi te l a exi stenci a de obj etos úni cos. El comportami ento se al macena en el mi smo obj eto si n necesi dad de otro obj eto. En l os obj etos basados en cl ases, si empre se necesi ta un obj eto que descri ba el comportami ento de otro: un punto es una i nstanci a de l a cl ase punto, l a cual es una i nstanci a de l a metacl ase Punto y así hasta el i nfini to. En l os si stemas basados en proto%pos, un obj eto puede tener su propi o comportami ento. No se necesi ta otro obj eto que l e de vi da. De esta forma, se el i mi na el meta‐regress. Nuestra sol uci ón para compar%r comportami ento en una fami l i a de obj etos, es ubi car ese comportami ento en el padre de todos el l os. Este obj eto padre cumpl e un rol pareci do al de l a cl ase, con l a di ferenci a que no %ene i nformaci ón de formato. L a si ntaxi s de Sel f está basada en l a de Smal l tal k con el agregado de l a creaci ón de obj etos i nl i ne y l a creaci ón de mensaj es automá%camente a par%r de l os sl ots. Conclusión Esta si mpl i ficaci ón estructural hace más fáci l de aprender el l enguaj e. Aún más “ mi ni mal ” que Smal l tal k, se u%l i zan l os “ obj etos padre” sól o si es necesari o compar%r conoci mi ento. El naci mi ento de l os obj etos por cl onaci ón de un proto%po me resul ta atrac%vo y es una buena i dea para i mpl ementar en l os programas de otros l enguaj es de obj etos como Smal l tal k. Usar Objetos Prototípicos para Implementar Comportamiento Compartido en Sistemas Orientados a Objetos Henry L i eberman El enfoque de l os proto%pos se acerca más a l a forma en que l as personas adqui eren conoci mi entos de l as si tuaci ones concretas. L os si stemas de proto%pos permi ten crear conceptos i ndi vi dual es pri mero y l uego general i zarl os. L os si stemas ori entados a conj untos requi eren crear l a descri pci ón abstracta del conj unto pri mero, antes de crear l as i nstanci as i ndi vi dual es. L a del egaci ón qui ta l a di s%nci ón entre cl ases y obj etos. Para crear un obj eto que comparte conoci mi ento con un proto%po, se construye un obj eto extensi ó n que %ene una l i sta que con%ene sus proto%pos l os cual es pueden ser c o mpar@do s con otros obj etos, y comportami ento perso nal i di osi ncrási co al obj eto en sí . Si l as caracterí s%cas personal es del obj eto no son rel evantes para responder el mensaj e, el obj eto reenví a el mensaj e a l os proto%pos para ver si al guno puede responderl o. El enfoque de herenci a requi ere l os pasos adi ci onal es para crear l os obj etos cl ases. Tambi én hay dos %pos di ferentes de rel aci ones entre obj etos, l a rel aci ón de subcl ase y l a rel aci ón de i nstanci a, mi entras que en el enfoque de del egaci ón sól o se requi ere una rel aci ón de pase de mensaj es entre l os obj etos. ¿Son del egaci ón y herenci a i gual mente poderosas? No, porque con l a del egaci ón se puede i mpl ementar l a herenci a y con herenci a no se puede i mpl ementar l a del egaci ón por el probl ema de l a vari abl e sel f. L a comparaci ón de efici enci a entre del egaci ón y herenci a cae en un tradeoff de espaci o/ %empo. L a herenci a requi ere menos mensaj es, pero a costa de aumentar el tamaño de l os obj etos. L as vari abl es se copi an de l a supercl ase a l a subcl ase. Con del egaci ón aunque, se i ncrementa el %empo de búsqueda de métodos, se puede c ac hear el resul tado para reduci rl o. L a del egaci ón es más flexi bl e que l a herenci a para combi nar comportami ento de orí genes múl %pl es. El probl ema es que con herenci a el comportami ento combi nado se fij a antes de que una i nstanci a haya si do creada. Con del egaci ón, el comportami ento es si mpl emente programado en el método del obj eto extensi ón combi nado, por l o que puede vari ar de acuerdo al entorno en ej ecuci ón. Si un obj eto protoUpi co cambi a su comportami ento, todos l os obj etos que l o menci onan en su l i sta de compar%dos automá%camente “ si enten” el cambi o. Si se hacen cambi os en un si stema de herenci a, este cambi o debe ser propagado en todos l os obj etos. Esto desal i enta el cambi o de obj etos cerca de l a raí z de l a j erarquí a. Conclusión L a del egaci ón aumenta mucho el di nami smo de un si stema y l e da a l os obj etos l a posi bi l i dad de defini r el comportami ento en el momento en que reci ben l os mensaj es. El enfoque con del egaci ón es muy i nteresante para i mpl ementar si stemas con desarrol l o i ncremental . Nuevamente nos centramos en l os obj etos protoUpi cos concretos más que en l as defini ci ones abstractas de l as cl ases. Análisis comparativo y conclusión En el si gui ente cuadro se resumen l as di ferenci as que vi mos en l os arUcul os anteri ores: Creaci ón de obj etos Compar%r comportami ento Efici enci a Model o Cambi os en el model o Clase s Pl an en un método constructor Herenci a Proto/pos Cl onaci ón En cada obj eto se guardan todas l as vari abl es heredadas. Ocupa más espaci o, tarda más l a creaci ón y el garbage col l ec%ng. Búsqueda de métodos i nstantánea. Para i ncorporar obj etos deben i ncorporarse sus respec%vas cl ases. Cada cl ase %ene una metacl ase. Se afectan l as i nstanci as de l as cl ases modi ficadas Se al macena sól o l as di ferenci as con el proto%po. Obj etos más chi cos. Búsqueda de métodos en caché. Del egaci ón Proto%pos y obj etos del model o. Se afectan l os obj etos modi ficados L a cl ase es una descri pci ón abstracta de un conj unto de obj etos. A su vez, se u%l i za para crear l os obj etos par%cul ares perteneci entes al conj unto. En un caso donde l as cl ases son i nherentes al model o de l a real i dad como una taxonomí a, el model o de cl ases nos faci l i ta ya tener programado l a rel aci ón entre cl ase e i nstanci as. Además, nos asegura que todos l os obj etos de cada cl ase comparten l os mi smos métodos y vari abl es. L os si stemas de obj etos o hí bri dos con cl ases que además %enen %pado expl í ci to y está%co permi ten el chequeo de %pos antes de l a creaci ón de l os obj etos. Esta caracterí s%ca puede ser ú%l tambi én para l a construcci ón de l i brerí as de uso masi vo donde l os %pos deben cumpl i r un contrato especí fico y estri cto. Con proto%pos, esta val i daci ón deberí amos programarl a si l a necesi tamos. Una compl i caci ón del model o con cl ases es cómo se crean l as cl ases. Como cada cl ase es un obj eto y puede tener di s%ntos mensaj es, necesi tamos l a cl ase de cada cl ase. Esto i ntroduce un concepto nuevo aún más abstracto l l amado metacl ase donde están l as vari abl es y l os métodos de l a cl ase. Por otro l ado, un obj eto puede pertenecer a di s%ntos conj untos ortogonal es. J uan Pérez pertenece al conj unto de l os al umnos de computaci ón de l a Facul tad de Ci enci as Exactas y Natural es de l a UBA, al conj unto de empl eados de l a empresa Pensob y al conj unto de hi j os de Augusto Pérez. Estos conj untos a l os que pertenece J uan son aspectos ortogonal es. J uan, en cada aspecto, %ene un comportami ento. Como al umno, ri nde el parci al de Bases de Datos el 2 de novi embre de 2 0 0 7 . Como empl eado, trabaj a en el proyecto Pensystem. Como hi j o, l l eva a su hermana menor a nataci ón. En el enfoque de cl ases, se descri ben estos conj untos con l os comportami entos esperados de l os i ntegrantes. En el enfoque de proto%pos, se descri be el comportami ento de un el emento Upi co de cada conj unto. En este ej empl o, j ustamente ese el emento Upi co puede ser J uan. Entonces, descri bi mos el comportami ento de J uan que nos i nteresa a efectos de nuestro si stema. Supongamos que construi mos un si stema para l a admi ni straci ón de l a facul tad. Nos enfocamos en el rol de al umno de J uan. Cuando di señamos nuestro si stema, i ncorporamos a Ari el y a Gabri el que tambi én son al umnos. J uan se i nscri be al curso de Programaci ón Ori entada a Obj etos del segundo cuatri mestre de 2 0 0 7 . Ari el tambi én se i nscri be al mi smo curso. L uego, en l ugar de dupl i car el comportami ento de este mensaj e, deci mos que Ari el se comporta como J uan. Gabri el , se i nscri bi ó en Cri ptograma en el pri mer cuatri mestre de 2 0 0 8 . Notamos que este comportami ento es pareci do al de J uan y al de Ari el . Entonces, extraemos del mensaj e “ J uan se i nscri be a POO en el segundo cuatri mestre de 2 0 0 7 ” l a parte común al nuevo mensaj e: “ J uan se i nscri be a l a materi a X en el cuatri mestre Y” . De esta forma, permi %mos que el comportami ento de Gabri el esté i ncl ui do en el comportami ento posi bl e de J uan. Como no queremos que l as acci ones de J uan se reflej en en l as acci ones de l os demás, creamos un al umno proto%po con l as caracterí s%cas de un al umno que aún no real i zó ni nguna acci ón y que puede real i zar l as acci ones que nombramos. Este es nuestro proto%po de al umno y J uan, Ari el y Gabri el se refieren al mi smo. Vemos que de esta forma nos centramos en l os obj etos par%cul ares. No en el al umno genéri co, ni en el conj unto de todos l os al umnos, si no en J uan, en Ari el y en Gabri el . Segui mos en el ej empl o y en el pri mer cuatri mestre de 2 0 0 8 , J uan se presenta a concurso para ayudante, l e va bi en y comi enza su tarea de docente en Al gori tmos I. Hay un nuevo comportami ento que nos i nteresa de J uan, su rol como docente. Ahora J uan además de ser al umno es un “ protodocente” . En un si stema ori entado a proto%pos esa es l a forma si mpl e de i mpl ementarl o: agregar el “ protodocente” a l a l i sta de comportami ento compar%do de J uan. Ahora J uan puede comportarse como al umno y como docente. En el enfoque con cl ases, podemos crear una cl ase fic%ci a Al umnoDocente que hereda de ambas. Construi mos un al umnoDocente a par%r de J uan. Perdemos l a i den%dad del obj eto porque construi mos uno nuevo copi ando sus caracterí s%cas. Además, si J uan se gradúa, deberí amos agregar l a cl ase Al umnoDocenteGraduado y copi arl o nuevamente. Para sol uci onar esto podemos crear una cl ase Persona con un rol DeAl umno, un rol DeDocente y un rol DeGraduado. Cada mensaj e de esta cl ase consi s%rí a en reenvi ar el mensaj e al rol correspondi ente. En este caso, l a del egaci ón es expl í ci ta l o que %ene el probl ema de que al agregar el comportami ento a uno de l os rol es, debemos agregarl o en l a cl ase Persona tambi én. Si agregamos un rol al si stema, deberí amos recompi l ar cada uno de l os obj etos Persona con l a nueva vari abl e. Otra sol uci ón es, en l a cl ase Persona, tener una l i sta de rol es. L uego, cuando l l ega un mensaj e reenvi ársel o a cada uno de l os rol es. Cada i nstanci a de Rol Al umno deberí a conocer l a persona a l a que pertenece para poder envi ar mensaj es a sí mi smo. En este caso vemos que el enfoque de proto%pos es más i ntui %vo y mucho más si mpl e. Si en el enfoque de cl ases permi %mos l a herenci a múl %pl e y Persona hereda de todos l os rol es, se sol uci ona el tema de repe%r el códi go cuando se agrega un método. Si n embargo, un al umno tendrí a l as vari abl es de todos l os rol es, l o cual es muy poco óp%mo en espaci o y en %empo de creaci ón. Además, por cual qui er cambi o en Persona, en un rol o en el agregado de un rol habrí a que recompi l ar todos l os obj etos Persona. Con proto%pos se puede crear un rol y afectar sól o a l os obj etos que haya que agregársel o. Agregamos una nueva si tuaci ón: hay dos estudi antes que ganan un premi o y queremos que esto conste en el si stema. Sól o harí a fal ta crear un proto%po de premi ado y agregársel o a l os dos estudi antes en cues%ón. El resto del si stema queda i ntacto. L a posi bi l i dad de crear obj etos si n necesi dad de una cl ase nos evi ta el paso del model o de obj etos, al model o de cl ases. Si además contamos con obj etos úni cos que no comparten comportami ento con otros, más j us%ficado aún porque l a cl ase no se corresponde con un ente real . Como vi mos en el úl %mo arUcul o de L i eberman, l a efici enci a en espaci o es mej or en proto%pos l o que faci l i ta l a creaci ón de obj etos y el garbage col l ec%ng. El agregado de una caché gl obal permi te reduci r drás%camente l a búsqueda de métodos en l os obj etos de comportami ento compar%do. BibliograGía 1. L ynn Andrea Stei n, Henry L i eberman, Davi d Ungar. The Treaty of Orl ando. Of Types and Prototypes. 2. L ynn Andrea Stei n, Henry L i eberman, Davi d Ungar. The Treaty of Orl ando. A Shared Vi ew of Shari ng. 3. Davi d Ungar y Randal l B. Smi th. Sel f: The Power of Si mpl i ci ty. 4. Henry L i eberman. Usi ng Prototypi cal Obj ects to Impl ement Shared Behavi or i n Obj ect Ori ented Systems. 5. Adel e Gol dberg y Davi d Robson. Smal l tal k‐8 0 : The L anguage and i ts Impl ementa%on.