Java By Abstraction

A Client-View Approach

H. Roumani

Table of Contents

 

Preface

 

To the Student

 

Chapter 1: Introduction to Programming

 

1.1     Anatomy of a Program

          1.1.1          A Quick Tour

          1.1.2          Language Elements

          1.1.3          Program Execution

 

1.2     The Declaration Statement

          1.2.1          Variable Names

          1.2.2          The Integer Types

          1.2.3          Declaration and Memory

          1.2.4          Other Data Types

          1.2.5          Primitive and Non-Primitive Types

 

1.3     The Assignment Statement

          1.3.1          The int Operators

          1.3.2          Other Arithmetic Operators

          1.3.3          Mixed Types and Casting

 

Lab 1: The Computing Environment on Campus

 

 

Chapter 2: Programming By Delegation

 

2.1     Computing Paradigms

          2.1.1          Procedural Paradigm

          2.1.2          Modular Paradigm

          2.1.3          Object-Oriented Paradigm

          2.1.4          Case Study: Procuring Bread

 

2.2     Application Development

          2.2.1          Application Architecture

          2.2.2          The Client View

          2.2.3          Post-Compilation Errors

          2.2.4          Case Study: The Java Standard Library

          2.2.5          Ready-Made I/O Components

 

2.3     Software Engineering

          2.3.1          Risk Mitigation by Early Exposure

          2.3.2          Handling Constants

          2.3.3          Contracts

          2.3.4          Case Study: Meet the Managers

 

Lab 2: The Development Environment

 

 

Chapter 3: Using APIs

 

3.1      Anatomy of an API

          3.1.1          Overall Layout

          3.1.2          Fields

          3.1.3          Methods

 

3.2     A Development Walkthrough

          3.2.1          The Development Process

          3.2.2          The Mortgage Application

          3.2.3          Output Formatting

          3.2.4          Relational Operators

          3.2.5          Input Validation

          3.2.6          Assertions

 

3.3     General Characteristics of Utility Classes

          3.3.1          Memory Diagram

          3.3.2          Advantages of Utility Classes

          3.3.3          Case Study: Dialog I/O

 

Lab 3: A Development Project

 

 

Chapter 4: Using Objects

 

4.1     What is an Object?

          4.1.1          An Abstraction View

          4.1.2          An API View

 

4.2     The Life of an Object

          4.2.1          The Birth of an Object

          4.2.2          Objects at Work

          4.2.3          The Object and its Reference

          4.2.4          Objects Equality

          4.2.5          Obligatory Methods

          4.2.6          The Death of an Object

 

4.3     The Object's State

          4.3.1          Accessors and Mutators

          4.3.2          Attribute Privacy

          4.3.3          Object with static Features

          4.3.4          Object with final Features

 

Lab 4: Exploring Objects

 

 

Chapter 5: Control Structures

 

5.1     Selection

          5.1.1          Flow of Control

          5.1.2          The if Statement

          5.1.3          Building the Condition

          5.1.4          Multi-Way Branching

 

5.2     Iteration

          5.2.1          Flow of Control

          5.2.2          The for statement

          5.2.3          Building the Loop

          5.2.4          Nested Loops

 

5.3     Applications

          5.3.1          Exception-Free Input Validation

          5.3.2          File I/O

 

Lab 5: Exploring Control Structures

 

 

Chapter 6: Strings

 

6.1     Language Support

          6.1.1          The String Class

          6.1.2          The Masquerade and the + Operator

 

6.2     String Handling

          6.2.1          Method Overview

          6.2.2          Accessors

          6.2.3          Transformers

          6.2.4          Comparators

          6.2.5          Numeric Strings

 

6.3     Applications

          6.3.1          Character Frequency

          6.3.2          Character Substitution

          6.3.3          Fixed-Size Codes

          6.3.4          Variable-Size Codes

 

6.4     Advanced String Handling

          6.4.1          The StringBuffer Class

          6.4.2          Pattern Matching & Regular Expressions

 

Lab 6: Strings & Cryptography

 

 

Chapter 7: Software Development

 

