Вы находитесь на странице: 1из 87

| Herrera, Solejaena D.

| Luong Hue Thi Minh (Laura) |

Objectives
Become familiar with coupling, cohesion, and

connascence. Be able to specify, restructure, and optimize object designs. Be able to identify the reuse of predefined classes, libraries, frameworks, and components. Be able to specify constraints and contracts. Be able to create a method specification.

Introduction
Class and Method Design is where all of the work actually
gets during the design phase. Detailed design is still very important for two reasons:

Even preexisting classes and components needs to be understood, organized and pieced together. It is still common for the project team to have to write some code and produce original classes that support the application logic of a system

In an object-oriented system, changes can take place at


different levels of abstraction. These levels include Variable, Method, Class/Object, Cluster, Library and/or Application/System Levels. (See Figure 10-1)
3

Introduction (cont.)
Figure 10-1 Levels of Abstraction in Object-Oriented Systems

Classes, Objects, Methods and Messages


Objects are instances of classes that we use as templates to
define objects.

A class defines both the data and processes that each object
contains. Each object has attributes that describe data about the object.

Objects have state, which is defined by the value of its attributes


and its relationships with other objects at a particular point in time.

And, each object has methods, which specify what processes the
object can perform.

In order to get an object to perform a method (e.g., to delete


itself), a message is sent to the object. A message is essentially a function or procedure call from one object to another object.
6

Encapsulation and Information Hiding


Encapsulation is the mechanism that combines the
processes and data into a single object. Information hiding suggests only the information required to use an object be available outside the object.

Polymorphism and Dynamic Binding


Polymorphism means having the ability to take several forms.

By supporting polymorphism, object-oriented systems can send the same message to a set of objects, which can be interpreted differently by different classes of objects. And, based on encapsulation and information hiding, an object does not have to be concerned with how something is done when using other objects.

Dynamic binding refers to the ability of object-oriented systems


to defer the data typing of objects to run time.

For example, imagine that you have an array of type employee that contains instances of hourly employees and salaried employees. Both of these types of employees implement a compute pay method. An object can send the message to each instance contained in the array to compute the pay for that individual instance.
8

Polymorphism and Dynamic Binding (cont.)


But polymorphism can be a double-edged sword. Through
the use of dynamic binding, there is no way to know before run time which specific object will be asked to execute its method. Finally, if the methods are not semantically consistent, the developer cannot assume that all methods with the same name will perform the same generic operation. The key to controlling the difficulty of understanding objectoriented systems when using polymorphism is to ensure that all methods with the same name implement that same generic operation (i.e., they are semantically consistent).
9

Inheritance
Inheritance allows developers to define classes
incrementally by reusing classes defined previously as the basis for new classes. There have been many different types of inheritance mechanisms associated with OO systems. The most common inheritance mechanisms include different forms of single and multiple inheritance.

Single inheritance allows a subclass to have only a single parent class. With multiple inheritance, a subclass may inherit from more than one superclass.

10

Single inheritance
Currently, all object-oriented methodologies, databases, and
programming languages permit extending the definition of the superclass through single inheritance. Some object-oriented methodologies, databases, and programming languages allow a subclass to redefine some or all of the attributes and/or methods of its superclass. With redefinition capabilities, it is possible to introduce an inheritance conflict (i.e., an attribute [or method] of a subclass with the same name as an attribute [or method] of a superclass).

11

Single inheritance (cont.)


For example in Figure 10-2, Doctor is a subclass of Employee. Both have methods named computePay(). This causes an inheritance conflict. Furthermore, when the definition of a superclass is modified, all of its subclasses are affected. This may introduce additional inheritance conflicts in one (or more) of the superclasss subclasses. For example in Figure 10-2, Employee could be modified to include an additional method, updateSchedule(). This would add another inheritance conflict between Employee and Doctor. Therefore, developers must be aware of the effects of the modification not only in the superclass, but also in each subclass that inherits the modification.
12

