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

Responder a