Summary of Class Presentation for September 9, 1999 Topics: Review and Evaluation of What We have Done Thus Far In the first two weeks of this course we have covered the topics of what makes a system object-oriented and two design methods for object- oriented systems. A system is object-oriented if the system consists of objects where each object has the following properties: 1. may contain private, static data; 2. may contain a set of operations that use the private data; 3. encapsulates the private data so that it cannot be used outside of this object; 4. provides an interface that consists of a set of messages accepted by this object (each message corresponds to one publically available operation implemented within the object); 5. communicates with other objects solely by sending them messages and receiving values as the result of those messages. A message differs from a function call in that the message specifies a receiver as well as the actual message. Further, most object-oriented systems have classes that provide a model or template for the data and operations to be available in the objects that are instances of each class. The class itself might have operations and data of its own as well. We will see later that there are three important features of object-orientation: dynamic polymorphism, upcasting, and downcasting that provide the power of the object-oriented approach. Classes have two roles: 1. serve as a template, framework, or model for a set of instances(objects ), The class provides a type for the objects; 2. provide data and operations that involve the entire set of objects as a whole (for example, keeping track of how many objects in this type exist at any time during execution, searching among the objects of the type for a particular one, moving an object of this type dynamically to another computer over a network). Objects have two roles: 1. provide an interface that specifies the services this object provides for other objects and classes; 2. implement the interface in an encapsulated way. The two object-oriented design methods presented were the Abbott noun method, and a data collections-centered method. The Abbott method is representative of those design methods that emphasize the intended behavior of the product. The data collections-centered method is representative of those design methods that emphasize the modeling aspect of object-orientation. The two methods actually follow approximately the same major steps: - Understand the problem: Abbott: read and understand the requirements DCC: determine inputs, outputs, and the relationships between them - Develop candidate set of classes: Abbott: nouns in the requirements description DCC: data collections and standalone scalar variables - Winnow the candidate set to form a smaller set of top-level classes: Abbott: heuristics DCC: wlakthrough scenarios (use cases) - Evaluate the architectural design: Abbott: cohesion, coupling, simplicity, clarity DCC: simplicity, clarity, cohesion, coupling.