Figure 10-2 Single Inheritance Conflicts

Single inheritance (cont.)


Through redefinition capabilities, it is possible for a
programmer to arbitrarily cancel the inheritance of methods by placing stubs in the subclass that will override the definition of the inherited method. If the cancellation of methods is necessary for the correct definition of the subclass, then it is likely that the subclass has been misclassified.

13

Single inheritance (cont.)

Rumbaughs Rules
1. Query operations should not be redefined 2. Methods that redefine inherited ones should only
restrict the semantics of the inherited ones 3. The underlying semantics of the inherited method should never be changed 4. The signature (argument list) of the inherited method should never be changed

14

Multiple inheritance
The types of inheritance conflicts are multiplied. In addition
to the possibility of having an inheritance conflict between the subclass and one (or more) of its superclasses, it is now possible to have conflicts between two (or more) superclasses. In this latter case, there are three different types of additional inheritance conflicts that can occur:
1. 2. 3. Two inherited attributes (or methods) have the same name and semantics. Two inherited attributes (or methods) have different names but with identical semantics (i.e., they are synonyms). Two inherited attributes (or methods) have the same name but with different semantics (i.e., they are homonyms). This also violates the proper use of polymorphism.
15

Multiple inheritance (cont.)


In Figure 10-3, Robot-Employee is a subclass of both Employee and Robot. In this case, Employee and Robot conflict with the attribute. It is also possible that Employee and Robot could have a semantic conflict on the classification and type attributes if they are synonyms. Practically speaking, the only way to prevent this situation is for the developer to catch it during the design of the subclass. Finally, what if the runningTime attributes are homonyms? In the case Employee objects, the runningTime attribute stores the employees time running a mile, while the runningTime attribute for Robot objects store the average time between checkups. It really depends on whether the robot employees can run the mile or not. With the potential for these additional types of conflicts, there is a risk of decreasing the understandability in an objectoriented system, instead of increasing it, through the use of multiple inheritance. As such, great care should be taken when using multiple 16 inheritance.

Figure 10-3 Additional Inheritance Conflicts with Multiple Inheritance

17

Coupling
Coupling refers to how interdependent or interrelated the
modules (classes, objects, and methods) are in a system. The higher the interdependency, the more likely changes in part of a design can cause changes to be required in other parts of the design. For object-oriented systems, Coad and Yourdon10 identified two types of coupling to consider: interaction and inheritance.

18

Coupling (cont.)
Interaction coupling deals with the coupling among
methods and objects through message passing. Lieberherr and Holland put forth the Law of Demeter as a guideline to minimize this type of coupling.

Essentially, the law minimizes the number of objects that can receive messages from a given object. The law states that an object should only send messages to one of the following: itself, an object that is contained in an attribute of the object, an object that is passed as a parameter to the method, an object that is created by the method, or an object that is stored in a global variable.

There are six types of interaction coupling, each falling on


different parts of a good-to bad continuum. They range from no direct coupling (Good) up to content coupling (Bad).
19

Coupling (cont.)
Figure 10-4 presents the different types of interaction coupling. In general, interaction coupling should be minimized. The one possible exception is that nonproblem domain classes must be coupled to their corresponding problem domain classes.

20

Coupling (cont.)
Inheritance coupling, as its name implies, deals with how tightly
coupled the classes are in an inheritance hierarchy.

As Snyder has pointed out, most problems with inheritance is the


ability within the object-oriented programming languages to violate the encapsulation and information hiding principles.

From a design perspective, the developer will need to optimize the


trade-offs of violating the encapsulation and information hiding principles and increasing the desirable coupling between subclasses and its superclasses.

The best way to solve this conundrum is to ensure that inheritance


is used only to support generalization/specialization (A-Kind-Of) semantics and the principle of substitutability (see Chapter 7).
21

Cohesion
Cohesion refers to how single-minded a module (class,
object, or method) is within a system. A class or object should only represent one thing, and a method should only solve a single task. Three general types of cohesion: method, class, and generalization/specialization, have been identified by Coad and Yourdon for object-oriented systems.

