Take attendance, hand out syllabus and Java syntax.
Also interested in analyzing how well a program works - efficiency and correctness.
Introduce new ideas in programming language support for problem solving:
Programming language characteristics needed to support this:
Style very important. Readable software necessary for correctness, optimization, and maintainability.
Data and operations are tightly intertwined.
Idea of Abstract Data Types (ADT) - create your own data types with powerful operations.
All the user has to know is what is effect of operations, not how they are done.
E.g. - Data base is good example - representation hidden, but operations available to you.
Objects bundled with their operations (methods)
Ask object to perform
action (send message) - it responsible for knowing how.
Write post-its in Java
Use preconditions and postconditions to specify what actual procedures and functions do (as opposed to how they do it).
If create powerful types of objects with methods at beginning then actual program is easy. This is our goal.
Keep sketchy lecture notes on-line on web page and in CS136 folder of Cider Press.
An object consists of collection of features
Interfaces behave like the types of objects.
Provide
specification (type info) of methods (but not bodies).
Interface EmployeeSpec
GetName(): String
GetWkPay(): Integer
Class Employee
Implements EmployeeSpec
Instance variables
name: string
birthDate: date
Constructor
Employee(emp_name: string; emp_bday: date) // Constructor of objects
name <-- emp_name;
birthDate <-- emp_bday;
Methods
GetName(): string return name
getAge(): integer return (Today - birthDate)
getWkPay(): real return 0.0
If boss represents an object of class Employee, then can write:
boss.getName()to send message to boss to return his/her name.
Inheritance is used to define new classes from old ones (incremental modification) by defining subclasses of existing classes:
Class HourlyEmployee
Superclass Employee
Instance variables
hourlySalary: real
Constructor
HourlyEmployee(empName: string; empBDay: date; hrlyPay: real)
name <-- empName;
birthDate <-- empBDay;
hourlySalary <-- hrlyPay;
Methods
setHourlyPay(newSalary : real) hourlySalary <-- newSalary
getWkPay: real return (hourlySalary * 40)
{Note have over-ridden old getWkPay, but getName & getAge as
above}
Class ExemptEmployee
Superclass Employee
Instance variables
yearlySalary: real
Constructor
ExemptEmployee(empName: string; empBDay: date; yrlyPay: real)
name <-- empName;
birthDate <-- empBDay;
yearlySalary<-- yrlyPay;
Methods
setAnnualPay(salary : real) yearlySalary <-- new_salary
getWkPay(): real return (yearlySalary / 52)
Objects in subclass treated as though elements of class as well! If subclass does not provide method to respond to message, then use appropriate one from superclass (or its superclass, etc.)
In particular, subclasses also implement any interface declared for superclass.
Note that same method name can exist in different classes - form of polymorphism.
An hourly employee will respond differently from an exempt employee when getWkPay message is sent.
When want to add a new kind of employee, simply add a new subclass of Employee and only provide routines which differ from those of Employee.