I’ve been feeling like a military academy for the past few days, so I haven’t been able to write another literary masterpiece. Unfortunate, I know, but even geniuses need their rest. If you have a cure for constant dizziness, let me know.

Something big is coming. If you consider yourself an old-school gamer, I highly recommend you refresh your nostalgic Sierra memories immediately. And if you haven’t played Quest for Glory when you were a kid (what the hell is wrong with you?!) then it’s not too late to start. More about this soon…

Anyway, I have said too much. I must cut this short as the Arilou’la’lee’lay are molesting your eyeballs, so here you go.

According to a certain shitty comic*, Linux commands can be quite powerful when applied with laws of physics that haven’t yet been discovered.

.

“Finally,” I thought to myself.  “An OS that will make me a sandwich.”

I wasn’t sure how accurate this was, however, so I HAD to try it myself.  I mean, what would be better than having an automated sandwich delivery service?  NOT MUCH.

.

Needless to say, I was extremely disappointed.  I looked into every port of my Linux machine to see if this was some kind of trick to steer me off course, but alas.  There was no sandwich to be found.  I want my money back.

.

*The reason XKCD is terrible isn’t because 90% of the comics are unfunny tripe.  No, it’s that in real-life, there’s a disease called ‘nerd subculture’ that isn’t actually what it pretends to be, but is for a bunch of idiotic, pretentious poseurs who think they’re funny because they can fit in with superior people like myself.  They keep dropping punchlines or jokes that they completely don’t understand, and they vote up these crappy, boring comics on Digg.

You are poseurs.  You do not fit in with us.  It’s like saying “Hay guyz I know an inside joke, that means I’m popular like you”.  No, you are not.  I doubt you could even Telnet into Mordor.  Go back to something you’re good at: making 60% of Australians obese by serving fatasses a premature death at KFC.

.

A perfect representation of these poseurs.

Unfortunately, some people have a very rudimentary way of understanding basic things.  I’ve been asked on several occasions to explain simple programming concepts that seem to escape them.

Now, anyone with even a slight grasp of programming knowledge will likely raise one of their eyebrows and put even Mr. Spock to shame, because this is the kind of stuff we learned by ourselves when we were nine years old.  However, I’m not an elitist (mostly) and things like this remind me of how much I felt sorry for the poor fools in high school who couldn’t even spell their own name because they were too busy SMSing each other about their lack of genitalia while bathing in copious amounts of turpentine.

.

First of all, understanding how object-orientation works is of paramount importance.  Visualising code in your head without writing it down and staring at it for hours wondering what it’s supposed to do is a handy skill to have.  This is explicit with Java only (which is a crap language, but is popular because people are obese and lazy), but is easily transferable to other OOP languages.

So, say I wanted to create a simple program that outputted the text “You are fat.” in an OOP-like fashion, it would be something like this:

.

YouAreFat.java

public class YouAreFat {

  String message;

.

This stores a piece of data (’message‘) as a unique part of the class YouAreFat.  (Technically, it’s a reference, but people just say that to try and make you look stupid.)

.

  public Message(String conMessage) {
    this.message = conMessage;
  }

.

This is the actual constructor for the message.  By doing this, the message can be modified to be anything the programmer wants it to be, and have multiple, different instances of it.  Pretty useless, you might think?  Right now, yes.  But this allows high scalability and flexibility because you can add a lot more variables and data if you needed to without giving you a headache later on.

(The reason I prefix ‘con‘ to ‘conMessage‘ is to indicate that it’s a construction variable.  This is just for aesthetics.)

More on this later.

.

  public static void main(String args[]) {
    Message Message01 = new Message("You are fat.");
    System.out.println(Message01.message);
  }
}

.

This is the ‘test’ code; this is what calls the shots, so to speak.  Formally, this part of the code should be separate and in its own file — the reason behind this is to make the code easier to change and look less obfuscated (cluttered to you illiterates).  However, I usually ignore this unless the program is huge, because it’s a stupid rule.  So, why not just write System.out.println(”You are fat.”);?  Because then it would not be very object oriented, and you can’t build on it and manipulate it.  This is how you learn how it’s supposed to work — by starting off with something simple and easy to understand.

