tag:blogger.com,1999:blog-19450532.post7786834076722962839..comments2023-08-04T05:53:13.693-03:00Comments on PHP Senior: Los métodos "getter / setter" o "accesores / modificadores" (revisado 10/2008)Enrique Placehttp://www.blogger.com/profile/15452998349449419148noreply@blogger.comBlogger31125tag:blogger.com,1999:blog-19450532.post-3023557624916946812017-04-18T14:02:17.890-03:002017-04-18T14:02:17.890-03:00Revisa en
https://phpsenior.blogspot.com.ar/2010...Revisa en <br /><br />https://phpsenior.blogspot.com.ar/2010/05/ejemplo-de-composicion-factura-y.html<br /><br />Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-59991155832984883392017-04-18T13:57:59.446-03:002017-04-18T13:57:59.446-03:00Que tal Wilmer, cómo estás?
Sí, se puede, puedes...Que tal Wilmer, cómo estás? <br /><br />Sí, se puede, puedes hacer<br /><br />class Usuario{<br /><br /> private $tareas = array();<br /><br /> public function addTarea(Tarea $tarea){<br /> $this->tareas[] = $tarea;<br /> }<br />}<br /><br />Revisa luego en concepto de diseño de POO y cómo representarlo en UML lo que son las relaciones de "agregación" y "composición", que justamente se implementan con colecciones (en este caso arrays).<br /><br />Saludos!<br />Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-37063065109883012522017-04-18T13:27:03.579-03:002017-04-18T13:27:03.579-03:00Tengo una pregunta, no soy muy ducho en programaci...Tengo una pregunta, no soy muy ducho en programación, de hecho estoy dando mis primeros pasos, pero viendo este tema pregunto, también se pueden crear atributos tipo array? y si se le pueden crear metodos setter y getter a esos atributos para manipularlos, De ser así alguién tiene algún ejemplo? Agradecido de antmanoAnonymoushttps://www.blogger.com/profile/02871193625268762407noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-58182278703792758232011-11-13T19:22:07.170-03:002011-11-13T19:22:07.170-03:00fe de erratas:
Muy buen documento, me gustaria ap...fe de erratas:<br /><br />Muy buen documento, me gustaria aportar un metodo ke me sirve mucho para estos famosos getters/setters<br /><br />se trata de concentrar ambos en un solo (al estilo + o - de .NET), por ejemplo:<br /><br /><b><br /><?php<br />class Usuario{<br /> private $nombre;<br /> private $edad;<br /> /**<br /> * getter / setter de $nombre<br /> */<br /> public function Nombre($val2assign = null){<br /> if (isset($val2assign)){<br /> $this->nombre = $val2assign;<br /> }<br /> return $this->nombre;<br /> }<br /> /**<br /> * getter / setter de $edad<br /> */<br /> public function Edad($val2assign = null){<br /> if (isset($val2assign)){<br /> $this-><i>edad</i> = $val2assign;<br /> }<br /> return $this-><i>edad</i>;<br /> }<br />}<br />?><br /></b>ElGranFaciohttps://www.blogger.com/profile/14275085914442908590noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-47376191595392859132011-11-13T19:18:49.125-03:002011-11-13T19:18:49.125-03:00Muy buen documento, me gustaria aportar un metodo ...Muy buen documento, me gustaria aportar un metodo ke me sirve mucho para estos famosos getters/setters<br /><br />se trata de concentrar ambos en un solo (al estilo + o - de .NET), por ejemplo:<br /><br /><b><br /><?php<br />class Usuario{<br /> private $nombre;<br /> private $edad;<br /> /**<br /> * getter / setter de $nombre<br /> */<br /> public function Nombre($val2assign = null){<br /> if (isset($val2assign)){<br /> $this->nombre = $val2assign;<br /> }<br /> return $this->nombre;<br /> }<br /> /**<br /> * getter / setter de $edad<br /> */<br /> public function Edad($val2assign = null){<br /> if (isset($val2assign)){<br /> $this->nombre = $val2assign;<br /> }<br /> return $this->nombre;<br /> }<br />}<br />?><br /></b>ElGranFaciohttps://www.blogger.com/profile/14275085914442908590noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-40125047390658476522009-11-12T03:44:46.789-03:002009-11-12T03:44:46.789-03:00Saludos ya llevo como 3hr metido en tu blog y no m...Saludos ya llevo como 3hr metido en tu blog y no me aburro :D aunque si entro en algunas polémicas contigo, en este post casi estoy de acuerdo con todo a excepción de "Otro error común es agregarle más lógica que asignar un valor o retornar el valor del atributo."<br />Como ya se dice en los comentarios esto cabe en la forma en que cada programador utilice los getter/setters, pero en el texto afirmas como un “error” y no específicamente es un error.<br />Por lo general lo que se hagrega de lógica de “mas” a los setters pueden ser bloques trows para crear exepciones o bueno yo lo utilizo así, para así evitar y validar desde la misma clase y cuidar que los datos que llegan a mi objeto sean del tipo de datos para el que se diseño la clase, a los getters puede que tengas información básica y lo que quieras mostrar sea el resultado de una operación y no precisamente el dato que bien puede estar abstracto del usuario de la clase, <br />De hecho muchos también dicen que es malo crear los set y geters para todos los atributos tal vez sí, pero volvemos a que es mas subjetivos y todo depende del diseño, aunque en lo personal creo que es mejor ponerlos todos, pero si modificar a prívate aquellos que no quiero que sean utilizando por fuera, esto siempre permite y aumenta el nivel de mantenimiento de la clase.<br />Pero en conclusión los get y set nos permite abstraer al usuario de la clase, el nivel de abstracción que deseemos lograr y la funcionalidad de los mismo métodos no la dira el diseño de la clase.PaK0shttps://www.blogger.com/profile/09126426061635301849noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-53412674022978150162009-04-19T20:59:00.000-03:002009-04-19T20:59:00.000-03:00Que tal Domingo ;-)Sobre el tema, hay muchas varia...<B>Que tal Domingo ;-)</B><BR><BR>Sobre el tema, hay muchas variantes, pero lo básico y elemental es lo que comento para los get/set, ya que ese es el origen y su uso. Si tú le das más uso y te sirve, bienvenido sea.<br /><br />Muy buen aporte ;-)<br /><br />Saludos!Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-49882573470996910022009-04-14T13:46:00.000-03:002009-04-14T13:46:00.000-03:00Hola que tal Enrique!,
Estoy de acuerdo contigo c...Hola que tal Enrique!,<br /><br />Estoy de acuerdo contigo con que los atributos deben de ser privados, y no abusar del "getter/setter". Pero si le encuentro mucha utilidad, actualmente yo uso el fremework PRADO (www.pradosoft.com) un excelente fremework orientado a eventos similar al .NET. A grego una clase de Adodb adaptado para el fremework de PRADO (<A HREF="http://www.pradosoft.com/wiki/index.php/ADOdb_module_tutorial" REL="nofollow">Class Adodb for PRADO</A>):<br /><br />class adodb extends TModule{<br /> private $db;<br /> private $_Driver;<br /> private $_Host;<br /> private $_Username;<br /> private $_Password;<br /> private $_Database;<br /> private $_Persistent = false;<br /> <br /> <br /> public function init($config){<br /> if (!$this->Driver){<br /> throw new TConfigurationException('Missing param: Driver');<br /> }<br /> if (!$this->Host){<br /> throw new TConfigurationException('Missing param: Host');<br /> }<br /> if (!$this->Username){<br /> throw new TConfigurationException('Missing param: Username');<br /> }<br /> if (!$this->Password){<br /> throw new TConfigurationException('Missing param: Password'); <br /> }<br /> if (!$this->Database){<br /> throw new TConfigurationException('Missing param: Database'); <br /> }<br /> parent::init($config);<br /> }<br /> <br /> //PHP magic function.<br /> //This method will pass all method calls to ADODB class/library.<br /> public function __call($method, $params){<br /> $conn = $this->getDatabaseConnection();<br /> return call_user_func_array(array($conn, $method), $params);<br /> }<br /> <br /> private function getDatabaseConnection(){<br /> if (!isset($this->db)){ <br /> $this->db = NewADOConnection($this->Driver);<br /> $this->db->SetFetchMode(ADODB_FETCH_ASSOC);<br /> if ($this->Persistent){<br /> //For more see: http://phplens.com/lens/adodb/docs-adodb.htm#pconnect<br /> $this->db->PConnect($this->Host, $this->Username, $this->Password, $this->Database);<br /> }<br /> else{<br /> //For more see: http://phplens.com/lens/adodb/docs-adodb.htm#connect<br /> $this->db->Connect($this->Host, $this->Username, $this->Password, $this->Database);<br /> }<br /> }<br /> return $this->db;<br /> }<br /> <br /> //Getter and setters for params.<br /> public function getDriver(){<br /> return $this->_Driver;<br /> }<br /> public function setDriver($value){<br /> $this->_Driver = TPropertyValue::ensureString($value);<br /> }<br /> public function getHost(){<br /> return $this->_Host;<br /> }<br /> public function setHost($value){<br /> $this->_Host = TPropertyValue::ensureString($value);<br /> }<br /> public function getUsername(){<br /> return $this->_Username;<br /> }<br /> public function setUsername($value){<br /> $this->_Username = TPropertyValue::ensureString($value);<br /> }<br /> public function getPassword(){<br /> return $this->_Password;<br /> }<br /> public function setPassword($value){<br /> $this->_Password = TPropertyValue::ensureString($value);<br /> }<br /> public function getDatabase(){<br /> return $this->_Database;<br /> }<br /> public function setDatabase($value){<br /> $this->_Database = TPropertyValue::ensureString($value);<br /> }<br /> public function getPersistent(){<br /> return $this->_Persistent;<br /> }<br /> public function setPersistent($value){<br /> $this->_Persistent = TPropertyValue::ensureBoolean($value);<br /> }<br />}<br />?><br /><br /><br />Por ejemplo , dentro de la clase exite la función getDatabaseConnection:<br />Puedo acceder a la propiedad $this->Host que en realidad es $this->getHost(), o puedo asignarle $this->Host="localhost" que en realidad es $this->setHost("localhost"), el fremework ya reconoce si es un Setter o un Getter, la diferencia es que ya se encuentra validado para el tipo String.<br /><A HREF="http://www.pradosoft.com/demos/quickstart/index.php?page=Fundamentals.Components#%20id=702" REL="nofollow">Component Properties</A>Estoy de acuerdo que mis atributos ($db, $_Driver , $_Host, $_Username, $_Password, $_Database, $_Persistent) ahora son públicos porque tienen el Get y el Set, sin embargo lo importante es que se asegura que estos atributos sean del tipo String o Boleanos, o en su defecto Enteros y de esa manera poder validarlos sin meterle tanta lógica. Para mi eso sería la ventaja de usar los Getter y Setter, asegurandonos de que los datos que se asignan a nuestros a tributos sean los correctos ademas de que es mucho más comodo con el fremework usar las propiedades.Domingo Eduardo Domínguezhttps://www.blogger.com/profile/06439653228134499026noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-86774793862301341602009-02-09T17:06:00.000-02:002009-02-09T17:06:00.000-02:00¡Hola Enrique!.Sería interesante ampliar ésta info...¡Hola Enrique!.<BR/><BR/>Sería interesante ampliar ésta información con algún post sobre los fluent interfaces, ya que tienen bastante que ver con los setters. ¿Qué te parece?.<BR/><BR/>En cuanto a lo que comenta Pac-man, hay que tener en cuenta que uno de los principales problemas de ser autodidactas es que a veces creemos entender algo que realmente no hemos entendido en absoluto, y como nadie nos dice nada, creemos que lo estamos haciendo bien porque funciona. Es cuestión de cambiar un poco el chip e intentar ver las cosas desde otra perspectiva.<BR/><BR/>Saludos,<BR/>Rubén.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-19450532.post-24910527323641209822008-11-30T15:56:00.000-02:002008-11-30T15:56:00.000-02:00Estimado PACMAN:> Pero en sí no ahorro codigo ....<B>Estimado PACMAN:</B><BR/><BR/>> Pero en sí no ahorro codigo ...<BR/><BR/>¿Cual es la intención de crear un método genérico para obtener un get o set y no hacer los que correspondan según los atributos que lo necesiten?<BR/><BR/>> Y al fin y al cabo es lo mismo <BR/>> que el codigo anterior.No <BR/>> siempre uso el get y set, <BR/>> entiendo que sino para eso hago <BR/>> los atributos publicos y listo, <BR/><BR/>Pero lo haces, el efecto es el mismo.<BR/><BR/>> tambien por lo que lei que si a <BR/>> la propiedad le aplicas logica <BR/>> deja de ser una propiedad y es <BR/>> un metodo, pero esa logica en tu <BR/>> caso no la aplicas en la <BR/>> definición de la propiedad <BR/>> usando getEdad , setEdad($valor)<BR/><BR/>No te entiendo. Tienes un atributo y luego métodos getter y setter, lo que se busca con ellos que sean fundamentalmente "simples", acceder a ellos de forma restringida evitando que sean "públicos". <BR/><BR/>La idea es que si necesitas algo más complejo es que uses un método común y corriente y no digas que se llama "get" o "set".<BR/><BR/>Pero sigo sin entender qué me quieres decir.<BR/><BR/>> Pero mas que nada queria mostrar <BR/>> mi forma de implementar mi Get <BR/>> and Set.<BR/><BR/>Evita el "mi forma", hay demasiadas ruedas redondas como para inventar una cuadrada ahora.<BR/><BR/>¿No tienes nada más interesante que hacer que perder el tiempo con algo que no puede generar más aportes nuevos?<BR/><BR/>Desarrolla sistemas, resuelve problemas verdaderos, apóyate en experiencias, usa estándares y aprende buenas prácticas, no pierdas el tiempo con esto.<BR/><BR/>Saludos.Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-58408290356255241812008-11-23T13:26:00.000-02:002008-11-23T13:26:00.000-02:00Buenas Enrique,Pero en sí no ahorro codigo ...publ...Buenas Enrique,<BR/><BR/>Pero en sí no ahorro codigo ...<BR/><BR/>public function getEdad() {<BR/> return $this->edad;<BR/>}<BR/>public function setEdad($edad){<BR/> $this->edad = $edad;<BR/>}<BR/><BR/>Y al fin y al cabo es lo mismo que el codigo anterior.No siempre uso el get y set, entiendo que sino para eso hago los atributos publicos y listo, tambien por lo que lei que si a la propiedad le aplicas logica deja de ser una propiedad y es un metodo, pero esa logica en tu caso no la aplicas en la definición de la propiedad usando getEdad , setEdad($valor)<BR/><BR/>Pero mas que nada queria mostrar mi forma de implementar mi Get and Set.<BR/><BR/>Saludos, las criticas son bienvenidas.<BR/><BR/>PAC-MANel pacmanhttps://www.blogger.com/profile/08283048743227754768noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-8072460385024527142008-11-23T04:15:00.000-02:002008-11-23T04:15:00.000-02:00Estimado Anónimo: ¿Simular los get/set? ¿con qué s...Estimado Anónimo: <BR/><BR/>¿Simular los get/set? ¿con qué sentido?<BR/><BR/>Lo que haces no tiene ni pie ni cabeza, fuera de toda lógica.<BR/><BR/>¿Generar un método genérico para los get / set? ¿solo para ahorrar un par de líneas de código?<BR/><BR/>¿Entendiste algo de lo que decía este post?<BR/><BR/>Aquí generas el mismo efecto que los atributos públicos...<BR/><BR/>No te entiendo.Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-36928202222897479542008-11-23T03:58:00.000-02:002008-11-23T03:58:00.000-02:00Buenas, Mi forma de simular los Get y Set es la si...Buenas, <BR/><BR/>Mi forma de simular los Get y Set es la siguiente: <BR/><BR/>...<BR/><BR/>public function Name($accion,$valor = 0)<BR/>{ <BR/> if($accion == "Get")<BR/> return $this->name;<BR/> if($accion == "Set")<BR/> $this->name = $valor;<BR/>}<BR/><BR/>...<BR/><BR/><BR/>$miPersona->Name("Set","Pepe"); <BR/>$name = $miPersona->Name("Get");<BR/><BR/>Nose si sera la mas conveniente pero es la que uso normalmente.<BR/><BR/>SaluDOS! pac-manel pacmanhttps://www.blogger.com/profile/08283048743227754768noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-69651091681016258252008-10-22T19:52:00.000-02:002008-10-22T19:52:00.000-02:00Enrique, muchas gracias por tus valiosos comentari...Enrique, muchas gracias por tus valiosos comentarios sobre la POO, escribes de forma clara y con ejemplos sencillos y muy apropiados. <BR/><BR/>continuaré consultando tu Blog y recomendadolo. <BR/><BR/>Saludos.Wawa Techhttps://www.blogger.com/profile/14436177686821450808noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-77890761309015475572008-10-15T17:49:00.000-03:002008-10-15T17:49:00.000-03:00Estimado nbrx:No me quedó claro lo que me quieres ...<B>Estimado nbrx:</B><BR/><BR/>No me quedó claro lo que me quieres decir... cual es la confusión que dices y por qué?Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-15605530049611043182008-10-15T17:45:00.000-03:002008-10-15T17:45:00.000-03:00hola enrique, parece que se agito un poco el tema....hola enrique, parece que se agito un poco el tema. entiendo completamente a lo que refieres y tu opinión me parece bien. mis profes me enseñaron lo mismo, SOLO QUE, en esencia, se tiende a confundir implementación de componentes de software, en donde todos los atributos de las clases deben ser por regla privados y acceder por getter y setter, con el software que atenderá directamente los requerimientos del cliente. piensa en eso... <BR/><BR/>salu2 Enrique..Unknownhttps://www.blogger.com/profile/13282708698305582834noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-53252536661665161852008-10-12T11:06:00.000-03:002008-10-12T11:06:00.000-03:00Que tal Nebur:Disculpa la demora en responder, gra...<B>Que tal Nebur:</B><BR/><BR/>Disculpa la demora en responder, gracias por tu aporte, ahora te contesto por partes ;-)<BR/><BR/>> Podrías indicar que autores <BR/>> hablan sobre la manipulación de <BR/>> propiedades (getter y setter) y <BR/>> si sus publicaciones son <BR/>> aceptados por la comunidad <BR/>> internacional?. <BR/><BR/>No, la verdad -disculpa mi honestidad- que no tengo tiempo ni ganas como para ponerme a buscar bibliografía concreta solo por que tú me lo preguntes ahora :-), no recuerdo en el momento autores concretos para citar, pero en todos mis años de estudio, tanto por materiales como por docentes, el tema "setter/getter" no es para nada extraño, es lo primero que te enseñan cuando vez POO.<BR/><BR/>> llevo tiempo tratando de <BR/>> entender esta manera de <BR/>> programar y sé que varía <BR/>> bastante entre lenguajes (para <BR/>> los que trabajamos con mas de 1 <BR/>> lenguaje) <BR/><BR/>No sé a que te refieres con "esta manera de programar", lo dices por los get y set?<BR/><BR/>> y todo lo que he encontrado <BR/>> sobre el tema son blogs y mas <BR/>> blogs. <BR/><BR/>Estás buscando mal, busca libros impresos entonces.<BR/><BR/>> Yo tengo entendido que no <BR/>> existe una regla para el tema <BR/>> que tu tratas en tu blog,<BR/><BR/>Regla? qué regla? sobre cómo se usan o si se deben usar?<BR/><BR/>Cómo, así se usan, si se deben usar, no, no deberían. <BR/><BR/><B>Nota:</B> gracias a tu comentario hoy mismo actualicé este post para evitar dudas, ya que hablé de un tema que he visto se comenten muchos errores conceptuales, pero tampoco quise decir con esto que se deberían usar siempre o que fuera algo recomendado su práctica.<BR/><BR/>> y el concepto de abstracción <BR/>> (público) e implementación <BR/>> (privado) donde quedá. porque <BR/>> según entendí, cuando tú hablas <BR/>> de requerimientos lo tratas como <BR/>> algo PRIVADO, es decir <BR/>> implementación, entonces, cuando <BR/>> haces abstracción en tu <BR/>> software?? con métodos públicos <BR/>> usando getter y setter? creo que <BR/>> eso es una mala práctica.<BR/><BR/>No entendí qué es lo que quieres transmitir, tampoco en qué te basas para decir que cuando hablo de "requerimientos"... "¿cuando hago abstraccion del software?". No entendí la relación ni la idea de la pregunta.<BR/><BR/>> Booch, Jacobson, Rumbaugh, <BR/>> estos tipos saben de lo que <BR/>> hablan.<BR/><BR/>Sí, como muchos más que saben y muchos otros más que no saben.<BR/><BR/>Un autor que discute sobre estos temas de diseño y muy recomendado es Martín Fowler, y justamente tiene un escrito que habla del tema de evitar a muerte los get/set.<BR/><BR/>> saludos cordiales<BR/><BR/>> Nebur Álvarez B.<BR/><BR/>Nebur, gracias por tu aporte, motivó la actualización de este post.<BR/><BR/>Quiero recordarte que no soy un gurú y no me gusta estar horas y horas discutiendo del "sexo de los ángeles" ni que autor la "tiene más grande" (del ego estoy hablando), me apoyo en la teoría pero bajo contantemente a la práctica, soy muy pragmático, y puedo cometer errores, por lo que soy abierto a los comentarios y -fuera de lo que creen muchos- los leo todos y los tomo en cuenta.Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-77896460759147764372008-10-12T10:21:00.000-03:002008-10-12T10:21:00.000-03:00Estimado Claudio:> Que pasa si un atributo priv...<B>Estimado Claudio:</B><BR/><BR/>> Que pasa si un atributo privado es <BR/>> un array? como funcionan los <BR/>> setter y los getter, ya que estos <BR/>> métodos no reciben el indice con <BR/>> el cual trabajarían?<BR/><BR/>Se podrían aplicar variantes o implementaciones para que los get sí funcionen, pero por lo pronto, si tu get o set se vuelve complejo, lo mejor será que hagas métodos propiamente dichos y le agregues todo lo que necesitas.<BR/><BR/>El mundo no inicia y termina en los get / set.Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-20825280984077299412008-10-08T13:43:00.000-03:002008-10-08T13:43:00.000-03:00Hola, queria hacerte una consulta. Que pasa si un ...Hola, queria hacerte una consulta. Que pasa si un atributo privado es un array? como funcionan los setter y los getter, ya que estos métodos no reciben el indice con el cual trabajarían?Unknownhttps://www.blogger.com/profile/09464447582479181015noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-65090988721138603622008-09-09T10:26:00.000-03:002008-09-09T10:26:00.000-03:00Podrías indicar que autores hablan sobre la manipu...Podrías indicar que autores hablan sobre la manipulación de propiedades (getter y setter) y si sus publicaciones son aceptados por la comunidad internacional?. llevo tiempo tratando de entender esta manera de programar y sé que varía bastante entre lenguajes (para los que trabajamos con mas de 1 lenguaje) y todo lo que he encontrado sobre el tema son blogs y mas blogs. Yo tengo entendido que no existe una regla para el tema que tu tratas en tu blog, y el concepto de abstracción (público) e implementación (privado) donde quedá. porque según entendí, cuando tú hablas de requerimientos lo tratas como algo PRIVADO, es decir implementación, entonces, cuando haces abstracción en tu software?? con métodos públicos usando getter y setter? creo que eso es una mala práctica. <BR/><BR/>http://www.amazon.com/gp/reader/0321267974/ref=sib_dp_pt#reader-link<BR/><BR/>Booch, Jacobson, Rumbaugh, estos tipos saben de lo que hablan.<BR/><BR/>saludos cordiales <BR/><BR/>Nebur Álvarez B.Unknownhttps://www.blogger.com/profile/02305482076856860483noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-58101756543105126522008-06-21T19:59:00.000-03:002008-06-21T19:59:00.000-03:00Estimado José:> Encuentro muy buena la > explicaci...<B>Estimado José:</B><BR/><BR/>> Encuentro muy buena la <BR/>> explicación dada en este <BR/>> articulo, yo estaba <BR/>> acostumbrado( y aun no cambio <BR/>> 100%) a trabajar con <BR/>> Programación de Eventos pero <BR/>> tube que estudiar Java en el <BR/>> Instituto y me metierón a la <BR/>> fuerza :S el concepto de POO.<BR/><BR/>Bien, impecable, yo también me vi influenciado por Java... y luego ves el mundo actual de los desarrolladores PHP y te das cuenta que nos falta mucho. He aquí el aporte que intento dar desde el blog.<BR/><BR/>> Creo que este tema es muy <BR/>> interesante e importante al <BR/>> momento de programar orientado a <BR/>> objetos ya que te permite <BR/>> controlar las entrañas de <BR/>> nuestros objetos como el control <BR/>> de acceso este definido por el <BR/>> mundo real (lo que el Poo <BR/>> representa).<BR/><BR/>Es que conviene revisar una y otra vez los conceptos base (releer de vez en cuando la entrada sobre POO en Wikipedia) y verás que nos olvidamos cómo deberíamos encarar nuestros diseños, ya que muchos terminan usando simples clases en ambientes estructurados y no aplican todas sus ventajas.<BR/><BR/>José, gracias por los comentarios ;-)Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-47499991400591129902008-06-18T18:03:00.000-03:002008-06-18T18:03:00.000-03:00Que talEncuentro muy buena la explicación dada en ...Que tal<BR/><BR/>Encuentro muy buena la explicación dada en este articulo, yo estaba acostumbrado( y aun no cambio 100%) a trabajar con Programación de Eventos pero tube que estudiar Java en el Instituto y me metierón a la fuerza :S el concepto de POO.<BR/><BR/>Una de las discuciones (estaba mal yo) que tube con el profe era esto de los Get's y Set's, yo erraba en compararlo con el Set de Visual basic.<BR/><BR/>Creo que este tema es muy interesante e importante al momento de programar orientado a objetos ya que te permite controlar las entrañas de nuestros objetos como el control de acceso este definido por el mundo real (lo que el Poo representa).<BR/><BR/>Saludos<BR/><BR/>José Rios<BR/>noteroschile.clccchttps://www.blogger.com/profile/11077243729745627172noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-66237775866880745892007-11-25T19:10:00.000-03:002007-11-25T19:10:00.000-03:00Estimado Eugenio: > Hola, que es lo que sucede...<B>Estimado Eugenio: </B><BR/><BR/>> Hola, que es lo que sucedes <BR/>> cuando accedemos a todos los <BR/>> metodos de la clase, y desde <BR/>> muchos metodos de otras clases.<BR/><BR/>Asumo que quieres decir a "todos los atributos de una clase".<BR/><BR/>> Esta conceptualmente mal hacer <BR/>> un;<BR/>> funcion __get($var) { return <BR/>> $this->$vat; }<BR/><BR/>Los <A HREF="http://www.php.net/__get" REL="nofollow">__get y __set</A> son herramientas que provee específicamente PHP5, por lo que se pueden usar o no como una forma de simplificar la creación de métodos get y set, pero conceptualmente generalizarlos hacen el mismo efecto que variables "públicas", por lo que pierde el efecto (está bien explicado su uso en el artículo original, te recomiendo re-leerlo).<BR/><BR/>> Esto seria escribir una linea en <BR/>> vez de hacer 200 de getters!<BR/><BR/>Si tienes 200 atributos y tienes que hacer 200 get y 200 set, es que tu diseño está erróneo.<BR/><BR/>Una clase que muestre todos sus atributos rompe el <A HREF="http://es.wikipedia.org/wiki/POO" REL="nofollow">principio de ocultación</A> al no esconder los detalles de implementación.<BR/><BR/>Relee el artículo, por favor.Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-80670978844545791862007-11-25T17:49:00.000-03:002007-11-25T17:49:00.000-03:00Hola, que es lo que sucedes cuando accedemos a tod...Hola, que es lo que sucedes cuando accedemos a todos los metodos de la clase, y desde muchos metodos de otras clases.<BR/><BR/>Esta conceptualmente mal hacer un;<BR/>funcion __get($var) { return $this->$vat; }<BR/><BR/>Esto seria escribir una linea en vez de hacer 200 de getters!<BR/><BR/>Saludos_XX_XX_https://www.blogger.com/profile/16706255975488271825noreply@blogger.comtag:blogger.com,1999:blog-19450532.post-26644697063674475062007-06-17T22:41:00.000-03:002007-06-17T22:41:00.000-03:00Estimado "Anónimo":> Los metodos get y set deb...<B>Estimado "Anónimo":</B><BR/><BR/>> Los metodos get y set deben <BR/>> llevar más lógica implicita, si <BR/>> bien es cierto que los atributos <BR/>> de los metodos no deben ser <BR/>> públicos no tiene sentido que un <BR/>> método set simplemente acceda a <BR/>> la varieble y la fije sin más.<BR/><BR/>Todo es relativo, cada desarrollador tiene su versión de cómo aplicar los conceptos.<BR/><BR/>Con respecto a lo que afirmas al final, es incorrecto. En ningún momento se habla de esconder los atributos para luego mostrarlos con métodos get y set.<BR/><BR/><BR/>> El método set debe ser usado <BR/>> para validar la correctitud de <BR/>> los datos que recibe y de esa <BR/>> forma garantizar que la variable <BR/>> es fijada con los datos que <BR/>> necesita.<BR/><BR/>Es relativo, no se puede aplicar ninguna de las versiones con exclusividad.<BR/><BR/>El concepto que quiero dejar es que los set/get son para ocultar los atributos y tener un control sobre ellos. Si tú le agregas mucha lógica a cada método set/get ya creo que deberían ser directamente métodos comunes y no un "accesor/modificador" (la simplicidad está implícita en los términos).<BR/><BR/>> Por ejemplo si necesitas que <BR/>> el valor de la variable $variable<BR/>> sea numerica y de tipo integer y<BR/>> el método set simplemente es un <BR/>> $this->variable = $variable se le<BR/>> puede pasar lo que sea, strings,<BR/>> arrays, etc. Esto tiene mucho <BR/>> mayor sentido en un lenguaje como<BR/>> PHP que pobremente tipado.<BR/><BR/>"Tipado dinámico". Lo que tú dices va en oposición a la esencia del lenguaje. La asignación dinámica no es una debilidad de la POO en PHP, es propiamente parte del lenguaje.<BR/><BR/>Que tu quieras hacer una POO en PHP mucho más robusta, es otro tema.<BR/><BR/>> En el caso del método get lo <BR/>> normal es usarlo simplemente para<BR/>> devolver una variable a la cual <BR/>> no se tiene acceso, pero también <BR/>> es posible usar más lógica en <BR/>> esto y por ejemplo asrgurarse de <BR/>> que no se va a devolver una <BR/>> variable vacia.<BR/><BR/>Esta última parte es ridícula, no puedes generalizar, esto es pura y exclusivamente responsabilidad del desarrollador definir un diseño que se comporte de esta forma.<BR/><BR/>> En fin, los metodos get y set<BR/>> no tienen sentido simplemente <BR/>> para esconder los atributos si el<BR/>> acceso a los mismos termina <BR/>> siendo igual que si fuesen <BR/>> públicos.<BR/><BR/>No leíste bien el artículo.Enrique Placehttps://www.blogger.com/profile/15452998349449419148noreply@blogger.com