[#389739] Ruby Challenge — teresa nuagen <unguyen90@...>

Here is a ruby challenge for all you computer science lovers out there,

22 messages 2011/11/05
[#389769] Re: Ruby Challenge — "Jonan S." <jonanscheffler@...> 2011/11/05

Totally unrelated to any husker computer science programs right? Like

[#389905] Re: Ruby Challenge — Stephen Ramsay <sramsay.unl@...> 2011/11/09

Jonan S. wrote in post #1030330:

[#389907] Re: Ruby Challenge — aseret nuagen <unguyen90@...> 2011/11/09

> You mean like the professor for the course? Because that would be me .

[#389915] Re: Ruby Challenge — Robert Klemme <shortcutter@...> 2011/11/09

On Wed, Nov 9, 2011 at 4:52 AM, aseret nuagen <unguyen90@aim.com> wrote:

[#389792] Tricky DSL, how to do it? — Intransition <transfire@...>

I'd want to write a DSL such that a surface method_missing catches

18 messages 2011/11/06

[#389858] Compiling Ruby Inline C code - resolving errors — Martin Hansen <mail@...>

I am trying to get this Ruby inline C code http://pastie.org/2825882 to

12 messages 2011/11/08

[#389928] Forming a Ruby meetup group... — "Darryl L. Pierce" <mcpierce@...>

Where I work we have a local Ruby group that used to meet up, until the

12 messages 2011/11/09

[#389950] The faster way to read files — "Noé Alejandro" <casanejo@...>

Does anybody know which is the fastest way to read a file? Lets say

18 messages 2011/11/09

[#390064] referring to version numbers in a gem — Chad Perrin <code@...>

How do I specify and access a gem's version number within the code of the

28 messages 2011/11/11

[#390238] RVM problem, plz help — Misha Ognev <b1368810@...>

Hi, I have this problem:

15 messages 2011/11/16

[#390308] any command line tools for querying yaml files — Rahul Kumar <sentinel1879@...>

(Sorry, this is not exactly a ruby question).

11 messages 2011/11/18

[#390338] Newbie - cmd question — Otto Dydakt <ottodydakt@...>

I've literally JUST downloaded ruby from rubyinstaller.org.

21 messages 2011/11/19
[#390342] Re: Newbie - cmd question — Otto Dydakt <ottodydakt@...> 2011/11/19

OK thank you, I uninstalled & reinstalled, checking the three boxes at

[#390343] Re: Newbie - cmd question — "Ian M. Asaff" <ian.asaff@...> 2011/11/19

did you type "irb" first to bring up the ruby command prompt?

[#391154] Re: Newbie - cmd question — "Hussain A." <hahmad@...> 2011/12/12

Hi all,

[#391165] Re: Newbie - cmd question — Luis Lavena <luislavena@...> 2011/12/12

Hussain A. wrote in post #1036281:

[#390374] Principle of Best Principles — Intransition <transfire@...>

I seem to run into a couple of design issue a lot and I never know what is

16 messages 2011/11/20

[#390396] how to call Function argument into another ruby script. — hari mahesh <harismahesh@...>

Consider I have a ruby file called library.rb.

10 messages 2011/11/21

[#390496] How to make 1.9.2 my default version using RVM — Fily Salas <fs_tigre@...>

Hi,

25 messages 2011/11/24

[#390535] Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...>

Well, first of all, I'm new to Ruby, and to this forum. So, hello. :)

39 messages 2011/11/25
[#390580] Re: Is high-speed sorting impossible with Ruby? — Joao Pedrosa <joaopedrosa@...> 2011/11/27

Hi,

[#390593] Re: Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...> 2011/11/27

Joao Pedrosa wrote in post #1033884:

[#390600] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

A big gain can be had by disabling the garbage collector. Here is my best

[#390601] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

I've thrown various solutions up on github here:

[#390650] Loading a faulty ruby file - forcing this — Marc Heiler <shevegen@...>

Hi.

10 messages 2011/11/29

[#390689] Stupid question — James Gallagher <lollyproductions@...>

Hi everyone.

22 messages 2011/11/30

Re: Principle of Best Principles

From: Robert Klemme <shortcutter@...>
Date: 2011-11-21 10:01:54 UTC
List: ruby-talk #390387
On Sun, Nov 20, 2011 at 8:42 PM, Intransition <transfire@gmail.com> wrote:
> I seem to run into a couple of design issue a lot and I never know what i=
s
> really proper.=A0On one hand I often hear that I should limit coupling an=
d
> stick to single responsibility, but when I do I often find it difficult t=
o
> get the information to part of the program when it is needed.=A0For examp=
le,
> =A0 class Singer
> =A0 =A0 def initialize(name)
> =A0 =A0 =A0 @name =3D name
> =A0 =A0 end
> =A0 =A0 attr :name
> =A0 end
> Then should Song be:
> =A0 class Song
> =A0 =A0 def new(singer)
> =A0 =A0 =A0 @singer =3D singer
> =A0 =A0 end
> =A0 end
> or
> =A0 class Song
> =A0 =A0 def new(singer_name)
> =A0 =A0 =A0 @singer_name =3D singer_name
> =A0 =A0 end
> =A0 end
> The later has less coupling, so according to principles I should use it. =
But
> if I later discover something in Song needs to know more about the singer=
,
> I'm in a bad way. e.g.
> =A0 class Song
> =A0 =A0 ...
> =A0 =A0 def play
> =A0 =A0 =A0 puts "Belting it out by #{@singer.name}, winner of
> #{@singer.grammy_count} grammies!"
> =A0 =A0 end
> =A0 end
> I'd be in a fix if I had used the later Song class instead of the former.
> But then I suspect someone would remind me of SRP, single responsibility
> principle, and suggest instead:
> =A0 class SongPlayer
> =A0 =A0 def initialize(singer, song)
> =A0 =A0 =A0 @singer, @song =3D singer, song
> =A0 =A0 end
> =A0 =A0 def play
> =A0 =A0 =A0 puts "Belting it out by #{@singer.name}, winner of
> #{@singer.grammy_count} grammies!"
> =A0 =A0 end
> =A0 end
> And yea, I guess that makes sense, since another singer might do a cover =
of
> some one else's song, right? But then, would it really be the exact same
> song? In most of my cases it's never the same "song" so I never have that
> kind of scenario. So is the SRP worth the extra classes it brings to the
> code then?

I believe it helps to look at this with a bit more abstraction (think:
UML class diagram).  For me the solution of this example is pretty
clear: a Song has a relationship with a Singer (or Interpret) - and
not with a singer's name.  In fact it's a n:1 relationship.  If you
want to model the act of singing you could add a class Performance
which binds together a Song and an Interpret (not necessarily the
original Interpret) along with additional properties like location and
time (there may be more: duration, unplugged?, paid?, charity_concert?
...).

I think the mere fact that it is quite obvious that you may want to
access more features than just the singer's name when dealing with a
Song is indicative of the fact that you should not use the name only
but the Singer instance instead.  IMHO using the name would be too
loose coupling - which isn't good either because - as you notice - it
needs much more context to get at the Singer from the name only.  Also
note, that a singer's name may not be unique, so it does not lend
itself easily to a primary key which must be unique.  And if you start
adding an id to the Song then you need at least an additional Hash
with id as key and Singer as value to find the proper Singer back.

There is a saying by a guy which was pretty slick and I think it
applies here as well:
http://www.brainyquote.com/quotes/quotes/a/alberteins103652.html
;-)

Kind regards

robert

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

In This Thread