Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Well done!
      You have completed C# Objects!
      
    
You have completed C# Objects!
Preview
    
      
  Hide implementation details and make objects easy to use with encapsulation.
This video doesn't have any notes.
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
                      Another place we'll want to use
arrays is to create a path for
                      0:00
                    
                    
                      invaders to move down.
                      0:03
                    
                    
                      We can represent the path in code
as an array of map locations.
                      0:05
                    
                    
                      Starting at index zero in the array,
                      0:09
                    
                    
                      invaders can move down the path by
moving to the next index in the array.
                      0:11
                    
                    
                      To start, let's create an array
of map locations here in Main.
                      0:17
                    
                    
                      This will create a path that moves
from the left to right across
                      0:20
                    
                    
                      the middle of the map.
                      0:23
                    
                    
                      So we've already got our
mapLocation variable here.
                      0:25
                    
                    
                      So let's take this out and
put our square brackets here.
                      0:29
                    
                    
                      We'll call it path, and
opening closing curly braces,
                      0:33
                    
                    
                      we'll use the shortcut method here.
                      0:37
                    
                    
                      And then we'll create a new MapLocation
                      0:40
                    
                    
                      starting at x equals 0 and y equals 2, so
                      0:45
                    
                    
                      that it's going down
the middle of the map.
                      0:50
                    
                    
                      And we'll pass in the map so
that we can validate that it's on the map.
                      0:55
                    
                    
                      Now we need to create seven more of these,
so I'll just copy and
                      1:00
                    
                    
                      paste here till I got eight total.
                      1:05
                    
                    
                      So, let's see here.
                      1:07
                    
                    
                      One, two, three, four,
five, six, seven, eight.
                      1:09
                    
                    
                      Okay, now,
                      1:12
                    
                    
                      we need to make the path move from
the left to the right side of the map.
                      1:13
                    
                    
                      So starting at zero, we'll go to, so
                      1:18
                    
                    
                      this is x equals 0,
then we'll go to x equals 1,
                      1:22
                    
                    
                      x equals 2, x equals 3,
x equals 4, 5, 6, and 7.
                      1:26
                    
                    
                      All right.
So now we've got an array of map locations
                      1:31
                    
                    
                      that represents our path going
down the middle of the map.
                      1:35
                    
                    
                      Even though we've named this
array of map locations path,
                      1:41
                    
                    
                      it's still just an array of map locations.
                      1:44
                    
                    
                      It isn't a path object.
                      1:46
                    
                    
                      This is the data that specifies
where the path is on the map.
                      1:49
                    
                    
                      We really should wrap this data in a class
that models not only where the path is,
                      1:53
                    
                    
                      but also how the path is used.
                      1:58
                    
                    
                      That brings us to the next core principle
of object-oriented programming,
                      2:01
                    
                    
                      encapsulation.
                      2:06
                    
                    
                      Encapsulation helps to define what
an object is while hiding how it works.
                      2:08
                    
                    
                      A good example of encapsulation
in the physical world is a car.
                      2:13
                    
                    
                      Cars are complex machines with
lots of moving parts inside.
                      2:18
                    
                    
                      However, you don't really need to know all
about these parts in order to drive a car.
                      2:21
                    
                    
                      You only need to know how to use
the steering wheel, gas pedal,
                      2:26
                    
                    
                      brake pedal, and gear shifter.
                      2:30
                    
                    
                      Everything else is hidden from
view as much as possible.
                      2:32
                    
                    
                      Much of it is under the hood, if you will.
                      2:36
                    
                    
                      What's nice about this system us
that even though different cars
                      2:39
                    
                    
                      might have different engines,
I can still get in any car and drive it.
                      2:43
                    
                    
                      All this makes driving a car a lot easier.
                      2:48
                    
                    
                      And by making the car easier to drive,
it's also safer to use.
                      2:50
                    
                    
                      We want to make our classes easy to use.
                      2:55
                    
                    
                      So when writing a class,
we need to make sure
                      2:57
                    
                    
                      that we're exposing only what's
absolutely necessary to use the class.
                      3:00
                    
                    
                      This will help people to know
how to use the class and
                      3:04
                    
                    
                      help them avoid accidentally misusing it.
                      3:07
                    
                    
                      Encapsulation is used to hide
