Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the...
Transcript of Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the...
![Page 1: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/1.jpg)
Classes
Lecture 2
![Page 2: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/2.jpg)
Announcements for the Class
Readings • Section 1.4, 1.5 in text • Section 3.1 in text • Optional: PLive
§ CD that comes with text § References in text
Assignment
• Assignment 1 due next week § Due Friday, February 8th § By 11:59PM to CMS
• Graded for mastery § Keep submitting until correct § But must make progress
• Visit consultant hours! § Sunday – Thursday 4:30-9:30
9/7/12 Classes 2 Java
Apologies to XKCD
![Page 3: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/3.jpg)
Assignment Details
• This is a very simple assignment § Just the basics of OO programming § Show you know enough to start a “real” program
• Work alone or with one partner § Partners “group themselves” on the CMS § Only one person submits the files. § Partners must do the work together, sit next to each other,
with each taking turns “driving” (writing the code) • Academic Integrity
§ Never look at someone’s code or show yours to someone else § Never possess someone else’s code (except your partner)��� 1/28/13 Classes 3
![Page 4: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/4.jpg)
Patient name “W. White”
address “New York”
owes 250.00
@105dc
Extended Review From Last Time
• p.getName() § Has value “W. White” § Function; gives value
• p.pay(250.0); § Sets owes to 0 § Procedure; ���
it does something
1/28/13 Classes 4
name of folder
fields ���(variables)
methods getName()
pay(double d)
name of class
function
procedure
@105dc p
variable name
name of folder
![Page 5: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/5.jpg)
Class versus Object
Anatomy of a declaration + assignment statement: int x = 2;
Point3d p = new Point3d();
1/28/13 Classes 5
Type Variable Value
Class Object
![Page 6: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/6.jpg)
The Value null!
• You can declare a class variable w/o using new § Example: Point3d var3;
• Value in variable is null!§ null: Absence of a name
• var3.getX() gives error! § There is no name in var3 § Does not know which���
Point3d to access § NullPointerException
1/28/13 Classes 6
@4e0a1 Point3d
@4e0a1 var1
@13fc8 var2
null var3
x 2.2
y
z
5.4
6.7
@13fc8 Point3d
x 3.5
y
z
-2.0
0.0
![Page 7: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/7.jpg)
Class Definition
• Describes the format of a folder (instance, object) of the class.
/** ��� * Description of what the class is for��� */���public class <class-name> {
declarations of fields and methods (in any order) ���}
• The class and every method has a comment of the form /** specification */
• This is a Javadoc comment (Part of Lab next week). 1/28/13 Classes 7
This is a comment���It does nothing.���It is a note to yourself
![Page 8: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/8.jpg)
/** An instance is a worker in a certain organization. */���public class Worker {���
private String lname; // Last name (“” if none; never null) ��� private int ssn; // Social security #: in 0..999999999 ��� private Worker boss; // Immediate boss (null if none)
}
1/28/13 Classes 8
Declarations of fields
Invariants: Properties that are always true
@4e0a1
lname …
ssn
boss
…
…
Worker
Field: A Variable in each Folder of a Class
Note the private and public keywords.���They are important but we will explain them later.
![Page 9: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/9.jpg)
We Write Programs to Do Things
• Methods are the key doers
1/28/13 Classes 9
Method Definition Method Call • Defines what method does
public void setName(String n) { lname= n;
}
• Command to do the method
var.setName(“Bob”);
declaration of parameter n
argument to assign to n
• Parameter: variable that is declared within ��� the parentheses of a method header.
• Argument: a value to assign to the method ��� parameter when it is called
Method Header
Method Body
(inside {})
![Page 10: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/10.jpg)
Getter and Setter Methods /** Yields: worker’s last name*/ public String getName() {
return lname; }
/** Set worker’s last name to n * Cannot be null; can be “” */ public void setName(String n) {
lname= n; } /** Yields: last 4 SSN digits, as int * • Try writing it yourself. • Full code on website
Getter methods (functions) get or retrieve values from a folder.
Setter methods (procedures) set or change fields of a folder
1/28/13 Classes 10
@4e0a1
lname …
ssn
boss
…
…
Worker
getName()
setName(String n)
![Page 11: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/11.jpg)
Getter and Setter Methods /** Yields: worker’s last name*/ public String getName() {
return lname; }
/** Set worker’s last name to n * Cannot be null; can be “” */ public void setName(String n) {
lname= n; } /** Yields: last 4 SSN digits, as int * • Try writing it yourself. • Full code on website
Getter methods (functions) get or retrieve values from a folder.
Setter methods (procedures) set or change fields of a folder
1/28/13 Classes 11
@4e0a1
lname …
ssn
boss
…
…
Worker
getName()
setName(String n)
value of function
procedure; no value
![Page 12: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/12.jpg)
Why Getters and Setters?
• Fields have invariants:
• Allowing direct access to a field is bad.
w.lname = null; // Violates invariant! • Sometimes want a field to be read-only
§ Can use in expressions, but not assignments § How do we do this?
1/28/13 Classes 12
/** An instance is a worker in a certain organization. */���public class Worker {���
private String lname; // Last name (“” if none; never null) ��� private int ssn; // Social security #: in 0..999999999 ��� private Worker boss; // Immediate boss (null if none)
}
![Page 13: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/13.jpg)
Why Getters and Setters?
Setters
• Protect field invariants • Example: public void setName(String n) {
lname = n; if (n == null) { lname = “”; }
}
Getters
• Allow “read”, not “write” • Example: public int getName() {
return lname; }
w.getName() = null; // Illegal!
1/28/13 Classes 13
Invariant preserved
![Page 14: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/14.jpg)
How Methods Work!
• Example: var1.getX() § Gets object (folder) name ���
from the variable § Searches class (file drawer) ���
for object (folder) § Executes commands inside ���
the method on that object
• Methods apply to the object (folder), not the variable! § Execute var2.setX(8.2); § Makes var3.getX() == 8.2
1/28/13 Classes 14
@4e0a1 Point3d
@4e0a1 var1
@13fc8 var2 x 2.2
y
z
5.4
6.7
@13fc8 Point3d
x 3.5
y
z
-2.0
0.0
@13fc8 var3
Memorize This!
Write it down several times.
![Page 15: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/15.jpg)
Initializing the Fields of an Object (Folder)
• Creating a new Worker is now a multi-step process: § Worker w = new Worker(); § w.setName(“White”); § …
• We would like to be able to use something like Worker w = new Worker(“White”, 1, null); § Create a new Worker, sets the last name to “White”, ���
the SSN to 0000000001, and the boss to null. § Need a special kind of method: the constructor
1/28/13 Classes 15
lname is null violates invariant
![Page 16: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/16.jpg)
Initializing the Fields of an Object (Folder)
• Creating a new Worker is now a multi-step process: § Worker w = new Worker(); § w.setName(“White”); § …
• We would like to be able to use something like Worker w = new Worker(“White”, 1, null); § Create a new Worker, sets the last name to “White”, ���
the SSN to 0000000001, and the boss to null. § Need a special kind of method: the constructor
1/28/13 Classes 16
lname is null violates invariant Invariants must always be true. Always.
Purpose of the Constructor • Initialize the fields of a newly created object • Make sure that the invariants are true
Memorize This!
Write it down several times.
![Page 17: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/17.jpg)
Example Constructor /** ���* Constructor: an instance with last ���* name n (can’t be null, can be “”), ���* SSN s (an int in 0..999999999), and ���* boss b (null if none) ���*/ public Worker(String n, int s,
Worker b) { lname = n; ssn = s; boss = b; }
1/28/13 Classes 17
@4e0a1
lname …
ssn
boss
…
…
Worker
getName()
setName(String n)
Worker(String n, int s, Worker b)
name of constructor = name of class
no void or type!
![Page 18: Classes - cs.cornell.edu · Assignment Details! • This is a very simple assignment!! Just the basics of OO programming!! Show you know enough to start a “real” program!](https://reader033.fdocuments.us/reader033/viewer/2022050601/5fa8f0e94df2c750a473702c/html5/thumbnails/18.jpg)
How “new” Is Evaluated
Classes 18
@4e0a1
lname …
ssn
boss
…
…
Worker
getName()
setName(String n)
Worker(String n, int s, Worker b)
• Create a new object (folder) ���of class Worker § Initializes fields to default values § e.g. 0 for int, null for String
• Put the folder in file drawer • Execute the constructor call���
Worker(“White”, 1, null) § Executes commands in body § Primarily to initialize fields
• Gives the name of the object as the final value of this expression
1/28/13
new Worker(“White”, 1, null)