Product Description
Here is the first object-oriented development book to provide specific experience-based guidelines to help developers make the right design decisions. This book offers the next step for readers that know the basics of object-oriented development and now need to know if they are doing it right and making the right choices.
From the Inside Flap
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 begin to see the problem of prioritizing heuristics.
The design heuristics are defined on a backdrop of real-world examples focusing on the area of design to which each heuristic belongs. The foundation of real-world examples provides an ideal vehicle for explaining the concepts of object-oriented technology to the novice. The end result is that this book is appropriate to the newcomer who would like a fast track to understanding the concepts of object-oriented programming without having to muddle through the proliferation of buzzwords that permeates the field. Yet, at the same time, it appeals to the experienced object-oriented developer who is looking for some good analysis and design heuristics to help in his or her development efforts.
The first chapter looks at the motivation for object-oriented programming, starting with several issues which Frederick Brooks argued in his "No Silver Bullet" paper published in 1987 (see reference 1). My perspective on object-oriented programming is that it is a natural progression or evolution from action-oriented development. As software has become more complex, we are required to remove ourselves one more level away from the machine in order to maintain the same grasp we have on the software development process. Just as structured methodologies removed one level from bottom-up programming, object-oriented technology removes one level from structured methodologies. It is not that bottom-up programming or structured methodologies are wrong and object-oriented programming is right. Bottom-up programming is perfectly valid when there exists only 4K of memory to develop, just as structured methodologies are perfectly valid when only 256K of memory exists. With the advent of increasingly cheaper and more powerful hardware, the complexity of software has skyrocketed. Developers of the early 1980s did not have to consider the complexity of graphical user interfaces and multithreaded applications; simpler menu-driven, single-threaded systems were the norm. In the very near future, no one will buy a software product unless it incorporates multimedia with moving video and voice recognition. The more complex systems require a greater level of abstraction, which the object-oriented paradigm provides. This is no revolution in software development; it is simply an evolution.
Chapter 2 discusses the concepts of class and object, the basic building blocks of object-oriented technology. They are viewed as the encapsulation of data and its related behavior in a bidirectional relationship. The notion of sending messages, defining methods, and inventing protocols are explored through real-world examples. This is the first chapter to list heuristics. Given the small subset of the object paradigm with which to work, these heuristics are fairly simple but no less useful than the more complex heuristics of subsequent chapters.
The third chapter examines the difference between an action-oriented topology and an object-oriented topology. The different topologies of these methodologies contain the kernel of truth behind object-oriented development. Action-oriented development focuses largely on a centralized control mechanism controlling a functionally decomposed set of tasks, while object-oriented development focuses on a decentralized collection of cooperating entities. I am convinced that the notion of a paradigm shift is the change in thinking required to move from a centralized to a decentralized control model. The learning curve of object-oriented development is an equally large unlearning curve for those of us reared in the world of action-oriented development. The real world in which we live is more attuned to the object model than to a centralized control mechanism. The lack of a paradigm shift manifests itself in systems that consist of a central godlike object that sits in the middle of a collection of trivial classes. These systems are built by developers stuck in the mindset of an action-oriented topology. This chapter proposes numerous heuristics for developing optimal application topologies.
Chapters 4 through 7 examine each of the five main object-oriented relationships: uses (Chapter 4); containment (Chapter 4); single inheritance (Chapter 5); multiple inheritance (Chapter 6); and association (Chapter 7) through a series of real-world examples. Most of the heuristics of interest to the object-oriented designer can be found in these chapters. The chapters on inheritance include many examples of the common misuses of the inheritance relationship. This information is vital in reducing the proliferation of classes problem, such as designing too many classes for a given application. The class proliferation problem is a major cause of failure in object-oriented development.
Chapter 8 examines the role of class-specific data and behavior, as opposed to object-specific data and behavior. The invoice class is used as an example of an abstraction that requires class-specific data and behavior. Both the SmallTalk metaclass and the C++ keyword mechanisms are illustrated. In addition, the notion of C++ metaclasses (i.e., templates) is compared and contrasted to the SmallTalk notion
《中国之读:“中国文学”的理论和方法》内容简介:本书是作者近些年来从事文学研究所作论文的选编。着眼于文学理论和评论的“中国
《Laravel框架关键技术解析》内容简介:《Laravel框架关键技术解析》以Laravel 5.1版本为基础,从框架技术角度介绍Laravel构建的原
设计与生存 内容简介 一种设计,无论原理上多么先进,如果缺乏量产的可能,对于企业或产业的意义恐怕很有局限。经过20年市场换技术的尝试,我们发现自己在技术上处于一...
Excel2007表格制作图解步步通 本书特色 以全程图解方式介绍excel 2007软件的基础功能与典型应用。以步骤演示的方式引导读者完成表格制作、数据处理和...
Thenationalbestsellerbythe"ultimatethinkingmachine"(Forbes)whosepredictionsforth...
《进击四十年:鲁商风云人物》内容简介:时代敲响火石、点燃星火,而企业家往往是冲锋向前的传薪者。这个人群以见微知著的敏锐和一
《激活自愈力:做自己的健康管理师》内容简介:本书纠正了目前大部分人群将健康交付于医生和药物的现象和思维模式,从而忽略了自己
《挑战拖延症》内容简介:1.《挑战拖延症》一书由战拖心理成长会荣誉出品。战拖会首次出版原创作品,作为第一作者出版图书; 战拖会
《淘宝网店爆款打造 三周做出爆款,店铺精准引流》内容简介:本书主要讲述了如何为淘宝网店打造超常态交易量以及人气的 “爆款宝贝
Web1.0,这个概念对很多人来说,早已不再新鲜。没错,Web1.0是最传统的网络平台。Web2.0,这个概念对很多网络爱好者来说也已经不
《未来银行全面风险管理》内容简介:本书从历史演进和核心要义两个纬度,对银行经营模式、巴塞尔协议、COSO企业风险管理框架进行了
《无互动,不营销》内容简介:《无互动,不营销》旨在探究回答:互动营销在整体数字战略中发挥何种功能?互动营销所追求的与消费者
P精斩极专业PPT精髓-附赠10GB 超豪华PPT资源包 本书特色 《p精斩极:专业ppt精髓》主要针对ppt 中的逻辑结构、版式制作、配色方案、图表设...
应用Ajax可以得到更好的用户体验,并能减轻服务器和带宽的负担,因此Ajax技术得到了诸如GoogleMaps、oogleSuggest、Flickt等网站
《金融市场交易策略:嵌套理论》内容简介:本书所介绍的嵌套理论适用于股票、期货等多个金融交易领域。全书分为理论篇、技术篇、系
本书全面介绍了家具设计的基础知识、设计原理以及设计方法,包括对功能、材料、制作过程和持续性方面等进行了介绍。书中所选案例
《物联网项目实战》内容简介:《物联网项目实战基于Android Things系统》介绍如何使用Android Things完成实际的物联网项目,主要内
《悦吃悦瘦》内容简介:本书首先揭开众多的减肥产品的真面目,帮助读者走出减肥的误区,告诉读者如何通过合理饮食来达到减肥的目的
《西方美学史》内容简介:本书是中国学者撰写的第一部系统阐述西方美学思想发展的专著,梳理了从古希腊罗马、中世纪、文艺复兴,到
RobinWilliams世界著名的设计师、技术专家和畅销书作家。通过写书和授课,她已经影响了整整一代数字设计师。同时,作为Adobe和Ma