jump down this page to: schedule | final grades | assignment grades | late policy | collaboration | compilers | style conventions

Dave Harden
Phone: (707) 527 - 4282
Email: dharden@santarosa.edu
Please use the class discussions for all questions whenever possible. For private questions that are not appropriate for the class discussion, email me. Do not attempt to contact me using the Canvas messaging system (or "inbox"). I don't monitor the Canvas inbox. Please include "CS111B" in the subject when you email me!!
You must post an introduction in the "introductions" topic of the class forum by Monday June 19 or I am required to drop you from the class. When you begin working your way through the modules, you'll see that this is the first task for week 1.
Absolutely no assignments will be accepted for any reason after Wednesday, July 26.
Note that the final exam for this class is a required face-to-face meeting on Wednesday, July 26, from 6 - 8pm in room TBD. Please check your schedule now and ensure that you will be able attend this required meeting. Please do not take this class if you are unable to attend. Alternate arrangements are not available.
CS 111A is not a prerequisite for this class, but it is very highly recommended. In this class we cover the 18 weeks of CS 111A material in about 2 weeks. This class is not primarily intended for students with no programming experience. You're welcome to give it a try, of course. I just want to make sure you know what you are getting into.
The required textbook for this course is:
"Java: How to Program (Early Objects)", 10th Edition
Authors: Paul Deitel and Harvey Deitel
ISBN-13: 978-0-13-380780-6
Copyright: 2014
The 9th edition is also acceptable.
The digital access code is not required.
After successful completion of this course, students will be able to:
Assignments are due at 11:59pm on the date indicated in this schedule. Be sure to check the late policy for more information.
| Week | Dates | Topic | Reading | Projects |
| 1 | Monday, June 12 - Monday, June 19 |
1. Introduction | ch 1 | |
| 2. Data and Expressions | ch 2 | |||
| 3. Classes and Methods 1 | ch 3 | |||
| 2 | Tuesday June 20- Monday June 26 |
4. Classes and Methods 2 | ch 4 | Project 1 due Monday, June 26 |
| 5. Conditionals | ch 5 | |||
| 6. Loops | ch 6 | |||
| 3 | Tuesday June 27- Monday July 3 |
7. Arrays | ch 7 | Project 2 and Midterm due Monday, July 3 |
| Midterm (Topics 1 - 7) | ||||
| 4 | Tuesday July 4- Monday July 10 |
8. GUI's and Event Handling 1 | ch 12-13 | |
| 9. GUI's and Event Handling 2 | ||||
| 10. GUI's and Event Handling 3 | ||||
| 5 | Tuesday July 11- Monday July 17 |
11. Classes and Methods 3 | ch 8 | Project 3 due Friday, July 14 |
| 12. Exception Handling | ch 11 | |||
| 6 | Tuesday July 18- Monday July 24 |
13. Inheritance 1 | ch 9 | Project 4 due Monday, July 24 |
| 14. Polymorphism 1 | ch 10 | |||
| 15. Polymorphism 2 | ||||
| 7 | Tuesday July 25 - Wednesday July 26 |
Final (Topics 8 - 15) | Final Wednesday, July 26 |
Your final score will be made up of the following components.

