Transcript Chapter 5

Chapter 5
Abstraction I:
Encapsulation
 In the construction of large programs, we
need to design and implement new data
types.
• Designing the specification of the abstract
data type (attributes and operations).
• Implementing it.
Like a section in a university registration system.
2
 Basic mechanisms providing the
programmer ability of creating new data
types and operations on that type:
• Subprograms
– correct use of the new type is the programmer
responsibility.
• Type declarations
– the programming language partly support the
correct use of the new type.
• Inheritance
3
5.1. Abstract Data Types
 Early languages (FORTRAN,COBOL)
• subprogram definition
 Ada and C++
• package and class
 data type
• a set of data objects
• valid operations on them (early 1970s)
4
Data Abstraction
 A set of data objects, ordinarily using one
or more type definitions,
 A set of abstract operations on those data
objects, and
 Encapsulation of the whole in such a way
that the user of the new type cannot
manipulate data objects of the type except
by the operations defined.
5
Information Hiding
 Each program component should hide as
much information as possible from the
users of the component.
Program design
6
Encapsulation
 The user of the abstraction
• Does not need to know the hidden information
in order to use the abstraction, and
• Is not permitted to directly use or manipulate
the hidden information even if desiring to do
so.
Language design
7
5.2. Encapsulation By
Subprograms
 An abstract operation defined by the
programmer.
 A subprogram definition:
• specification
• implementation
8
Specification of a Subprogram
 The name of the subprogram.
 The signature (prototype) of the
subprogram (number, order and data type
of arguments and results).
 The action performed by the subprogram,
(a description of the function it computes).
9
 In C :
• void Sub(float X, int Y, float *Z, int *W);
 In Ada :
• procedure Sub(X: in REAL; Y: in integer; Z: in out
REAL; W: out BOOLEAN)
• Sub : real1* integer * real2 --> real3 * Boolean
10
Implementation of a Subprogram
 Subprogram body:
• local data declarations
• statements
float FN(float X, int Y)
{float M(10); int N;
…
}
signature
dcl
statements
 subprograms are like primitive operations,
but the programmer must explicitly declare11
Subprogram Definition and
Invocation
 Definitions and activations
• Programmer writes a subprogram definition
as a static property of a program.
The definition serves as a template for creating
activations during execution.
• During execution, if the subprogram is called
(or invoked), an activation of it is created.
12
 Subprogram definition is like a type
definition
 and subprogram activation is like a data
object of that type.
13
Subprogram Activation
 Is a type of data object,
 as a block of storage that contains certain
component data items,
 storage allocated when it is created, freed
when it is destroyed,
 has a lifetime (between call and return),
 it is executed, reference and modify other
data objects during execution. (these are the 14
differences with other data objects)
Implementation of Subprogram
Definition and invocation
Float FN(float X, int Y)
{const initval=2;
#define finalval 10
float M(10);int N;
…
N = initval;
if (n<finalval){…}
return (20*X+M(N));}
15
Components needed for an
activation of the subprogram
 FN’s signature: storage for parameters and
result
 DCLs: storage for local variables
 storage for literals and defined constants
 statements: storage for executable code
fig. 5.1. Page 205
16
Structure of a subprogram
activation
 Split the template into two parts:
• A static part, code segment.
– Constants and executable code.
– Invariant during execution.
– Shared by all activations.
• A dynamic part, activation record.
– Parameters,function results, local data ,
housekeeping data (temporary storage areas,
return points, linkages for referencing non-local
variables).
– A copy for each activation.
(fig. 5.2. P.206)
17
Storage Management
 Access to the components: using the base-
address-plus-offset calculation.
 Allocation of
a block of appropriate size on
a subprogram call, freeing the block on
return.
18
Generic Subprograms
 A generic subprogram name is overloaded .
 p.207, p.208
19
Type Definitions
 Type definition: definition of a class of data
objects.
• A type name
• declaration of the structure of a class of data
objects.
p. 209,210
20
Advantages of type definitions
 Simplifying program structure,
 Simplifying the program modification,
 as an argument to a subprogram.
A kind of encapsulation and information
hiding.
21
implementation
 A type definition is used only during
translation.
• Enters the information from a type definition
into a table during translation,
• using it during execution.
(storage representation: storage management,
type checking)
22
Type Equivalence
 What does it mean to say that two types are
“the same”?
(a data type issue)
 What does it mean to say that two data
objects of the same type are “equal”?
(a semantic issue, r-value of a data object)
23
Type Equality
Program main(input, output);
type Vect1: array[1..10] of real;
Vect2: array[1..10] of real;
var X,Z: Vect1; Y:Vect2;
procedure Sub(A: Vect1);
…
end;
begin
-main program
X:= Y;
Sub(y)
24
Type Equality
 Name equivalence
• only if they have the same name.
• in Ada, C++, subprogram parameters in Pascal
 Structural equivalence
• if they define data objects that have the same
internal components. ( the same storage
representation so the same accessing
formulas and the same run-time
implementation)
25
• older languages (FORTRAN, COBOL, PL/1), C,
Name Equivalence
Disadvantages
 There can be no anonymous types.
• If we have
var W: array[1..10] of real;
W can’t be used as an argument, its type has no
name.
 A single global type definition must be
