protected no es lo que vos pensás (o serías la 5a persona que me contesta correctamente la pregunta "cuál es la diferencia entre protected y private en ruby", que mucho me divierte hacer cuando entrevisto gente :P). private… es *parecido* a lo que normalmente se conoce como protected.
El tema es que la semántica de cómo se definen private y protected en ruby no tiene nada que ver con como se definen en otros lenguajes. 2011/4/20 Tute <[email protected]>: > Señor Foca, > > Algo me hace ruido de lo que dijo. La parte de que Ruby no tiene protected y > private. Tener tiene. Usarse en el caso de protected creo que es raro porque > Ruby no parece apuntar a heredar clases y private, bueno, de esos si hay. ¿ > A qué se referia, señor foca? > > On 04/20/2011 04:44 PM, Nicolás Sanguinetti wrote: >> >> Primero que nada: acaban de morir varios gatitos inocentes por la >> atrocidad esa de nombrar clases Pescado y Delfín, en lugar de Fish y >> Dolphin. Ruby está en inglés, así que a menos que escribas "si >> condición;<código>; fin" (que no conozco ningún interprete de ruby >> que te deje), el código deberías escribirlo de forma consistente :) >> >> Segundo, el Deflín no es un pescado, es un mamífero ¬¬ >> >> Ahora, hablando en serio: ruby no es java/c#/c++/el lenguaje OOP que >> te guste y con el que estés familiarizado. No tiene clases abstractas. >> Sí, hay algunos hacks que podés hacer para que "parezcan" abstractas, >> pero siguen sin serlo. Y son el tipo de hacks por los cuales yo >> despediría gente (afortunadamente, no tengo a nadie a mi cargo para >> despedir, sino con lo quisquilloso que soy estaría más sólo que el uno >> :P). >> >> La forma "ActiveRecordense" de hacer lo que querés es usar Single >> Table Inheritance, como ya te lo han recomendado. Definís una clase >> Fish (:P), y de ella heredan Shark, Goldfish, Tuna, y todos los >> pescados que quieras. En tus controllers, vos manejás las subclases, y >> no tocás la clase padre (a menos que quieras crear algo genérico, o >> usarlo tipo Factory para crear objetos de acuerdo al input de un >> usuario—por ejemplo, el usuario en un<select> elige qué clase de >> pescado pescó hoy, y vos creás el adecuado en la base). >> >> Listo, no hay "abstract classes", no hay "final classes", y no hay >> métodos "protected" en ruby (ni privados, pero bueno, eso es para otro >> thread). No traten de hacer magia para hacer que ruby se parezca a >> <inserte lenguaje de programación aquí> >> >> Abrazo, >> -foca >> >> 2011/4/20 Paolo Loran<[email protected]>: >>> >>> Mil gracias, ahora me quedo todo mas claro. >>> Lo voy a probar y cualquier cosa que me frene, les consulto. >>> >>> Saludos. >>> poli >>> >>> 2011/4/20 Lucas Tolchinsky<[email protected]> >>>> >>>> En el ejemplo de Roberto, cuando vos hacés Delfin.create, estarías >>>> creando >>>> un registro en la tabla Pescados cuyo type sería 'Delfin'. En resúmen, >>>> vos >>>> sólo tenés una tabla, Pescados con una columna type que indica a qué >>>> clase >>>> concreta pertenece. El esquema sería: >>>> class Pescado< ActiveRecord::Base >>>> class Delfin< Pescado >>>> Adjunto de paso un link sobre cómo implementar clases abstractas en ruby >>>> >>>> http://stackoverflow.com/questions/512466/how-to-implement-an-abstract-class-in-ruby >>>> >>>> Saludos! >>>> Tonchis >>>> >>>> PD: el delfín es un mamífero :D >>>> >>>> _______________________________________________ >>>> Ruby mailing list >>>> [email protected] >>>> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar >>>> >>> >>> _______________________________________________ >>> Ruby mailing list >>> [email protected] >>> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar >>> >>> >> _______________________________________________ >> Ruby mailing list >> [email protected] >> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > _______________________________________________ > Ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