Message Message01 = new Message(”You are fat.”); instantiates the constructor.  Basically, this is saying “I want to make a Message object, called Message01, and give it a string of text that reads ‘You are fat.’”.  The line after that, System.out.println(Message01.message);, gets the data of the message and outputs it as text.

Think of it like an MP3 player, or iPod.  Each music track is like a constructor:

.

  String title;

  public Song(String conTitle) {
    this.title = conTitle;
  }

.

Now, you want to put some music on your iPod:

.

  Song Track01 = new Song("Ultra Sheriff - Galactic Fame");
  Song Track02 = new Song("Chopin - Scherzo No. 1 in B minor, Op. 20");
  Song Track03 = new Song("Karnivool - COTE");

.

You now have three songs on it!  Yay!

.

But wait, you want to actually play the music too!

.

  System.out.println(Track01.title);
  System.out.println(Track02.title);
  System.out.println(Track03.title);

.

This is basically the same concept.  This is important.  You must understand this concept, and so many people don’t.

Let’s say you want to expand upon your iPod (or JavaPod, actually).  You want it to distinguish between band and song, maybe so you can order them alphabetically in the future, or see how many songs from each band you have or something.  Easy!

.

String title, band;

.

Instead of just a title, this also defines the band.

.

public Song(String conBand, String conTitle) {
  this.title = conBand;
  this.band  = conTitle;
}

.

This constructs each track entry.

.

public static void main(String args[]) {
  Song Track01 = new Song("Ultra Sheriff", "Galactic Fame");
  Song Track02 = new Song("Chopin", "Scherzo No. 1 in B minor, Op. 20");
  Song Track03 = new Song("Karnivool", "COTE");

  System.out.println("Title: " + Track01.title + "\nBy: " + Track01.band);
  System.out.println("Title: " + Track02.title + "\nBy: " + Track02.band);
  System.out.println("Title: " + Track03.title + "\nBy: " + Track03.band);
}

.

And this creates and displays the track.  Notice there are now two inputs in Song.

However, let’s just say we accidentally named a track wrong, and we want to change it.  All we would have to do is create a method for changing an object’s data, and then run it in the test program (or main).

We add:

.

public void setTitle(String mutTitle) {
  this.title = mutTitle;
}

.

This is a void because it’s not going to return any data, it’s just going to change (mutate) the data of an object.  The reason I prefixed ‘mut‘ to ‘mutTitle‘ is to indicate the input is a mutation; aesthetics again.

We then add this to the main:

.

Track01.setTitle("Destroy All Humans");

.

Now Track01’s title will now display as something different when written to the screen!

Here is a slightly modified version of what the above code should look like at last:

.

public class Song {

  String title, band;

  public Song(String conBand, String conTitle) {
    this.title = conBand;
    this.band  = conTitle;
  }

  public void setTitle(String mutTitle) {
    this.title = mutTitle;
  }

  public static void main(String args[]) {
    Song Track[] = new Song[4];
      Track[1] = new Song("Ultra Sheriff", "Galactic Fame");
      Track[2] = new Song("Chopin", "Scherzo No. 1 in B minor, Op. 20");
      Track[3] = new Song("Karnivool", "COTE");

    Track[1].setTitle("Destroy All Humans");

    for (int idx = 1; idx < 4; idx++) {
      System.out.println("Title: " + Track[idx].title + "\nBy: " + Track[idx].band);
    }
  }

}

.

The for loop and track representation through an array is just a cleaner way of outputting an index of items that would otherwise clutter up the code.  It’s the same as writing System.out.println(”Title: ” + Track01.title + “\nBy: ” + Track01.band); three times, only changing the number in each one.  Don’t worry about understanding this if you failed grade 1 math.

Learning the rest is SO easy once you know this horribly basic and simple part.  Hammer it into your head, preferably with something heavy and made from iron.

« Previous EntriesNext Entries »