Creating Classes9:58 with Craig Dennis
Objects are created from blueprints, or classes. Let's make one.
- You might not have seen a PEZ Dispenser before. I hope you can experience it someday if you haven't. It's a lot of fun.
Objects and software allow us to express and model things that we have and 0:00 use in real life. 0:04 Programmers have discovered that all real world 0:06 objects share 2 important characteristics they have state and behavior. 0:08 By creating an object in code that maintains its own state and 0:13 presents its behavior for usage. 0:16 It allows you to hide how things are actually working from 0:18 users of your object. 0:20 A great example of this is a ring that has some state is it on or 0:22 off what station is it? 0:27 [MUSIC] And 0:29 it also has some behavior that it exposes to the use for 0:29 the power on change the station. 0:32 How does it actually work? 0:35 I have no idea. 0:36 It's inner workings are hidden from me but its behavior is exposed and 0:38 I can manipulate the state that allows me to change. 0:42 Before we go any deeper I want to apologize to you for 0:45 what I'm about to do to your brain. 0:49 Chances are after I introduce this concept to you, 0:51 you will not be able to stop thinking about how you would create 0:54 everything you see in real life as an object in code. 0:58 Like an ear worm when somebody sings, We Built This City. 1:01 You're gonna be building an object representation 1:05 of every single thing you see. 1:08 Sorry about that. 1:11 Okay, so let's explore a real life object together. 1:12 How about this Yoda Pez dispenser right here. 1:15 Now, if you haven't seen a Pez dispenser before, 1:17 they're a little toy that serves candy when you flip back their head. 1:20 They usually have different character heads on them and 1:22 they're collector's items, like this one here from Star Wars, the hero, Yoda. 1:24 So, let's see, it definitely has some state. 1:28 Is it empty? 1:31 Nope. 1:32 How many are in there? 1:33 It looks like there's about ten. 1:34 There's also some behavior, right. 1:36 Namely its job dispense when we do this. 1:38 It changes the state of the Pez dispenser. 1:40 Now there are ten and now there's nine and it can also be loaded 1:42 like I could add more peasant here and would also change state. 1:47 Come to think of it. 1:51 All Pez dispensers kind of work the same. 1:52 They just have different character heads. 1:55 If we imagine the factory where these are made. 1:57 I bet there is some sort of master blueprint of the Pez 1:59 dispenser that is use to create each one of these. 2:02 And then customizes the character for each one that comes through. 2:05 This blueprint used to create objects in Java is called a class. 2:08 Could we build something like this blueprint in code and 2:13 then create objects from it? 2:15 We definitely can and it's pretty straightforward. 2:16 Let's do just that. 2:19 Okay, so what we'll do is we'll create a new class and 2:21 then use it in a console application. 2:24 Now, I've gone ahead and I've build the console application boilerplate for 2:26 us again it's in a file called example the Java let's open that up. 2:30 So you might have used the java.io console object before to take input and 2:35 write out to the screen. 2:39 I've had several students ask what the difference between the console and 2:40 something that they've seen used elsewhere in that system.out. 2:44 Well, the answer is that console is actually just a convenient wrapper around 2:47 system out and system in. 2:51 We aren't going to be taking any input right now let's take a look at this common 2:52 pattern for writing out to the console. 2:56 So system is a class that's automatically imported writes a system and 2:58 it provides a static public field named out how does a print stream and 3:02 it exposes some methods that we've seen before on the console object. 3:07 Now, don't worry [LAUGH] about that mouthful that I just said 3:11 just know that we can write out to the screen using.printlin. 3:14 So print L in means print line and what that means is it will add a new line at 3:19 the end it's kind of a convenient method right to the printer for an imprint if we 3:23 were doing the percent in we don't need to do that with print, so let's just do that. 3:27 So are saying we are making a new Pez dispenser. 3:30 Okay, so let's do it. 3:39 Let's make a new file called Pez dispenser.java. 3:40 So what we'll do is we'll right click over here and we'll say new file, and 3:44 we'll make a Pez dispenser and the case matters Pez dispenser.java. 3:47 All right, so let's create this class. 3:53 So the class keyword allows us to specify that this is in fact the class. 3:56 So class and then it's this is similar to Kamal case but 4:01 the first letter is capitalized, so we're gonna do Pez dispenser. 4:04 And then we're going to open and close. 4:08 Now believe it or not. 4:12 That's actually enough to allow us to create an object. 4:14 But let's add a little bit more info, so that we can show that things are working. 4:17 Let's add some state. 4:20 How about the name of the character whose head appears under the Spence, all right. 4:21 So what we'll do is we'll add a field or a member of variable. 4:25 So anything between these two brackets. 4:29 This block of code it's known as a class scope. 4:33 So we'll do in here will just create a new variable and this will look very familiar. 4:35 We'll make a new string. 4:38 And its a character name and we'll set that to Yoda. 4:41 You seen blocks used to define scope like when we're doing a while loop or 4:45 a conditional. 4:51 Opening a block with a curly brace and then you close it. 4:53 It opens a new scope and classes aren't any different but 4:57 we'll explore this more here in a bit. 4:59 So, first though let's go use our class so remember to save this file, 5:02 and we'll go member here to example. 5:05 And let's make a brand new object using our Pez dispenser class as the blueprint. 5:08 So first what we do is we declare the type of variables of the type of variable like 5:14 normally we would do it. 5:19 String here we're going to do a Pez dispenser. 5:20 And then we're gonna name a variable like we always do. 5:24 Let's call it dispenser. 5:26 And here we're going to be creating a brand new one. 5:28 So we're gonna use the keyword new. 5:33 So a new PezDispenser. 5:36 And we're going to open it and close it just like that. 5:40 So the out object on system so system.out. 5:44 Also has the printf method that we've been using. 5:48 So we say printf and then we're going to put in our format strings. 5:51 So we're gonna say the dispenser is and 5:56 we're gonna put in a placeholder to replace there. 6:00 So let's say %s and then remember Printf doesn't automatically put the new ones in 6:03 for us, so we need to do percent in the new okay. 6:07 And then, we can access the actual field that we put over there 6:11 by saying dispenser. 6:16 And we're going to use the dot notation on this new object that we created 6:18 to say .charactername. 6:21 And we'll close that system printer, all right. 6:24 So let's go over this really quick. 6:27 So this line here. 6:28 We instantiate a new Pezdispenser object and it creates a new 6:30 instance this object here is referred to as an instance of type Pezdispenser. 6:36 Now because Pezdispenser.java is in the same folder as our example .java and 6:42 we haven't done anything yet to package up our code, we'll do that later. 6:49 We don't need to actually import PezDispenser, it's just there and 6:52 that's because they're in the same folder. 6:56 So our example program can simply just access the class by using its name. 6:59 We'll talk more about packaging and importing later on. 7:03 So but for now let's just run this. 7:06 So let's come down here and we'll say clear and javac. 7:09 We're just gonna compile example.java nd then 7:13 we're gonna run example the program example Cool. 7:18 So it says here's a print line adding the PezDispenser to add the new line and 7:24 that's that the PezDispenser is Yoda and it's pulling off that character name. 7:27 Did you notice how the PezDispenser are got automatically compiled, so 7:31 if we refresh over here You'll see that there is a pez dispenser 7:34 class I got automatically compiled without us needing to call the JavaC on it. 7:39 Now that's because in order for 7:43 example Java to use it it needed to have access to the PezDispenser code. 7:44 So it compiled it. 7:48 So this is looking pretty good, right? 7:49 So we created a new object name Dispenser and 7:51 accessed its character name field which was exposed. 7:54 What I wonder if we could actually change that character name. 7:58 That would be bad wouldn't it? 8:04 You can't really change the PezDispenser's character after it's been created. 8:06 So let's go ahead and let's try to change that. 8:10 Let's change it to Darth Vader and 8:14 see if we can't cause a disturbance in reality. 8:20 So we'll say Darth Vader. 8:24 And then let's go ahead we'll save this and then run it. 8:28 No! 8:34 We better fix that soon. 8:37 >> Awesome. 8:39 Now we have a blueprint, or class, that we can use to finish modeling our example. 8:40 There are a few bad practices in what we're doing right now, but 8:45 it is a great starting block. 8:48 We learned about fields and how we can access them on newly created objects, or 8:50 as they're often referred to, instances. 8:54 So, in order to hide the inner workings of the class. 8:57 So we can protect the Pez Dispenser head swapping problem. 9:00 We're going to need to pick up a few new tricks which we'll get to in 9:03 the next video. 9:06 Now before you ask, 9:08 when would we ever need to create a Pez Dispenser in code in real life? 9:10 Let me answer you with this you'd be surprised. 9:14 As a developer your skills are needed by all sorts of industries and markets. 9:18 Everyone wants a website. 9:22 Everyone wants an app. 9:24 When researching Pez for this course, 9:26 I found that there is actually a new site that is allowing you to 3 D printer 9:28 your head onto a Pez Dispenser Guess what they have on their website? 9:31 a way for you to upload your head and 9:36 simulate a Pez Dispenser to see what it might look like. 9:37 Someone had to write that. 9:41 Now one time when I was doing some consulting work, 9:44 I had to write code to simulate a go cart going around a track. 9:46 It gives me an idea. 9:52 Let's do a quick exercise to check our syntax on creating classes and 9:53 then go fix those books. 9:57
You need to sign up for Treehouse in order to download course files.Sign up