Objects Unencapsulated : Java, Eiffel, and C++
Start with a detailed look at the core principles of today's computer languages, and the rationale for object-oriented technology. Review the strengths and weaknesses of these and other common elements of O-O development: entities and types; modules and imports; members and features; inheritance, generics, and templates. Take an objective look at how Java, C++ and Eiffel handle interfaces and access control; constructors, destructors, and casts; and how they behave at compile time and runtime. Most of all, understand how each of these elements impacts real-world programmer effectiveness -- for better, and for worse. Joyner has written a controversial book. But those who take it to heart will have a clear roadmap for building better programs -- and better languages.
- Paperback | 416 pages
- 178 x 232 x 34mm | 839.99g
- 16 Jun 1999
- Pearson Education (US)
- Prentice Hall
- Upper Saddle River, United States
Table of contents
Preface. Structure of the Book. About C++ Code Examples. Acknowledgments. Why Should We Be Concerned? 1. Language Principles. Programming. Communication, Abstraction, and Precision. Notation. Tool Integration. Correctness. Types. Flexibility, Correctness, and Reuse. Redundancy and Checking. Encapsulation and Implementation Hiding. Safety and Courtesy Concerns. Implementation and Deployment Concerns. Why OO? On Programming Language Evolution. The Usefulness of Mathematics. Legacy Systems.2. Entities and Types. From Bits to Semantics. Basic Structures: The Class. Usefulness of Grammars. Classes and Types. Structs (C++). Typedefs (C++). Global Environments. Class Metadata. Obsolete (Eiffel). Invariants (Eiffel). Components.3. Modules and Imports. Namespaces (C++). Clusters (Eiffel). Packages (Java). Header Files (C++). Import (Java). ACE Specification (Eiffel). Separate or Integrate?4. Members and Features. Basic Structures. Members (C++ and Java). Anonymous Parameters in Class Definitions (C++). Default Arguments (C++). Local Entity Declarations (Java and C++). Inlines (C++). Pointers and References (C++). Declarations and Definitions (C++). Scope. Constants. Static (C++). Once Routines. Class Variables and Redefinition.5. Type Extension: Inheritance and Virtuals. Basic Structures: Inheritance and Derived Classes. The Nature of Inheritance. Multiple Inheritance. Virtual Classes (C++). Nested Classes (Java and C++). Polymorphism and Inheritance. Union. Enumeration Types. Name Overloading. Virtual Functions (C++). Pure Virtual Functions (C++). Function Overloading (C++ and Java). Virtuals and Inlining.6. Type Extension: Generics and Templates. Basic Structures. C++ Syntax. Constrained Genericity. Genericity and Code Bloat. An Alternative Form of Genericity. Java and Genericity. Some Theory on Genericity. Genericity and Covariance.7. Interfaces and Access Control. 7.1 Basic Structures. Friends (C++). Controlled Exports vs. Friends. Multiple Interfaces. External Assignment (C++ and Java). Export Controls and Nesting. Mutable Const (C++). Generalization.8. Constructors, Destructors, and Other Operators. Nameless Constructors (C++). Default Constructors (C++ and Java). Constructor Inheritance. Expanded Initialization (Eiffel). Constructor Initialization (C++). Destructors (C++). Dispose (Eiffel). Operator = (C++). and -> (C++). Delete and Delete  (C++). Prefix and Postfix Operators (C++). || and && (C++). Operator Overloading (C++ and Eiffel). Implicit Conversions and Overloading (C++). Calling Parent Features. Calling Descendant Features. Conditional Expressions.9. Casts. Type Casts (C++). RTTI and Type Casts (C++). New Type Casts (C++). Type Inference. Java and Casts. Signature Variance (Eiffel).10. Compile Time. Global Analysis. Type-Safe Linkage (C++). Class Interfaces.11. Run Time. Concurrency - It's about Time! Garbage Collection. Constructors and Temporaries (C++). Bad Deletions (C++). Slicing (C++). Program Execution. Dynamic Linking. Exception Handling. LinkageError (Java).12. Other Details. Comments. Hexadecimal Literals (Eiffel). Double, Double Toil and Trouble. Class Header Declarations (C++).13. Projects, Design, and Other Factors. Design by Contract. Preconditions, Types, and Invariants. The Software Life Cycle. CASE Tools. Reusability and Communication. Reusability and Trust. Reusability and Compatibility. Reusability and Portability. Reusability and Size. Idiomatic Programming. Low-Level Coding. Knowing the Correct Construct. Efficiency and Optimization. Standardization, Stability, and Maturity. Complexity. C++: The Overwhelming OOL of Choice?14. General Issues. Pointers. Booleans. Logical and Bitwise Operators. Arrays. Function Arguments. void and void*. NULL vs. 0. char; signed and unsigned. void fn () 340. fn (). fn (void). return. Switch Statements. Metadata in Strings. ++, --. Assignment Operator. Assignment Expressions. Defines. Case Sensitivity. Semicolons. Comments. Cpaghe++i.Bibliography. WEBliography. Bibliographic Index. Index.
About Ian Joyner
Ian Joyner is a member to the Object Technology Group at the Microsoft Research Institute at Macquarie University in Australia. He has been practicing-and critiquing-object-oriented software since 1979.