did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

We're the #1 textbook rental company. Let us show you why.

9780201633856

OBJECT-ORIENTED DESIGN HEURISTICS

by Unknown
  • ISBN13:

    9780201633856

  • ISBN10:

    020163385X

  • Format: Nonspecific Binding
  • Copyright: 1996-01-01
  • Publisher: ADD
  • View Upgraded Edition
  • Purchase Benefits
  • Free Shipping Icon Free Shipping On Orders Over $35!
    Your order must be $35 or more to qualify for free economy shipping. Bulk sales, PO's, Marketplace items, eBooks and apparel do not qualify for this offer.
  • eCampus.com Logo Get Rewarded for Ordering Your Textbooks! Enroll Now
List Price: $93.32 Save up to $0.47
  • Buy New
    $92.85
    Add to Cart Free Shipping Icon Free Shipping

    USUALLY SHIPS IN 2-3 BUSINESS DAYS

Supplemental Materials

What is included with this book?

Summary

020163385XB04062001

Table of Contents

Preface
Acknowledgments
The Motivation for Object-Oriented Programming
Revolutionists, Evolutionists, and the Object-Oriented Paradigm
Accidental Versus Essential Complexity á la Frederick Brooks
The Waterfall Model
The Iterative Model
Same- Versus Different-Language Prototyping
Software Reusability
Corporate Hierarchies of Good Designers
Classes and Objects: The Building Blocks of the Object-Oriented Paradigm
Introduction to Classes and Object
Messages and Methods
Class Coupling and Cohesion
Dynamic Semantics
Abstract Classes
Roles Versus Classes
Topologies of Action-Oriented Versus Object-Oriented Applications
Differences in Application Topologies
When the Action-Oriented Paradigm Goes Right
The God Class Problem (Behavioral Form)
Another Example of Poor System Intelligence Distribution
The God Class Problem (Data Form)
The Proliferation of Classes Problem
The Role of Agent Classes
Examining the Use of Separate Entity and Controller Classes
The Relationships Between Classes and Objects
Introduction to Class and Object Relationships
The Uses Relationship
Six Different Ways to Implement the Uses Relationship
Heuristics for the Uses Relationship
Refining the Amount of Collaboration Between Two Classes
The Containment Relationship
Semantic Constraints Between Classes
Attributes Versus Contained Classes
More Containment Heuristics
A Relationship Between Uses and Containment?
Containment by Value Versus
Containment by Reference
The Inheritance Relationship
Introduction to the Inheritance Relationship
Overriding Base Class Methods in Derived Classes
The Use of the Protected Section of a Base Class
The Width and Depth of Inheritance Hierarchies
Private, Protected, and Public Inheritance á la C++
A Real-World Example of Specialization
Heuristics That Trade Off Design Complexity and Flexibility
A Real-World Example of Generalization
The Mechanism of Polymorphism
A Problem with the Use of Inheritance as a Reusability Mechanism
An Inheritance Solution to an Interrupt-Driven Architecture
Inheritance Hierarchies Versus Attributes
The Confusion of the Need for Inheritance Versus an Object's Dynamic Semantics
Using Inheritance to Hide the Representation of a Class
Mistaking Objects for Derived Classes
Mistaking Object Generalization for the Need to Build Classes at Runtime
The Attempt to NOP a Base Class Method in Its DerivedClass(es)
The Implementation of Optional Parts of Objects
A Problem with No Optimal Solution
Reusing Components Versus Reusing Frameworks
Multiple Inheritance
Introduction to Multiple Inheritance
The Common Misuse of Multiple Inheritance
A Valid Use of Multiple Inheritance
Accidental Complexity In Languages That Do Not Support Multiple Inheritance
Frameworks That Incorporate Multiple Inheritance
The Use of Multiple Inheritance in the Design of Mixins
DAG Multiple Inheritance
Accidental DAG Multiple Inheritance via Poor Implementation of Optional Containment
The Association Relationship
Introdu
Table of Contents provided by Publisher. All Rights Reserved.

Supplemental Materials

What is included with this book?

The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.

The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.

Excerpts

In the process of teaching object-oriented analysis, design, and implementation to several thousand students, it became clear to me that the industry was in serious need of guidelines to help developers make proper decisions. Since 1987 I have scoured the literature in search of productivity and complexity metrics that can be applied at different levels of development to improve an object-oriented application. I added my own "homemade" guidelines to those found in the literature and came up with approximately 60 guidelines, several of which are tongue-in-cheek yet no less important than any others. I briefly considered calling them the "Sixty Golden Rules of OOA/D," but I recalled Dykstra's legendary "Goto Considered Harmful" paper, which branded users of goto statements heretics who should be burned at the stake in the company courtyard. That paper was important in that it provided an industry rule that stopped the users of goto statements who were destroying, wittingly or unwittingly, the maintainability of their systems. Unfortunately, the side effect of such a rule was the breeding of a group of pathological authors who, for the past 25 years, have published articles stating that the judicious use of a goto statement in some picky little piece of an application is more readable than a corresponding piece of structured code. Of course, these papers were followed up by a half-dozen rebuttal papers, which were themselves rebutted ad nauseam.In order to prevent the same pathology from occurring, I refer to these 60 guidelines as "heuristics," or rules of thumb. They are not hard and fast rules that must be followed under penalty of heresy. Instead, they should be thought of as a series of warning bells that will ring when violated. The warning should be examined, and if warranted, a change should be enacted to remove the violation of the heuristic. It is perfectly valid to state that the heuristic does not apply in a given example for one reason or another. In fact, in many cases, two heuristics will be at odds with one another in a particular area of an object-oriented design. The developer is required to decide which heuristic plays the more important role.This book does not invent yet another object-oriented analysis or design methodology, though the idea of creating "Riel's OOA/D Methodology" was tempting. The industry already has enough methodologies offering similar or overlapping advice, using a completely different vocabulary for common concepts. The typical problem of the object-oriented developer - which has not been seriously addressed - occurs once a design has been completed, regardless of the methodology used. The developer's main question is, "Now that I have my design, is it good, bad, or somewhere in between?" In asking an object-oriented guru, the developer is often told that a design is good when "it feels right." While this is of little use to the developer, there is a kernel of truth to such an answer. The guru runs through a subconscious list of heuristics, built up through his or her design experience, over the design. If the heuristics pass, then the design feels right, and if they do not pass, then the design does not feel right.This book attempts to capture that subconscious list of heuristics in a concrete list backed up by real-world examples. The reader will become immediately aware that some heuristics are much stronger than others. The strength of a heuristic comes from the ramifications of violating it. The reader does not get a prioritized ordering of the heuristics. It is my feeling that in many cases the sense of priority is defined by a combination of the application domain and the user's needs and cannot be quantified here. For example, a common area of design where two heuristics might request opposite directions are those that trade complexity with flexibility. Ask yourself which attribute a software designer desires most, increased flexibility or decreased complexity, and you be

Rewards Program