Java面向对象设计编程思想(Essential Object Oriented Software Construction)的本质----百家争鸣 陈光剑...

本文探讨了面向对象编程的核心理念,包括如何从问题领域抽象出对象及其关系,以及面向对象编程的实际应用。文章强调了面向对象编程的重要性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

/**
 *
 */
package iSword;

/**
 * @author chenguangjian/iSword 2013-3-30
 *
 */
import iSword.data_basics;

public class calcu_base
	{

		/**
		 * @param args
		 */
		public static void main(String[] args)
			{
				// TODO Auto-generated method stub
				calcu_base cb=new calcu_base();
				cb.ratio_series(100, 8);
				cb.three_digits();


			}


		/**
		 * 题目1:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在     第10次落地时,共经过多少米?第10次反弹多高?
		 */

		public void ratio_series(double h,int n ){
			double s=0;
			double h0=h;
			for(int i=1;i<n;i++){
				s+=h;
				h/=2;
			}

			data_basics db=new data_basics();

		     db.print("在"+h0+"米高空经过"+n+"次反弹经过路程:" + s+"\n");
		     db.print("在"+h0+"米高空经过"+n+"次反弹后的高度:" + h/2+"\n");


		}


		/**
		 * 题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
		 */


		public void three_digits(){
			int count=0;

			data_basics db=new data_basics();

			for (int a=1;a<=4;a++){
				for(int b=1;b<=4;b++){
					for (int c=1;c<=4;c++){
						if(a!=b && b!=c && c!=a){
							count++;
							//int m=a*100+b*10+c;
							db.print(String.valueOf(a*100+b*10+c)+",");
						}
					}
				}
			}
			db.print("\n 用1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数共有" + count + "个三位数");

		}




	}


 



 

输出:在100.0米高空经过8次反弹经过路程:198.4375
在100.0米高空经过8次反弹后的高度:0.390625
123,124,132,134,142,143,213,214,231,234,241,243,312,314,321,324,341,342,412,413,421,423,431,432,
 用1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数共有24个三位数


 








真正的面向对象编程思想是怎样的?
真正的面向对象编程思想就是忘掉一切关于计算机的东西,从问题领域考虑问题




面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等
原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就称之为“类”。这种集合上定义了操作的东东利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性有可事半功倍。
面向对象的编程思想就要想近世代数的分析思想,首先要确定“论域”,即工程所涉及到的所有的“对象”,然后要分类处理,把隶属同一类别的对象集合在一起(做成一个集合),定义他们之间的运算性质及可以进行的操作,这样就构建了一个类,当然以后用到这个类的对象时都要通过已经定义了的操作来完成各项功能,这就是常要求的类的“类的成员变量要通过共有函数来操作”。








把你要解决问题中涉及的东西一个一个分析清楚,找出彼此之间的差异和共同点,相互之间的联系,对于共性的呢,就定义成父类,在父类的基础上在进行分析,直到描述了每个东西。




从问题想?
我的理解:
1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),直到无法再细;
2、对每个对象(小问题)进行分析,抽象,提取处共同的内容(数据成员和操作方法),
3、有相似的对象的,构造基类;再有基类派生出各个确定的对象(小问题);
4、解决问题的过程就是操作这些对象的过程。
我的体会:
1、从现在开始构造对象,逐渐总结、体会;不要等到看到教材的最后一页才动手。
就是忘掉语言本身!
只有逻辑!




与实际生活联系起来。
将要处理的‘问题’抽象成一个或多个‘事件’
找一个地方使用我的智慧
你不说我倒还明白,你越说我越糊涂
就是学习数据结构时,一般教材用的“类自然语言”。
就是从实际的对象出发,而不是用计算机语言考虑问题




面向对象的技术的出现就是因为软件的规模和复杂度不断扩大,导致
了软件开发的危机,人们终于认识到人脑的分析和理解能力是有限度的。
面向对象的思想的出现就是软件开发界的一次“反朴归真”,犹如金庸小说
中张三丰教无忌太极拳一样,“忘掉一切,你就领悟太极的真谛了”,




