Software Design Principles and Guidelines – Important Design Concepts – Useful Design Principles Douglas C

Total Page:16

File Type:pdf, Size:1020Kb

Software Design Principles and Guidelines – Important Design Concepts – Useful Design Principles Douglas C UCLA Extension Course OO Programming with C++ Design Principles and Guidelines Overview UCLA Extension Course Design Principles Software Design Principles and Guidelines – Important design concepts – Useful design principles Douglas C. Schmidt Development Methodologies Department of Electrical Engineering and Computer Science Vanderbilt University – Traditional approaches [email protected] – Extreme programming Design Guidelines http://www.cs.wustl.edu/ schmidt/ – Motivation – Common Design Mistakes – Design Rules Copyright c 1997-2003 Vanderbilt University 1 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO Programming with C++ Motivation: Goals of the Design Phase Motivation: Goals of the Design Phase (cont’d) Decompose System into Modules Specify Module Interfaces – i.e., identify the software architecture – Modules are abstractions that should: – Interfaces should be well-defined be independent, facilitate independent module testing have well-specified interfaces, and improve group communication have high cohesion and low coupling. Describe Module Functionality Determine Relations Between Modules – Informally – Identify module dependencies e.g., comments or documentation – Determine the form of intermodule communication, e.g., – Formally global variables e.g., via module interface specification languages parameterized function calls shared memory RPC or message passing Copyright c 1997-2003 Vanderbilt University 2 Copyright c 1997-2003 Vanderbilt University 3 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO Programming with C++ Primary Design Phases Key Design Concepts and Principles Preliminary Design Important design concepts and design principles include: – External design describes the real-world model – Decomposition – Architectural design decomposes the requirement specification – Abstraction into software subsystems – Information Hiding – Modularity Detailed Design – Hierarchy – Formally specify each subsystem – Separating Policy and Mechanism – Further decomposed subsystems, if necessary Main purpose of these concepts and principles is to manage software Note: in design phases the orientation moves system complexity and improve software quality factors. – from customer to developer – from what to how Copyright c 1997-2003 Vanderbilt University 4 Copyright c 1997-2003 Vanderbilt University 5 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO Programming with C++ Decomposition Decomposition (cont’d) Decomposition is a concept common to all life-cycle and design Some guiding decomposition principles techniques. – Because design decisions transcend execution time, modules Basic concept is very simple: might not correspond to execution steps . – Decompose so as to limit the effect of any one design decision on 1. Select a piece of the problem (initially, the whole problem) the rest of the system 2. Determine its components using the mechanism of choice, e.g., – Remember, anything that permeates the system will be expensive functional vs data structured vs object-oriented to change 3. Show how the components interact – Modules should be specified by all information needed to use the 4. Repeat steps 1 through 3 until some termination criteria is met module and nothing more (e.g., customer is satisfied, run out of money, etc.;-)) Copyright c 1997-2003 Vanderbilt University 6 Copyright c 1997-2003 Vanderbilt University 7 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO Programming with C++ Abstraction Abstraction (cont’d) Abstraction provides a way to manage complexity by emphasizing Three basic abstraction mechanisms essential characteristics and suppressing implementation details. – Procedural abstraction Allows postponement of certain design decisions that occur at e.g., closed subroutines various levels of analysis, e.g., – Data abstraction e.g.,ADTs – Representational/Algorithmic considerations – Control abstraction – Architectural/Structural considerations iterators, loops, multitasking, etc. – External/Functional considerations Copyright c 1997-2003 Vanderbilt University 8 Copyright c 1997-2003 Vanderbilt University 9 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO Programming with C++ Information Hiding Information Hiding (cont’d) Motivation: details of design decisions that are subject to change Information to be hidden includes: should be hidden behind abstract interfaces, i.e., modules. – Data representations – Information hiding is one means to enhance abstraction. i.e., using abstract data types – Algorithms e.g., sorting or searching techniques Modules should communicate only through well-defined interfaces. – Input and Output Formats Each module is specified by as little information as possible. Machine dependencies, e.g., byte-ordering, character codes – Policy/mechanism distinctions If internal details change, client modules should be minimally affected i.e., when vs how (may require recompilation and relinking, however . .) e.g., OS scheduling, garbage collection, process migration – Lower-level module interfaces e.g., Ordering of low-level operations, i.e., process sequence Copyright c 1997-2003 Vanderbilt University 10 Copyright c 1997-2003 Vanderbilt University 11 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO Programming with C++ Modularity Modularity (cont’d) A Modular System is a system structured into highly independent Modularity facilitates certain software quality factors, e.g.: abstractions called modules. – Extensibility - well-defined, abstract interfaces Modularity is important for both design and implementation phases. – Reusability - low-coupling, high-cohesion – Compatibility - design “bridging” interfaces Module prescriptions: – Portability - hide machine dependencies – Modules should possess well-specified abstract interfaces. Modularity is an important characteristic of good designs because it: – Modules should have high cohesion and low coupling. – allows for separation of concerns – enables developers to reduce overall system complexity via decentralized software architectures – enhances scalability by supporting independent and concurrent development by multiple personnel Copyright c 1997-2003 Vanderbilt University 12 Copyright c 1997-2003 Vanderbilt University 13 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO Programming with C++ Modularity (cont’d) Modularity (cont’d) A module is A module interface consists of several sections: – A software entity encapsulating the representation of an – Imports abstraction, e.g.,anADT Services requested from other modules – A vehicle for hiding at least one design decision – Exports – A “work” assignment for a programmer or group of programmers Services provided to other modules – a unit of code that – Access Control has one or more names not all clients are equal! (e.g., C++’s distinction between has identifiable boundaries protected/private/public) can be (re-)used by other modules – Heuristics for determining interface specification encapsulates data define one specification that allows multiple implementations hides unnecessary details anticipate change can be separately compiled (if supported) e.g., use structures and classes for parameters Copyright c 1997-2003 Vanderbilt University 14 Copyright c 1997-2003 Vanderbilt University 15 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO Programming with C++ Modularity Dimensions Principles for Ensuring Modular Designs Modularity has several dimensions and encompasses specification, design, and implementation levels: Language Support for Modular Units – Criteria for evaluating design methods with respect to modularity – Modules must correspond to syntactic units in the language used. Modular Decomposability Few Interfaces Modular Composability Modular Understandability – Every module should communicate with as few others as possible. Modular Continuity Small Interfaces (Weak Coupling) Modular Protection – Principles for ensuring modular designs: – If any two modules communicate at all, they should exchange as Language Support for Modular Units little information as possible. Few Interfaces Small Interfaces (Weak Coupling) Explicit Interfaces Information Hiding Copyright c 1997-2003 Vanderbilt University 16 Copyright c 1997-2003 Vanderbilt University 17 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO Programming with C++ Principles for Ensuring Modular Designs (cont’d) The Open/Closed Principle Explicit Interfaces A satisfactory module decomposition technique should yield modules that are both open and closed: – Whenever two modules A and B communicate, this must be obvious from the text of A or B or both. – Open Module: is one still available for extension. This is necessary because the requirements and specifications are rarely completely Information Hiding understood from the system’s inception. – All information about a module should be private to the module – Closed Module: is available for use by other modules, usually unless it is specifically declared public. given a well-defined, stable description and packaged in a library. This is necessary because otherwise code sharing becomes unmanageable because reopening a module may trigger changes in many clients. Copyright c 1997-2003 Vanderbilt University 18 Copyright c 1997-2003 Vanderbilt University 19 UCLA Extension Course OO Programming with C++ UCLA Extension Course OO
Recommended publications
  • Roundabout Planning, Design, and Operations Manual
    Roundabout Planning, Design, and Operations Manual December 2015 Alabama Department of Transportation ROUNDABOUT PLANNING, DESIGN, AND OPERATIONS MANUAL December 2015 Prepared by: The University Transportation Center for of Alabama Steven L. Jones, Ph.D. Abdulai Abdul Majeed Steering Committee Tim Barnett, P.E., ALDOT Office of Safety Operations Stuart Manson, P.E., ALDOT Office of Safety Operations Sonya Baker, ALDOT Office of Safety Operations Stacey Glass, P.E., ALDOT Maintenance Stan Biddick, ALDOT Design Bryan Fair, ALDOT Planning Steve Walker, P.E., ALDOT R.O.W. Vince Calametti, P.E., ALDOT 9th Division James Brown, P.E., ALDOT 2nd Division James Foster, P.E., Mobile County Clint Andrews, Federal Highway Administration Blair Perry, P.E., Gresham Smith & Partners Howard McCulloch, P.E., NE Roundabouts DISCLAIMER This manual provides guidelines and recommended practices for planning and designing roundabouts in the State of Alabama. This manual cannot address or anticipate all possible field conditions that will affect a roundabout design. It remains the ultimate responsibility of the design engineer to ensure that a design is appropriate for prevailing traffic and field conditions. TABLE OF CONTENTS 1. Introduction 1.1. Purpose ...................................................................................................... 1-5 1.2. Scope and Organization ............................................................................... 1-7 1.3. Limitations ...................................................................................................
    [Show full text]
  • Budgen, Software Design Methods
    David Budgen The Loyal Opposition Software Design Methods: Life Belt or Leg Iron? o software design methods have a correctly means “study of method.”) To address, but future? In introducing the January- not necessarily answer, this question, I’ll first consider D February 1998 issue of IEEE Software,Al what designing involves in a wider context, then com- Davis spoke of the hazards implicit in pare this with what we do, and finally consider what “method abuse,”manifested by a desire this might imply for the future. to “play safe.”(If things go well, you can take the credit, but if they go wrong, the organization’s choice of method can take the blame.) As Davis argues, such a THE DESIGN PROCESS policy will almost certainly lead to our becoming builders of what he terms “cookie-cutter, low-risk, low- Developing solutions to problems is a distinguish- payoff, mediocre systems.” ing human activity that occurs in many spheres of life. The issue I’ll explore in this column is slightly dif- So, although the properties of software-based systems ferent, although it’s also concerned with the problems offer some specific problems to the designer (such as that the use of design methods can present. It can be software’s invisibility and its mix of static and dynamic expressed as a question: Will the adoption of a design properties), as individual design characteristics, these method help the software development process (the properties are by no means unique. Indeed, while “life belt” role), or is there significant risk that its use largely ignored by software engineers, the study of the will lead to suboptimum solutions (the “leg iron”role)? nature of design activities has long been established Robert L.
    [Show full text]
  • Software Design Document 1
    SOFTWARE DESIGN DOCUMENT 1. Introduction The following subsections of the Software Design Document (SDD) should provide an overview of the entire SDD. 1.1 Purpose This subsection should explain the purpose of the SDD and specify the intended audience for it. The SDD described the software structure, software components, interfaces and data necessary for the implementation phase. Each requirement in the SRS should be traceable to one or more design entities in the SDD. 1.2 Scope This subsection should relate the design document to the SRS and to the software to be developed. 1.3 Definitions, Acronyms and Abbreviations This subsection should provide the definitions of all terms, acronyms and abbreviations that are used in the SDD. 2. References This subsection should provide a complete list of all documents referenced in the SDD. It should identify these references by title, report number, date and publishing organization. It should also specify the sources from which these references are available. 3. Attributes of Design Entities There are some attributes common to all entities, regardless of the approach utilized, whether procedural or object-oriented. These are used in subsections 4 and later. 3.1 Identification The name of the entity should be specified. Two entities should not have the same name. 3.2 Type The type attribute should describe the nature of the entity. It may simply name the kind of entity, such as subprogram, module, procedure, process, data item, object etc. Alternatively, design entities can be grouped, in order to assist in locating an entity dealing with a particular type of information.
    [Show full text]
  • Software Design Document (SDD) Template
    Software Design Document (SDD) Template Software design is a process by which the software requirements are translated into a representation of software components, interfaces, and data necessary for the implementation phase. The SDD shows how the software system will be structured to satisfy the requirements. It is the primary reference for code development and, therefore, it must contain all the information required by a programmer to write code. The SDD is performed in two stages. The first is a preliminary design in which the overall system architecture and data architecture is defined. In the second stage, i.e. the detailed design stage, more detailed data structures are defined and algorithms are developed for the defined architecture. This template is an annotated outline for a software design document adapted from the IEEE Recommended Practice for Software Design Descriptions. The IEEE Recommended Practice for Software Design Descriptions have been reduced in order to simplify this assignment while still retaining the main components and providing a general idea of a project definition report. For your own information, please refer to IEEE Std 1016­1998 1 for the full IEEE Recommended Practice for Software Design Descriptions. 1 http://www.cs.concordia.ca/~ormandj/comp354/2003/Project/ieee­SDD.pdf Downloaded from http://www.tidyforms.com (Team Name) (Project Title) Software Design Document Name (s): Lab Section: Workstation: Date: (mm/dd/yyyy) Downloaded from http://www.tidyforms.com Software Design Document TABLE OF CONTENTS 1. INTRODUCTION 2 1.1 Purpose 2 1.2 Scope 2 1.3 Overview 2 1.4 Reference Material 2 1.5 Definitions and Acronyms 2 2.
    [Show full text]
  • Principles of Design
    Principles of Design Balance Proportion/Scale Emphasis Rhythm Introduction The principles of design are essential to the development and production of clothing used by individuals and families around the world. Each principle has a specific role in creating an aesthetically pleasing garment or ensemble. The principles of design consist of: balance, proportion (also referred to as scale), emphasis, and rhythm. When a garment or ensemble uses the elements and principles of design to create a visual unity, harmony is achieved. Garments often integrate more than one principle, while drawing from the elements of design to create a cohesive look. The following discussion will present background information on each of the principles of design and applications to clothing design and construction. Balance According to Wolfe (2011) balance implies that there is an equilibrium or uniformity among the parts of a design (p. 205). To achieve balance, a garment or ensemble should have equal visual weight throughout the design. The use of structural features, added embellishments, or decorations to a garment contribute to the appearance of a garment or ensemble being balanced or not. A clothing designer can utilize surface designs on fabric to construct a garment creating visual balance. Further, color, line, and texture can impact the balance of a design. For example, cool and light colors have less visual weight than dark, warm colors. If an individual is wearing a small amount of a dark, warm color it can be balanced out with a larger amount of cool, light colors. Balance used in clothing design can be categorized into two groups: Formal and Informal Balance.
    [Show full text]
  • Software Reliability and Dependability: a Roadmap Bev Littlewood & Lorenzo Strigini
    Software Reliability and Dependability: a Roadmap Bev Littlewood & Lorenzo Strigini Key Research Pointers Shifting the focus from software reliability to user-centred measures of dependability in complete software-based systems. Influencing design practice to facilitate dependability assessment. Propagating awareness of dependability issues and the use of existing, useful methods. Injecting some rigour in the use of process-related evidence for dependability assessment. Better understanding issues of diversity and variation as drivers of dependability. The Authors Bev Littlewood is founder-Director of the Centre for Software Reliability, and Professor of Software Engineering at City University, London. Prof Littlewood has worked for many years on problems associated with the modelling and evaluation of the dependability of software-based systems; he has published many papers in international journals and conference proceedings and has edited several books. Much of this work has been carried out in collaborative projects, including the successful EC-funded projects SHIP, PDCS, PDCS2, DeVa. He has been employed as a consultant to industrial companies in France, Germany, Italy, the USA and the UK. He is a member of the UK Nuclear Safety Advisory Committee, of IFIPWorking Group 10.4 on Dependable Computing and Fault Tolerance, and of the BCS Safety-Critical Systems Task Force. He is on the editorial boards of several international scientific journals. 175 Lorenzo Strigini is Professor of Systems Engineering in the Centre for Software Reliability at City University, London, which he joined in 1995. In 1985-1995 he was a researcher with the Institute for Information Processing of the National Research Council of Italy (IEI-CNR), Pisa, Italy, and spent several periods as a research visitor with the Computer Science Department at the University of California, Los Angeles, and the Bell Communication Research laboratories in Morristown, New Jersey.
    [Show full text]
  • Design by Contract: the Lessons of Ariane
    . Editor: Bertrand Meyer, EiffelSoft, 270 Storke Rd., Ste. 7, Goleta, CA 93117; voice (805) 685-6869; [email protected] several hours (at least in earlier versions of Ariane), it was better to let the computa- tion proceed than to stop it and then have Design by to restart it if liftoff was delayed. So the SRI computation continues for 50 seconds after the start of flight mode—well into the flight period. After takeoff, of course, this com- Contract: putation is useless. In the Ariane 5 flight, Object Technology however, it caused an exception, which was not caught and—boom. The exception was due to a floating- point error during a conversion from a 64- The Lessons bit floating-point value, representing the flight’s “horizontal bias,” to a 16-bit signed integer: In other words, the value that was converted was greater than what of Ariane can be represented as a 16-bit signed inte- ger. There was no explicit exception han- dler to catch the exception, so it followed the usual fate of uncaught exceptions and crashed the entire software, hence the onboard computers, hence the mission. This is the kind of trivial error that we Jean-Marc Jézéquel, IRISA/CNRS are all familiar with (raise your hand if you Bertrand Meyer, EiffelSoft have never done anything of this sort), although fortunately the consequences are usually less expensive. How in the world everal contributions to this made up of respected experts from major department have emphasized the European countries, which produced a How in the world could importance of design by contract report in hardly more than a month.
    [Show full text]
  • Improving Software Reliability Using Software Engineering Approach- a Review
    International Journal of Computer Applications (0975 – 8887) Volume 10– No.5, November 2010 Improving Software Reliability using Software Engineering Approach- A Review Aasia Quyoum Mehraj – Ud - Din Dar S. M. K. Quadri Research Scholar Director, IT & SS Director Computer Sciences University of Kashmir (India) University of Kashmir (India) University of Kashmir (India) ABSTRACT Randomness means that the failure can‟t be predicted accurately. Software Reliability is an important facet of software quality. The randomness of the failure occurrence is necessary for Software reliability is the probability of the failure free operation reliability modeling. In [MIO87], it is suggested that reliability of a computer program for a specified period of time in a specified modeling should be applied to systems larger than 5000 LOC. environment. Software Reliability is dynamic and stochastic. It differs from the hardware reliability in that it reflects design 3. RELIABILITY PROCESS perfection, rather than manufacturing perfection. This article The reliability process in generic terms is a model of the provides an overview of Software Reliability which can be reliability-oriented aspects of software development, operations categorized into: modeling, measurement and improvement, and and maintenance. The set of life cycle activities and artifacts, then examines different modeling technique and metrics for together with their attributes and interrelationships that are software reliability, however, there is no single model that is related to reliability comprise the reliability process. The artifacts universal to all the situations. The article will also provide an of the software life cycle include documents, reports, manuals, overview of improving software reliability and then provides plans, code configuration data and test data.
    [Show full text]
  • Theoretically Comparing Design Thinking to Design Methods for Large- Scale Infrastructure Systems
    The Fifth International Conference on Design Creativity (ICDC2018) Bath, UK, January 31st – February 2nd 2018 THEORETICALLY COMPARING DESIGN THINKING TO DESIGN METHODS FOR LARGE- SCALE INFRASTRUCTURE SYSTEMS M.A. Guerra1 and T. Shealy1 1Civil Engineering, Virginia Tech, Blacksburg, USA Abstract: Design of new and re-design of existing infrastructure systems will require creative ways of thinking in order to meet increasingly high demand for services. Both the theory and practice of design thinking helps to exploit opposing ideas for creativity, and also provides an approach to balance stakeholder needs, technical feasibility, and resource constraints. This study compares the intent and function of five current design strategies for infrastructure with the theory and practice of design thinking. The evidence suggests the function and purpose of the later phases of design thinking, prototyping and testing, are missing from current design strategies for infrastructure. This is a critical oversight in design because designers gain much needed information about the performance of the system amid user behaviour. Those who design infrastructure need to explore new ways to incorporate feedback mechanisms gained from prototyping and testing. The use of physical prototypes for infrastructure may not be feasible due to scale and complexity. Future research should explore the use of prototyping and testing, in particular, how virtual prototypes could substitute the experience of real world installments and how this influences design cognition among designers and stakeholders. Keywords: Design thinking, design of infrastructure systems 1. Introduction Infrastructure systems account for the vast majority of energy use and associated carbon emissions in the United States (US EPA, 2014).
    [Show full text]
  • Combining Design by Contract and Inference Rules of Programming Logic Towards Software Reliability
    Combining Design by Contract and Inference Rules of Programming Logic towards Software Reliability Nuha Aldausari*, Cui Zhang and Jun Dai Department of Computer Science, California State University, Sacramento, CA 95819, U.S.A. Keywords: Software Security, Software Reliability, Program Specifications, Error Detection, Design by Contract, Programming Logic. Abstract: Detecting errors in software products is very important to software reliability because many security vulnerabilities are caused by the defects in software. Design by contract (DBC) is an effective methodology that dynamically checks whether a program meets its specifications, which are also called design contracts, and whether there are errors in the program. The contracts for object-oriented programs are defined in terms of preconditions and postconditions for methods as well as invariants for classes. However, if there is an error in a large piece of code that has a design contract, it is still difficult to identify the exact location of that error. To address this issue, a tool named Subcontractor has been developed. Subcontractor is implemented in Eclipse environment using libraries such as Java Development Tools (JDT), Plugin Development Environment (PDE), and JFace. The tool Subcontractor is built upon an open source DBC tool, OpenJML Runtime Assertion Checking (RAC), which is a tool that verifies specifications at runtime. Subcontractor combines this DBC tool with inference rules of program logic for if-statements and loop- statements to automatically generate subcontracts for programs. When the programs, with subcontracts automatically generated and inserted by Subcontractor, are verified using OpenJML Runtime Assertion Checking (RAC), identification of errors in the code can be facilitated. 1 INTRODUCTION (University of Oldenburg, 2001), and Contracts for Java (C4J) (Bergström, 2012).
    [Show full text]
  • New Product Development Methods: a Study of Open Design
    New Product Development Methods: a study of open design by Ariadne G. Smith S.B. Mechanical Engineering Massachusetts Institute of Technology, 2010 SUBMITTED TO THE DEPARTMENT OF ENGINEERING SYSTEMS DEVISION AND THE DEPARTMENT OF MECHANICAL ENGINEERING IN PARTIAL FULFILLMENT OF THE REQUIREMENTS FOR THE DEGREES OF MASTER OF SCIENCE IN TECHNOLOGY AND POLICY AND MASTER OF SCIENCE IN MECHANICAL ENGINEERING A; SW AT THE <iA.Hu§TTmrrE4 MASSACHUSETTS INSTITUTE OF TECHNOLOGY H 2 INSTI' SEPTEMBER 2012 @ 2012 Massachusetts Institute of Technology. All rights reserved. Signature of Author: Department of Engineering Systems Division Department of Mechanical Engineering Certified by: LI David R. Wallace Professor of Mechanical Engineering and Engineering Systems Thesis Supervisor Certified by: Joel P. Clark P sor of Materials Systems and Engineering Systems Acting Director, Te iology and Policy Program Certified by: David E. Hardt Ralph E. and Eloise F. Cross Professor of Mechanical Engineering Chairman, Committee on Graduate Students New Product Development Methods: a study of open design by Ariadne G. Smith Submitted to the Departments of Engineering Systems Division and Mechanical Engineering on August 10, 2012 in Partial Fulfillment of the Requirements for the Degree of Master of Science in Technology and Policy and Master of Science in Mechanical Engineering ABSTRACT This thesis explores the application of open design to the process of developing physical products. Open design is a type of decentralized innovation that is derived from applying principles of open source software and crowdsourcing to product development. Crowdsourcing has gained popularity in the last decade, ranging from translation services, to marketing concepts, and new product funding.
    [Show full text]
  • 3. Design by Contract
    3. Design by Contract Oscar Nierstrasz Design by Contract Bertrand Meyer, Touch of Class — Learning to Program Well with Objects and Contracts, Springer, 2009. 2 Bertrand Meyer is a French computer scientist who was a Professor at ETH Zürich (successor of Niklaus Wirth) from 2001-2015. He is best known as the inventor of “Design by Contract”, and as the designer of the Eiffel programming language, which provides built-in for DbC. DbC was first described in a technical report by Meyer in 1986: https://en.wikipedia.org/wiki/Design_by_contract Who’s to blame? The components fit but the system does not work. Who’s to blame? The component developer or the system integrator? 3 DbC makes clear the “contract” between a supplier (an object or “component”) and its client. When something goes wrong, the contract states whose fault it is. This simplifies both design and debugging. Why DbC? > Design by Contract —documents assumptions (what do objects expect?) —simplifies code (no special actions for failure) —aids debugging (identifies who’s to blame) 4 As we shall see, DbC improves your OO design in several ways. First, contracts make explicit the assumptions under which an object (supplier) will work correctly. Second, they simplify your code, since no special action is required when things go wrong — the exception handling framework provides the necessary tools. Third, contracts help in debugging since errors are caught earlier, when contracts are violated, not when your program crashes because of an invalid state, and it is clear where to lay the blame for the violation (i.e., in the object or its client).
    [Show full text]