22

Cohesion (cont.)
Method cohesion addresses the cohesion within an
individual method (i.e., how single minded is a method). Methods should do one and only one thing. A method that actually performs multiple functions is more difficult to understand than one that only performs a single function. There are seven types of method cohesion that have been identified (see Figure 10-5). They range from functional cohesion (Good) down to coincidental cohesion (Bad). In general, method cohesion should be maximized.

23

Cohesion (cont.)
Figure 10-5 Types of Method Cohesion

24

Cohesion (cont.)
Class cohesion is the level of cohesion among the attributes
and methods of a class (i.e., how single-minded is a class). A class should only represent one thing, such as an employee, a department, or an order. All attributes and methods contained in a class should be required for the class to represent the thing. Glenford Meyers suggested that a cohesive class should:

Contain multiple methods that are visible outside of the class and that each visible method only performs a single function (i.e., it has functional cohesion), have methods that only refer to attributes or other methods defined with the class or its superclass(es), and not have any control-flow couplings between its methods.
25

Cohesion (cont.)
Page-Jones has identified three less than desirable types of
class cohesion: mixed instance, mixed-domain, and mixedrole (see Figure 10-6). Generalization/specialization cohesion addresses the sensibility of the inheritance hierarchy.

26

Cohesion (cont.)
Figure 10-6 Types of Class Cohesion

27

Connascence
Connascence generalizes the ideas of cohesion and coupling,
and it combines them with the arguments for encapsulation. To accomplish this, three levels of encapsulation have been identified. Level-0 encapsulation refers to the amount of encapsulation realized in an individual line of code, Level-1 encapsulation is the level of encapsulation attained by combining lines of code into a method, and Level-2 encapsulation is achieved by creating classes that contain both methods and attributes.

28

Connascence (cont.)
Connascence literally means to be born together. From an object-oriented design perspective, it really means
that two modules (classes or methods) are so intertwined, that if you make a change in one, it is likely that a change in the other will be required. However, when you combine it with the encapsulation levels, it is not quite as simple as that. In this case, you want to
1. 2. 3.

Minimize overall connascence by eliminating any unnecessary connascence throughout the system, Minimize connascence across any encapsulation boundaries, such as method boundaries and class boundaries, and Maximize connascence within any encapsulation boundary.
29

Connascence (cont.)
Figure 10-7 Types of Connascence

30

31

Additional Specification
At this point in the development of the system, it is crucial to
review the current set of structural and behavioral models. First, we should ensure that the classes on the problem domain layer are both necessary and sufficient to solve the underlying problem. Second, we need to finalize the visibility (hidden or visible) of the attributes and methods in each class. Third, we need to decide on the signature of every method in every class. The signature of a method comprises three parts: the name of the method, the parameters or arguments that must be passed to the method, and the type of value that the method will return to the calling method.
32

Additional Specification (cont.)


Fourth, we need to define any constraints that must be
preserved by the objects (e.g., an attribute of an object that can only have values in a certain range). There are three different types of constraints: preconditions, post-conditions, and invariants. Violations of a constraint are known as exceptions in languages, such as C++ and Java. The additional specification activities also are applicable to the other layers: data management Identifying Opportunities for Reuse section (Chapter 11), human computer interaction (Chapter 12), and physical architecture
(Chapter 13).
33

Identifying Opportunities for Reuse


In the design phase, in addition to using analysis patterns, there
are opportunities for using design patterns, frameworks, libraries, and components. Like analysis patterns, design patterns are simply useful grouping of collaborating classes that provide a solution to a commonly occurring problem. A framework is composed of a set of implemented classes that can be can be used as a basis for implementing an application. A class library is similar to a framework in that you typically have a set of implemented classes that were designed for reuse. A component is a self-contained, encapsulated piece of software that can be plugged into a system to provide a specific set of required functionality.
34

Identifying Opportunities for Reuse (cont.)

