# Lab 6 -- Simple Class * Date: 10-16-2017 * Course: SE1011-051 * Submitted to: Dr. Chris Taylor >> | Earned | Possible | Criteria | >> | ------ | -------- | ------------------------------------------------ | >> | 5 | 10 | UML Class Diagram | >> | 75 | 75 | Met requirements / Technical quality | >> | 10 | 10 | Coding standard compliance and program clarity | >> | 5 | 5 | Following submission instructions | > > # Feedback > * Nice work # BuildingCostEstimator.java ``` /* * SE1011 * Fall 2017 * Lab 6 - BuildingCostEstimator * Name: Trevor Barnes * Created: 10/10/2017 */ package barnestr; public class BuildingCostEstimator { ``` > #### Class Javadoc requirements > The [Coding Standard](http://msoe.us/taylor/se1011/CodingStandard) requires > the following: >> Class comments - each class is commented using Javadoc style. The comment >> contains a brief description of the class (not required for a class that >> is the main or driver). ``` private final int SQ_FEET_COST = 130; private final int FULL_BATH_COST = 15000; private final int HALF_BATH_COST = 7000; private final int BEDROOM_COST = 3000; private final int WINDOW_COST = 800; private final int GARAGE_COST = 8000; private int sqFeet; private int numFullBaths; private int numHalfBaths; private int numBeds; private int numWindows; private double numGarages; public int getSquareFeet() { return sqFeet; } public int getNumFullBaths() { return numFullBaths; } public int getNumHalfBaths() { return numHalfBaths; } public int getNumBedrooms() { return numBeds; } public int getNumWindows() { return numWindows; } public double getNumGarages() { return numGarages; } public double costToBuild() { ``` > #### Method Javadoc requirements > The [Coding Standard](http://msoe.us/taylor/se1011/CodingStandard) requires > the following: >> Method comments - public methods are commented using Javadoc style, >> with the exception of getters and setters which typically are not commented. For example: >> >> ``` /** * This method prints out "Hello" to the person given and * returns the number of letters in the person's name. * * @param name The person to who to say hello. * @return The number of characters in the person's name. */ ``` ``` return (sqFeet*SQ_FEET_COST)+(numFullBaths*FULL_BATH_COST)+(numHalfBaths*HALF_BATH_COST)+ (numBeds*BEDROOM_COST)+(numWindows*WINDOW_COST)+(numGarages*GARAGE_COST); } public void setSquareFeet(int sqFeet) { this.sqFeet = sqFeet; } public void setNumFullBaths(int numFullBaths) { this.numFullBaths = numFullBaths; } public void setNumHalfBaths(int numHalfBaths) { this.numHalfBaths = numHalfBaths; } public void setNumBedrooms(int numBeds) { this.numBeds = numBeds; ``` > #### Foolproofing your class > One of the ways that your implementation would fail is if someone were > to ask your class to set one of the attributes to a negative value; > `setNumBedrooms(-50);`, for example. > > While you could claim that it is not your fault that somebody was dumb > enough to try to build a house with -50 bedrooms, it still makes you look > bad because the class you wrote is producing crazying answers. ("You'll pay > me to build my house for me?"). > > You can protect against this sort of thing by checking in each of your > `set`Whatever`()` methods to make sure you were not passed a negative > value. You could then return a `boolean` which indicated whether or > not the value had actual been changed by the call to `set`Whatever`()`. > For example, the `setNumBedrooms()` method could look like this: > > ``` public boolean setNumBedrooms(int numBedrooms) { boolean changed = false; if(numBedrooms>=0) { this.numBedrooms = numBedrooms; changed = true; } return changed; } ``` > Of course, it is difficult to completely foolproof your class since fools > are so ingenious. ``` } public void setNumWindows(int numWindows) { this.numWindows = numWindows; } public void setNumGarages(double numGarages) { this.numGarages = numGarages; } } ```