- •About the Author
- •Dedication
- •Author’s Acknowledgments
- •Contents at a Glance
- •Table of Contents
- •Introduction
- •Who Should Buy This Book
- •How This Book Is Organized
- •Part I: Programming a Computer
- •Part II: Learning Programming with Liberty BASIC
- •Part III: Advanced Programming with Liberty BASIC
- •Part VI: Internet Programming
- •Part VII: The Part of Tens
- •How to Use This Book
- •Foolish assumptions
- •Icons used in this book
- •Why Learn Computer Programming?
- •How Does a Computer Program Work?
- •What Do I Need to Know to Program a Computer?
- •The joy of assembly language
- •C: The portable assembler
- •High-level programming languages
- •Database programming languages
- •Scripting programming languages
- •The program’s users
- •The target computer
- •Prototyping
- •Choosing a programming language
- •Defining how the program should work
- •The Life Cycle of a Typical Program
- •The development cycle
- •The maintenance cycle
- •The upgrade cycle
- •Writing Programs in an Editor
- •Using a Compiler or an Interpreter
- •Compilers
- •Interpreters
- •P-code: A combination compiler and interpreter
- •So what do I use?
- •Squashing Bugs with a Debugger
- •Writing a Help File
- •Creating an Installation Program
- •Why Learn Liberty BASIC?
- •Liberty BASIC is easy
- •Liberty BASIC runs on Windows
- •You can start using Liberty BASIC today
- •Installing Liberty BASIC
- •Loading Liberty BASIC
- •Your First Liberty BASIC Program
- •Running a Liberty BASIC program
- •Saving a Liberty BASIC program
- •Getting Help Using Liberty BASIC
- •Exiting Liberty BASIC
- •Getting input
- •Displaying output
- •Sending Data to the Printer
- •Storing Data in Variables
- •Creating a variable
- •Assigning a value to a variable
- •Declaring your variables
- •Using Constants
- •Commenting Your Code
- •Using variables
- •Working with precedence
- •Using parentheses
- •Manipulating Strings
- •Declaring variables as strings
- •Smashing strings together
- •Counting the length of a string
- •Playing with UPPERCASE and lowercase
- •Trimming the front and back of a string
- •Inserting spaces
- •Yanking characters out of a string
- •Looking for a string inside another string
- •Using Boolean Expressions
- •Using variables in Boolean expressions
- •Using Boolean operators
- •Exploring IF THEN Statements
- •IF THEN ELSE statements
- •Working with SELECT CASE Statements
- •Checking a range of values
- •Checking a relational operator
- •Boolean expression inside the loop
- •Looping a Fixed Number of Times
- •Counting with different numbers
- •Counting in increments
- •Anatomy of a Computer Bug
- •Syntax Errors
- •Fun with Logic Errors
- •Stepping line by line
- •Tracing through your program
- •Designing a Window
- •Creating a new window
- •Defining the size and location of a window
- •Adding color to a window
- •Putting Controls in a Window
- •Creating a command button
- •Displaying text
- •Creating a check box
- •Creating a radio button
- •Creating text boxes
- •Creating list boxes
- •Creating combo boxes
- •Creating group boxes
- •Storing Stuff in Text Files
- •Creating a new text file
- •Putting stuff in a text file
- •Adding new stuff to an existing text file
- •Retrieving data from a text file
- •Creating a new binary file
- •Saving stuff in a binary file
- •Changing stuff in a binary file
- •Retrieving stuff from a binary file
- •Creating a Graphics Control
- •Using Turtle Graphics
- •Defining line thickness
- •Defining line colors
- •Drawing Circles
- •Drawing Boxes
- •Displaying Text
- •Making Sounds
- •Making a beeping noise
- •Playing WAV files
- •Passing Data by Value or by Reference
- •Using Functions
- •Defining a function
- •Passing data to a function
- •Calling a function
- •Exiting prematurely from a function
- •Using Subroutines
- •Defining a subroutine
- •Passing data to a subroutine
- •Calling a subroutine
- •Exiting prematurely from a subroutine
- •Writing Modular Programs
- •Introducing Structured Programming
- •Sequential instructions
- •Branching instructions
- •Looping instructions
- •Putting structured programming into practice
- •The Problem with Software
- •Ways to Make Programming Easier
- •Breaking Programs into Objects
- •How to use objects
- •How to create an object
- •Creating an object
- •Starting with a Pointer
- •Defining the parts of a linked list
- •Creating a linked list
- •Managing a linked list
- •Making Data Structures with Linked Lists
- •Stacks
- •Queues
- •Trees
- •Graphs
- •Creating a Record
- •Manipulating Data in Records
- •Storing data in a record
- •Retrieving data from a record
- •Using Records with Arrays
- •Making an Array
- •Making a Multidimensional Array
- •Creating Dynamic Arrays
- •Insertion Sort
- •Bubble Sort
- •Shell Sort
- •Quicksort
- •Sorting Algorithms
- •Searching Sequentially
- •Performing a Binary Search
- •Hashing
- •Searching by using a hash function
- •Dealing with collisions
- •Picking a Searching Algorithm
- •Choosing the Right Data Structure
- •Choosing the Right Algorithm
- •Put the condition most likely to be false first
- •Put the condition most likely to be true first
- •Clean out your loops
- •Use the correct data types
- •Using a Faster Language
- •Optimizing Your Compiler
- •Programming Computer Games
- •Creating Computer Animation
- •Making (And Breaking) Encryption
- •Internet Programming
- •Fighting Computer Viruses and Worms
- •Hacking for Hire
- •Participating in an Open-Source Project
- •Niche-Market Programming
- •Teaching Others about Computers
- •Selling Your Own Software
- •Trying Commercial Compilers
- •Windows programming
- •Macintosh and Palm OS programming
- •Linux programming
- •Testing the Shareware and
- •BASIC compilers
- •C/C++ and Java compilers
- •Pascal compilers
- •Using a Proprietary Language
- •HyperCard
- •Revolution
- •PowerBuilder
- •Shopping by Mail Order
- •Getting Your Hands on Source Code
- •Joining a Local User Group
- •Frequenting Usenet Newsgroups
- •Playing Core War
- •Programming a Battling Robot
- •Toying with Lego Mindstorms
- •Index
- •End-User License Agreement
256 Part IV: Dealing with Data Structures
The Problem with Software
No matter how powerful a computer is, the software that controls it limits its power. The biggest problem with software is reliability. Reliability means that software works without crashing, freezing up, or acting erratically. Software reliability is especially critical with real-time systems, such as airplane navigation systems, computers that host corporate Web sites, and financial trading programs, where losing a single number can mean the loss of billions of dollars.
Of course, reliable software is useless if you can’t write it in time. Because of the conflicting demands that companies and programmers finish software on time and make sure that it works reliably, most rush their software out before they can fully test it (which means that it probably doesn’t work right), or they delay the software so long that people switch to a competing product. (And those who wait still have no guarantee that the software’s going to work correctly, even if it’s several years late.)
Whatever fancy new technology, programming language, or programming style may appear, software always faces the twin challenge of working right while reaching users as quickly as possible. This situation means that all software is likely to contain bugs that keep it from working as efficiently as possible.
Ways to Make Programming Easier
In the early days of computers, most programs were fairly small. As a result, programmers often wrote programs with little planning and organization. After finishing the program, they’d run it to see whether it worked. If it didn’t work, they simply rewrote the program and tried again.
Such a trial-and-error approach worked fine for writing small programs, but after programs became larger and more complex, rewriting the program over and over made programming tedious and error-prone. The larger the program, the more places bugs could hide, making the program more likely not to work at all.
With today’s programs often consisting of a million or more lines of code, the trial-and-error method of writing programs no longer works. Writing a large program without planning or organization is like trying to build a skyscraper without blueprints.
Chapter 19: Playing with Object-Oriented Programming 257
Programmers adopted a new strategy. Instead of trying to write one huge program, they decided to write a bunch of little programs (known as subprograms).
The idea was that small programs are easier to write and debug, so you just need to write a bunch of small programs, paste them together, and end up with a larger program that works reliably, as shown in Figure 19-1.
Although the idea of writing small subprograms and pasting them together like building blocks was a sound idea, problems still existed. You may divide a large program into smaller subprograms, but the instructions that you store in one subprogram can still manipulate data that another subprogram uses, as shown in Figure 19-2.
To solve this problem (and solving problems is something that programmers continually strive to do), programmers developed the idea of isolating subprograms in separately compiled files. In this way, subprograms can’t mess around with each other’s data, and yet they can still work together to create one larger program.
Taking the idea of isolating subprograms into separate and isolated parts (known as modules in programming lingo), programmers eventually developed the idea for objects and, hence, the term object-oriented programming.
Figure 19-1: |
|
|
Breaking a |
|
|
large |
|
|
program |
|
|
into smaller |
|
|
subpro- |
|
|
grams can |
|
|
make |
|
|
programs |
One huge continuous program |
A large program divided into |
easier to |
||
write. |
|
several subprograms |