270 likes | 357 Views
CSC 205 – Java Programming II. Lecture 1 Jan 9, 2002. Why OO ? The Big Picture. Software is inherently complex Complexity of the problem domain Difficulty of managing the development process Flexibility possible through software
E N D
CSC 205 – Java Programming II Lecture 1 Jan 9, 2002
Why OO? The Big Picture • Software is inherently complex • Complexity of the problem domain • Difficulty of managing the development process • Flexibility possible through software • Problems of characterizing the behavior of discrete systems
Examples of Complex Systems Mercer • A university … HR Academics Athletics … … CLA Engr. CSC … … Math People … … Student Employee … Graduate … UnderGrad Admin. Faculty
Attributes of Complex Systems • Hierarchy: a collection of interrelated subsystems. • Dividable until some lest level is reached • Arbitrary criterion for choosing subsystems • Cohesive and loosely coupled subsystems • One component is in charge of certain tasks • Intra-component communications are less frequent • Common patterns among subsystems • Evolved from existing simpler systems
Bring Order to Chaos • The role of decomposition The technique of mastering complexity has been known since ancient time: divide et impera (divide and rule) -- Dijkstra • OO v.s. procedural decomposition • procedural: top-down structure design with each component denote a major step in some overall process • OO: viewing the world as a set of autonomous agents that collaborate to perform some higher level behavior • Which is better?
Bring Order to Chaos – cont’d • The role of abstraction • An individual can comprehend only about seven (7) chunks of information at one time! • Ignore inessential details, deal with the generalized, idealized model of the object • The role of hierarchy • Object structure: illustrates how different objects collaborate with each other • Class structure: highlights common structure and behavior within a system
Elements of the Object Model • Abstraction: model the essential attributes • Encapsulation: hide implementation details • Modularity: (think package in Java) • Hierarchy: ranking/ordering of objects • Typing*: enforcement of the class • Concurrency*: distinguishes active object • Persistence*: transcends time and/or space
Abstraction • Idealized structure model of objects • Recognize similarities • Ignore differences (for the time being) • For a particular purpose • Provide crisply defined conceptual bounders • Distinguish an object from other kinds of objects
Abstraction (2) • Characterize the behavior of an object • by considering the services it provides to other objects (or its responsibilities) • (client-server) contract model • from the outside view • Works together with encapsulation • Expose what an object can do and how to request for services (which constitute the behavior of an object) • Hide implementation details
Responsibility • Responsibilities of an object include • State: information to store • Implemented with variables in Java • Operations: • Implemented with methods in Java • Preconditions: conditions assumed by operations • Postconditions: conditions satisfied by operations • Invoke operations by message passing
Message Passing • Three components that comprise a message: • The object to which the message is addressed (YourBicycle) • The name of the method to perform (changeGears) • Any parameters needed by the method (lowerGear)
Hierarchy • Hierarchy is a ranking or ordering of abstractions • Two most important hierarchies • The “part-of” relationship, or aggregation • The “is-a” relationship , or inheritance • Inheritance, also known as subclassing • Single inheritance: the only legal way in Java • Multiple inheritance: supported in C++
Subclassing in Java • A subclass SavingsAccount: • public class SavingsAccount extends Account { • private double interestRate; • public double getInterestRate() { • return interestRate; • } • public void setInterestRate(double rate) { • interestRate = rate; • } • }
The Base Class: Account public class Account { // Instance variables private double balance; // Constructors public Account(double initialBalance) { balance = initialBalance; } public Account() { balance = 0.0; } }
Writing a Subclass • A SavingsAccount object will contain two variables: • balance, and • interestRate
Writing a Subclass • Methods that can be applied to SavingsAccount objects: • getInterestRate • setInterestRate • deposit (inherited) • withdraw (inherited) • getBalance (inherited) • close (inherited)
Typing Supports Polymorphism Shape // Shape s = ShapeBuilder.getNextShape(); s.draw(); // +draw() Oval Rectangle +draw() +draw()