7.1     The Development Process

          7.1.1          The Waterfall Model

          7.1.2          The Iterative Methodology

          7.1.3          Elements of UML

 

7.2     Software Testing

          7.2.1          The Essence of Testing

          7.2.2          The Test Vector

          7.2.3          Debugging

 

7.3     Case Study: Trajectories

          7.3.1          Iterative Development

          7.3.2          Unit Testing

          7.3.3          Integration Testing

 

Lab 7: Testing & HTML Parsing

 

 

Chapter 8: Aggregation

 

8.1     What is Aggregation?

          8.1.1          Definition and Terminology

          8.1.2          The Aggregate's Constructor

          8.1.3          Accessors & Mutators

          8.1.4          The Client's Perspective

          8.1.5          Case Study: I/O Streams

          8.1.6          Case Study: Graphics

 

8.2     Working with Collections

          8.2.1          Creating the Collection

          8.2.2          Adding / Removing Elements

          8.2.3          Indexed Traversals

          8.2.4          Chained Traversals

          8.2.5          Searching

          8.2.6          Search Complexity

 

Lab 8: The Calendar & Graphics Aggregates

 

 

Chapter 9: Inheritance

 

9.1     What is Inheritance?

          9.1.1          Definition and Terminology

          9.1.2          The Subclass API

          9.1.3          Case Study: Credit Cards

9.2     Working with Inheritance Hierarchies

          9.2.1          The Substitutability Principle

          9.2.2          Early and Late Binding

          9.2.3          Polymorphism

          9.2.4          Abstract Classes and Interfaces

          9.2.5          Case Study: Revisiting Streams

 

9.3     Obligatory Inheritance

          9.3.1          The Object Class

          9.3.2          Case Study: Object Serialization

          9.3.3          Generics

 

Lab 9: The Fraction & Shape Hierarchies

 

 

Chapter 10: The Collection Framework

 

10.1    What is the Collection Framework?

          10.1.1          The Main Interfaces

          10.1.2          The Implementing Classes

          10.1.3          Revisiting Generics

 

10.2    Using the Framework

          10.2.1          API Highlights

          10.2.2          The Iterator

          10.2.3          Searching and Sorting

          10.2.4          Summary of Features

 

10.3    Applications

          10.3.1          Detecting Duplicates

          10.3.2          Word Frequencies

          10.3.3          Sorting a Map

 

Lab 10: A Robot in a Maze

 

 

Chapter 11: Exception Handling

 

11.1    What are Exceptions?

          11.1.1          Runtime Errors

          11.1.2          The Delegation Model

 

11.2    Java's Exception Constructs

          11.2.1          The Basic try-catch Construct

          11.2.2          Handling Multiple Exceptions

          11.2.3          Other Constructs

         

11.3    Exception Objects

          11.3.1          The Throwable Hierarchy

          11.3.2          Object-Oriented Exception Handling

          11.3.3          Checked Exceptions

 

11.4    Building Robust Apps

          11.4.1          Validation versus Exception

          11.4.2          Logic Errors

 

Lab 11 Socket Programming

 

 

Chapter 12: A Multi-Class Application

 

12.1    Introduction

          12.1.1          Multi-Class Applications

          12.1.2          The Abstract Foods Company

 

12.2   Inventory Control

          12.2.1          The Items

          12.2.2          The Fresh Items

          12.2.3          The Inventory Map

         

12.3    Contacts

          12.3.1          The Need for an Abstract Class

          12.3.2          The Clients

          12.3.3          The Suppliers

          12.3.4          The Contacts Map

 

12.4   Transactions

          12.4.1          Why Are Transactions Needed?

          12.4.2          The Trx Class

          12.4.3          The Journal List

 

Lab 12: Inventory, Contacts, and Transactions

 

          Appendix A   UCS, Unicode, and ASCII

          Appendix B   Operators & Precedence

          Appendix C   Coding Style

          Appendix D   A Glimpse of The Implementer's View

          Appendix E   The type API

          Appendix F   The CD and Your Home PC

          Index