其实面向对象技术就是要软件开发者从技术层面向管理层面倾斜,以宏观的眼光
看待系统。
要以面向对象的方法进行系统的分析,愚以为:
1。了解系统的功能。列举出它的对外接口,即对于使用者来说它有什么功能。把这整个系统作为一个对象。
2。环境。系统不是运行在真空中的,操作系统等外部环境都可能会影响它。所以把环境也作为一个大的对象。
3。内部。在系统的内部,一般都比较复杂,一般的做法是规定一个粒度,枚举出该粒度上所有的物体。比如说人体,如果在器官的粒度上,就有心,肝,肺。而小于该粒度的物体(或称对象),比如血细胞,就忽略,作为其它物体(或称子系统的内部对象)。
4。子系统。不断缩小粒度,沿用步骤1~3,直到不能再抽象为止。
5。无形的物体。一个完整的互连的系统需要许多无形的物体,比如消息等了,一般这样的对象比较难发现。当你发现各个子系统无法正确合作或理顺关系时,试着加入一些辅助对象。
一切都是为了让人明白,有能让机器理解的思想
我想分析和抽象能力的高低是个关键,首先要从问题域分析和抽象出准确的对象模型,再根据这些模型进行处理,当然在过程种少不了楼上前辈们说的一些思想和细节,但是别忘了,我们的目的是解决问题,不要为了面向对象而面向对象!
我想分析和抽象的能力对这个问题是个关键。首先要在问题域仔细分析、抽象得到相关的对象模型,然后才是相应的设计。可是面向对象只是我们解决问题一种思想,切不可忘了问题本身,弄成为了面向对象而面向对象了!当然过程种少不了楼上一些前辈说的思想和细节了。
一种为了解决问题而产生的编程模式,你完全可以不用它,而且有可能做的更好。
但就现在的形式看,还是掌握的好,就我看面向对象就是:把实体转化成对象。
耕具我多年的实践:面向对象包括两个思想:
从大往小想,从小往大做
从难往易想,从易往难做
同意一下观点-----能深入浅出,真高手也!
真正的面向对象编程思想就是忘掉一切关于计算机的东西,从问题领域考虑问题, :-)
把问题从大到小都抽象成对象(指针只是对象的使用形式),在设计和编写程序的时候把你设计的对象合理的编排组合就是面向对象编程了。
面向对象,就是面对现实;
现实中的一切都是对象,他们有分类,就产生了“类”;
他们有不同,类和类之间的不同,使用类来区分;
同一个类中不同的对象的区别,使用成员区分。
所以,面向对象的内部逻辑是分类。
真正的面象对象思想也不实用,举一个例子:
在一个文本编辑器中,如果完全按照面向对象的思想来设计的话,每个字符都将是一个对象,这样的开销太大,以致于不能形成程序。(所以才有设计模式中有关于此的讨论,注意:不是一种模式能够解决的)
最合适的还是一个结合吧,就象生活中的各种事情一样,其实程序本来就是为生活服务的呀!




↑以上是我在其他网站看到的一些留言,不是连续的,你看时可能会很乱,但也先看看别人在说什么吧
什么是面向对象的思想?
我认为面向对象的思想的重点是发现对象和寻找对象之间的关系
 
有一本书上解释得比较清楚
<<uml与模式应用:面向对象分析与设计导论>>








面向对象的Paradigm就是让我们用看待自然或者现实世界的眼光来看待软件开发中的问题。
 关于面向对象思想(不是编程思想),我想大家如果看懂了《设计模式》就会理解大部 
 
先拆后组
 