Figure 10-8 Sample Design Pattern


35

Restructuring the Design


Factoring (Chapter 9), is the process of separating out aspects
of a method or class into a new method or class to simplify the overall design. Another process that is useful to restructure the evolving design is normalization. Normalization is described in Chapter 11 in relation to relational databases. Normalization, identifies classes missing from the design. Finally, all inheritance relationships should be challenged to ensure that they only support a generalization/specialization semantics and the principle of substitutability.

36

Optimizing the Design


The first optimization to consider is to review the access paths
between objects. In some cases, a message from one object to another may have a long path to traverse. The second optimization is to review each attribute of each class. Which methods use the attributes and which objects use the methods should be determined. A third optimization is to review the direct and indirect fan-out of each method. Fan-out refers to the number of messages sent by a method. A fourth optimization is to look at the execution order of the statements in often used methods. Fifth optimization is to avoid re-computation by creating a derived attribute (or active value) (e.g., a total that will store the value of the computation). This is also known as caching computational results.
37

Mapping Problem Domain Classes to Implementation Languages


Implementing Problem Domain Classes in a Single-Inheritance
Language The easiest way to do this is to use the following rule:
methods of additional superclass(es)

Rule 1a: Convert relationships to association relationships Rule 1b: Flatten inheritance hierarchy by copying attributes and

Implementing Problem Domain Objects in a Object-Based

Language Factor out all uses of inheritance from the problem domain class design Implementing Problem Domain Objects in a Traditional Language Stay away from this! But if necessary, factor out all uses of Polymorphism, Dynamic binding, Encapsulation and Information hiding.
38

Figure 10-9 Factoring Out Multiple Inheritance Effect for a Single-Inheritance Language
39

Figure 10-10 Factoring Out Multiple Inheritance Effect for an Object-Based Language
40

41

Constraints and Contracts


Contracts were introduced in Chapter 7 in association with
collaborations. If you recall, a contract formalizes the interactions between the client and server objects, where a client (consumer) object is an instance of a class that sends a message to a server (supplier) object that executes one of its methods in response to the request. Contracts are modeled on the legal notion of a contract where both parties, client and server objects, have obligations and rights. Practically speaking, a contract is a set of constraints and guarantees. If the constraints are met, then the server object will guarantee certain behavior. Constraints can be written in either a natural language or a formal language.
42

Types of Constraints
There are three different types of constraints typically
captured in object-oriented design: Pre-conditions: A pre-condition is a constraint that must be met for a method to execute. For example, the parameters passed to a method must be valid for the method to execute. Otherwise, an exception should be raised. Post-conditions: is a constraint that must be met after the method executes, or the effect of the method execution must be undone. For example, the method can not make any of the attributes of the object take on an invalid value. In this case, an exception should be raised, and the effect of the methods execution should be undone.
43

Types of Constraints (cont.)


Invariants: invariants model constraints that must always be
true for all instances of a class. Examples of invariants include domains or types of attributes, multiplicity of attributes, and the valid values of attributes. This includes the attributes that model association and aggregation relationships. For example, if an association relationship is required, an invariant should be created that will enforce it to have a valid value for the instance to exist. Invariants are normally attached to the class. As such, we can attach invariants to the CRCcards or class diagram by adding a set of assertions to them.

44

Types of Constraints (cont.)


In Figure 10-11, the back of the CRC card constrains the
attributes of an Order to specic types. For example, Order Number must be an unsigned long, and Customer must be an instance of the Customer class. Furthermore, additional invariants were added to four of the attributes. For example, Cust ID must not only be an unsigned long, but it also must have one and only one value (i.e., a multiplicity of (1..1)), and it must have the same value as the result of the GetCustID() message sent to the instance of Customer stored in the Customer attribute. Also shown is the constraint for an instance to exist, an instance of the Customer class, an instance of the State class, and at least one instance of the Product class must be associated with the Order object
45

Types of Constraints (cont.)

