Introduction to Object Oriented Programming (OOP)



Similar documents
Introduction to Object Oriented Programming (OOP)

First Java Programs. V. Paúl Pauca. CSC 111D Fall, Department of Computer Science Wake Forest University. Introduction to Computer Science

Topics. Introduction. Java History CS 146. Introduction to Programming and Algorithms Module 1. Module Objectives

Chapter 1 Java Program Design and Development

C++ INTERVIEW QUESTIONS

Object Oriented Software Design II

An Incomplete C++ Primer. University of Wyoming MA 5310

Java Interview Questions and Answers

An Overview of Java. overview-1

PART-A Questions. 2. How does an enumerated statement differ from a typedef statement?

Fundamentals of Java Programming

KITES TECHNOLOGY COURSE MODULE (C, C++, DS)

The Java Series. Java Essentials I What is Java? Basic Language Constructs. Java Essentials I. What is Java?. Basic Language Constructs Slide 1

Pemrograman Dasar. Basic Elements Of Java

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Introduction to Object-Oriented Programming

CSE 452: Programming Languages. Acknowledgements. Contents. Java and its Evolution

Evolution of the Major Programming Languages

JAVA - QUICK GUIDE. Java SE is freely available from the link Download Java. So you download a version based on your operating system.

History OOP languages Year Language 1967 Simula Smalltalk

Basic Java Constructs and Data Types Nuts and Bolts. Looking into Specific Differences and Enhancements in Java compared to C

Crash Course in Java

The programming language C. sws1 1

C++ Programming Language

Java CPD (I) Frans Coenen Department of Computer Science

Java Programming Fundamentals

Multichoice Quetions 1. Atributes a. are listed in the second part of the class box b. its time is preceded by a colon. c. its default value is

Contents. Java - An Introduction. Java Milestones. Java and its Evolution

Installing Java (Windows) and Writing your First Program

El Dorado Union High School District Educational Services

13 Classes & Objects with Constructors/Destructors

CSC 551: Web Programming. Spring 2004

AP Computer Science Java Subset

Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.

Embedded Systems. Review of ANSI C Topics. A Review of ANSI C and Considerations for Embedded C Programming. Basic features of C


Java SE 8 Programming

Bachelors of Computer Application Programming Principle & Algorithm (BCA-S102T)

The C Programming Language course syllabus associate level

Introduction to Java

Characteristics of Java (Optional) Y. Daniel Liang Supplement for Introduction to Java Programming

Java (12 Weeks) Introduction to Java Programming Language

C++FA 5.1 PRACTICE MID-TERM EXAM

A deeper look at Inline functions

Storage Classes CS 110B - Rule Storage Classes Page 18-1 \handouts\storclas

COS 217: Introduction to Programming Systems

Course Name: ADVANCE COURSE IN SOFTWARE DEVELOPMENT (Specialization:.Net Technologies)

Tutorial: Getting Started

The Java Virtual Machine and Mobile Devices. John Buford, Ph.D. Oct 2003 Presented to Gordon College CS 311

INTRODUCTION TO COMPUTER PROGRAMMING. Richard Pierse. Class 7: Object-Oriented Programming. Introduction

Programming by Contract. Programming by Contract: Motivation. Programming by Contract: Preconditions and Postconditions

Handout 1. Introduction to Java programming language. Java primitive types and operations. Reading keyboard Input using class Scanner.

language 1 (source) compiler language 2 (target) Figure 1: Compiling a program

ECE 122. Engineering Problem Solving with Java

public static void main(string[] args) { System.out.println("hello, world"); } }

Part I. Multiple Choice Questions (2 points each):

Compiling Object Oriented Languages. What is an Object-Oriented Programming Language? Implementation: Dynamic Binding

Chapter 1 Fundamentals of Java Programming

Infrastructure that supports (distributed) componentbased application development

1 Abstract Data Types Information Hiding

Moving from CS 61A Scheme to CS 61B Java

Lecture 7 Notes: Object-Oriented Programming (OOP) and Inheritance

INTRODUCTION TO OBJECTIVE-C CSCI 4448/5448: OBJECT-ORIENTED ANALYSIS & DESIGN LECTURE 12 09/29/2011

Object Oriented Software Design

What is COM/DCOM. Distributed Object Systems 4 COM/DCOM. COM vs Corba 1. COM vs. Corba 2. Multiple inheritance vs multiple interfaces