implementation details and
                      3:11
                    
                    
                      restrict what users of objects can do.
                      3:14
                    
                    
                      Back to our path example.
                      3:18
                    
                    
                      Once a path is created,
it shouldn't change.
                      3:19
                    
                    
                      Paths in the real world
don't just get up and move.
                      3:22
                    
                    
                      Right now we have our path implemented
as an array of map locations.
                      3:26
                    
                    
                      The array class provides lots of
methods for manipulating arrays.
                      3:30
                    
                    
                      But we don't need all of that.
                      3:35
                    
                    
                      We can restrict what can be done with our
array of map locations by encapsulating it
                      3:37
                    
                    
                      or wrapping it in a class, and
                      3:42
                    
                    
                      then expose those small sort of operations
that can be done with the path.
                      3:44
                    
                    
                      Back in code,
let's put together our path class.
                      3:49
                    
                    
                      Let's start by writing the constructor.
                      3:53
                    
                    
                      When writing the constructor,
we need to think about the absolute
                      3:55
                    
                    
                      bare minimum amount of information
that every Path object needs.
                      3:58
                    
                    
                      That becomes the parameters
to the constructor.
                      4:03
                    
                    
                      I'd say it's the locations on
the map that the path uses.
                      4:06
                    
                    
                      We can pass those in as
an array of map locations.
                      4:10
                    
                    
                      We'll store these locations
as a field in the class,
                      4:16
                    
                    
                      only this time we aren't going to let
users of this class access them directly.
                      4:19
                    
                    
                      So instead of typing public here
like we've done with other fields,
                      4:25
                    
                    
                      we'll type private.
                      4:29
                    
                    
                      We're going to store this
as a MapLocation array.
                      4:31
                    
                    
                      And we'll call it _path.
                      4:34
                    
                    
                      Notice that I prefixed the field
name with an underscore.
                      4:38
                    
                    
                      We only use it for
the names of private fields.
                      4:41
                    
                    
                      It isn't required, and you may see other
code that doesn't have this underscore.
                      4:44
                    
                    
                      This is a common convention in C# though.
                      4:48
                    
                    
                      It's helpful for distinguishing between
instance variables and method variables.
                      4:50
                    
                    
                      If we didn't have this underscore, we'd
either have to name these two variables
                      4:55
                    
                    
                      differently, oop,
put my semicolon there, or
                      4:59
                    
                    
                      we'd have to type this.path = path.
                      5:04
                    
                    
                      So this refers to
the current object's .path,
                      5:09
                    
                    
                      which is the current object's field path,
and assigns
                      5:13
                    
                    
                      the path variable that's
being passed in to this.path.
                      5:19
                    
                    
                      But because we're using the underscore,
we'll just say _path equals path.
                      5:23
                    
                    
                      And that gives us the same effect.
                      5:32
                    
                    
                      You can decide whether or
not you want to use this convention.
                      5:34
                    
                    
                      When programming at a company, there
will often be a document called a coding
                      5:37
                    
                    
                      standard which specifies how to
name different types of variables.
                      5:41
                    
                    
                      That way, everyone working on
the code uses the same conventions.
                      5:46
                    
                    
                      We should also make sure that
the path field isn't accidentally
                      5:50
                    
                    
                      overwritten by code that's
within the path class.
                      5:53
                    
                    
                      So we'll type readonly here.
                      5:56
                    
                    
                      The thing you should know about
readonly is that it only prohibits
                      6:00
                    
                    
                      overriding the field
with a different value.
                      6:04
                    
                    
                      It doesn't prohibit anyone from changing
the individual items in the array.
                      6:07
                    
                    
                      That's one of the reasons we're wrapping
this array in a class in the first place.
                      6:12
                    
                    
                      We've now used encapsulation to
hide the array of map locations.
                      6:17
                    
                    
                      By wrapping the array in a class and
using private to restrict access,
                      6:21
                    
                    
                      there's no way for
users of this class to alter the path.
                      6:25
                    
                    
                      In fact, users of this class
can't do much of anything.
                      6:29
                    
                    
                      Next we'll start to open it up by adding
behaviors we need the path class to have.
                      6:33
                    
              
        You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up