Figure 10-11: Invariants an a CRC Card


46

Elements of a Contract
Figure 10-12 portrays the same set of constraints on a class
diagram. However, if all invariants are placed on a class diagram, the diagram will become very difcult to understand. Contracts document the message passing that takes place between objects. Technically speaking, a contract should be created for each message sent and received by each object; one for each interaction. However, there would be quite a bit of duplication if this were diagram done. In practice, a contract is created for each method that can receive messages from other objects (i.e., one for each visible method).

47

Elements of a Contract (cont.)


Figure 10-12: Invariants on a class diagram

48

Elements of a Contract (cont.)


A contract should contain the information necessary for a
programmer to understand what a method is to do. This information includes the method name, class name, ID number, client objects, associated use cases, description, arguments received, type of data returned, and the pre- and post-conditions. Contracts do not have a detailed algorithmic description of how the method is to work (i.e., they are not procedural in nature). Detailed algorithmic descriptions typically are documented in a method specication (this is described later in this chapter). In other words, a contract is composed of the information required for the developer of a client object to know what messages can be sent to the server objects and what the client can expect in return.
49

Elements of a Contract (cont.)


Figure 10-13 shows a sample format for a contract. Since
each contract is associated with a specic method and a specic class, the contract must document them. The ID number of the contract is used to provide a unique identier for every contract. The Clients (Consumers) element of a contract is a list of classes and methods that send a message to this specic method. This list is determined by reviewing the sequence diagrams associated with the server class. The Associated Use Cases element is a list of Use Cases in which this method is used to realize the implementation of the use case. The use cases listed here can be found by reviewing the server classs CRC card and the associated sequence diagrams.
50

Elements of a Contract (cont.)

Figure 10-13: Sample Contract Format

51

52

Method Specification
Methods on the CRC cards, class diagram, and contracts are
described using method specications. Method specications are written documents that include explicit instructions on how to write the code to implement the method. Typically, project team members write a specication for each method and then pass them along to programmers, who write the code during the Implementation phase of the project. Specications need to be very clear and easy to understand, or programmers will be slowed down trying to decipher vague or incomplete instructions.

53

Method Specification (cont.)


Typical method specication forms contain four components
that convey the information that programmers will need to write the appropriate code: General information events Message passing Algorithm specication.

54

General Information
The top of the form in Figure 10-14 contains general
information, such as the name of the method, name of the class in which this implementation of the method will reside, ID number, Contract ID that identies the contract associated with this method implementation, programmer assigned, the date due, and the target programming language. This information is used to help manage the programming effort.

55

General Information (cont.)

Figure 10-14: Method specification form

56

Events
The second section of the form is used to list the events that
trigger the method. An event is a thing that happens or takes place. Clicking the mouse generates a mouse event, pressing a key generates a keystroke eventin fact, almost everything the user does generates an event to occur. In the past, programmers used procedural programming languages (e.g., COBOL, C) that contained instructions that were implemented in a predened order, as determined by the computer system, and users were not allowed to deviate from the order.

57

Events (cont.)
Many programs today are event-driven (e.g., programs
written in languages such as Visual Basic, Smalltalk, C++, or Java), and event-driven programs include methods that are executed in response to an event initiated by the user, system, or another method. After initialization, the system waits for an event to occur. When it does, a method is red which carries out the appropriate task, and then the system waits once again.

58

Events (cont.)
We have found that many programmers still use method
specications when programming in event-driven languages, and they include the event section on the form to capture when the method will be invoked. Other programmers have switched to other design tools that capture event-driven programming instructions, such as the behavioral state machine described in Chapter 8.

59

Message Passing
The next set of sections of the method specication
describes the message passing to and from the method, which are identied on the sequence and collaboration diagrams. Programmers will need to understand what arguments are being passed into, from, and returned by the method since the arguments ultimately will translate into attributes and data structures within the actual.

60