6.088 Intro to C/C++ Day 4: Object-oriented programming in C++ Eunsuk Kang and Jean Yang

Sources: On the Web: Slides will be available on:

Introduction to Scientific Computing Part II: C and C++ C. David Sherrill School of Chemistry and Biochemistry Georgia Institute of Technology

Java applets. SwIG Jing He

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

UIL Computer Science for Dummies by Jake Warren and works from Mr. Fleming

Software Engineering Techniques

Syllabus for CS 134 Java Programming

Basic Programming and PC Skills: Basic Programming and PC Skills:

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

IS0020 Program Design and Software Tools Midterm, Feb 24, Instruction

C++FA 3.1 OPTIMIZING C++

Glossary of Object Oriented Terms

Object-Oriented Design Lecture 4 CSU 370 Fall 2007 (Pucella) Tuesday, Sep 18, 2007

CORBA Programming with TAOX11. The C++11 CORBA Implementation

Course Title: Software Development

C# and Other Languages

How To Write A Program In Java (Programming) On A Microsoft Macbook Or Ipad (For Pc) Or Ipa (For Mac) (For Microsoft) (Programmer) (Or Mac) Or Macbook (For

Java Crash Course Part I

Chapter One Introduction to Programming

Class 16: Function Parameters and Polymorphism

Chapter 2 Introduction to Java programming

CSC230 Getting Starting in C. Tyler Bletsch

Konzepte objektorientierter Programmierung

Object Oriented Software Design

Java in Education. Choosing appropriate tool for creating multimedia is the first step in multimedia design

Polymorphism. Problems with switch statement. Solution - use virtual functions (polymorphism) Polymorphism

Programmierpraktikum

Boolean Expressions, Conditions, Loops, and Enumerations. Precedence Rules (from highest to lowest priority)

C++ Outline. cout << "Enter two integers: "; int x, y; cin >> x >> y; cout << "The sum is: " << x + y << \n ;

Installing Java. Table of contents

Curriculum Map. Discipline: Computer Science Course: C++

Transcription:

Introduction to Object Oriented Programming (OOP) Sept. 21, 2005 by Dr. Lyle N. Long Professor of Aerospace Engineering The Pennsylvania State University, University Park, PA 16802 lnl@psu.edu http://www.personal.psu.edu/lnl/

Outline Computer Languages Characteristics of OOP: Encapsulation Inheritance Polymorphism C++ Java Conclusions 2 L.N.Long

3 L.N.Long Programming Languages C++ will remain the pre-eminent language for very large software projects. Extremely difficult language. Lot of room for errors. Not fully object oriented (has to carry the C legacy). Java's importance is growing rapidly, it has become the language of choice for internet and intranet applications, including small devices. It's role has spread to many applications (refrigerators, cell phones, watches, supercomputers,...). Java has many features not available in C++, and does not have some of the problems of C++. Fortran, Pascal, Cobol, Ada and other languages will be niche markets. (F95 is immensely better than F77). They will remain for some time, due to the huge installed base of programs, but new programs will (most likely) be written in C++ or Java.

Free Expensive Programming C++ Java or C# C Fortran 95 Basic Perl Matlab / Mathematica Spreadsheet Increasing Complexity and Capability For most small programming jobs, Matlab is great (builtin graphics, linear algebra, math functions, ), for most large projects C++ (or Java) might be best. Fortran is best for almost no job. 4 L.N.Long

Effort, Software Size, & Complexity Procedural (e.g. Fortran) Effort OOP (e.g. C++) Size and Complexity 5 L.N.Long

Key OOP Languages C++ Java C# (windows only) Ada95 Smalltalk Eiffel Simula 6 L.N.Long

Introduction C++ is an ANSI standard now (1998) http://www.ansi.org/ C++ is built for speed and power. As a programmer you can usually do whatever you want, and the compiler will not second guess you. So you can get into trouble very easily. For example, array indices are not checked at compile or run-time. So if you want to do: int x[100]; x[-10] = 900; x[200] = 9; the compiler will often let you!! You can easily corrupt computer memory. Likewise with pointers and dynamic memory you can get into trouble (eg memory leaks). 7 L.N.Long

Introduction (cont.) The main elements of C++ that are different than Java are: Compilers Pointers Memory handling Structures Classes Operator Overloading Input / Output Libraries Legacy with C 8 L.N.Long

Object Oriented Programming OOP allows programmers to more closely model the real world than ever before. Rapid prototyping. Object-Oriented programs can be built and modified very quickly because it provides the programmer with excellent tools for abstraction. OOP produces reusable code. Once objects are built, it is very easy to use them in future applications so you need not ever reinvent the wheel. OOP helps programmers work in dynamic environments. Object- Oriented programs can be modified quickly and easily as real-world requirements change. OOP lets you build large complex codes our of small manageable pieces of code 9 L.N.Long

C++ and Java Don t forget that it is very easy to write bad code in any language. Writing good code is an art, and requires lots of experience. I would actually rather have a really well written code in Fortran than a bad C++ code Also, C++ gives you the capability to program with reckless abandon. With pointers, you can often change the value of any memory location in the machine! Even if the OS really needs that data! C++ is better than Fortran, but it is hard to learn to do it well If you are going to use C++ you have to be serious about programming. Java is more forgiving. 10 L.N.Long

A Few Facts About Java (from Scott McNealy, CEO Sun) Java is only 9 years old 25,000 people attended the JavaOne Conference in 2000 2.5 million Java programmers (expect 4 million by 2003) 5 million downloads of Java Development Kit (JDK) 1.1 million visitors per month at java.sun.com 80% of universities teach Java (50% of these have it required) 2000 Java Books published 50% of programmers use Java 11 L.N.Long

Java Features Object oriented Graphical user interfaces Remote method invocation Graphics Serial port drivers Fairly machine independent Multi-threaded Java docs 12 L.N.Long

Java Features Object oriented Graphical user interfaces Remote method invocation Graphics Serial port drivers Fairly machine independent Multi-threaded Java docs C++ FLTK CORBA or Sockets OpenGL Open source software Compilers POSIX threads Doxygen 13 L.N.Long

Java Java has definitely been oversold C, C++ and Ada all have their place Easy to generate bad C++ code Ada is good, but never caught on (outside of DOD) Java suffered early on with performance and scalability problems mysql and PHP might be better for many web applications But new Java processors and embedded computing apps are well suited to Java And it is easier to use Java instead of C++ + FLTK + CORBA + POSIX + OpenGL + 14 L.N.Long

15 L.N.Long Measuring language popularity using SourceForge

16 L.N.Long Measuring language popularity using Altavista hits

Object Oriented Programming OOP: Inheritance, polymorphism, and encapsulation Inheritance: Objects can inherit the properties of other objects. We can create mammal objects, and dogs and cats can be new objects that simply inherit the properties of the mammals. Polymorphism: You can write functions that behave differently depending on what kind of data is passed to them. E.g. you could make a sqrt function that would work with integers, floats, or even complex numbers. You could also create a run() method for mammals that would work fine for cats or dogs. Encapsulation: Data and methods (ie functions) are stored together in a class. Code becomes modifiable, understandable, and portable. 17 L.N.Long

Encapsulation In OOP the data and methods associated with objects are normally hidden from the users Objects communicate with each other thru welldefined interfaces The details of the code are not available outside the class, the author decides what others can see, modify, and use. Variables (data) can be Public, Protected, Private, 18 L.N.Long

Inheritance Inheritance permits software reusability New classes can be created from old classes The attributes (data) and behavior (methods) of the old class are available to the new class New data and methods can be added to the new class also Inheritance allows you to write key pieces of code once and use it over and over This can get kind of confusing, just remember you can write lots of simple little C++ or Java programs without using inheritance and polymorphism (and you will often be using them without knowing it!) 19 L.N.Long

Polymorphism An object s ability to decide what method to apply to itself, depending on where it is in the inheritance heirarchy, is usually called polymorphism. The idea behind polymorphism is that while the message may be the same, objects may respond differently. (From Core Java book ) This is why I referred to it as method overloading on steroids. (i.e. it is more powerful than simply method overloading) The key to making polymorphism work is dynamic binding. When you apply a method to an object it decides at run time what to do, it is not decided when the code is compiled (static binding). 20 L.N.Long

Polymorphism (cont.) Polymorphism allows you to avoid very complicated switch or if/else constructs that are required in other languages to treat special cases The same method name can be used in many different ways by different objects, this is especially interesting for inherited objects Method overloading Ideally we would like to have the power to loop thru our objects as though they were all the same, but have the right data and methods used in all subclasses For example, what if I had lots of shapes (circles, squares,..) and I wanted to animate them on the screen. I can simply loop thru all Shape objects and do that! Without the need for any switch statements. 21 L.N.Long

class: A Few Terms A class is a blueprint for how to make an object method: A function (defined in a class) data numbers, arrays, objects, (defined in a class) object: An instance of a class dot notation: mycat.size (this could return the size of a cat) mycat.run() (this could make the cat run) System.out.println() (can have more than one dot) Arrays of Objects mycats[i][j] 22 L.N.Long

HelloWorld Java Program public class HelloWorld { public static void main ( String args[] ){ System.out.println( "Hello World!"); } } Store the above in a file called HelloWorld.java then do: javac HelloWorld.java then do: java HelloWorld 23 L.N.Long

C++ Hello World preprocessor command #include <iostream.h> OR int main(void) { } cout << Hello World! << endl; return 0; optional (0 = success) #include <iostream.h> int main(void){cout << Hello World! <<endl;return 0;} (don t do this) 24 L.N.Long

Object Oriented Programming (OOP) OOP encapsulates data (e.g. numbers and objects) and methods (functions) Information hiding is a key aspect of OOP Implementation details are hidden from the user ( we can drive a car without knowing how it is built ) C and Fortran are action oriented (verbs) Java is object oriented (nouns) C++ can be in between...pure C code will compile in a C++ compiler 25 L.N.Long

Modifiability Readability Benefits of OOP Maintainability Reliability Reusability... the ilities Languages such as Fortran are fine for relatively small programs when you are only interested in number crunching (FORmula TRANslation). But for large programming tasks, it is a clunky old language (without graphics, GUI s, threads, OOP, and networking,...). 26 L.N.Long

OOP To create an instance of this class (an object), do: Molecule x = new Molecule(); public class Molecule { public double u, v, w ; public double maxvelocity () { double max; max = Math.max ( u, v ); max = Math.max ( max, w ) ; return max; } To use u you could do: } newu = x.u To use the method: vmax = x.maxvelocity() 27 L.N.Long

Objects and Pointers Don t forget about the new notation, we are used to this: Molecule a; a.x = 3.0; (if x is public) But what if you have a pointer to an object: Molecule * b; (b is a pointer to a Molecule ) now you cannot do this, since b is not a Molecule: b.x = 3.0 you have to do this: b->x = 3.0; Similarly for class methods: b->move(); 28 L.N.Long

29 L.N.Long Class Example class Molecule { private: double x,y,z; double u,v,w; char * name; int atoms; static double dt; static int total; }; public: void move() { x = x + dt * u; y = y + dt * v; z = z + dt * w; } optional. these will be private even if the keyword private is not there. // molecule location // molecule velocity // molecule name (e.g. H2O) // number of atoms // simulation time step // number of molecules a common mistake is to omit the semicolon

Private and Public We usually use private class variables, which means only class methods can use them (private variables are recommended, otherwise encapsulation is broken) If you use public variables, then users can simply do: myobject.x = 2.0; this is bad. use set and get methods instead. myobject.setx( 2.0 ); It can seem like a lot of additional work, but will help you make better code, and it will give you more freedom to modify the code in the future 30 L.N.Long

Get and Set Methods Instead of giving people access to your class data, you should supply get and set methods. class Molecule { private: double u,v,w; public: void setu ( double Veloc ) { u = Veloc;} double getu () {return u;} void setv ( double Veloc ) { v = Veloc;} double getv () {return v;} void setw ( double Veloc ) { w = Veloc;} double getw () {return w;} } 31 L.N.Long

Constructors and Destructors To use C++ classes, you also need to understand constructors and destructors We will see constructors in Java, but not destructors Constructors are simply methods that tell C++ how to create instances of objects, and these can be overloaded as in Java Destructors are needed because memory management is left to the programmer in C++. So often a destructor will be used to delete the memory associated with an object that is being deleted. If your objects don t use dynamic memory (ie pointers) then you don t have to worry about this too much. If you do not provide a constructor or destructor, the system will use the default ones. (which do little or nothing) The data values will have random values (not zeroes and NULL s as Java does) 32 L.N.Long

Constructors Methods with the same name as the class are constructors There are often several different constructors (i.e. they can be over-loaded) You don t have to have constructors, but they are usually a good idea. A default constructor is automatically included. If you have any constructors, then there is no default constructor Constructors cannot return a value If the arguments in a new statement do not match any constructor this is an error If a default constructor is used, then you can t be sure how the data is initialized. Null Pointer Exception errors are often due to errors in constructors 33 L.N.Long

OVERLOADED class Molecule { CONSTRUCTORS private: double x[3]; double u[3]; public: Molecule (){ x = { 0.0, 0.0, 0.0 }; u = { 0.0, 0.0, 0.0 }; } Molecule (double xx, double yy, double zz){ x[0] = xx; x[1] = yy; x[2] = zz; u = { 0.0, 0.0, 0.0 }; }... } 34 L.N.Long

Class Destructor Example class Molecule { private: double x,y,z; double u,v,w; char * name; int atoms; static double dt; static int total; public: void move(); Notice the tilde ~ }; // molecule location // molecule velocity // molecule name (e.g. H2O) // number of atoms // this is now a prototype Molecule(); // prototype for constructor Molecule(double x, double y, double z); //prototype ~Molecule(); // prototype for destructor 35 L.N.Long

Class Destructor Example inline Molecule::~Molecule() { total = total - 1; delete name; } If you write a destructor, then you usually should also write a copy constructor and an assignment operator. This lets you keep an accurate count of how many molecules you have. Since name is a pointer to a char or an array of char s (ie a string), you need to make sure you remove that memory if you delete a Molecule object. If you do not do this, then you will have a memory leak. destructors can take no arguments and can return no values. 36 L.N.Long

METHODS Functions. You have already seen some: System.out.println ( Hello ) ; Math.sqrt ( 12.0 ) ; g.drawstring ( Hello, 20, 20 ); Methods are key pieces of Objects (the other is data) that you can create Divide and conquer!! Break your program up into well-defined and easy to debug pieces! This also makes it easier to reuse software. 37 L.N.Long

Method Overloading Java does not allow operator overloading (C++ does), but it does allow method overloading For example: public class MethodExample extends Japplet { public void init () { put code here... } public double square ( double y ) { return y * y; } public int square ( int y ) { return y * y; } } You can now call the method square and pass it an int or a double and it will use the correct version of the method. It will not work if you pass it a float. 38 L.N.Long

Has-a and Is-a Engine has-a Vehicle Boat is-a Aircraft Ground Vehicle Carrier Sailboat Submarine Helo Transport Glider Truck Car Vehicle has-a engine (containment) Aircraft is-a vehicle (inheritance) Don t confuse containment with inheritance 39 L.N.Long

Has-a and Is-a We could define a Molecule class such as: class Atom { private: 40 L.N.Long public: } class Molecule { private: public: double x, y, z, xold, yold, zold, xnew, ynew, znew;//position double u, v, w; // velocity double ax, ay, az; // acceleration double mass, invmass; // particle mass & 1/mass static double timestep; // global time step static double totalnumber; // total number of particles char * name; // string for name... Atom * atoms;... } When it appears in the data, we would say: Molecule has-a Atom So, for example, we could have a water molecule made up of two oxygen and one hydrgen atoms. Since atoms is a pointer, we could dynamically assign the atoms to each molecule.

Has-a and Is-a We could also define a Molecule class such as: class Particle { protected: double x, y, z, xold, yold, zold, xnew, ynew, znew;//position double u, v, w; // velocity double ax, ay, az; // acceleration double mass, invmass; // particle mass & 1/mass static double timestep; // global time step static double totalnumber; // total number of particles char * name; // string for name public:... } class Atom : public Particle { } C++ Inheritance. We would say: Atom is-a Particle Inheritance! 41 L.N.Long

Example METHODS: print giveraise Penn State Person METHODS: print Employee Student Alumni Donors Faculty Staff Grad Administrator Teacher 42 L.N.Long Undergrad METHODS: print giveraise promote denytenure METHODS: print giveraise promote denytenure doresearch

Example Code: objects.cpp Person METHODS: print METHODS: print Employee Student Faculty Staff Administrator Lets look at the code 43 L.N.Long

In C++ the print() method will need to be defined as virtual. int main() { int i; Using Polymorphism Student nilay(25,66.0,"nilay",13); Faculty lyle(48,68.0,"lyle",15000.0,"professor"); Staff tom(35,69.0,"tom",10000.0,200); Administrator graham(53,69.0,"graham",20000.0,"professor","president"); Person * people; This will call the proper print method NOT the Person print method 44 L.N.Long } people[0] = new Student; people[0] = &nilay; people[1] = new Faculty; people[1] = &lyle; people[2] = new Staff; people[2] = &tom; people[3] = new Administrator; people[3] = &graham; for ( i = 0 ; i < 4 ; i++) { people[i]->print(); cout << endl; } very powerful. we now have an array full of all kinds of different objects. But yet we can treat them as though they were all similar!

Private, Protected, and Public If you were really paying attention, you will have noticed the keyword protected used for data members (instead of private) Private: Data or methods are not visible to instances of objects of this class Data or methods are visible to member functions of the class (eg Get and Set methods) Protected: Data or methods are visible to this class and to all classes derived from this class Public: If a function has an object of a certain class, then it can access all the public data or methods of that class 45 L.N.Long

C++ Keywords Storage: char short int long float double bool signed unsigned struct union class enum auto static register extern volatile const typedef void sizeof Control: if while switch continue else for case break goto default return do Other: true false asm friend public private protected try catch throw new delete virtual inline operator template this More: auto, register, volatile, sizeof, asm, virtual, template 46 L.N.Long

47 L.N.Long Java Keywords abstract boolean break byte case catch char class continue default do double else extends false final finally float for if implements import instanceof int Interface long native new null package private protected public return short static super switch synchronized this throw throws transient true try void volatile while

Bruce Eckel s Thinking in C++ (free on-line book) Win32 Compilers A note about Visual C++. I periodically receive messages saying that the most recent version of Visual C++ will not compile many of the programs in the book. Let me attempt to be diplomatic here. Microsoft has stated that what they are creating is "a Windows compiler." Their interest is in creating a compiler that makes Windows programs, and not one that is compliant to the C++ Standard. As a result, the Standard C++ features in VC++ have been increasing at a relative crawl, and you should not expect VC++ to compile many of the programs in the book. The complete listing of files that will not compile can be found in the file CompilerData.txt in both volumes. If you find a problem with a program and VC++, it is extremely likely that it is a deficiency in VC++ and not in the code listing. A Microsoft makefile is included that will successfully compile all possible programs in the book. http://www.mindview.net/books/ticpp/ 48 L.N.Long

ARRAYS OF OBJECTS If we have a class such as: public Person { int age; double height; String job; } We can create an array of these via: Person[] group = new Person[20]; With just this you will get a null pointer exception But the above is not enough to allow us to use this array, we need to initialize this array, maybe via: for ( int i = 0 ; i < 20 ; i++ ) group[i] = new Person(); A way to remember this is that this one has ( ) which indicates a method (a constructor) is used. 49 L.N.Long

Parallel/Distributed Computing Message Passing Interface (MPI) (http://www-unix.mcs.anl.gov/mpi/ ) Fortran C Java C++ (but object data must be packed into structs for MPI) Common Object Request Broker Architecture (CORBA) (www.corba.org) C++, Java, and others Remote Method Invocation (RMI) (http://java.sun.com/products/jdk/rmi/ ) Java Unix Socket Programming Others? DDS? 50 L.N.Long

CONCLUSIONS Object oriented programming is extremely common now There are at least 150 books on OOP If done well, it can lead to much better code in a shorter period of time As discussed in Core Java, companies like Dell and Compaq became very successful by buying large quantities of PC components and building PC s. (in fact Dell does not even make their own laptops, and they aren t very good). They do not build all the pieces. Likewise when you write a Java program you ought to use well-built pieces that exist. Since the programmer has to manage all the dynamic memory in C++, using objects can be quite a bit more challenging But keep in mind that you do not have to use all the features of C++ right away, you can slowly start using dynamic memory in your codes (and in some cases you may not need it...fortran did without it for forty years...) 51 L.N.Long

References C++ and Object-Oriented Numeric Computing, D. Yang "Core C++," by Shtern, Prentice Hall Practical C++ Programming, by Oualline, O Reilly Press C++ How to Program," by Deitel and Deitel, Prentice Hall C++ Gotchas, by Dewhurst Java for Scientists and Engineers, 2 nd Edition, by S. Chapman "Core Java," Volume I, by Horstmann and Cornell, Prentice Hall "Java How to Program," by Deitel and Deitel, Prentice Hall "Core Web Programming," by Hall, Prentice Hall java.sun.com 52 L.N.Long

53 L.N.Long lnl@psu.edu http://www.personal.psu.edu/lnl/