Object-Oriented Software Construction

Object-Oriented Software Construction pdf epub mobi txt 电子书 下载 2026

出版者:Prentice Hall
作者:Bertrand Meyer
出品人:
页数:1250
译者:
出版时间:2000-03-21
价格:USD 132.65
装帧:Paperback
isbn号码:9780136291558
丛书系列:
图书标签:
  • OO
  • programming
  • Object-Oriented
  • 软件设计
  • 面向对象
  • 编程
  • 计算机
  • 软件工程
  • Object-Oriented Programming
  • Software Engineering
  • Programming Languages
  • Design Patterns
  • UML
  • C++
  • Java
  • JavaScript
  • Books
  • Computer Science
想要找书就要到 小哈图书下载中心
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

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 65

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 177

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 320

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 444

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 609

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 677

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 807

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 922

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 1035

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 1098

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

Part H: Appendices 1163

Appendix A: Extracts From The Base Libraries 1165

Appendix B: Genericity Versus Inheritance 1167

B.1 Genericity 1168

B.2 Inheritance 1173

B.3 Emulating Inheritance With Genericity 1175

B.4 Emulating Genericity With Inheritance 1176

B.5 Combining Genericity And Inheritance 1184

B.6 Key Concepts Introduced In This Appendix 1187

B.7 Bibliographical Notes 1188

Exercises 1188

Appendix C: Principles, Rules, Precepts And Definitions 1189

Appendix D: A Glossary Of Object Technology 1193

Appendix E: Bibliography 1203

E.1 Works By Other Authors 1203

E.2 Works By The Author Of The Present Book 1221

Index 1225

《现代软件工程实践指南》 在这本详尽的著作中,我们深入探索当今软件开发的核心原理和前沿实践,旨在为读者构建坚实、可维护且富有弹性的软件系统提供全面的指导。本书并非局限于单一的编程范式,而是放眼于更广阔的工程视角,将软件开发的各个关键环节进行系统性梳理和深入剖析。 第一部分:软件工程的基础哲学与核心原则 我们将从软件工程的根本目标出发,探讨为何构建高质量的软件至关重要,以及在快速变化的科技浪潮中,哪些基本原则能够穿越时空,始终指引我们走向成功。这包括对软件危机历史的回顾,理解其产生的根源,以及由此衍生的各类工程化方法的演进。我们会深入讨论“正确性”、“可读性”、“可维护性”、“可扩展性”和“效率”等软件质量的基石,并阐述如何将这些原则融入到日常开发流程中。此外,还将探讨软件开发中的沟通、协作以及团队动力学对于项目成败的影响,强调工程化思维不仅仅是技术层面的考量,更是关于如何高效地将想法转化为可靠产品的社会性活动。 第二部分:现代软件架构设计与模式 在这一部分,我们将重点关注软件系统的骨架——架构。本书将带领读者探索多种现代软件架构风格,例如微服务架构、事件驱动架构、分层架构以及面向服务的架构(SOA)等,并详细分析它们各自的优劣势、适用场景以及设计考量。我们不回避在实践中遇到的挑战,例如如何处理分布式系统中的一致性问题、如何进行有效的服务划分与通信、以及如何实现高可用性和容错性。本书还将精选并深入解析一系列被广泛验证且行之有效的软件设计模式,如工厂模式、单例模式、观察者模式、装饰者模式、策略模式等,并结合具体的代码示例,说明如何在不同情境下灵活运用这些模式,从而解决常见的软件设计难题,提升代码的可复用性和灵活性。 第三部分:高效的代码实现与质量保障 代码是软件的血肉,本部分将聚焦于如何写出高质量、易于理解和测试的代码。我们将探讨清晰的代码风格、命名规范、以及如何通过精炼的算法和数据结构来优化程序性能。重中之重是单元测试、集成测试、端到端测试的重要性,以及如何编写有效的测试用例来保证代码的正确性。本书还将介绍代码审查(Code Review)的最佳实践,以及静态代码分析工具在早期发现潜在问题中的作用。此外,我们将讨论代码的可维护性,包括如何进行代码重构,如何管理技术债务,以及如何利用文档来辅助理解和维护复杂代码库。 第四部分:敏捷开发方法与DevOps文化 现代软件开发已离不开敏捷的思想。本部分将深入剖析敏捷开发宣言的核心价值观,并详细介绍 Scrum、Kanban 等主流敏捷框架的实践。我们将探讨如何在迭代式开发中进行需求管理、优先级排序、以及团队协作。更进一步,本书将引入 DevOps 的理念,阐述其如何打破开发与运维之间的壁垒,通过自动化工具和流程,实现软件的持续集成(CI)、持续交付(CD)和持续部署(CD)。读者将了解到如何构建自动化流水线,如何进行有效的监控和日志管理,以及如何构建一个拥抱变化、快速响应的开发运维一体化文化。 第五部分:可扩展性、性能优化与安全攻防 随着用户量的增长和业务复杂度的提升,软件系统的可扩展性和性能变得至关重要。本部分将深入探讨水平扩展与垂直扩展的策略,以及如何在数据库、缓存、消息队列等关键组件层面进行优化。我们将分析常见的性能瓶颈,并介绍多种性能分析和调优的技术。同时,软件安全不再是事后补救,而是贯穿整个开发生命周期的重要议题。本书将涵盖常见的安全漏洞(如 SQL 注入、XSS 攻击、CSRF 攻击等)的原理,以及相应的防御措施,并探讨安全编码的最佳实践。 第六部分:新兴技术趋势与未来展望 最后,本书将目光投向软件工程的未来。我们将对人工智能在软件开发中的应用进行探讨,例如 AI 辅助编码、AI 驱动的测试等。同时,也将触及云原生技术、容器化(如 Docker、Kubernetes)、Serverless 架构等前沿趋势,分析它们如何重塑软件的构建、部署和运维方式。我们将鼓励读者保持学习的热情,不断适应技术变革,拥抱创新的力量,以应对未来软件工程领域的挑战与机遇。 《现代软件工程实践指南》旨在成为您构建卓越软件的忠实伙伴,无论您是初入职场的开发者,还是经验丰富的技术领导者,都能从中获益,提升您的工程能力,打造出真正经得起时间考验的软件产品。

