| LongPackageInfo.java |
/**
* We now see ways and motivation for creating a program with multiple classes.
* While only one class will be runnable - have a main method - there will be
* many supporting classes, and we will see a principle for decomposing
* code into multiple classes and another for protecting the variables and methods in
* them from external scrutiny. While decomposition has many benefits, it has
* the disadvantage that the code is distributed. This means the program becomes
* like the elephant in the story of the blind men and an elephant
* (https://en.wikipedia.org/wiki/Blind_men_and_an_elephant),
* which is understood differently based on which part we focus on.
*
* Use the F3 (or CTRL/CMD click) to navigate to the mentioned classes and methods and
* ALT <- to return back. Such navigation is crucial to understanding multi-component
* programs. Better still, you and your partners can have multiple classes
* open in your editors so that you can view multiple classes simultaneously.
* Introductory courses tend not to deal large components, so many of you will
* grow up in this praxis. Expect to struggle, especially if you
* took Comp 116. Remember, instructors are here to help you. You may want
* to also have the lecture pdf open.
*
*
* PACKAGE INFO
* Visit the following classes for this praxis.
*
* You may want to run
* {@link lectures.class_dual_roles.users.StaticFactorialSpreadsheetUse} and look
* at all of the classes before following the instructions in them to get an idea of how this
* multi-class program works.
* {@link Factorials}
* {@link Permutations}
* {@link StaticLoopingFactorialSpreadsheet}
* {@link lectures.class_dual_roles.users.StaticFactorialSpreadsheetUse}
* {@link lectures.class_dual_roles.users.TwoStaticFactorialSpreadsheetUse}
* {@link AnotherStaticLoopingFactorialSpreadsheet}
* Notice that some of these classes are in the same package and some are not.
*
* SAKAI QUESTION INFO
*
*
* A static variable in a class
* must be declared in the main method of a class.
* must not be declared within any method
*
* A static variable in a class
* is a local variable that can be referenced by only the main method
* is a global variable that can be referenced by any method in the class
* is a global variable that can accessed only by public methods in the class
* A (non final) static variable declared in a class can be changed
* by any method in the class.
* only by certain methods called setters.
* only by the main method.
* only by public methods in the class
*
* T/F A class can import two different classes with the same short name.
* T/F If public classes C1 and C2 are in the same package, a method in C1 can call methods in C2 with public and default access.
* T/F If public classes C1 and C2 are in different packages, a method in C1 can call methods in C2 with public and default access.
* T/F If classes C1 and C2 are in the same package, and class C2 has default access, a method in C1 can call public methods in C2.
* T/F If classes C1 and C2 are in different packages, and class C2 has default access, a method in C1 can call public methods in C2.
* T/F One of the roles of a class is to create walls around its members (variables and methods)
* that can restrict access to these members from other classes.
* T/F One of the roles of a package is to create walls around its component classes to restrict accesses to
* these classes (and its members) from classes in other packages.
*
*
* DISCUSSION INFO
* What is the principle of least privilege?
*
* What is the principle of separation of concerns?
*
* Why not combine {@link Factorials} and and {@link Permutations}
* into a single class?
*
* Given the class {@link Factorials},
* what purpose does {@link lectures.class_dual_roles.users.StaticFactorialSpreadsheetUse} serve?
* Why call it a spreadsheet?
* Which members (variables and methods) of {@link StaticLoopingFactorialSpreadsheet}
* should be public?
*
* Why is the purpose of having both classes, StaticLoopingFactorialSpreadsheet
* and AnotherStaticLoopingFactorialSpreadsheet,
* which are copies of each other?
*
* What is wrong with a copy and paste solution in which we create two copies of code?
*/
package lectures.class_dual_roles.statics;