| Component | Points Each | Points Total |
| Assignments (15) | 30 | 450 |
| Discussions (5) | 10 | 50 |
| Projects (4) | 75 | 300 |
| Midterm | 50 | 50 |
| Final | 150 | 150 |
| total | 1000 |
Grades will be assigned as follows: 900 points for an "A", 800 for a "B", 700 for a "C", and 600 for a "D". Grades of + or - are rare and at the instructor's discretion.
There will be a midterm and a final. The midterm is taken online, and you can take it at any time of your choosing during day on which it is scheduled (see the schedule). Once you start, the midterm must be completed within one hour, without exception, so make sure to ensure that you will not be interrupted once you begin. The midterm covers 1 through 7. The final covers topics 8 - 15. Of course, on the final, you will need to know a few things from earlier in the course.
The final exam is to be taken face-to-face on Wednesday July 26 from 6-8pm in room TBD. No alternate arrangements will be available for this exam.
You will take the midterm exam on the honor code. The tests are available for one entire day for your convenience, but the validity of the test relies heavily on your academic integrity. Don't take advantage of the flexibility by sharing questions with students who have not taken the test.
You are expected to simulate a class environment when you take the online exams. The exams are open book and open notes, but you cannot receive any help from another person, or a search engine. The rules are summarized below. Email me if you have any questions:
This late policy is for assignments and projects only. In this section, the word "assignments" includes both "assignments" and "projects". Late exams are not accepted.
Assignments are due at 11:59pm on the date indicated in the schedule. Assignments must be turned in by the date listed in the course schedule. However, assignments may be submitted up to 48 hours late with no penalty. This is is the "final deadline". This does not mean that the due date is extended! For example, if your assignment is not done by the original due date, and you get severely ill between the due date and the final deadline, so that you cannot complete your assignment by the final deadline, it will be considered late. In addition, failing to complete assignments by the original due date will put you behind in the class, and may delay the grading of your assignment significantly. You should make every effort to complete the assignment by the original due date.
Beyond the final deadline, assignments will be accepted until 1 week after the original due-date (except that no assignments will be accepted after Wednesday, July 26). They will be considered late and will receive a 50% deduction, with no exceptions. Assignments are not accepted more than 1 week late.
To repeat: absolutely no assignments will be accepted for any reason after Wednesday, July 26.
Read this carefully! Every semester I give about a dozen 0's on assignments because of violations of this policy!
You may not work together on assignments. You may not search the web for help with your assignments. For example, if part of your assignment involves writing code to reduce a fraction, you may not search the web for examples of code or algorithms to reduce a fraction. The point is for you to solve this problem on your own.
You may not look at snippets of code online to help you with your program. By using Google you can find solutions to many of the programming problems in this class. However, it's easy for me to find them as well and discover your plagiarism.
Don't discuss ungraded homework with each other outside the public forums. Instead, direct all of your questions to the public discussions where everyone can comment and I can moderate the discussion. Do not look for answers on cheater websites or get help from pay-for-help websites. Do not ask for help on Web forums.
Don't look at another student's code before you have submitted the final version of your assignment. Don't provide code to another student or let another student look at your code. This is no less serious than being the student who receives the code and the penalty will be the same.
Any variation of collaborating or copying programming assignments, or parts of programming assignments, is prohibited. The assignment must be 100% your own work.
In the real world, programmers usually work in teams and often the company that they work for has very precise rules for what kind of style to use when writing programs. For this reason, and also to encourage good programming style, we will be adopting the following style conventions for this class. This is not to say that these rules represent the only good style for writing computer programs (although in most cases they do). After you finish this class, you may decide that you prefer a different style than what is required here. However, in order to get good grades on your programming projects in this class, you must follow these guidelines.
A. Initial File Comment: Your programs should be well-documented. Each program should begin with an initial file comment. This comment should start by indicating your name, class, date, instructor, name of file, etc. Next it should describe in detail what the program does and how the code works. Any input expected from the user and any output produced by the program should be described in detail. You should expect your initial file comments to be at least 50 words.
Important local variables should be commented at their declaration. Aside from this, in most cases it should not be necessary to place comments in the body of a method. This usually clutters up your code and ends up making the method more difficult to read. If you find yourself needing to explain something in the middle of a method, perhaps you should look for a clearer way to write it!
B. General Advice: Your comments should be directed toward a reader who is an expert Java programmer. You should not explain features of the language!
C. Method Comments: Just above each of your method definitions you must provide a comment describing what the method does. You should expect your method comments to be 15 - 50 words. Make sure to explain the role of each parameter in your method comments, and refer to them by name.
A. General: Use lots of whitespace (blank lines and spaces) to separate the different parts of your program!! When I look at your program my first impression should not be a page crammed with code. Get rid of wraparound. Put a blank line between your declarations and your statements. Put a space before and after each operator. Make sure your lines aren't too long, no more than 80 or 90 characters.
B. With Methods: Put at least 6 blank lines between method definitions.
A. General: Choose your identifier names very carefully. Variable names should precisely represent what the variable is storing. Do not use abbreviations unless you feel the identifier name would otherwise be so long that it would hinder the readability of your program. Dont use one letter variable names except, perhaps, in for loops.
B. With Methods: Choose your method names so that as much as possible your program reads like English and the names describe precisely what the method does. Void method names should start with an action word (readString, getData, etc.).
Any time there is a sequence of statements in your program that performs a specific, nameable sub-task, you should consider making that sequence of statements into a method. A nice length for methods is about 10 lines, although they can be longer if they are simple (for example, lots of output statements) or if there is just no logical way to break it up. Consider making complex methods (for example, nested loops) even shorter. A goal: when you are done with your program, I ought to be able to look at any particular method and have a general understanding of what is does and how just at a glance.
In this class you should rarely write a method longer than 10 lines, never longer than 15.
Indents must be exactly 4 spaces.
You may follow the indentation scheme used in the textbook or you may use the scheme used in the lessons. No others. For example, every statement must appear on a line by itself, every close curly brace must appear as the first (or only) item on a line, and every open curly brace must appear as the last (or only) item on a line.
Make sure that your code is as simple as possible and that there is no unnecessary repeated code.
[a7] In most cases no numbers other than 1 or 0 should appear in your program. Other numbers should usually be declared as final variables.
Do not use any class variables in your main class!! These are variables that are declared in the main class but outside of any method definition. The exception to this rule is the Scanner variable. Violating this guideline will cost you a lot of points!
You should follow the "single entry -- single exit" rule for methods and loops. This means that you should not use a statement like "break" (except in a switch statement), "return" (except in a value-returning method), "exit", or "continue".
Always treat statements and expressions as distinct entities. For example, count++ should not be used as an expression, but as a statement.
You must use a value-returning method if (a) there is exactly one value being communicated to the calling method, and (b) there is no input or output occurring in the method.
Use a for loop for counter controlled loops. Do not use a for loop for any other kind of loop.
Never use the ?: operator.
The characters "== true" or "== false" should never occur in your code.
You should never have
if (x) {
return true;
} else {
return false;
}
in your code. This can be replaced with simply
return x;