Algorithm Specification
Figure 10-15 shows some examples of commonly used
Structured English statements. Action statements are simple statements that perform some action. An If statement controls actions that are performed under different conditions, and a For statement (or a While statement) performs some actions until some condition is reached. Finally, a Case statement is an advanced form of an If statement that has several mutually exclusive branches.

61

Algorithm Specification (cont.)

Figure 10-15: Structured English

62

Algorithm Specification (cont.)


Pseudocode is a language that contains logical structures
including sequential statements, conditional statements, and iteration. It differs from Structured English in that pseudocode contains details that are programming-specic, like initialization instructions or linking, and it also is more extensive so that a programmer can write the module by mirroring the pseudocode instructions. In general, pseudocode is much more like real code, and its audience is the programmer as opposed to the analyst. Its format is not as important as the information it conveys.

63

Algorithm Specification (cont.)


Figure 10-16 shows a short example of pseudocode for a
module that is responsible for getting CD information.

Figure 10-11: Pseudocode

64

Algorithm Specification (cont.)


The last section of the method specication provides space
for other information that needs to be communicated to the programmer, such as calculations, special business rules, calls to subroutines or libraries, and other relevant issues. This also can point out changes or improvements that will be made to any of the other design documentation based on problems that the analyst detected during the specication process.

65

66

Applying the Concepts at CD Selections


Figure 10-17 shows the updated version of the class diagram.
As you can see, Brian included both the lower and upper values of the multiplicity of the associations. He did this to remove any ambiguity about the associations. Even though there is a one-to-one relationship between the CD class and the Mkt Info class, Brian considered merging them into a single class. However, he decided that they were sufciently different to keep them separate. He reasoned this by assuming that not all customers would want to see all of the Mkt Info associated with every CD.

67

Applying the Concepts at CD Selections


(cont.)

Figure 10-17 Revised CD Selections Internet Sales System Class


68

Applying the Concepts at CD Selections


(cont.)

Upon reviewing the new revised class diagram, Alec assigned


different members of his team to the different packages identied. Because Brian had already spent quite a bit of time on the classes in the CD package, Alec assigned it to him. The classes in the CD package were CD, Vendor, Mkt Info, Review, Artist Info, and Sample Clip. Next, Brian added invariants, pre-conditions, and post-conditions to the classes and their methods. For example, Figure 10-18 portrays the back of the CRC card for the CD class. to add only the invariant information to the CRC cards and not the class diagram to keep the class diagram as simple and as easy to understand as possible. Notice the additional set of multiplicity, domain, and referential integrity invariants added to the attributes and relationships.
69

Applying the Concepts at CD Selections


(cont.)

Figure 10-18: Back of CD CRC Card

70

Applying the Concepts at CD Selections


(cont.)

Figure 10-19 portrays the contract for the GetReview()


method associated with the Mkt Info class. Notice that there is a pre-condition for this method to succeedReview attribute not Null. Upon completing the CRC cards and contracts

71

Applying the Concepts at CD Selections


(cont.)

Figure 10-19: Get Review Method Contract

72

Applying the Concepts at CD Selections


(cont.)

The method specication for the GetReview() method is


given in Figure 10-20. Brian developed this specication by reviewing the Places Order use case (see Figure 6-15), the sequence diagram (see Figure 8-5), and the contract (see Figure 10-19). Notice that Brian is enforcing the precondition on the contract by testing to see whether the Review attribute that contains the list of reviews contains a value or not. Since the method is to be implemented in Java, he has specied that an exception is to be thrown if there are no reviews.

73

Applying the Concepts at CD Selections


(cont.)

Figure 10-19: Create review method specification

74

75

Summary
Revisiting the Basic Characteristics of Object-Oriented
Systems Use graphs for

Design Criteria Object Design Activities Constraints and Contracts

Method Specification

76

Revisiting the Basic Characteristics of Object-Oriented Systems :


A class is a template on which objects can be instantiated. An
object is a person, place, or thing about which we want to capture information. Each object has attributes and methods. The methods are executed by objects sending messages that trigger them. Encapsulation and information hiding allows an object to conceal its inner processes and data from the other objects.

