An Introduction to Programming and Object-Oriented Design Using Java
By Jaime Nińo and Fred Hosch
Slides by Darwin Baines and    Robert Burton

Chapter 1
Introduction

This chapter discusses
Computing as a science.
Analysis of large software systems.
Fundamental hardware and software concepts.
Basic notions necessary to survive.

What is Computer Science?
Computer science is a science of abstraction – creating the right model for a problem and devising the appropriate mechanizable technique to solve it.
A. Aho and J. Ullman
Not the “science of computers.”
Many concepts were framed and studied before the electronic computer.
To the mathematicians and logicians of the ‘20’s and ‘30’s, a computer was a person with pencil and paper.

The Science of Computing
Automated problem solving.
Automated systems that produce solutions.
Methods to develop solution strategies for these systems.
Application areas for automatic problem solving.

Foundations of computing
Fundamental mathematical and logical structures for
Understanding computing.
Analyzing and verifying the correctness of software and hardware.

Systems definitions
computer architecture: organization and structure of hardware.
operating systems: fundamental resource management software.
distributed systems:connecting computers together in order to share resources and information (networking).

Applications
There are numerous applications of computer science.
Artificial intelligence
Data base management
Computer graphics
Etc.

Methods
Design and assessment of techniques and software tools for creating automated problem solutions.
programming language: a precise, formal notation for expressing and analyzing a natural, correct, efficient program solution.

Methods (cont.)
software engineering: the study of methods for producing and evaluating software. This is the primary topic of the course.

Slide 11

What is a Software System?
Sometimes called a program or application.
A temporary solution to a changing problem.
2 major attributes inherent in Software Systems:
dynamics
complexity

Dealing with complexity: Composition
composite structure: a software system composed of manageable pieces.
The smaller the component, the easier it is to build and understand.
The more parts, the more possible interactions there are between parts and the more complex the resulting structure.

Dealing with complexity: Composition (cont.)
Balance between simplicity and interaction minimization.
Example: An audio system is easy to manage because each component has a carefully specified function and the components  are easily integrated i.e. The speakers are easily connected to the amplifier.

Counterexample
The function of a “Rube Goldberg” device is not obvious, modification is almost unthinkable, the parts lack an intrinsic relationship to the problem the device solves, and the complexity is high.

Slide 16

Dealing with complexity: Abstraction
Dealing with system components and their interactions without worrying about specific details.
Not “vague” or “imprecise.”
Limitation of view to a few properties.
Elimination of the irrelevant and amplification of the essential.
Capturing commonality between different things.

Slide 18

Two aspects of a system:
data: the information the program deals with.
functionality: what the program does with the data.

Systems:Data
data descriptions: the type of data to be stored; fixed for a program.
data values: actual values stored for each descriptor. Variable each time the program is run.
Example:
Descriptor: Name  Value:John

Systems: Functionality
computation: Performance of some sequence of goal-directed actions with a set of data values.
processor: Whatever performs the actions.
algorithm: A set of instructions describing a pattern of behavior guaranteed to achieve some goal.

Components of a computation

Object-oriented systems
Composite, modular constructions, built using abstraction, consisting of components, and organized around the data.
model: an abstraction of a real-world problem that can be represented and manipulated with a computing system.
software system: a collection of abstractions that work together to solve problems.

Object-oriented systems (cont.)
These abstractions are called objects.
Each object has its own properties and functionality.
Reusable components are the key to the efficient production of reliable systems.

Computer system
Input/Output:communication with the outside world.
processor: performs computation using the instruction set.
memory: stores the data and algorithms the system is using, i.e. RAM.
file system: stores data and algorithms not currently being used. i.e. disks.
network: several connected computers and other devices.

Simple model of a computer system

Memory
Data encoding schemes: letters, digits, punctuation marks, etc. often are encoded as 8-bit sequences.
“A” might be represented as 01000001.
Memory is divided into fixed size locations, each with a unique address.
Data and instructions are accessed using their addresses and by knowing their sizes.

Successive snapshots of a machine

Software tools
operating system: fundamental hardware-resource management software.
programming language: the formal expression of data descriptions and algorithms.
text editor: the means provided for us to write and edit programs.

Software tools (cont.)
compiler: a program that translates programs written in a specific programming language into a a more machine-like language.
interpreter: software that reads and executes a machine-independent intermediate language (called “byte-code” in the case of Java).

Slide 31

Operating system
MS-DOS, Windows NT, Solaris, etc.
Performs functions such as verifying user names and passwords, deciding where in memory a program will be loaded, loading programs from disk, etc.

Programming languages
Java, C++, Pascal, etc.
syntax: the set of grammatical and punctuation rules for the language.
semantics: the set of rules that specify the meaning of syntactically legal constructs.
Each legal construct has exactly one meaning.

Errors in the programming process
error: a mistake made in the design, programming, or use of a system.
failure: inability of the system to perform its intended function.
Errors cause failures.

Errors in the programming process (cont.)
Computer systems fail because of
conceptual errors
data errors
hardware failures
software errors
Conceptual errors: misunderstanding of the system.

Errors in the programming process (cont.)
data errors: incorrect data.
software errors:
Syntactic errors: writing something that the programming language doesn’t understand.  They are found during compilation.
Logical errors: syntactically correct but not programmed logically (“wok your dog”)

We’ve covered
Large systems are complex and change over time.
To address this, we build systems that are modular, with composite construction, and make extensive use of abstraction.
We also covered, a conceptual model of the supporting hardware system;
And a basic understanding of the purpose of fundamental software such as operating systems, compilers, and interpreters.

Glossary

Glossary (cont.)

Glossary (cont.)

Glossary (cont.)

Glossary (cont.)

Glossary (cont.)