Apple, Inc. v. Motorola, Inc. et al

Filing 93

Declaration of Christine Saunders Haskett filed by Plaintiffs Apple, Inc., NEXT SOFTWARE, INC. re: 90 Motion Requesting Claims Construction (Attachments: # 1 Ex. 21 IEEE Dictionary, # 2 Ex. 22 '575 file history, # 3 Ex. 23 '486 file history, # 4 Ex. 24 Order No. 18, # 5 Ex. 25 '705 file history, # 6 Ex. 26 '647 file history, # 7 Ex. 27 Brad Cox, # 8 Ex. 28 Microsoft Press Dictionary, # 9 Ex. 29 '002 file history, # 10 Ex. 30 Dictionary of Computer Words, # 11 Ex. 31 Computer Dictionary, # 12 Ex. 32 Academic Press Dictionary, # 13 Ex. 33 IBM Dictionary, # 14 Ex. 34 Black's Law Dictionary, # 15 Ex. 35 About 3GPP, # 16 Ex. 36 '919 patent, # 17 Ex. 37 '713 provisional application) (Haslam, Robert)

Download PDF
EXHIBIT 27 Object-Oriented Programming An Evolutionary Approach Brad J. (ox, Ph.D. Productivity Products International y4y ADDISON-WESLEY PUBLISHING COMPANY Reading, Massachusetts • Menlo Park, California Don Mills, Ontario • Wokingham, England • Amsterdam Sydney • Singapore • Tokyo • Madrid Bogota • Santiago • San Juan Library of Congress Cataloging-in-Publication Data Cox, Brad J., 1944 Object-oriented programming. Includes index. 1. System design. 2. Computer software. I. Title. QA76.9.S8~C69 1986 003 85-22921 ISBN 0-201-10393-1 Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designatipns appear in this book, and Addison-Wesley was aware pf a trademark claim, the designations have been printed ill initial caps or all caps. Reprinted with corrections April, 1987 Copyright © 1986 by Productivity Product? International, Inc., Sandy Hook, CT 06482. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopyjng, recording, or otherwise, without the prior written permission of the puplisher. Printed in the United States of America. Published siir)ultpneously jn Canada. IJ-HA-89 I Two Why Object-oriented Programming? O bject-oriented programming is not so much a coding technique as it is a code packaging te.chnique, a way for code suppliers to encapsu------late functionality for delivery to consumers. It is this incr~.a",§~9-_.~I!!Pl1~s.is o.!!J.hl?JeJ~~.igIlshipbetween eQl1Sllm~r.~a.IldsuppHers code that separates object-oriented and conventional programming (Figure 2.1). Binding is the process of integrating functionality from different suppliers into a consumer's code (Figure 2.2). Binding is more than what most programmers call linking; determining which binary modules must be combined to produce an executable image, assigning a memory address to each one, and patching external references with the correct memory addresses. Binding is the process whereby operators and operands oLP.oJ.l?l1ti('!JlY ..!p:'a~~.iiif~~~!!t types are.:published by suppliers and used by consumers. . -Th~;a~e-severalschoois ()(th~~ght ;bout-;h~~~~d how binding should /i~k!fJ be done, each with distinct strengths and weaknesses. The early binding f?" approach is the most widely known because it is the only approach provided in most conventional languages. With early binding, binding occurs while the consumer's code is being compiled so that the consumer and his tools (the compiler) bear responsibility for binding. Delayed binding (also known as late binding or dynamic binding) means that binding is done later than compiletime, generally while the program is running. Delayed binding moves responsibility for binding away from the consumer and onto the operands, effectively onto the supplier who defined this type of operand. These approaches are not equjvalent. They are different tools for different jobs. The difference is in the degree to which the design of a collection's gf 13 14 Object-oriented Programming: An Evolutionary Approach Supplier Comput er JII UI o iillili. Figure 2.1. Progra mbuildi ng versus systembuildi ng. Conve ntiona l progra mmin g tools empha size the relatio nship between a progra mmer and his code, while objectorient ed progra mmin g empha sizes the relatio nship betwe en suppli ers and consum ers of code. degre e to conte nts can be allow ed to affect the desig n of the collection; the (Figu re 2.3). which the consu mer's code is coupled to that of the suppl iers' y coupl ed Lang uages that provid e early bindin g are ideal for build ing tightl ed by each collec tions where all uncer tainty about the data type provid code is suppl ier can be remov ed at or before the time the consu mer's tions where the comp iled. Dyna mic bindi ng is neede d in loosely coupled collec on until the consu mer's code canno t predi ct the type of data to be opera ted code is being run. al bindThis chapt er shows the effect of this coupl ing by contr asting sever numb er of ing appro aches -in a small exam ple-a progr am for count ing the uniqu e words in a file. Supplier Supplier Bindin g. Bindin g is the process of assem bling compo nents from differe nt suppli ers into a larger compo nent belong ing to the consumer. Figure 2.2. 23 Chapter Two Why Object-oriented Programming? a programmer might like to compute the vector to its bottom right corner by writing vector bottomRight = origin + extent; This is not possible in C, nor in other conventional languages like Pascal, FORTRAN, and COBOL.3 These languages do not allow the programmer to change the meaning of built-in operators like +, so that these operators cannot be applied to newly added data types like vector. These languages require the programmer to decompose each operation to primitive types manually and write: bottomRight.x = origin.x + extent.x; bottomRight.y = origin.y + extent.Yi The supplier of a new data type like vector cannot hide the implementation of this new type from consumers. They must know the implementation to use the type, because they must do all binding between vector and operations on vectors manually whe!"l; they write their code. The recent trend is toward languages that do provide this flexibility, as long as all types are known at compile-time. For example, languages like Ada allow vectors to be defined as a new data type with +, a legal operation on that type. When compiling the expression bottomRight = origin + extent the compiler notices that both origin and extent are vectors, and determines that a special meaning for the + operator is to be used-the one defined by the supplier of the vector type. These languages provide early binding in a more powerful way than C because the meaning of predefined operators like + can be changed for newly defined data types. This approach can address some of the difficulties encountered when applying subroutine libraries to the UniqueWords problem. The problem was to build a new data type, Set, without prematurely committing to the kind of elements to be stored in the Set. Ada's solution to this class of problem is called a generic package, which is a package of code with a compile-time parameter that specifies which type is to be managed ~y the set. The UniqueWords application would be solved by writing a statement in the consumer's code that directs the compiler to compile a Set that expects to manage ByteArrays. Dynamic Binding and Loosely Coupled Collections The statically bound languages are perfect for building tightly coupled collections like vectors and rectangles. They can even be pushed to handle 3But it is possible in C++. See Chapter 3. I 24 Object-oriented Programming: An Evolutionary Approach piling a some harde r cases like the UniqueWords examp le. Of cours e recom be a probsuppl ier's code every time a consu mer provides a new data type can sets and the lem, and not only becau se of the time to compile these custo m suppl ier memo ry to store them in. A more funda menta l conce rn is that the t hold in must trust the comp iler to prote ct any propr ietary intere st he migh ic packthose sources. It is hard to see how a comm ercial marke tplace in gener to protec t ages could develop as long as suppl iers must trust the comp iler their propr ietary intere sts in sourc e code. extrem ely It is less widel y recog nized that static ally bound langu ages are the automopoor for build ing loosely coupled collec tions- probl ems more like d in applicabile's trunk than its engin e. Loosely coupled collections aboun DeskTop, tions like office autom ation, in inform ation- orient ed ensem bles like p or a Envel ope, FileFo lder, Paper Clip, Mailbox, and FileC abine t. A deskto le nor desirmailb ox is a loosely coupl ed collection becau se it is neith er possib what kind able to state, at any point earlie r than when the deskto p is in use, of items it conta ins. bindi ng When every data type is know n when the code is compiled, static is no works . Other wise bindi ng must be done dynam ically , period . There ng is intrin choice betwe en static and dynam ic bindin g, since dynam ic bindi there is a sic to the very essen se of a loosely coupled collection. However, anoth er, choice betwe en one metho d of imple menti ng dynam ic bindi ng and statesince dynam ic bindi ng can be done either manu ally, by condi tional ammi ng ments writte n by the progr amme r, or autom atical ly, by the progr langu age and the run-ti me enviro nmen t. s in The choice is show n in Figur e 2.4. This figure shows the kinds of object work of a an office autom ation projec t as seven folders, each repre sentin g the ox develdiffer ent progr amme r. The mailb ox folder is open to show the mailb oper's two choices for how to imple ment dynam ic bindin g. deterThe left fragm ent shows the manu al appro ach. A switcl i statem ent to the opermines which kind of object is on hand, passin g contro l dynam ically The kind of ation (a C functi on) that prope rly manip ulates that kind of object. a C strucobject is repre sente d in a field inside each object, repre sente d as ture: ! struct OfficeMemo { int type; •.. } ; struct WhiLeYouWereOutNotice { int type; ..• } ; struct FiLeFoLder { int type; ... } ; dynam ic The fragm ent on the right shows the other appro ach in which The mailbindi ng is provi ded autom atical ly by the progr ammi ng langu age. , specifies box developer, as consu mer of the other six data types in this system doThisJ, and what each item is to do by writin g the messa ge expre ssion [item d be accomit is up to the object to decide how the comm and, doThis, shoul plishe d for that kind of object. ation of The differ ence betwe en these two appro aches is crucia l to the separ oper is the respo nsibil ity betw:een suppl ier and consumer. The mailb ox devel 25 Chapter Two Why Object-oriented Programming? Calendar ( I FileFolder I ( Envelope I / (WhileYOuWereOu! \ PriceList ~ I Mailbox Einding done by each consumer ExpenseA item = nextltemlnMailbox(); switch(item->type) ( case EXPENSEACCOUNT: expOp(); case PRICELIST: priceOp(); case WHILEYOUWEREOUT: whileYo case ENVELOPE: case FILEFOLDE Binding done by each supplier case CALENDAR: item = nextltemlnMailbox(); default: [item doThis]; } l----rt I Non-reusable Tight coupling II Reusable Loose coupling t--- \ I I Figure 2.4. Binding in a loosely coupled collection. Dynamic binding can be implemented either by the consuIller or by the supplier. The former leads to nonreusable code, because the consumer's code enumerates the set of data types that were known when the consumer's code was written. The latter Cl:j.n produce reusable code, because data types are mentioned in only one place-in the files that define each data type. consumer of functionality provided elsewhere in his project. The first approach requires that he, the consumer, bear the responsibility for determining which supplier's data is at hand in the mailbox and for selecting which one of the supplier's subroutines is proper for that kind of data. This is called consumer-side binding. By contrast, the other approach puts that responsibility right where it belongs, on the supplier's side. The problem with consumer-side binding can be seen in the case labels in the switch statement. These labels explicitly enumerate the data types this mailbox is prepared to handle, SQ each time a new type is added anywhere in this system, the mailbox code must be changed. Something foul has leaked across the boundary that should have isolated suppliers from consumers. This mailbox is useless in any other application, because the case labels explicitly state that it will only work correctly for those six types. One effect of consumer-side binding is lack of reusability. It forces the mailbox to be written in a way that prevents it from ever being reused in other . . applications. Consumer-side binding also leads to lack of malleability. Each time a new data type is added to the system, the source for the mailbox must be modified. It cannot withstand the kind of evolutionary changes discussed in Chapter 1. Supplier-side binding, by contrast, increases the chance that the mailbox can be reused in other applications because it no longer mention$ types that might change in some new application. And the system becomes malleable because new data types can be added over time without impacting working code. .

Disclaimer: Justia Dockets & Filings provides public litigation records from the federal appellate and district courts. These filings and docket sheets should not be considered findings of fact or liability, nor do they necessarily reflect the view of Justia.


Why Is My Information Online?