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
    
      
  Just like fields, properties can also have values set upon object creation.
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
                      There's one more thing we need
to add to the invader class.
                      0:00
                    
                    
                      Invaders can't be invincible.
                      0:03
                    
                    
                      As towers shoot and hit them,
they need to be disabled somehow.
                      0:04
                    
                    
                      Often times, opponents in games
have a certain amount of health
                      0:09
                    
                    
                      that decreases as
the opponent sustains damage.
                      0:12
                    
                    
                      We can implement this same
idea in the invader class.
                      0:15
                    
                    
                      You know everything you need to know
in order to add this feature to
                      0:19
                    
                    
                      the invader class.
                      0:21
                    
                    
                      Think about what we'll need to add to
this class in order to implement this.
                      0:23
                    
                    
                      You'll probably need some
sort of variable to store
                      0:27
                    
                    
                      how much health the invader has remaining.
                      0:30
                    
                    
                      Invaders also need to start out
with a certain level of health.
                      0:33
                    
                    
                      We'll need to provide some way for
other classes, such as the tower class
                      0:37
                    
                    
                      to decrease the health of the invader
if they successfully hit it.
                      0:41
                    
                    
                      I suggest you pause the video and
take a moment to think about this and
                      0:44
                    
                    
                      even code up your own solution.
                      0:48
                    
                    
                      When you come back,
I'll show you how I would do it.
                      0:50
                    
                    
                      All right, here in our code
let's work through a solution.
                      0:56
                    
                    
                      First.
                      0:59
                    
                    
                      I think we should add
a member to the class for
                      1:00
                    
                    
                      storing how much health
the invader has remaining.
                      1:02
                    
                    
                      We need to decide if this should
be a property or a field and
                      1:05
                    
                    
                      what sort of accessibility it should have.
                      1:08
                    
                    
                      Maybe we should answer the question
of accessibility first.
                      1:11
                    
                    
                      Is it reasonable for
                      1:15
                    
                    
                      other classes to be able to see how
much health the invader has remaining?
                      1:16
                    
                    
                      I think so.
                      1:20
                    
                    
                      So, that means we should make it public.
                      1:21
                    
                    
                      Making it public answers our question of
whether to make it a property or a field.
                      1:24
                    
                    
                      I mentioned earlier that for a number
of reasons it's best to make public
                      1:28
                    
                    
                      member variables properties,
so we'll make this a property.
                      1:32
                    
                    
                      I'll call it Health.
                      1:36
                    
                    
                      Now, we need to decide what sort
of accessibility the getter and
                      1:38
                    
                    
                      the setter of the property should have.
                      1:41
                    
                    
                      I already mentioned the other classes
will want to see what the health of
                      1:43
                    
                    
                      the invader is.
                      1:47
                    
                    
                      So, we should make the getter public.
                      1:49
                    
                    
                      Since getters and setters of
a property are public by default,
                      1:51
                    
                    
                      we don't need to type public here.
                      1:55
                    
                    
                      What about the setter?
                      1:58
                    
                    
                      Should other classes be able to
change the health of the invader?
                      1:59
                    
                    
                      Well, that's sort of the point of
adding this in the first place, so
                      2:03
                    
                    
                      let's keep it public as well.
                      2:06
                    
                    
                      Now we need to give the health property
a starting value, otherwise it will
                      2:09
                    
                    
                      have a default value of zero, which would
make for a very short lived invader.
                      2:13
                    
                    
                      Now there are a couple of ways we
could give it an initial value.
                      2:18
                    
                    
                      We could assign it a value here
in the constructor like so and
                      2:21
                    
                    
                      give it a starting value of two.
                      2:25
                    
                    
                      Or we can just assign it
a value where we declared it.
                      2:28
                    
                    
                      In a case like this where the value is
a literal number that isn't passed into
                      2:32
                    
                    
                      the constructor, I prefer to
assign it here at the property.
                      2:36
                    
                    
                      Now we could actually improve
this interface a little more, and
                      2:41
                    
                    
                      encapsulate the health concept even more.
                      2:44
                    
                    
                      Let's provide a method
called decrease health.
                      2:48
                    
                    
                      That decreases the health
by a passed in factor.
                      2:50
                    
                    
                      School type public, void, decrease health.
                      2:54
                    
                    
                      And then the parameter is the factor
by which to decrease the health.
                      2:57
                    
                    
                      So make that an integer.
                      3:03
                    
                    
                      And we'll just say health equals factor.
                      3:08
                    
                    
                      Now it's obvious to all
users of this class
                      3:14
                    
                    
                      how to decrease the health of an invader.
                      3:16
                    
                    
                      Instead of a coder having to assume that
they should alter the health property
                      3:19
                    
                    
                      directly, there's a method
called DecreaseHealth.
                      3:23
                    
                    
                      This is an example of
self documenting code.
                      3:27
                    
                    
                      Self documenting code is code that's so
clear we don't have to write many comments
                      3:30
                    
                    
                      or other documentation that
describes how to use it.
                      3:35
                    
                    
                      This is usually accomplished
by a well thought out design,
                      3:39
                    
                    
                      good encapsulation practices, and
giving things clear descriptive names.
                      3:42
                    
                    
                      Now that we're providing
a method to change the health,
                      3:47
                    
                    
                      we should make the health
property's setter private
                      3:50
                    
                    
                      to make it clear to other coders
that they should use the method.
                      3:53
                    
              
        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