670 likes | 887 Views
BIT 115 : Introduction To Programming LECTURE 2. Instructor: Craig Duckett c duckett@cascadia.edu. Lecture 2 Announcements. Home Computers and/or Laptops/Notebooks
E N D
BIT 115: Introduction To ProgrammingLECTURE 2 Instructor: Craig Duckett cduckett@cascadia.edu
Lecture 2 Announcements Home Computers and/or Laptops/Notebooks By now you should have installed Java SE 8 and jGRASP on your computers, set up the becker.jar file, and started working with some of the supplied .java files from Lecture 1. • How many have done this successfully? • How many have tried to do this and have still not gotten jGRASP to compile and run? If you have your laptops with you, I will stick around for a bit after today's class to see if we can get you up and running. I'll also stick around for a bit after next Monday's class. • I've added a TROUBLESHOOTING walk-through page to the BIT115 website if you are getting the jGRASPwedge2 PATH error. This should be fixed with the latest version of jGRASP, but just in case… • IMPORTANT! Alwaysdownload the .java files from the web site, save them to a local folder, and run them from there. If you try to run them directly off the site, they go in the browser cache and get renamed, and then things won't work! • There are other issues to remember, which we'll cover in today's class. • NOTE: It is essential that you get jGRASP working on your home machines or laptops if you are going to be successful in this class (unless you are going to do all your coding on the PCs here at the college).
Lecture 2 Announcements Attention: Windows 8 Users If you are having trouble getting the software to install, one way to bring compatibility to install the Java SE JDK and jGrasp, etc, is to download and install a program called Classic Shell: http://download.cnet.com/Classic-Shell/3000-2072_4-75553853.html?tag=mncol;1
It's okay if right now you are feeling somewhat overwhelmed, nervous, confused, or just scared spitless! • Hey! You're learning a new language (Java) and a new way of thinking about things, so it is perfectly natural if you're feeling a bit overwhelmed right now, or a bit nervous, or even a bit confused. • Knowing this, we'll be taking baby steps for the next few lectures. I'll be holding your hand and walking you through Java and code step-by-step. • So: Do not be afraid to ask questions! • And: Do not be afraid to come see me during my office hours (or by special appointment). • Also: Once I know the exact days, times, and places, going to the Open Labs for additional one-on-one help is greatly encouraged!
StudentTracker Reminder: You Will Need to Create an Account in Order to Submit Your Assignments http://ccc.panitzco.com/mpanitz/StudentTracker
Some Sites/Links of Interest • Udacity – Free Online Courses • MIT OpenCourseWare – Free Online Courses • Coursera – Free Online Courses • Standford Engineering Everywhere – Online CS Courses • Academic Earth – Online CS Courses • Khan Academy – Free Online Tutorials • Code Academy – Interactive Code Learning • Code School – Interactive Code Learning • CoderDoJo – Code Club Community • Code.org – Code Club Community • Girls Who Code – Code Club Community • Girl Develop It – Code Club Community
Lecture 2 Announcements Reading Assignment for Today • Chapter 1.5: Types of Errors • Chapter 1.4.5 – Tracing Code Note: there are ‘BIT 115 Student Open Source Guides’ that students wrote from previous quarters that may deal with the various topics of your readings and lessons. This is a great tool, and highly recommended! • Finding and Fixing Errors • Setting up a City • Tracing a Program • Extending a Class (Introduction; we’ll cover again on Wednesday)
Quarter-Long Game Plan: • Up until the Mid-Term: • 1st part of the quarter Overview of topics, conceptual understanding, not as much free-form problem-solving • After the Mid-Term: • 2nd part of the quarter Focus on learning and more problem-solving on your own
Save A Copy Of All Work(Highly recommended!) • In-Class Exercises, Exams, Quizzes, etc. • If you work with someone, make sure each of you gets a copy • For In-Class Exercises, you do not have to turn it in • (I’ll be checking it as I walk around and watch you work) • If you lose track of it, and I unintentionally record it incorrectly in StudentTracker, then whatever I’ve got will stand as the grade. Best then to save your work for proof, if needed, in the event of a discrepancy. If you do find a grading error in StudentTracker, then please don't hesitate to let me know!
Starting next lecture, you should assume that the quizzes and exams will all be 100% pen/pencil-and-paper.You bring the pen or pencil, I will supply the paper Start Practicing Now(My Mantra: Practice! Practice! Practice!) Try writing code from memory, and/or using Notepad or NotePad++ and then copy-and-pasting into jGRASP to check your work Quizzes and Exams
HOMEWORK Assignment 1is due LECTURE 4 Monday, July 14thby midnight • It’s posted on the website under Assignments • It will be due by midnight on day of Lecture 4 • If you are confused, bring your work to class, in electronic form, and we will go over how to hand in (upload) the homework: Student Tracker (We’ll go over this now with “Rex Winkus”) How to Use Student Tracker (Instructions) • If you’re stuck, seek help! • Talk to the Instructor or a classmate or Open Lab helper • Email me BIT 115: Introduction To Programming
HOMEWORK Assignment 1 • By now, you should all have jGrasp installed at home, along with the Java JDK, and the becker.jar mapped properly in jGrasp. • It’s easy to get stuck at home, and then have to finish your work at school • Remember for future assignments: The building is closed on Sundays BIT 115: Introduction To Programming
HOMEWORK A Quick "Peek" at Assignment 1 Let's Have a Quick Look at Assignment 1 (so there are no unforeseen surprises down the road!) Assignment 1 is due: Monday, July 14th (uploaded to StudentTracker by midnight) What You Need To Turn In to StudentTracker for A1
And now …. The Quiz! NO QUIZ TODAY We will have our very first 'warm-up' Quiz starting this Wednesday BIT 115: Introduction To Programming
Today’s Topics • Errors: How to find and fix them • Important Terms (like Class, Object, Method, Parameter, etc) • Dissecting the Code: What it means and what it does • How to set up a City • Tracing Code (Predicting What A Program Will Do BEFORE you Run It) • Extending a Class (Overview) • We will go over this again on Wednesday BIT 115: Introduction To Programming
Chapter 1.5: Types of Errors • 3 Different General Categories of Errors: • Compile-Time Errors (Syntax Errors) • Run-Time Errors (Application Errors) • Intent (Logical) Errors BIT 115: Introduction To Programming
Compile-Time Errors (Syntax Errors) • Anything that goes wrong when you compile the file is a compile-time error! • Point out that the Output Panel is often small, but it can be resized, and you should get used to figuring out which line the error pertains to. • Java is case sensitive - Java is different from java, is different from JaVa - This means you must type in names, etc, EXACTLY the same • File name MUST be the same as the class name • You need the importbecker.robots.*; at the top of each robot file • Forgetting to Compile BEFORE Running - You need to compile the file EVERY SINGLE TIME you change it - You should also wait UNTIL the compilation finishes BEFORE trying to run it • Strategy For Fixing Compile-Time Errors: • Follow the debugging strategy (listed in your text) to find and correct the syntax errors in the FindErrors.java program later this evening when you do your In-Class Exercises. • 1. Compile the program to get a list of errors; • 2. Fix the most obvious errors, beginning with the first error reported • 3. Compile the program again to get a revised list of the remaining errors.
Run-Time Errors (Crashing Errors) Anything that causes the program to crash while it's running. If you encounter a run-time error when you are compiling and running your Java programs, then this would be a jGrasp problem, or a Windows Operating System problem, and NOT a Java Problem. The Java language does a lot to protect you from this type of error, so you shouldn't see many of these. • Intent Errors (Logical Errors) The program compiles and runs without crashing, but it doesn't do what you want it to. Example: - Robot takes an extra leftTurn, and runs off the screen - Robot doesn't pick up a Thing when it's supposed to. - Robot collides with a Wall (the book calls this a run-time error, but it technically isn’t) As you continue learning to code you'll make fewer "typo" type mistakes, and end up with more Intent errors then Compile-Time errors. You need to come up with a personal strategy to figure out where the Intent problems are, and how to fix them. One Option: Use a Program Debug Table(show where this is on web site)
Lecture 2 ICE:Finding And Fixing Errors In Your Program • In-Class Exercise Directions 2.1 • FindErrors.java Program Debug Table We'll Wait and Do All the ICEsTogether at the End of Lecture BIT 115: Introduction To Programming
Some Important Terms To Remember A classis a set of functions that can work together to accomplish a task. It can contain or manipulate data, but it usually does so according to a pattern rather than a specific implementation. An instance of a class is considered an object. Until an object is instantiated from a class, the class can’t actually do anything. UnderCourse Wide Information An objectreceives all of the characteristics of a class, including all of its default data and any actions that can be performed by its functions. The object is for use with specific data or to accomplish particular tasks. A methodsimply refers to a function that is encased in a class. It usually entails an action. A parameteris a variable that is passed into a function that instructs it how to act or gives it information to process. Parameters are also sometimes called arguments. A fieldor propertyis a default set of data stored in a class. A class can have multiple properties and can be changed dynamically through the methods of the class. These are sometimes called attributes. Inheritanceis one of the keys that make OOP tick. Simply put, classes can inherit methods and fields from other classes by extending them and each class can be extended by multiple classes. This means that you can start with a base (or parent) class that contains shared characteristics among several classes. That base class can then be extended by other classes (children) that are similar but are meant for slightly different purposes. Any changes in the parent class will automatically cascade to its children. BIT 115: Introduction To Programming
Class (The “Idea” of Features and Functions) A classis a collection of functions that can work together to accomplish a task. It can contain or manipulate data, but it usually does so according to a pattern rather than a specific implementation. An instance of a class is considered an object. Until an object is instantiated from a class, the class can’t actually do anything. UnderCourse Wide Information Example The Robot class. The Robot class contains all the features and functions that a robot might have once it is created (or instantiated) as an object. Until then, all the Robot features and functions are just the idea how a robot might work, but being an idea the class doesn’t do any work itself.. Just like we might have an idea how a car should look and operate—body, engine, four tires, steering wheel, gas and brake pedals, etc—an idea of a car is not the same of an actual working car. Here the idea of a car is a class, and an actual working car is an object. http://faculty.cascadia.edu/cduckett/bit115/Becker/Documentation/index.html BIT 115: Introduction To Programming
"Brakes" "Engine" "Lights" "Transmission" "Wheels" "Chassis" "Seats" "Power" "Car" Class "Car" Object
Object (An Instance of the “Idea” Made Actionable) An objectreceives all of the characteristics of a class, including all of its default data and any actions that can be performed by its functions. The object is for use with specific data or to accomplish particular tasks. UnderCourse Wide Information Example When we create an object from the Robot class we do so by creating a namedinstance of the Robot class that will possess all the features and functions that were outlined as belonging to the Robot class as an idea. Once the object is instantiated, what was once the idea of a Robot now becomes an actual Robot that possesses specific ‘Robot’ properties (its shape, size, color, speed) and that can perform specific ‘Robot’ actions (like move, turn left, put down a thing, pick up a thing, etc). http://faculty.cascadia.edu/cduckett/bit115/Becker/Documentation/index.html BIT 115: Introduction To Programming
Method (An “Action” That Might Be Performed by the Object) A methodsimply refers to a function that is encased in a class. It usually entails an action. Example After we have created a named object from the Robot class that possesses all the properties (or attributes) belonging to robots, the robot can now perform some kind of action or actions(like move, turn left, put down a thing, pick up a thing, etc). These actions are the methods belonging to the Robot classes, and which an instance of the Robot class can perform. A robot can move because the Robot class has a method called move() which will allow the robot to move one space forward each time it is called upon to do so. Although we might want the robot to mix a martini, the robot can not because the Robot class does not contain a mixAMartini() method. Later on in this course we will learn how we might make a new kind of class that could contain a mixAMartini() method, but the Robot class we are using now does not have just such a method. http://faculty.cascadia.edu/cduckett/bit115/Becker/Documentation/index.html BIT 115: Introduction To Programming
Parameter (“Information” or “Instruction” That Might Be Given) A parameteris a variable that is passed into a function that instructs it how to act or gives it information to process. Parameters are also sometimes called arguments. UnderCourse Wide Information Example When we have a robot object call upon a method in order to perform some action, that method may or may not take a parameter which is an additional piece of information or an instruction that might extend its functionality. Currently most of the methods belonging to the Robot class do not take any parameters (although in a moment we’ll look at a Robot method that does take a parameter). For example, the move() method when called upon will allow the robot to move one space forward. You’ll notice that the move() method has two “empty” parentheses which represents that it doesn’t take a parameter. Had the programmer of the Robot class designed the move() method differently, then it might have taken a parameter to represent how many places the robot should move. For example move(1) might make the Robot move one space forward, move(2) might make the Robot move two spaces forward, move(3) might make the robot move three spaces forward, and so on. Since the programmer did not design the move() method this way, using the move() method like this will not work. This was only a theoretical example. http://faculty.cascadia.edu/cduckett/bit115/Becker/Documentation/index.html
Field or Property (The “Attributes” of Class and Its Objects) A fieldor propertyis a default set of data stored in a class. A class can have multiple properties and can be changed dynamically through the methods of the class. These are sometimes called attributes. UnderCourse Wide Information Example When we create a named instance of a robot from the Robot class, this robot object comes with a set of predefined properties and attributes. For example, by default the new robot object is so many pixels high and so many pixels wide, its shape is an arrowhead, its color is red, and its location and placement and direction in the City is defined by the parameters that were passed to it (which we will discuss in the next Dissecting the Code section). For example, one of the properties of the Robot class is that a robot will move one space forward in .5 seconds. This speed, .5 seconds, is a pre-defined property of the Robot class and any instances of objects made using the Robot class. Now these pre-defined properties might be changed dynamically while the program is running if just such a feature was developed programmatically to do so. In the case of the robot’s default speed of .5 seconds for every move, there is a setSpeed() method which can be used to change the robot’s initially defined speed. For example setSpeed(4) will move the Robot twice as fast (the default speed is 2). http://faculty.cascadia.edu/cduckett/bit115/Becker/Documentation/index.html
Inheritance (Extending a Class’s Features to a New Class ) Inheritanceis one of the keys that make OOP tick. Simply put, classes can inherit methods and fields from other classes by extending them and each class can be extended by multiple classes. This means that you can start with a base (or parent) class that contains shared characteristics among several classes. That base class can then be extended by other classes (children) that are similar but are meant for slightly different purposes. Any changes in the parent class will automatically cascade to its children. UnderCourse Wide Information Example We will learn about inheritance and how to put it to good use next week. A brief example what inheritance is can be explained by looking at our Robot class. Right now the Robot class has a turnLeft() method but it doesn’t have a turnRight() method. If you created a Robot object and wanted it to turn right then you would have to call upon it to turn left three times!Now we might create a new type of Robot class (perhaps called MrRoboto) that would extend all the features and functions of the Robot class (like move(), turnLeft(), etc) and also create its own new set of methods (like turnAround(), turnRight(), etc). In this example we are using the originalRobot class to create our newMrRoboto class, and as such the MrRoboto class is inheriting all the original features and functions of the Robot class. This is a great tool of Object Oriented Programming (or OOP) because this means the programmer doesn’t have to code all the Robot class features and functions from scratch to use in the new MrRoboto class. All the programmer has to do is code the new methods (like turnAround() or turnRight()) since the MrRoboto class inherited all the original methods (like move(), turnLeft(), etc).
Dissecting the Code:What It Means and What It Does (Quiz2.java) 1 importbecker.robots.*;234 public class Quiz2 extends Object5 {6 public static void main(String[] args)7 { 8 City toronto = new City();910 Robot Jo = new Robot(toronto, 0, 3, Direction.NORTH, 0);1112 new Thing(toronto, 2, 2);13 new Wall(toronto, 3, 3, Direction.EAST);14 new Wall(toronto, 3, 3, Direction.NORTH);15 new Wall(toronto, 3,3, Direction.SOUTH); 16 17 Jo.turnLeft();18 19 } 20 }
importbecker.robots.*; This imports from the becker.jar collection all the classes contained in the robots file so they would be functionally available in Java (JDK) and any code written using it. These classes include the Robot.class, the Thing.class, the City.class, the Wall.class, and over a hundred more. NOTE: Java loads some classes by default into the compiler, while others it does not. Later on we will have to import additional Java classes in our code to get our programs to work BIT 115: Introduction To Programming
public class Quiz2 extends Object 'public' so other classes can use it. public a 'class' is a blueprint for making 'objects' that can do something class Quiz2 'Quiz2' is the name of the class. It can be any name. The program uses this name when it runs to know what 'objects' and 'methods' to use in the program. Java, like other object-orientated languages, supports class inheritance. Inheritance allows one class to "inherit" the properties of another class. For example, all Java objects are inherited from the java.lang.Objectclass which is a fundamental part of Java and the Java libraries. Our Quiz2 class is inheriting the properties of Java's Objectclass, and so extendsits actions and attributes in the program hierarchy. extendsObject http://www.tutorialspoint.com/java/java_object_classes.htm
Note: main is a method() public static void main(String[ ] args) The method is publicbecause it is accessible to the JVM (Java Virtual Machine) to begin execution of the program, and can be accessed by any other class or method. The statickeyword signifies the fact that this method can be invoked without creating an instance of that class (an object). Main is called before any objects are made, hence static. voidsignifies that this method does not return anything. In other words no new or altered data is sent out from it for use by the rest of the program. Nothing is returned, so void. Just like in the C “procedural” language and other languages, this is the main method in a Java program. When you run a Java program, execution begins in the mainmethod. Stringis the data type that could be passed to the method, although no data type needs to be passed. An example of a data type is an int or float. The [] represents unknown quantity. argsis the name of the parameter. We can pass any number of arguments to this method.
City toronto = new City(); Names the object Creates the new City object We want to make a newinstance of the City class (City.class) found in the becker > robots directory (insidebecker.jar) and call this new objectToronto The City class contains all the attributes and actions necessary to set up a city when a named city object (like toronto) is created, include shape, size, color, streets, avenues, etc. By itself, the City class can't do anything. It's just a collections of ideasand concepts. You need an object made from the City class (like toronto here) to actually do something with a city. NOTE: In Java, '=' is an assignment operator, and points right to left; "==" is an equals sign. EXAMPLE:x= 1 assigns 1 to variable space x and x == 1 means x equals 1.
1 importbecker.robots.*;234 public class Quiz2 extends Object5 {6 public static void main(String[] args)7 { 8 City toronto = new City();910 Robot Jo = new Robot(toronto, 0, 3, Direction.NORTH, 0);1112 new Thing(toronto, 2, 2);13 new Wall(toronto, 3, 3, Direction.EAST);14 new Wall(toronto, 3, 3, Direction.NORTH);15 new Wall(toronto, 3,3, Direction.SOUTH); 16 17 Jo.turnLeft();18 19 } 20 }
Robot Jo = new Robot(toronto, 0, 3, Direction.NORTH, 0); Names the Robot Createsthe new Robot using five parameters • Our instance of the Robot object is named Jo • Jo is placed in a City called Toronto • Jo is starting out on Street 0 • Jo is starting out on Avenue 3 • Jo is starting out facing North • Jo is starting out with 0 (zero) Things in its backpack • Now, another way to "construct" this is with only four parameters, by leaving on the number of Things in the backpack Robot Jo = new Robot(toronto, 0, 3, Direction.NORTH); If you are not going to be picking up or putting down Things in your program, then you can "construct" your Robot without this fifth 'backpack' parameter. Later on, when we start creating our own types of Robots and methods, some of the ICES will be set up in such a way that parts of the code will use five parameters and other parts of the code will use four parameters and this will cause an error. We'll go over this in greater detail when the time comes. Look: http://faculty.cascadia.edu/cduckett/bit115/Becker/Documentation/index.html
new Thing(toronto, 2, 2);new Wall(toronto, 3, 3, Direction.EAST);new Wall(toronto, 3, 3, Direction.NORTH);new Wall(toronto, 3, 3, Direction.SOUTH); These will work by default. For stuff that just sits there, we don’t have to actually give them unique names (e.g., BrickWall) but we can’t talk about them in code, however a Robot can pick up/put down an unnamed object. Why would you want to give a wall a unique name? If you look at the becker library you will discover that Wall actually extends Thing, that is to say Wallhas inherited all the initial properties of Thing Jo.turnLeft(); turnLeft() is one of the methods of the Robotclass, along with move(), pickThing(), putThing(), frontIsClear(), countThingsInPackback(), and several more. Because Robot can turn left, Jo can turn left. BIT 115: Introduction To Programming
Something to Remember: In parameter order, street comes first and avenue comes second. Streets go West-East (left-right) Avenues go North-South (up-down) A neat trick to remember the difference is to recall that the 'A' and 'V' in Avenue point up and down.
Lecture 2 ICE: Setting Up a City • In-Class Exercise Directions 2.2 • Starting_Template.java We'll Wait and Do All ICEsTogether at the End of Lecture BIT 115: Introduction To Programming
Chapter 1.4.5 – Tracing Code BIT 115: Introduction To Programming
PREVIEW: Extending a Class This is important stuff, so we will be going over it twice – once to day as a “preview” and again in the next Lecture with an occupying ICE.
Constructor Here, when we create a new instance (an object) of the Robot class, a ‘hidden’ default constructor works in the background to make sure that Kelseyinherits all the attributes and methods available to Robots, including its placement on a particular Street and Avenue and Direction in a particular City, and that it can use all of the actions (methods) available to the Robot class (including move(), pickThing(), turnLeft(), putThing(), frontIsClear(), etc.) http://faculty.cascadia.edu/cduckett/bit115/Becker/Documentation/index.html BIT 115: Introduction To Programming
Constructor Constructors have one purpose in life. To create an instance of a class. This can also be called creating an object, as in: The purpose of a method, by contrast is much more general. The purpose of a method is to executeJavacode, to allow the object to dosomething. BIT 115: Introduction To Programming
Now … what if these is an action that you might want Kelsey to do that isn’t found in the Robot class? For instance, instead of invoking the theturnLeft() method three times, you could just call up a turnRight() ? The problem is, the Robot class does not have a turnRight() command (method). The Robot class has been finalized. You cannot add to it. The good news is, you can create a new methodlike turnRight() that will do what you want the robot to do! But in order to make this happen, you need to extend the Robotclass … BIT 115: Introduction To Programming
Extending a Class:Where ClassBextendsClassA In Plain Ol’ English: Where ClassB “inherits” the attributes and actions of ClassA … then adds new functionality to them. When we’re not interested in extending a class because we’re happy with the methods that come with that class just the way they are, then we declare our class the ‘normal’ default way: public class Example extends Object Object Object is the top class of all class hierarchies. When a new instance of anything is made in Java, then it inheritsall the attributes and actions of the Object class. You can’t get a new object withoutObject. Class Hierarchy However, if we want to add new functionality (methods) to the Robot class (like turnRight) then we need to extend the Robot class (which is itself an extension of Object) public class MrRobotoextends Robot BIT 115: Introduction To Programming
Extending a Class:Where ClassBextendsClassA Instance vs. Extension? Instance creates a new object from a class, but extension extends a new class from a class through inheritance, allowing for an improved class that might offer additional attributes and services (methods) not available in the original class … BIT 115: Introduction To Programming