面对对象只是提供了一套设计软件时的方法或者说是思维工具,什么是真正的面对对象,我认为并不重要,因为面对对象有他的好处,也有缺点。关键在于设计时的目的,怎么样的设计才是一个好的设计,软件的可扩展性,灵活性,效率,稳定性要求一个设计人员有比较广阔的思路,博采各种思想。
这么多年的开发,我发现了一个非常普遍的现象,一旦用OO,就都是OO,一旦用Interface/COM,就都是Interface/COM。
我认为没有一个方法能放之四海而皆准,其实OO之所以产生,COM之所以产生,都是在大量实际设计软件过程中,把一些好的经验总结的结果。
从语言的角度来讲,JAVA就是纯粹的面向对象语言!
《设计模式》《think in C++》《深度探索 C++ 对象模型》
关于面向对象思想,我的认为是:面向对象主要是一种模块化的思想,每个模块的设计,应该是一个独立的。在调用该模块时,就像楼上那位大虾所说(一头驴他属性有高矮、胖瘦、驴种(白的、黄的、花的))只要知道其名字,并知道其属性就能用该模块,而不用管他内部是如何构建的。就像那头驴只要知道它的外在特征(如耳朵,眼睛,腿,身形,叫声等)就能判断它是驴。而不用管他里面有几个心脏,心脏大小等。
关于这类书太多了!
面向对象 哈哈 就是把什么都当作对象!(不女朋友那个对象呦!)
程序 = 对象 + 对象 + .......
对象 = 属性 + 行为
总之,还是亲手编才能体会到!
高度藕合的数据和代码封装在一起,自己的事自己做。——面向对象的特征之一。
看atl源代码,看懂了就知道了
1)哪种方法能最好地解决问题就用哪种方法,不一定非要用OO,OO也有缺点
2)不用OO Language也能使用OO思想(注:^☉^OO就是指面向对象)
非常赞同duanrain(dyl)的说法。
科学家们为什么会研究出OO的思想出来,根本的出发点就是为了更好的完成我们手头上要做的项目(这是我的理解)。但实际中,是不是用OO就一定能很好的完成项目呢?我觉得不见得。对于不同的项目它们的设计有易有难,有的很容易就能找出对象集和它们之间的关系,有的就不容易经常会有无凌两可的局面。可能用OO很难表达的一些东西,采用过程式的开发就马上把它搞定。所以用不用面向对象的思路进行开发不是关键,关键是要采用一种自己可控的、别人能很好理解的、系统性能稳定的可扩展的方式去开发。这样做才能稳中求胜。
我有这样的一个经历,我刚对OO编程开始有点领悟时就“大试小牛刀”在一个项目里定义了一个逻辑臃肿对象模型。虽然逻辑很符合应用上的业务逻辑,但里面存在了很多编程上的弊端。在操作上(我们开发人员少,就我一个)和性能上(设计符合应用逻辑但与操作数据库的操作有点相违背)都不太好。
之后又另一个项目,这我吸取了上一次的教训以后,我就没很详细的去设计对象模型,只做了一些小对象,在界面编程上实现业务逻辑。反而编码无论在修改BUG还是在添加新功能上都明显简单快捷多了,系统在性能上都很稳定。
我觉得,要用OO编程思想去设计项目是一个很大风险的举动,一个好的OO设计对于设计者各方面的素质都要求很高。设计得当就对编码工作有很大的帮助,设计不当时编码就寸步难行了。
我认为就“面向对象思想”来说,《Object Oriented Software Construction》(Bertrand Meyer)的阐述最为经典,最为彻底。
语言:Eiffel,C++ Critique;
可重用:Design By Contract;
软件工程:直接受语言本身的支持,集成开发环境将语言编译、代码优化、图形化显示、系统分析等功能做得浑然一体,真是无与伦比!
可惜ISE公司不做操作系统,不能象微软那样依托操作系统设施设计出COM+来。
要是Eiffel的集成开发环境与Windows的系统注册表、COM+技术做得浑然一体,我必弃VC而用Visual Eiffel。













