home *** CD-ROM | disk | FTP | other *** search
-
-
-
- Chapter 13
- UNITS IN TURBO PASCAL 4.0 AND 5.X
-
-
- THIS IS NEW
- ____________________________________________________________
-
- If you are using TURBO Pascal version 3.0 or earlier, you will
- find that none of the programs in this chapter can be compiled
- or run with your system, but it would be to your advantage to
- read this material anyway.
-
- When Nicklaus Wirth originally defined Pascal, it was intended
- to be a very small language to be used primarily for teaching
- programming concepts to computer neophytes. A program would
- be contained in a single file and compiled in its entirety
- each time it was compiled. There was no provision for
- splitting a program up into smaller parts, compiling each part
- separately, and linking all of the parts together into a final
- completed package.
-
- Since human beings make mistakes, and because the entire
- program must be recompiled each time any mistake is
- discovered, pure Pascal is unsuitable for very large programs.
- Seeing this problem, many compiler writers have defined some
- method by which a large program could be broken down into
- smaller parts and separately compiled.
-
- This chapter will define and illustrate the way Borland
- International has chosen to do so.
-
-
-
- PART OF A PROGRAM
- ____________________________________________________________
-
- Load the program named AREAS.PAS and =================
- display it on your monitor. This is the AREAS.PAS
- first example of a TURBO Pascal unit and =================
- although it is similar to a program in
- many ways, it has a few differences which
- must be pointed out. We will start by pointing out the major
- sections, then get into the details of each section.
-
- You will first notice that this program begins with the
- reserved word unit instead of our usual program, followed by
- the unit name, Areas. In line 10, the reserved word interface
- is used and all of the statements following it down to the
- next reserved word implementation, are part of the interface
- with any program outside of this unit. The reserved word,
- implementation, defines the beginning of the definitions and
- executable parts of the private portion of the unit.
-
- Page 13-1
-
- Units in TURBO Pascal 4.0 and 5.X
-
- Finally, in lines 48 through 50, we find what appears to be
- a program block just like we have been using all through this
- tutorial, but actually is not. We will see in a few
- paragraphs that this is the initialization section and does
- a very specific job for us even though somewhat different than
- what we have become used to.
-
-
-
- THE INTERFACE PART
- ____________________________________________________________
-
- Following the unit name we have a section of code in lines 10
- through 15 that define the interface of this module to the
- outside world. Anything defined here is available to the
- outside world and can be used by any other program provided
- it has a "uses Areas;" statement in it. Constants, types, and
- variables could also be defined here, and if they were, they
- too would be available to any user program, but in this case,
- only the four functions are made available. It should be
- fairly obvious that the functions calculate the areas of four
- different geometric shapes.
-
-
- THE IMPLEMENTATION PART
- ____________________________________________________________
-
- From line 16 through line 47 we have the implementation part
- as delineated by the reserved word implementation and the
- beginning of the initialization block. The implementation
- part is the actual workhorse of the unit since it contains all
- of the executable code for the four functions defined above.
-
-
- Lines 26 through 31 contain the code needed to generate the
- area of a circle, and this code is no different than the code
- that would be used if this function were placed in the
- declaration part of any Pascal program. There is a difference
- in the function header since the formal parameters are not
- repeated here. TURBO Pascal allows you to either drop the
- formal parameters here or include them if you think the code
- would be more readable. If you include them, they must be
- exactly as shown in the interface part or you will get a
- compile error.
-
-
-
- A LOCAL PROCEDURE
- ____________________________________________________________
-
- In lines 20 through 24, we have a procedure that is used
- within one of the four functions, namely the first. It is
- really a stupid procedure since it really wastes time setting
- up linkage for the procedure call and does nothing that
-
- Page 13-2
-
- Units in TURBO Pascal 4.0 and 5.X
-
- couldn't be done just as easy with a simple multiply, but it
- does illustrate that you can use another procedure within the
- unit body. The procedure Mult_Two_Numbers cannot be used
- outside of this unit because it is not included in the
- interface part of the unit. It is, in effect, invisible to
- the outside world.
-
- The variable My_Pi would be more correctly represented as a
- constant but it is defined as a variable to illustrate use of
- the body of the unit later. Since My_Pi is not defined in the
- interface part of the unit, it also is invisible to the
- outside world and in fact protected from accidental corruption
- by a misplaced statement in another program. The procedure
- and the variable for all practical purposes have an
- impenetrable barrier around them protecting them from
- unauthorized use or modification by the outside world, but the
- functions internal to this unit have free access to them just
- as in any other program.
-
-
- WHAT IS THE BODY USED FOR?
- ____________________________________________________________
-
- Lines 48 through 50 constitute the body of the unit and
- although they appear to consist of another executable program
- that can be called and used, they actually perform another
- very specific and useful purpose. This is actually an
- initialization section and all of the statements in this part
- of the unit are executed once and only once, and they are
- executed when the main program is loaded. This is done
- automatically for you by the system. There is no way provided
- for you to call the statements in the body after the program
- has begun execution. This is why the variable My_Pi was
- defined as a variable, so we could use this section to
- initialize it to a useful value.
-
- The body can actually have function and procedure calls that
- are executed when the program is loaded, as well as loops or
- conditional statements.
-
- If you would like to execute some statements during
- initialization and again during the execution of the program
- one or more times, you can write a procedure or function to
- accomplish your desires and call it at the appropriate times
- in the main program.
-
-
- SELECTIVE NAMING OF FUNCTIONS AND PROCEDURES
- ____________________________________________________________
-
- If you will study the interface part of this unit you will
- find that everything you need to use this unit is contained
- within it, provided that you know enough about plane geometry
- to understand the functions. You should strive for this
-
- Page 13-3
-
- Units in TURBO Pascal 4.0 and 5.X
-
- understanding in all of your interfaces so that the
- implementation doesn't even require consultation. Keep in
- mind, that if you need to, you can include comments to further
- define the functions in the interface part of the unit.
-
- At this time, you should compile this unit. You will have to
- compile it to disk rather than only to memory so it will be
- available for use later in this chapter. You do this by using
- the menus to change the Compile/Destination to the Disk
- option. Note that it will not generate an .EXE file but
- instead a .TPU file. This is Borland's filename extension for
- a unit.
-
-
- ANOTHER UNIT
- ____________________________________________________________
-
- Load the file named PERIMS.PAS for another ================
- example of a unit. This is similar to the PERIMS.PAS
- last except that it does not contain an ================
- internal procedure, and it is composed of
- three procedures that calculate the
- perimeters of geometric shapes, all of which are visible to
- the outside world because they are included in the interface
- part of the unit. Once again, we have a private variable
- named My_Pi and a block of code (actually a single statement)
- to initialize the value of My_Pi when the unit is loaded.
-
- Be sure you compile this unit to disk in the same manner as
- the last and they will be ready for use.
-
- Now that we have several functions and procedures that can be
- used to calculate the areas or perimeters of several different
- shapes, we need a program to illustrate their use, so if you
- load and display the program named GARDEN.PAS you will have
- an example of their use.
-
-
- HOW DO WE USE OUR DEFINED UNITS?
- ____________________________________________________________
-
- GARDEN.PAS is a very simple program that ================
- uses one of the functions and one of the GARDEN.PAS
- procedures. The only thing you must do is ================
- add the names of the units prior to using
- the external functions or procedures.
- Lines 16 and 17 each use one of our newly defined routines.
- As you can see, there is nothing magic about the new routines,
- and once you include the unit names in a uses statement, the
- new routines are in a sense, an extension to the Pascal
- language. Compile and run this program and see that it really
- does what you expect it to do.
-
-
-
- Page 13-4
-
- Units in TURBO Pascal 4.0 and 5.X
-
- ONE MORE EXAMPLE OF UNIT USE
- ____________________________________________________________
-
- Load and display the program named =================
- SHAPES4.PAS for another example of using a SHAPES4.PAS
- predefined unit. In line 3, this program =================
- includes our new unit named Areas so all
- four of the area functions are available,
- and in fact, all four are used within the body of the program.
- This program should not be difficult for you to understand and
- you will be left to study it on your own. You should observe
- that this program is repeated in chapter 14 in a different
- form for users of TURBO Pascal 3.0.
-
-
- MULTIPLE USES OF AN IDENTIFIER
- ____________________________________________________________
-
- Suppose we wanted to move the variable named My_Pi to the
- interface section in both of the units we defined earlier.
- Then in the program named GARDEN.PAS when we included both of
- the units in the uses statement, both variables named My_Pi
- would be available for use so we would have a bit of a problem
- defining which one we really meant to use. TURBO Pascal has
- a way to tell the system which one you wish to use by using
- a qualifier in much the same way that you use a field of a
- record. The variable name Areas.My_Pi would refer to that
- variable from the unit named Areas, and the name Perims.My_Pi
- would refer to the variable from the unit named Perims.
-
- You could even define a new variable of the same name in your
- main program and refer to it by the qualified name
- Garden.My_Pi if you chose to. This is not recommended as it
- would get very confusing to you. The compiler would be very
- happy to compile and run such a program, because it would not
- get confused.
-
- It is not illustrated in the example program, but this
- technique applies to procedure and function names as well.
- If you used the same procedure name in two different units,
- you could specify which procedure you intend to use by using
- the dot notation with the unit name and the procedure name.
- Unit_Name.Procedure_Name would therefore refer to the
- procedure named Procedure_Name that is a part of the unit
- named Unit_Name.
-
-
- WHY USE UNITS?
- ____________________________________________________________
-
- There are basically three reasons to use units in your
- programming. First, some programs are so large that they
- should be broken up into smaller chunks for ease of handling
- and reasonable compilation size. In fact some are so large
-
- Page 13-5
-
- Units in TURBO Pascal 4.0 and 5.X
-
- that they cannot be compiled all at one time since TURBO
- Pascal has an upper limit of 64K of code which can be compiled
- at once. Most other compilers have a similar limit also.
-
- Secondly, once you complete the code to perform a certain job,
- you may wish to use the same code in another program to do the
- same job. If you put the code in a unit, it is ready to
- simply call and use again. This is becoming a rather
- important topic in software engineering usually referred to
- as "Reusable Software".
-
-
- THIS IS INFORMATION HIDING
- ____________________________________________________________
-
- Finally, it is sometimes important to hide a portion of code
- from the rest of the program to assure that it cannot be
- unduly modified by an error somewhere else in the program.
- This too is becoming an important area of software engineering
- and is usually referred to as information hiding.
-
-
- PROGRAMMING EXERCISE
- ____________________________________________________________
-
- 1. Move My_Pi to the interface in both units and change one
- of the values slightly to see if you can read in the
- right one at the right time. Define another variable of
- the same name in your main program and see if you can
- differentiate between all three values. Note that, due
- to the nature of this exercise, no answer is given for
- it on the distribution disk.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 13-6