SKIP THE SHIPPING
Use code NOSHIP during checkout to save 40% on eligible eBooks, now through January 5. Shop now.
Register your product to gain access to bonus material or receive a coupon.
The Object-Oriented Thought Process, Fourth Edition
An introduction to object-oriented concepts for developers looking to master modern application practices
Object-oriented programming (OOP) is the foundation of modern programming languages, including C++, Java, C#, Visual Basic .NET, Ruby, and Objective-C. Objects also form the basis for many web technologies such as JavaScript, Python, and PHP.
It is of vital importance to learn the fundamental concepts of object orientation before starting to use object-oriented development environments. OOP promotes good design practices, code portability, and reuse–but it requires a shift in thinking to be fully understood. Programmers new to OOP should resist the temptation to jump directly into a particular programming language (such as Objective-C, VB .NET, C++, C# .NET, or Java) or a modeling language (such as UML), and instead first take the time to learn what author Matt Weisfeld calls “the object-oriented thought process.”
Written by a developer for developers who want to make the leap to object-oriented technologies, The Object-Oriented Thought Process provides a solutions-oriented approach to object-oriented programming. Readers will learn to understand the proper uses of inheritance and composition, the difference between aggregation and association, and the important distinction between interfaces and implementations.
While programming technologies have been changing and evolving over the years, object-oriented concepts remain a constant–no matter what the platform. This revised edition focuses on interoperability across programming technologies, whether you are using objects in traditional application design, in XML-based data transactions, in web page development, in mobile apps, or in any modern programming environment.
“Programmers who aim to create high quality software–as all programmers should–must learn the varied subtleties of the familiar yet not so familiar beasts called objects and classes. Doing so entails careful study of books such as Matt Weisfeld’s The Object-Oriented Thought Process.”
–Bill McCarty, author of Java Distributed Objects, and Object-Oriented Design in Java
Contents at a Glance
1 Introduction to Object-Oriented Concepts
2 How to Think in Terms of Objects
3 Advanced Object-Oriented Concepts
4 The Anatomy of a Class
5 Class Design Guidelines
6 Designing with Objects
7 Mastering Inheritance and Composition
8 Frameworks and Reuse: Designing with Interfaces and Abstract Classes
9 Building Objects and Object-Oriented Design
10 Creating Object Models
11 Objects and Portable Data: XML and JSON
12 Persistent Objects: Serialization, Marshaling, and Relational Databases
13 Objects in Web Services, Mobile Apps, and Hybrids
14 Objects and Client/Server Applications
15 Design Patterns
Download free code files associated with The Object-Oriented Thought Process here
Becoming a Programming Rock Star: 5 Traits that Make a Great Programmer
How Sitecore and the Modern CMS Follow the Object-Oriented Thought Process
The Education of a Programmer: A Review of Job Types and Academic Degrees
The Importance of Object-Oriented Programming in the Era of Mobile Development
The Rise and Fall of Pointer Arithmetic in the Evolution of Memory Management
Advanced Object-Oriented Concepts
Why Encapsulation Is Fundamental to Object-Oriented Programming
Download the sample pages (includes Chapter 3 and Index)
1 Introduction to Object-Oriented Concepts
The Fundamental Concepts
Objects and Legacy Systems
Procedural Versus OO Programming
Moving from Procedural to Object-Oriented Development
Procedural Programming
OO Programming
What Exactly Is an Object?
Object Data
Object Behaviors
What Exactly Is a Class?
Creating Objects
Attributes
Methods
Messages
Using Class Diagrams as a Visual Tool
Encapsulation and Data Hiding
Interfaces
Implementations
A Real-World Example of the Interface/Implementation Paradigm
A Model of the Interface/Implementation Paradigm
Inheritance
Superclasses and Subclasses
Abstraction
Is-a Relationships
Polymorphism
Composition
Abstraction
Has-a Relationships
2 How to Think in Terms of Objects
Knowing the Difference Between the Interface and the Implementation
The Interface
The Implementation
An Interface/Implementation Example
Using Abstract Thinking When Designing Interfaces
Providing the Absolute Minimal User Interface Possible
Determining the Users
Object Behavior
Environmental Constraints
Identifying the Public Interfaces
Identifying the Implementation
3 Advanced Object-Oriented Concepts
Constructors
When Is a Constructor Called?
What’s Inside a Constructor?
The Default Constructor
Using Multiple Constructors
The Design of Constructors
Error Handling
Ignoring the Problem
Checking for Problems and Aborting the Application
Checking for Problems and Attempting to Recover
Throwing an Exception
The Importance of Scope
Local Attributes
Object Attributes
Class Attributes
Operator Overloading
Multiple Inheritance
Object Operations
4 The Anatomy of a Class
The Name of the Class
Comments
Attributes
Constructors
Accessors
Public Interface Methods
Private Implementation Methods
5 Class Design Guidelines
Modeling Real-World Systems
Identifying the Public Interfaces
The Minimum Public Interface
Hiding the Implementation
Designing Robust Constructors (and Perhaps Destructors)
Designing Error Handling into a Class
Documenting a Class and Using Comments
Building Objects with the Intent to Cooperate
Designing with Reuse in Mind
Designing with Extensibility in Mind
Making Names Descriptive
Abstracting Out Nonportable Code
Providing a Way to Copy and Compare Objects
Keeping the Scope as Small as Possible
A Class Should Be Responsible for Itself
Designing with Maintainability in Mind
Using Iteration in the Development Process
Testing the Interface
Using Object Persistence
Serializing and Marshaling Objects
6 Designing with Objects
Design Guidelines
Performing the Proper Analysis
Developing a Statement of Work
Gathering the Requirements
Developing a Prototype of the User Interface
Identifying the Classes
Determining the Responsibilities of Each Class
Determining How the Classes Collaborate with Each Other
Creating a Class Model to Describe the System
Prototyping the User Interface
Object Wrappers
Structured Code
Wrapping Structured Code
Wrapping Nonportable Code
Wrapping Existing Classes
7 Mastering Inheritance and Composition
Reusing Objects
Inheritance
Generalization and Specialization
Design Decisions
Composition
Representing Composition with UML
Why Encapsulation Is Fundamental to OO
How Inheritance Weakens Encapsulation
A Detailed Example of Polymorphism
Object Responsibility
Abstract Classes, Virtual Methods, and Protocols
8 Frameworks and Reuse: Designing with Interfaces and Abstract Classes
Code: To Reuse or Not to Reuse?
What Is a Framework?
What Is a Contract?
Abstract Classes
Interfaces
Tying It All Together
The Compiler Proof
Making a Contract
System Plug-in Points
An E-Business Example
An E-Business Problem
The Non-Reuse Approach
An E-Business Solution
The UML Object Model
9 Building Objects and Object-Oriented Design
Composition Relationships
Building in Phases
Types of Composition
Aggregations
Associations
Using Associations and Aggregations Together
Avoiding Dependencies
Cardinality
Multiple Object Associations
Optional Associations
Tying It All Together: An Example
10 Creating Object Models
What Is UML?
The Structure of a Class Diagram
Attributes and Methods
Attributes
Methods
Access Designations
Inheritance
Interfaces
Composition
Aggregations
Associations
Cardinality
11 Objects and Portable Data: XML and JSON
Portable Data
The Extensible Markup Language (XML)
XML Versus HTML
XML and Object-Oriented Languages
Sharing Data Between Two Companies
Validating the Document with the Document Type Definition (DTD)
Integrating the DTD into the XML Document
Using Cascading Style Sheets
JavaScript Object Notation (JSON)
12 Persistent Objects: Serialization, Marshaling, and Relational Databases
Persistent Objects Basics
Saving the Object to a Flat File
Serializing a File
Implementation and Interface Revisited
What About the Methods?
Using XML in the Serialization Process
Writing to a Relational Database
Accessing a Relational Database
13 Objects in Web Services, Mobile Apps, and Hybrids
Evolution of Distributed Computing
Object-Based Scripting Languages
A JavaScript Validation Example
Objects in a Web Page
JavaScript Objects
Web Page Controls
Sound Players
Movie Player
Flash
Distributed Objects and the Enterprise
The Common Object Request Broker Architecture (CORBA)
Web Services Definition
Web Services Code
Representational State Transfer (ReST)
14 Objects and Client/Server Applications
Client/Server Approaches
Proprietary Approach
Serialized Object Code
Client Code
Server Code
Running the Proprietary Client/Server Example
Nonproprietary Approach
Object Definition Code
Client Code
Server Code
Running the Nonproprietary Client/Server Example
15 Design Patterns
Why Design Patterns?
Smalltalk’s Model/View/Controller
Types of Design Patterns
Creational Patterns
Structural Patterns
Behavioral Patterns
Antipatterns