used. A single type definition must be used
in all or large parts of a program
(transmitting as an argument through a 26
Structural Equivalence
Disadvantages

Several questions arise when two types are
structurally equivalent.
• For records, must the component names be identical?
• Or does it suffice to have the same number and type of
components in the same order?
• If record component names must be identical, then
must the components be in the same order?
• Must array subscript ranges be identical?
• Or is it sufficient to have the same number of
components?
• Must the literals in two enumeration types be the same27
Structural Equivalence
Disadvantages
(cont.)
 Two variables may be structurally
equivalent, even though the programmer
declares them as separate types.
• For example: type Meters = integer;
liters = integer;
var Len: Meters;
Vol: Liters;
many type errors may go undetected.
28
Structural Equivalence
Disadvantages
(cont.)
 Determining whether two complex type
definition are structurally equivalent, if
done frequently, may be a costly part of
translation.
29
Data Object Equality
 Once the compiler determines that two
objects are the same type, are the two
objects equal?
• Stack equality.
• Set equality.
Programmer-defined data, separate operation
for equal
P. 214
30
Type Definitions with Parameters
 Parameterizing the type definition
to be
used repeatedly with different
substitutions for the parameters.
 Parameters like
• class size in Ada
• a type in ML
• no parameterized types in Pascal
31
5.4. Storage Management
 Different features in a language causes
different storage management techniques
to be used.
• FORTRAN: no recursive calls, no dynamic
storage management.
• Pascal: stack-based storage management.
• LISP: garbage collection.
Language implementers decide about the
details.
32
Major Run-Time Elements
Requiring Storage
 Data
 operations
33
Data and program Requiring
Storage
 Code segments for translated user
programs.
 System run-time programs.
• Supporting user programs.
• Like library routines, software interpreters or
translator, storage management routines.
 User-defined data structures and
constants.
 Subprogram return points.
34
 Referencing environments.
• Identifier associations (LISP A-list)
 Temporaries in expression evaluation.
• Recursive function calls make it a lot.
 Temporaries in parameter transmission.
• Resulting values for evaluation of actual
parameters are stored in temporaries until the
total evaluation is completed.
35
 Input-output buffers.
• Temporary storage areas used between the
time of the actual physical transfer of the data
to or from external storage and the programinitiated input / output operation.
 Miscellaneous
system data.
• System data like tables, status information for
input-output, ...
36
Major operations requiring
storage
 Subprogram call and return operations.
• Activation record,
• local referencing environment, …
 Data structure creation and destruction
operations.
• new - dispose in Pascal.
• malloc - free in C
 Component insertion and deletion
operations.
37
Programmer- and SystemControlled Storage Management
 Programmer control of storage
management
• place a large and often undesirable burden on
the programmer,
• may interfere with the necessary systemcontrolled storage management.
 Programmer can cause dangling
references and garbage.
38
 What language?
• Protection for the programmer by using a
language with strong typing and effective
storage management features,
• decrease in performance
OR
• performance
• more risk in having errors and fail during
execution.
39
Storage Management Phases
 Initial allocation
 Recovery
 Compaction and reuse
40
Static Storage Management
 Simplest
 static allocation
 no run-time storage management
 no concern for recovery and reuse
 efficient
 in COBOL and FORTRAN
41
 In FORTRAN
• each subprogram is compiled separately,
• the code segment includes an activation
record
– compiled program,
– its data areas,
– return point location,
– miscellaneous items of system data.
42
Stack-Based Storage
Management
 Simplest run-time storage management
technique.
 Based on the nested last in first out
structure in subprograms calls and
returns.
 Automatic compaction.

In Pascal : a single central stack of activation records,
and a statically allocated area for subprogram code
segments and system programs.
43
Heap Storage Management:
Fixed-Size Elements
 A heap is a block of storage within which
pieces are allocated and freed in some
relatively unstructured manner.
 Need for heap , when a language permits
storage to be allocated and freed at
execution time.
 Fixed size elements allocated => no need
for compaction.
Page 224, fig. 5.7.
44
Recovery
The problem: identification of reusable
element, solutions:
 Explicit return by programmer or system.
• Natural, but cause garbage and dangling
reference. P.226
 Reference counts.
• Cost of maintaining. P.227
• popular with parallel processing systems.
 Garbage collection.
45
Garbage Collection

Dangling references more dangorous
 Two stages
• Mark
– garbage collection bit, set off if it is active.
• Sweep
– links the “on” elements to the free list.
When is a heap element active?
– There is a pointer to it from
– outside the heap
– another active heap element
46
 Three critical assumptions
• any active element must be reachable by a
chain of pointers beginning outside the heap.
• It must be possible to identify every pointer
outside the heap that points to an element
inside the heap.
• It must be possible to identify within any active
heap element the fields that contain pointers
to other heap elements.
47
P. 231
Heap Storage Management:
Variable-Size Elements
 More difficult
 if space for
programmer defined data
structures is sequential, like arrays or
activation records.
 Major difficulty : reuse of recovered space.
48
 Initial allocation and reuse.
 reuse directly
from a free-space list.
• First-fit method
• best-fit method
keeping free-space list in size order.
 Recovery with variable-size blocks.
• In first word of each block: a length indicator.
 Compaction and memory fragmentation
problem.
49
 Compaction approaches:
• Partial compaction
– only adjacent free blocks
• Full compaction
– active blocks may be shifted
50
End of chapter 5
51