Skip to main content

Object Oriented Design- Wading into Deeper Waters

Objects, classes, inheritance, polymorphism- it sounds a little like Biology, and in some ways, object oriented programming (OOP) mirrors the natural world. 

I've finally reached the OOP section in the Odin Project's Ruby Programming course. Many of the concepts are straightforward-especially to anyone who has read a little philosophy or studied evolutionary biology. The difficult part is translating the concepts into actual functioning OOP applications. 

I've started reading what looks to be a promising book on OOP design in Ruby. I've learned something already that may improve my code. Here's an example from chapter 2:

 class Gear
   attr_reader :chainring, :cog, 
   def initialize(chainring, cog)
     @chainring = chainring
     @cog = cog

   end

   def ratio
     (chainring / cog.to_f).round(2)
   end
end

This is the 'good' way to create a class. 
Below is the 'bad' way- I've highlighted the offending variables in red.

 class Gear
   attr_reader :chainring, :cog, 
   def initialize(chainring, cog)
     @chainring = chainring
     @cog = cog

   end

   def ratio
     (@chainring / @cog.to_f).round(2)
   end
 end

The point here is that you should hide variables, even from the class where they are defined. That way, if you need to alter the variables, you can do so with a single method definition. 

I'm going to implement this suggestion in the game I'm currently working on.

Comments

Popular posts from this blog

Einstein's Logic Puzzle (SPOILER ALERT!)

On Monday I began working through a Discrete Math textbook in preparation for some courses I'll be taking in January. There was a beautiful logic problem in Chapter 1, apparently created by Einstein. This is one version of it: Five men with  different nationalities and with different jobs live in  con secutive houses on a street. These houses are painted  dif ferent colors. The men have different pets and have   dif ferent favorite drinks.  Determine who owns a zebra and  whose favorite drink is mineral water (which is one of the  favorite drinks) given these clues:  The Englishman lives  in the red house.  The Spaniard owns a dog.  The Japanese  man is a painter.  The Italian drinks tea.  The Norwegian  lives in the first house on the left.  The green house is  immediately to the right of the white one. The photogra pher  breeds snails.  The diplomat lives in the yellow house. ...

CodeSchool vs Codecademy(or 'How socket inherits event listening methods and implements asynchronicity')

In this review I'm going to focus on the pedagogy that I see evident in some CodeSchool courses and compare them to  Codecademy. By pedagogy, I mean: 'How does CodeSchool teach?' and ' Does it do a good job of teaching?'. I'm going to argue that despite high quality videos, colourful web pages, and often ssspppeeeeeakkkiiiing...rrrreeally...slowly..., CodeSchool's pedagogy is inferior to that of Codecademy. There are many fantastic resources for learning to code on the web, and CodeSchool is one of them. So far I have completed courses in Ruby, Rails, Javascript, HTML/CSS, Jquery and Git on CodeSchool. The courses have all included high quality videos and colourful, interactive exercises- as well as  massive  pdf files of the slides ( the files take more than a minute to load on my machine .) The question is: does the higher production value mean better educational quality? The 'Try' courses on CodeSchool(such as Try Ruby and Try jQuery) are f...

Final-Reference Variables-Constants in Java. What does it all mean?

So far, my programming journey has been easy riding. Everything in computer science I've come across so far seems so logical and (really) obvious after a moment's thought. (n.b. The following will contain mistakes, don't copy and paste this for your Comp.Sci.101 Assignment. If any readers can help clarify my thinking, it would be much appreciated.) Well, except for constants in Java. In Java, you can define a variable and give it a value:   ( e.g. Year current =1932;  creates an variable of type Year and initializes it with the value 1932). Speaking correctly, the variable   current  is NOT equal to 1932. Rather, current is a reference to a location in the computer's memory where the data 1932  is stored. A variable name like current  can be thought of as a listing in a telephone directory: "To find the current year, go to this address in the memory." Variable are so called because their values can change during the running of a program. For ...