cis 234: project 1 issues dr. ralph d. westfall april, 2010
TRANSCRIPT
CIS 234: Project 1 Issues
Dr. Ralph D. WestfallApril, 2010
What Is Feedback? comments and suggestions
designed to help you improve your skills
much of the information in this presentation should be relevant to Project 2
What is feed-forward?
Specifications Are King always do projects based on what
requirements say if disagree with requirements,
discuss with client client may agree to change if she
understands that what you want to do is better
General Requirements put statement that code is own work,
AND that you have protected security of code at top, followed by S-signature
only one zip file, only one Word file don't put zip files inside zip files .java files shouldn’t be submitted as .txt
Word and zip files must be named with last name before 1st name
Missing Parts many students didn't do the Excel
file will be in Project 2 and will cost 5
points if missing UML diagram also missing in many
projects not in Project 2, but may be in Project 3
output missing in a few projects
Documentation in Code comment anything unusual or "tricky"
don't need to comment very obvious things I look for comments on complicated things
don't repeat comments for same thing avoid "wordy" comments
incomplete sentences, bad grammar ok comments should relate to code
get rid of "instructional" comments
Documentation in Code - 2 use multiple line comment feature for
long comments, and at start of program/*
*/ use line breaks to improve readability
to separate self-contained blocks (similar to paragraphs in an essay)
Identifier Naming Convention variables, methods, classes and
objects Class name starts with a capital letter all others have a lower case 1st letter,
upper case for other words ("camel case"), as in iPhone, iPod, iMac, eBay (others?)
capitalize initial letter of each added word in all identifiers e.g., SpeechFormatter, joeThePlumber kangasPerYear, calcPrintResults()
Other Naming Issues use all capitals for constants
use underscores (_) in constants, not in other identifiers
use meaningful variable and object names shoesQuantity is better than shoes subtotal1 is NOT meaningful
Class name needs to be same as its java filename (won't run if it isn't)
More Naming Issues capitalization is important:
ownerwages != ownerWages
Output Format include formatting required in
specifications (can add if not specified but makes sense) title, line labels ---------- (underlining?) column alignment (#s right justified) sub- and grand totals aligned
appropriately spelling correct
Declarations declare all variables at the start of
their methods don't bury declarations below among
action statements use appropriate data types
don't use integers for dollar amounts don't use double or float for quantities
(e.g., # of items) or counts
Declarations - 2 declare (and initialize) first, calculate
laterint shoesPerYear;// other declarations
// imperative ("action") codeshoesPerYear =
yearDays*shoesPerDay;
Declarations - 3 whenever possible, declare objects
first, then instantiate them later in imperative code
Employee daBoss;// other declarations
// imperative ("action") codedaBoss = new
Employee(Inputs.getBossWages);
Getters and Setters represent the implementation of
the concept of encapsulation ("data hiding")
purpose of a set (and often a constructor) is to allow another class to store a value in an object
purpose of a get is to allow another class to read the value of a variable in an object
Get and Set a get should always return a value a set should always store a value
usually don't have a return statement in a set method, except possibly when a boolean is returned to show it worked OK
declare variables at top of class, not in their own set or get methods
All Data in Inputs.java File almost every data item used in
StoreApplication.java needs to be declared in Inputs.java also need getter methods there to
return each value to StoreApplication.java
except could put private final int YEAR_MONTHS =
12; in StoreApplication.java
Calculations in StoreApplication.java Inputs.java file is designed to just
be used for supplying data put calculations in
StoreApplication.java file instead
Practice what is wrong with the following
code?
public void setNumber(int num){ int number = num; }
what is the scope of number? (where is its value available?)
Access to Variables variables used by another class
need to be (explicitly) private never read or change their values
directly from outside, use get and set instead
always access them directly inside class don't use class's own get or set
methods inside the class
Access to Variables - 2private int number;public void setNumber(int num){ number = num; }
note that this set method directly writes values to this variable in its class
other methods in this class can directly write values to this variable in its class also
other classes must use its set method
Coding Issues don't "hard code" values in code that
came from outside of your code or were calculated outside of your code use variables instead example: multiply by a price variable
instead of by the literal priceshoesPerYear=
yearDays*shoesPerDay; //OKshoesPerYear=362*shoesPerDay; //not OK
Coding Issues - 2 avoid "dead code"
dead code is a method that is never called by another method in the project
or code that is "commented out" ok if set or get are not called,
because they may be used in future
Coding Issues - 3 avoid unnecessary gets
example: a method may use a set method to store a value in an object
don't have to then use a get method if already have this value in the class that called the set method
Coding Issues - 4 mortgage payment calculations
monthly payment must be annualized interest rate must be decimal, not
percent (0.065 rather than 6.50%)
Coding Issues - 5 recycle previously calculated values
rather than repeating calculationskangaPerYear = Inputs.getKangas()
*Inputs.getDaysPerYear;kangaIncome = kangaPerYear *
Inputs.getKangaPrice();kangaCost = kangaPerYear * … rather
than repeating calculation
Coding Issues - 6 don’t do calculations in a println
statement makes code hard to debug or update
System.out.println("total: " + (totalIncome - totalExpenses))
Appendix following slides don't really apply
to the Project 1 we used in this class
Constructor don't forget to include a
constructor in a class that will be used to create objects
use a constructor method to set individual values that the objects will have instead of initializing these values in
declarations
Constructor - 2private int numHanboks = 2; // OK in a class just used for its variables,
where other classes will use same valuesprivate double wages;
Employee(double wage){ this.wages = wages;} // use a constructor if will create objects
Access to Variables - 3 storing calculated values in an object
if a value changes, anything derived from it almost always should recalculate it
example: if a total is stored as a variable, it should change any time any variable that is part of the total changes
a value's set method could call a calculate method to update values derived from the value
Coding Issues don't use too many methods if doing same thing often, make one
generic method that can be used again e.g., calculating withholding for
different salary levels should always make method private
except if methods in other classes will use it
Coding Issues - 4 if a data adjustment is only
necessary in some situations, make adjustments in the code where the problem occurs (interface), not in a general class
store good data in variables rather than fixing bad data in a get
Software Development Analyses an analysis is different from a plan need most detail on critical issues
for calculations, need to indicate formulas
for output, need to provide information on layout
identify anything unusual less detail on minor issues long write-ups are not good in
business