Abstract Members3:46 with Jeremy McLain
Abstract members of an abstract class don't have implementations. Subclasses can provide them though.
The abstract invader class has two virtual properties and one virtual method. 0:00 Let's take a look at the four invader subclasses we've created so far. 0:05 Here in fast invader, we've overridden the step size property, but 0:10 not the health property, or the decrease health method. 0:14 This is still using the default implementations provided by 0:17 the invader class. 0:20 Here in strong invader, we've overridden the health property but 0:22 not the step size or decrease health method. 0:25 Here in shielded invader, we've only overridden the decrease health method, and 0:28 here in basic invader, none of the virtual properties or 0:33 methods are being overridden. 0:36 Basic invader just does what the invader base class does. 0:38 But what if we wanted to be sure that when developers create new types of invaders 0:41 that they purposefully state what their invaders initial health should be. 0:45 This way we can be sure that they haven't accidentally use the default 0:49 implementation. 0:53 After all who are we to say what the default health of the invaders should be? 0:54 Often times, we don't know what the default implementation of a property or 0:58 method should be when writing an abstract base class. 1:02 This really should be left up to the concrete implementation of 1:05 each type of invader. 1:08 We can do this by making the health property abstract 1:10 here in the invader class we'll change the keyword virtual here to abstract. 1:14 By making it abstract we're saying that the health property 1:19 must be overridden in subclasses. 1:22 Abstract properties can't have implementation so 1:25 we need to delete where initializing it here. 1:28 An abstract member is the same as a virtual member 1:31 except that it doesn't have its own implementation. 1:34 In the abstract base class, we can state if it should have a getter or setter and 1:37 what access level the getter and setter should be. 1:41 But we can't say what the getter and setter should do when called. 1:43 We have to provide the actual implementation in the subclasses. 1:47 If we compile our program we'll get some compilation errors saying that basic 1:51 invader, fast invader and shielded invader don't implement the health property. 1:55 We'll need to fix this. 2:00 We can fix this by providing an implementation of the health property 2:02 in each of these subclasses that doesn't have one. 2:05 So we'll copy the property from the invader base class and 2:08 then fast invader, we'll paste it, change abstract to override. 2:12 And then initialize it to two. 2:20 We'll copy this implementation to each of the other classes that need it. 2:23 On surface it appears that our code is no longer dry. 2:35 DRY is a basic principle of computer programming. 2:40 If you remember, DRY stands for Don't Repeat Yourself. 2:42 Copying and pasting code like this should always cause some red flags and 2:46 make us stop to think about what we're doing and why. 2:50 If we're copying and pasting code like this, perhaps this code should be in 2:52 the base class where it can be shared by subclasses. 2:56 On the other hand if we don't want to have a shared default implementation. 2:58 The only option is to have each subclass provide their own implementation. 3:02 Some classes may want to have the same implementation, 3:07 so it may appear that this is duplicate code. 3:10 There are many things to think about when architecting an object oriented software 3:13 application. 3:17 We've just seen an example of an abstract property. 3:18 Methods can also be abstract. 3:21 We can make them abstract the same way we make properties abstract. 3:23 First we add the abstract keyword and then remove the implementation. 3:26 In the case of a method we just put a semi-colon after the closing parentheses. 3:30 This is how we do that with the move method. 3:35 In our case we like the default implementation of the move method and 3:37 I don't see any reason to force it to be implemented in subclasses so 3:41 we'll keep it as it is. 3:45
You need to sign up for Treehouse in order to download course files.Sign up