77

Revisiting the Basic Characteristics of Object-Oriented Systems (cont.)


Polymorphism and dynamic binding allows a message to be
interpreted differently by different kinds of objects. However, if polymorphism is not used in a semantically consistent manner, polymorphism can make an object design incomprehensible. Classes can be arranged in a hierarchical fashion in which subclasses inherit attributes and methods from superclasses to reduce the redundancy in development. However, through redefinition capabilities or multiple inheritance, inheritance conflicts can be introduced into the design.

78

Design Criteria
Coupling, cohesion, and connascence have been put forth as
a set of criteria by which a design of an object-oriented system can be evaluated. Two types of coupling, interaction and inheritance, and three types of cohesion, method, class, and generalization/ specialization, were described. Interaction coupling deals with the communication that takes place among the objects, and inheritance coupling deals with the innate dependencies in the use of inheritance in object-oriented systems. Method cohesion addresses how single minded a method is. The fewer things a method does, the more cohesive it is. Class cohesion does the same for classes.
79

Design Criteria (cont.)


A class should be a representation of one and only one thing.
Generalization/specialization cohesion deals with is the quality of an inheritance hierarchy. Good inheritance hierarchies only support generalization and specialization (AKind-Of) semantics and the principle of substitutability. Connascence generalizes coupling and cohesion and then combines them with the different levels of encapsulation. The general rule of thumb is to maximize the cohesion (connascence) within an encapsulation boundary and minimize the coupling (connascence) between the encapsulation boundaries.

80

Object Design Activities


There are ve basic object design activities: First, additional specication is possible by carefully
reviewing the models, deciding on the proper visibility of the attributes and methods, setting the signature for each method, and identifying any constraints associated with the classes or the classes methods. Second, look for opportunities for reuse by reviewing the model and looking at possible patterns, class libraries, frameworks, and components that could be used to enhance the system.

81

Object Design Activities (cont.)


Third, restructure the model through the use of factoring and
normalization. Be sure to take the programming language into consideration. It may be necessary to map the current design into the restricted capabilities of the language (e.g., the language only supports single inheritance). Also, be certain that the inheritance in your model only supports generalization/specialization (A-Kind-Of) semantics and the principle of substitutability.. Fourth, optimize the design. However, be careful in the process of optimizing the design. Optimizations typically decrease the understandability of the model.

82

Object Design Activities (cont.)


Fourth, optimize the design. However, be careful in the
process of optimizing the design. Optimizations typically decrease the understandability of the model. Fifth, map the problem domain classes to an implementation language.

83

Constraints and Contracts


There are three types of constraints associated with objectoriented design: invariants, preconditions, and postconditions. Invariants capture constraints that must always be true for all instances of a class (e.g., domains and values of attributes or multiplicity of relationships). Typically, invariants are attached to class diagrams and CRC cards.However, for clarity purposes, we suggest only placing them on the CRC cards. Contracts formalize the interaction between objects (i.e., the message passing).As such, they include the pre- and postconditions that must be enforced for a method to execute properly. Contracts provide an approach to model the rights and obligations when client and server objects interact.
84

Method Specification
A method specication is a written document that provides
clear and explicit instructions on how a method is to behave. Without clear and unambiguous method specifications, critical design decisions will have to be made by programmers instead of by designers. Even though there is no standard format for a method specication, typically four types of information are captured. First, there is general information such as the name of the method, name of the class, Contract ID, programmer assigned, the date due, and the target programming language.

85

Method Specification (cont.)


Second, due to the rise in popularity of GUI-based and eventdriven systems, events also are captured. Third, the information that deals with the signature of the method, data received, data passed on to other methods, and data returned by the method is recorded. Finally, an unambiguous specification of the algorithm is given. The algorithm typically is modeled using Structured English, pseudocode, an activity diagram, or a formal language.

86

Salamat po! Cm n!

87

Вам также может понравиться