Contents Preface v Foreword to the second edition xiii About the accompanying CD-ROM xiv On the bibliography, Internet sources and exercises xv Contents xvii PART A: THE ISSUES 1 Chapter 1: Software quality 3 1.1 EXTERNAL AND INTERNAL FACTORS 3 1.2 A REVIEW OF EXTERNAL FACTORS 4 1.3 ABOUT SOFTWARE MAINTENANCE 17 1.4 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 19 1.5 BIBLIOGRAPHICAL NOTES 19 Chapter 2: Criteria of object orientation 21 2.1 ON THE CRITERIA 21 2.2 METHOD AND LANGUAGE 22 2.3 IMPLEMENTATION AND ENVIRONMENT 31 2.4 LIBRARIES 33 2.5 FOR MORE SNEAK PREVIEW 34 2.6 BIBLIOGRAPHICAL NOTES AND OBJECT RESOURCES 34 PART B: THE ROAD TO OBJECT ORIENTATION 37 Chapter 3: Modularity 39 3.1 FIVE CRITERIA 40 3.2 FIVE RULES 46 3.3 FIVE PRINCIPLES 53 3.4 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 64 3.5 BIBLIOGRAPHICAL NOTES 64 EXERCISES 65CONTENTS xviii Chapter 4: Approaches to reusability 67 4.1 THE GOALS OF REUSABILITY 68 4.2 WHAT SHOULD WE REUSE? 70 4.3 REPETITION IN SOFTWARE DEVELOPMENT 74 4.4 NON-TECHNICAL OBSTACLES 74 4.5 THE TECHNICAL PROBLEM 81 4.6 FIVE REQUIREMENTS ON MODULE STRUCTURES 83 4.7 TRADITIONAL MODULAR STRUCTURES 89 4.8 OVERLOADING AND GENERICITY 93 4.9 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 98 4.10 BIBLIOGRAPHICAL NOTES 99 Chapter 5: Towards object technology 101 5.1 THE INGREDIENTS OF COMPUTATION 101 5.2 FUNCTIONAL DECOMPOSITION 103 5.3 OBJECT-BASED DECOMPOSITION 114 5.4 OBJECT-ORIENTED SOFTWARE CONSTRUCTION 116 5.5 ISSUES 117 5.6 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 119 5.7 BIBLIOGRAPHICAL NOTES 119 Chapter 6: Abstract data types 121 6.1 CRITERIA 122 6.2 IMPLEMENTATION VARIATIONS 122 6.3 TOWARDS AN ABSTRACT VIEW OF OBJECTS 126 6.4 FORMALIZING THE SPECIFICATION 129 6.5 FROM ABSTRACT DATA TYPES TO CLASSES 142 6.6 BEYOND SOFTWARE 147 6.7 SUPPLEMENTARY TOPICS 148 6.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 159 6.9 BIBLIOGRAPHICAL NOTES 160 EXERCISES 161 PART C: OBJECT-ORIENTED TECHNIQUES 163 Chapter 7: The static structure: classes 165 7.1 OBJECTS ARE NOT THE SUBJECT 165 7.2 AVOIDING THE STANDARD CONFUSION 166 7.3 THE ROLE OF CLASSES 169 7.4 A UNIFORM TYPE SYSTEM 171 7.5 A SIMPLE CLASS 172 7.6 BASIC CONVENTIONS 177CONTENTS xix 7.7 THE OBJECT-ORIENTED STYLE OF COMPUTATION 181 7.8 SELECTIVE EXPORTS AND INFORMATION HIDING 191 7.9 PUTTING EVERYTHING TOGETHER 194 7.10 DISCUSSION 203 7.11 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 213 7.12 BIBLIOGRAPHICAL NOTES 215 EXERCISES 216 Chapter 8: The run-time structure: objects 217 8.1 OBJECTS 218 8.2 OBJECTS AS A MODELING TOOL 228 8.3 MANIPULATING OBJECTS AND REFERENCES 231 8.4 CREATION PROCEDURES 236 8.5 MORE ON REFERENCES 240 8.6 OPERATIONS ON REFERENCES 242 8.7 COMPOSITE OBJECTS AND EXPANDED TYPES 254 8.8 ATTACHMENT: REFERENCE AND VALUE SEMANTICS 261 8.9 DEALING WITH REFERENCES: BENEFITS AND DANGERS 265 8.10 DISCUSSION 270 8.11 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 276 8.12 BIBLIOGRAPHICAL NOTES 277 EXERCISES 277 Chapter 9: Memory management 279 9.1 WHAT HAPPENS TO OBJECTS 279 9.2 THE CASUAL APPROACH 291 9.3 RECLAIMING MEMORY: THE ISSUES 293 9.4 PROGRAMMER-CONTROLLED DEALLOCATION 294 9.5 THE COMPONENT-LEVEL APPROACH 297 9.6 AUTOMATIC MEMORY MANAGEMENT 301 9.7 REFERENCE COUNTING 302 9.8 GARBAGE COLLECTION 304 9.9 PRACTICAL ISSUES OF GARBAGE COLLECTION 309 9.10 AN ENVIRONMENT WITH MEMORY MANAGEMENT 312 9.11 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 315 9.12 BIBLIOGRAPHICAL NOTES 315 EXERCISES 316 Chapter 10: Genericity 317 10.1 HORIZONTAL AND VERTICAL TYPE GENERALIZATION 317 10.2 THE NEED FOR TYPE PARAMETERIZATION 318 10.3 GENERIC CLASSES 320CONTENTS xx 10.4 ARRAYS 325 10.5 THE COST OF GENERICITY 328 10.6 DISCUSSION: NOT DONE YET 329 10.7 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 329 10.8 BIBLIOGRAPHICAL NOTES 330 EXERCISES 330 Chapter 11: Design by Contract: building reliable software 331 11.1 BASIC RELIABILITY MECHANISMS 332 11.2 ABOUT SOFTWARE CORRECTNESS 333 11.3 EXPRESSING A SPECIFICATION 334 11.4 INTRODUCING ASSERTIONS INTO SOFTWARE TEXTS 337 11.5 PRECONDITIONS AND POSTCONDITIONS 338 11.6 CONTRACTING FOR SOFTWARE RELIABILITY 341 11.7 WORKING WITH ASSERTIONS 348 11.8 CLASS INVARIANTS 363 11.9 WHEN IS A CLASS CORRECT? 369 11.10 THE ADT CONNECTION 373 11.11 AN ASSERTION INSTRUCTION 378 11.12 LOOP INVARIANTS AND VARIANTS 380 11.13 USING ASSERTIONS 389 11.14 DISCUSSION 398 11.15 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 406 11.16 BIBLIOGRAPHICAL NOTES 407 EXERCISES 408 POSTSCRIPT: THE ARIANE 5 FAILURE 410 Chapter 12: When the contract is broken: exception handling 411 12.1 BASIC CONCEPTS OF EXCEPTION HANDLING 411 12.2 HANDLING EXCEPTIONS 414 12.3 AN EXCEPTION MECHANISM 419 12.4 EXCEPTION HANDLING EXAMPLES 422 12.5 THE TASK OF A RESCUE CLAUSE 427 12.6 ADVANCED EXCEPTION HANDLING 431 12.7 DISCUSSION 435 12.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 437 12.9 BIBLIOGRAPHICAL NOTES 438 EXERCISES 438 Chapter 13: Supporting mechanisms 439 13.1 INTERFACING WITH NON-O-O SOFTWARE 439 13.2 ARGUMENT PASSING 444CONTENTS xxi 13.3 INSTRUCTIONS 447 13.4 EXPRESSIONS 452 13.5 STRINGS 456 13.6 INPUT AND OUTPUT 457 13.7 LEXICAL CONVENTIONS 457 13.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 458 EXERCISES 458 Chapter 14: Introduction to inheritance 459 14.1 POLYGONS AND RECTANGLES 460 14.2 POLYMORPHISM 467 14.3 TYPING FOR INHERITANCE 472 14.4 DYNAMIC BINDING 480 14.5 DEFERRED FEATURES AND CLASSES 482 14.6 REDECLARATION TECHNIQUES 491 14.7 THE MEANING OF INHERITANCE 494 14.8 THE ROLE OF DEFERRED CLASSES 500 14.9 DISCUSSION 507 14.10 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 516 14.11 BIBLIOGRAPHICAL NOTES 517 EXERCISES 517 Chapter 15: Multiple inheritance 519 15.1 EXAMPLES OF MULTIPLE INHERITANCE 519 15.2 FEATURE RENAMING 535 15.3 FLATTENING THE STRUCTURE 541 15.4 REPEATED INHERITANCE 543 15.5 DISCUSSION 563 15.6 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 566 15.7 BIBLIOGRAPHICAL NOTES 567 EXERCISES 567 Chapter 16: Inheritance techniques 569 16.1 INHERITANCE AND ASSERTIONS 569 16.2 THE GLOBAL INHERITANCE STRUCTURE 580 16.3 FROZEN FEATURES 583 16.4 CONSTRAINED GENERICITY 585 16.5 ASSIGNMENT ATTEMPT 591 16.6 TYPING AND REDECLARATION 595 16.7 ANCHORED DECLARATION 598 16.8 INHERITANCE AND INFORMATION HIDING 605 16.9 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 609CONTENTS xxii 16.10 BIBLIOGRAPHICAL NOTE 610 EXERCISES 610 Chapter 17: Typing 611 17.1 THE TYPING PROBLEM 611 17.2 STATIC TYPING: WHY AND HOW 615 17.3 COVARIANCE AND DESCENDANT HIDING 621 17.4 FIRST APPROACHES TO SYSTEM VALIDITY 628 17.5 RELYING ON ANCHORED TYPES 630 17.6 GLOBAL ANALYSIS 633 17.7 BEWARE OF POLYMORPHIC CATCALLS! 636 17.8 AN ASSESSMENT 639 17.9 THE PERFECT FIT 640 17.10 KEY CONCEPTS STUDIED IN THIS CHAPTER 641 17.11 BIBLIOGRAPHICAL NOTES 641 Chapter 18: Global objects and constants 643 18.1 CONSTANTS OF BASIC TYPES 643 18.2 USE OF CONSTANTS 645 18.3 CONSTANTS OF CLASS TYPES 646 18.4 APPLICATIONS OF ONCE ROUTINES 648 18.5 CONSTANTS OF STRING TYPE 653 18.6 UNIQUE VALUES 654 18.7 DISCUSSION 656 18.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 659 18.9 BIBLIOGRAPHICAL NOTES 660 EXERCISES 660 PART D: OBJECT-ORIENTED METHODOLOGY: APPLYING THE METHOD WELL 661 Chapter 19: On methodology 663 19.1 SOFTWARE METHODOLOGY: WHY AND WHAT 663 19.2 DEVISING GOOD RULES: ADVICE TO THE ADVISORS 664 19.3 ON USING METAPHORS 671 19.4 THE IMPORTANCE OF BEING HUMBLE 673 19.5 BIBLIOGRAPHICAL NOTES 674 EXERCISES 674 Chapter 20: Design pattern: multi-panel interactive systems 675 20.1 MULTI-PANEL SYSTEMS 675 20.2 A SIMPLE-MINDED ATTEMPT 677CONTENTS xxiii 20.3 A FUNCTIONAL, TOP-DOWN SOLUTION 678 20.4 A CRITIQUE OF THE SOLUTION 682 20.5 AN OBJECT-ORIENTED ARCHITECTURE 684 20.6 DISCUSSION 693 20.7 BIBLIOGRAPHICAL NOTE 694 Chapter 21: Inheritance case study: “undo” in an interactive system 695 21.1 PERSEVERARE DIABOLICUM 695 21.2 FINDING THE ABSTRACTIONS 699 21.3 MULTI-LEVEL UNDO-REDO 704 21.4 IMPLEMENTATION ASPECTS 707 21.5 A USER INTERFACE FOR UNDOING AND REDOING 711 21.6 DISCUSSION 712 21.7 BIBLIOGRAPHICAL NOTES 715 EXERCISES 715 Chapter 22: How to find the classes 719 22.1 STUDYING A REQUIREMENTS DOCUMENT 720 22.2 DANGER SIGNALS 726 22.3 GENERAL HEURISTICS FOR FINDING CLASSES 731 22.4 OTHER SOURCES OF CLASSES 735 22.5 REUSE 740 22.6 THE METHOD FOR OBTAINING CLASSES 741 22.7 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 743 22.8 BIBLIOGRAPHICAL NOTES 744 Chapter 23: Principles of class design 747 23.1 SIDE EFFECTS IN FUNCTIONS 748 23.2 HOW MANY ARGUMENTS FOR A FEATURE? 764 23.3 CLASS SIZE: THE SHOPPING LIST APPROACH 770 23.4 ACTIVE DATA STRUCTURES 774 23.5 SELECTIVE EXPORTS 796 23.6 DEALING WITH ABNORMAL CASES 797 23.7 CLASS EVOLUTION: THE OBSOLETE CLAUSE 802 23.8 DOCUMENTING A CLASS AND A SYSTEM 803 23.9 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 806 23.10 BIBLIOGRAPHICAL NOTES 806 EXERCISES 807CONTENTS xxiv Chapter 24: Using inheritance well 809 24.1 HOW NOT TO USE INHERITANCE 809 24.2 WOULD YOU RATHER BUY OR INHERIT? 812 24.3 AN APPLICATION: THE HANDLE TECHNIQUE 817 24.4 TAXOMANIA 820 24.5 USING INHERITANCE: A TAXONOMY OF TAXONOMY 822 24.6 ONE MECHANISM, OR MORE? 833 24.7 SUBTYPE INHERITANCE AND DESCENDANT HIDING 835 24.8 IMPLEMENTATION INHERITANCE 844 24.9 FACILITY INHERITANCE 847 24.10 MULTIPLE CRITERIA AND VIEW INHERITANCE 851 24.11 HOW TO DEVELOP INHERITANCE STRUCTURES 858 24.12 A SUMMARY VIEW: USING INHERITANCE WELL 862 24.13 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 863 24.14 BIBLIOGRAPHICAL NOTES 863 24.15 APPENDIX: A HISTORY OF TAXONOMY 864 EXERCISES 869 Chapter 25: Useful techniques 871 25.1 DESIGN PHILOSOPHY 871 25.2 CLASSES 872 25.3 INHERITANCE TECHNIQUES 873 Chapter 26: A sense of style 875 26.1 COSMETICS MATTERS! 875 26.2 CHOOSING THE RIGHT NAMES 879 26.3 USING CONSTANTS 884 26.4 HEADER COMMENTS AND INDEXING CLAUSES 886 26.5 TEXT LAYOUT AND PRESENTATION 891 26.6 FONTS 900 26.7 BIBLIOGRAPHICAL NOTES 901 EXERCISES 902 Chapter 27: Object-oriented analysis 903 27.1 THE GOALS OF ANALYSIS 903 27.2 THE CHANGING NATURE OF ANALYSIS 906 27.3 THE CONTRIBUTION OF OBJECT TECHNOLOGY 907 27.4 PROGRAMMING A TV STATION 907 27.5 EXPRESSING THE ANALYSIS: MULTIPLE VIEWS 914 27.6 ANALYSIS METHODS 917 27.7 THE BUSINESS OBJECT NOTATION 919 27.8 BIBLIOGRAPHY 922CONTENTS xxv Chapter 28: The software construction process 923 28.1 CLUSTERS 923 28.2 CONCURRENT ENGINEERING 924 28.3 STEPS AND TASKS 926 28.4 THE CLUSTER MODEL OF THE SOFTWARE LIFECYCLE 926 28.5 GENERALIZATION 928 28.6 SEAMLESSNESS AND REVERSIBILITY 930 28.7 WITH US, EVERYTHING IS THE FACE 933 28.8 KEY CONCEPTS COVERED IN THIS CHAPTER 934 28.9 BIBLIOGRAPHICAL NOTES 934 Chapter 29: Teaching the method 935 29.1 INDUSTRIAL TRAINING 935 29.2 INTRODUCTORY COURSES 937 29.3 OTHER COURSES 941 29.4 TOWARDS A NEW SOFTWARE PEDAGOGY 942 29.5 AN OBJECT-ORIENTED PLAN 946 29.6 KEY CONCEPTS STUDIED IN THIS CHAPTER 948 29.7 BIBLIOGRAPHICAL NOTES 948 PART E: ADVANCED TOPICS 949 Chapter 30: Concurrency, distribution, client-server and the Internet 951 30.1 A SNEAK PREVIEW 951 30.2 THE RISE OF CONCURRENCY 953 30.3 FROM PROCESSES TO OBJECTS 956 30.4 INTRODUCING CONCURRENT EXECUTION 964 30.5 SYNCHRONIZATION ISSUES 977 30.6 ACCESSING SEPARATE OBJECTS 982 30.7 WAIT CONDITIONS 990 30.8 REQUESTING SPECIAL SERVICE 998 30.9 EXAMPLES 1003 30.10 TOWARDS A PROOF RULE 1022 30.11 A SUMMARY OF THE MECHANISM 1025 30.12 DISCUSSION 1028 30.13 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 1032 30.14 BIBLIOGRAPHICAL NOTES 1033 EXERCISES 1035CONTENTS xxvi Chapter 31: Object persistence and databases 1037 31.1 PERSISTENCE FROM THE LANGUAGE 1037 31.2 BEYOND PERSISTENCE CLOSURE 1039 31.3 SCHEMA EVOLUTION 1041 31.4 FROM PERSISTENCE TO DATABASES 1047 31.5 OBJECT-RELATIONAL INTEROPERABILITY 1048 31.6 OBJECT-ORIENTED DATABASE FUNDAMENTALS 1050 31.7 O-O DATABASE SYSTEMS: EXAMPLES 1055 31.8 DISCUSSION: BEYOND O-O DATABASES 1058 31.9 KEY CONCEPTS STUDIED IN THIS CHAPTER 1060 31.10 BIBLIOGRAPHICAL NOTES 1061 EXERCISES 1062 Chapter 32: Some O-O techniques for graphical interactive applications 1063 32.1 NEEDED TOOLS 1064 32.2 PORTABILITY AND PLATFORM ADAPTATION 1066 32.3 GRAPHICAL ABSTRACTIONS 1068 32.4 INTERACTION MECHANISMS 1071 32.5 HANDLING THE EVENTS 1072 32.6 A MATHEMATICAL MODEL 1076 32.7 BIBLIOGRAPHICAL NOTES 1076 PART F: APPLYING THE METHOD IN VARIOUS LANGUAGES AND ENVIRONMENTS 1077 Chapter 33: O-O programming and Ada 1079 33.1 A BIT OF CONTEXT 1079 33.2 PACKAGES 1081 33.3 A STACK IMPLEMENTATION 1081 33.4 HIDING THE REPRESENTATION: THE PRIVATE STORY 1085 33.5 EXCEPTIONS 1088 33.6 TASKS 1091 33.7 FROM ADA TO ADA 95 1092 33.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER 1097 33.9 BIBLIOGRAPHICAL NOTES 1097 EXERCISES 1098CONTENTS xxvii Chapter 34: Emulating object technology in non-O-O environments 1099 34.1 LEVELS OF LANGUAGE SUPPORT 1099 34.2 OBJECT-ORIENTED PROGRAMMING IN PASCAL? 1100 34.3 FORTRAN 1102 34.4 OBJECT-ORIENTED PROGRAMMING AND C 1106 34.5 BIBLIOGRAPHICAL NOTES 1112 EXERCISES 1112 Chapter 35: Simula to Java and beyond: major O-O languages and environments 1113 35.1 SIMULA 1113 35.2 SMALLTALK 1126 35.3 LISP EXTENSIONS 1130 35.4 C EXTENSIONS 1131 35.5 JAVA 1136 35.6 OTHER O-O LANGUAGES 1137 35.7 BIBLIOGRAPHICAL NOTES 1138 EXERCISES 1139 PART G: DOING IT RIGHT 1141 Chapter 36: An object-oriented environment 1143 36.1 COMPONENTS 1143 36.2 THE LANGUAGE 1144 36.3 THE COMPILATION TECHNOLOGY 1144 36.4 TOOLS 1148 36.5 LIBRARIES 1150 36.6 INTERFACE MECHANISMS 1152 36.7 BIBLIOGRAPHICAL NOTES 1160 Epilogue, In Full Frankness Exposing the Language 1161
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值