作者简介

Bertrand Meyer is Chief Architect of Eiffel Software (based in California, http://eiffel.com) and Professor of Software Engineering at ETH Zurich, the Swiss Federal Institute of Technology. He is also head of the Software Engineering Laboratory at ITMO University, Saint Petersburg.

He is the initial designer of the Eiffel method and language and has continued to participate in its evolution. He also directed the development of the EiffelStudio environment, compiler, tools and libraries through their successive versions.

His latest book, published in May 2014, is an irreverent, in-depth introduction to agile methods: "Agile! The Good, the Hype and the Ugly", the first book to take a critical look at agile development and sort out the productive and damaging ideas.

His previous book is an influential an introduction to programming, "Touch of Class: Learning to Program Well, Using Object Technology and Contracts", based on more than a decade of teaching introductory programming at ETH and now supported by a MOOC (http://se.ethz.ch/mooc/programming).

Earlier books include "Object-Oriented Software Construction" (a general presentation of object technology, winner of the 1998 Jolt Award); "Eiffel: The Language" (description of the Eiffel language); "Object Success" (a discussion of object technology for managers); "Reusable Software" (a discussion of reuse issues and solutions); "Introduction to the Theory of Programming Languages". He has also authored numerous articles (see publication list) and edited or co-edited several dozen conference proceedings, including the 2005 "Verified Software".

Other activities include: chair of the TOOLS conference series (running since 1989, hosted at ETH since 2007, next year session in Malaga, Spain); director of the LASER summer school on software engineering (taking place every year since 2003 in early September in Elba island, Italy); member, and chair since 2009, of the IFIP TC2 committee (Software technology); member of the IFIP Working Group 2.3 on Programming Methodology; member of the French Academy of Technologies. He is also active as a consultant (object-oriented system design, architectural reviews, technology assessment), trainer in object technology and other software topics, and conference speaker.

Awards include ACM Software System Award, IEEE Harlan D. Mills prize, Fellow of the ACM, Dahl-Nygaard Prize, and an honorary doctorate from ITMO University(Russia).

Prior to founding Eiffel Software in 1985, Meyer had a 9-year technical and managerial career at EDF, and was for three years on the faculty at the University of California. His experience with object technology through the Simula language, as well as early work on abstract data types and formal specification (including participation in the first versions of the Z specification language) provided some of the background for the development of Eiffel.

At ETH Zurich he pursues research on the construction of high-quality software (see Web site of the Chair of Software Engineering at http://se.ethz.ch).

目录信息

Contents
Preface V
Foreword To The Second Edition Xiii
About The Accompanying Cd-Rom Xiv
On The Bibliography, Internet Sources And Exer cises 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 65
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 177
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 320
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 444
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 609
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 677
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 807
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 922
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 1035
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 1098
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
Part H: Appendices 1163
Appendix A: Extracts From The Base Libraries 1165
Appendix B: Genericity Versus Inheritance 1167
B.1 Genericity 1168
B.2 Inheritance 1173
B.3 Emulating Inheritance With Genericity 1175
B.4 Emulating Genericity With Inheritance 1176
B.5 Combining Genericity And Inheritance 1184
B.6 Key Concepts Introduced In This Appendix 1187
B.7 Bibliographical Notes 1188
Exercises 1188
Appendix C: Principles, Rules, Precepts And Definitions 1189
Appendix D: A Glossary Of Object Technology 1193
Appendix E: Bibliography 1203
E.1 Works By Other Authors 1203
E.2 Works By The Author Of The Present Book 1221
Index 1225
· · · · · · (收起)

读后感

评分

本书对OO理论进行了深入的介绍,与其它OO书籍不同的是本书特别强调软件质量。本书作者Meyer正是Design by Contract思想的提出者,个人认为Design by Contract会逐渐被主流的程序设计语言C#/Java等所支持,代表了未来的发展方向。

评分

本书对OO理论进行了深入的介绍,与其它OO书籍不同的是本书特别强调软件质量。本书作者Meyer正是Design by Contract思想的提出者,个人认为Design by Contract会逐渐被主流的程序设计语言C#/Java等所支持,代表了未来的发展方向。

评分

本书对OO理论进行了深入的介绍,与其它OO书籍不同的是本书特别强调软件质量。本书作者Meyer正是Design by Contract思想的提出者,个人认为Design by Contract会逐渐被主流的程序设计语言C#/Java等所支持,代表了未来的发展方向。

评分

本书对OO理论进行了深入的介绍,与其它OO书籍不同的是本书特别强调软件质量。本书作者Meyer正是Design by Contract思想的提出者,个人认为Design by Contract会逐渐被主流的程序设计语言C#/Java等所支持,代表了未来的发展方向。

评分

本书对OO理论进行了深入的介绍,与其它OO书籍不同的是本书特别强调软件质量。本书作者Meyer正是Design by Contract思想的提出者,个人认为Design by Contract会逐渐被主流的程序设计语言C#/Java等所支持,代表了未来的发展方向。

用户评价

评分

《面向对象软件构造》这本书,它的名字就像一个古老的地图,勾勒着一片我一直想要探索的软件大陆。虽然我不是它的第一个读者,甚至可能不是最早接触面向对象概念的开发者,但我仍然怀揣着一份对知识深耕的渴望。我听说这本书的风格可能比较严谨,甚至有些“学院派”的味道,但我恰恰喜欢这种扎实的讲解方式。我早已厌倦了那些浮于表面的“快速入门”或者“XX技巧大全”,我更希望能够从根本上理解事物的运作原理。我设想,作者一定是一位在软件工程领域有着深厚造诣的学者或资深专家,他将长年累月的实践经验和理论思考,凝练成这本书的内容。我期待它能够像一本教科书一样,系统地介绍面向对象软件构造的方方面面,从最基础的概念,到更高级的设计原则和模式。我希望它能帮助我建立起一套严谨的思维框架,让我能够清晰地分析问题,合理地设计解决方案,并且能够有效地组织和管理复杂的软件项目。我不是在寻找最新的编程语言教程,也不是在学习某个特定的框架,而是希望能够提升自己对软件“构造”这件事的理解深度,培养一种能够应对不断变化的技术环境的“内功”。我猜测,这本书可能会提供一些经典的案例分析,或者对一些常见的软件开发误区进行深入剖析,从而帮助我少走弯路,成为一个更优秀的软件工程师。

评分

《面向对象软件构造》这个名字,对我来说,仿佛是一扇通往更深层次软件理解的大门。在接触过琳琅满目的编程书籍后,我越来越意识到,单纯掌握语法和API是远远不够的,真正关键的是理解“如何构造”出高质量的软件。我之所以对这本书产生浓厚的兴趣,是因为“构造”这个词语本身就蕴含着一种系统性、一种从零开始搭建的严谨与智慧。我猜想,这本书不会仅仅停留在理论层面,而是会结合实际的软件开发过程,深入浅出地讲解面向对象设计的精髓。我期待它能够提供一种“设计思维”,帮助我理解如何将复杂的需求分解成可管理的对象,如何利用面向对象的特性来提高代码的可重用性和可维护性。我不是在寻找某个特定技术的速成指南,而是希望能够获得一种能够指导我一生软件开发实践的“内功”。我设想,作者可能是一位在软件工程领域有着丰富经验的大家,他会将自己多年的实践心得和理论总结,以一种清晰、系统的方式呈现出来。我希望这本书能够让我明白,为什么我们需要遵循某些设计原则,以及这些原则在实际应用中是如何发挥作用的。我期待它能帮助我克服在软件开发过程中遇到的各种挑战,构建出更加优雅、健壮且易于演进的软件系统。

评分

坦白讲,第一次看到《面向对象软件构造》这个书名,我的第一反应是“又一本讲OO的书”。毕竟,在编程的求学路上,面向对象这个概念是绕不过去的坎,相关的书籍更是车载斗量。然而,让我犹豫着不敢轻易下手的,恰恰是它那份“沉甸甸”的重量,不仅是实体书的厚度,更是它似乎承载着某种“深度”的暗示。我不知道这本书的作者是否是某个领域的泰斗,但“构造”二字,在我看来,远比“设计”、“模式”或者“编程”这类词汇更具份量,它暗示着一种从无到有、将概念转化为现实的宏大工程。我期望这本书能够提供的是一种“内功心法”,而非“招式套路”。我不想只是学习如何使用某个库或者框架来快速搭建一个功能,我更渴望理解的是,为什么我们要做这些,以及在面临不同场景时,有哪些更根本的解决之道。我好奇作者会如何去界定“面向对象”的边界,它是否会触及一些我未曾深入思考过的关于对象生命周期、状态管理,乃至并发环境下对象交互的复杂问题。我甚至猜测,这本书可能会对一些普遍存在的、被大家习以为常的面向对象实践提出质疑,并给出自己的独特见解。我不是在寻找快速的解决方案,而是在寻求对软件本质的深刻洞察,一种能够让我即便在面对新兴技术时,也能保持清醒头脑、做出明智决策的能力。

评分

这本书的名字是《面向对象软件构造》,一本在我阅读列表里盘桓了很久的书。之所以一直没有下决心翻开它,很大程度上是源于它那略显“古老”的出版年代。在如今这个日新月异的软件开发世界里,许多曾经的“圣经”都可能很快被新的技术浪潮所淹没。然而,越是这样,我内心深处越是对它保持着一种复杂的好奇。我猜想,一本能够长久流传,并且被冠以“构造”如此沉甸甸的词语的书籍,必定有着其超越时间和技术的普适性价值。我期待它能给我带来一种“返璞归真”的智慧,一种能够帮助我理清那些被纷繁复杂的新框架、新语言所掩盖的软件设计本质。我不是在寻找最新最潮的语法糖,也不是在学习某个特定框架的API,而是希望能从更宏观、更基础的层面去理解“构造”的艺术。我希望这本书能够教会我如何构建健壮、可维护、易于理解的软件系统,而不仅仅是掌握一门工具。我设想,作者可能是一位经验丰富、沉淀深厚的老程序员,他将自己的毕生所学,用一种系统、严谨的方式呈现出来,就像建筑师在绘制精密的蓝图。他可能会通过深入浅出的讲解,剖析面向对象设计的核心原则,比如封装、继承、多态,以及如何将这些原则恰当地应用于实际的软件开发过程中。我不确定这本书是否会提供具体的代码示例,但即便有,我更看重的是这些示例所传递的设计思想,而非其语法细节。我更希望它能引导我形成一种“思考方式”,一种在面对复杂需求时,能够有条不紊地进行分解、抽象和建模的能力。

评分

当我看到《面向对象软件构造》这本书时,我的脑海中立刻浮现出一个画面:一位经验丰富的工匠,手持刻刀,一丝不苟地雕琢着一件精美的艺术品。这本书的名字就给人一种“建造”和“精心打磨”的感觉,这正是我在软件开发过程中所追求的。在如今这个快节奏的时代,许多开发者往往追求的是快速实现功能,而忽略了软件的长期可维护性和可扩展性。我希望这本书能够提供一种截然不同的视角,引导我更加注重软件的“构造”过程,强调代码的清晰度、模块化以及良好的设计。我不期待它会教我如何使用某种特定的编程语言的最新特性,或者如何快速集成某个热门的框架。相反,我希望它能够深入探讨面向对象编程的核心思想,例如如何有效地运用封装、继承和多态来构建灵活且易于理解的代码。我猜想,书中可能会包含一些关于软件架构、设计模式以及如何进行重构的深入讨论。作者的讲解方式,我希望能是严谨而富有洞察力的,能够帮助我理解为什么某些设计选择会比其他选择更好,以及在不同的场景下,如何做出最优化的决策。我渴望通过阅读这本书,能够提升我构建高质量、健壮且易于维护的软件系统的能力,真正成为一名“软件构造者”。

评分

行文很顺,结构很严谨,好书!

评分

行文很顺,结构很严谨,好书!

评分

太学术。读着基本两种心情:1.你到底在讲啥?2.好吧我终于搞懂你在讲啥了,可讲了这个又有什么用呢?也许哪天得道后我会再回来打5分。

评分

毕设翻译。。

评分

毕设翻译。。

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 qciss.net All Rights Reserved. 小哈图书下载中心 版权所有