CIS 400 LECTURE 17:
 
Files
and I/O, (for ADT)
 
Sequence
·       
Representation
on secondary storage device
·       
Life
of data exceeds program
v    
Sequential
access, ( i.e. #include <iostream.h>)
               
Vs.
v    
Direct
access file, (file treated as an array), homogeneous data/base address offset
Components are called records
 
Sequential
files:
·       
Some
linear sequence of components
·       
Varying
length
·       
Text
files organized by line, (at issue;what constitute end of line?)
·       
File
position pointer, (from beginning of file)
 
Buffer-anticipates
next data need
 
Operations:
·       
Open
·       
Read
·       
Write
·       
End
of file, (eof)
·       
Close
 
Sets,
(as a data structure):
·       
Unordered
collection of distinct items
·       
Operations
v    
Membership
v    
Insertion/deletion
of values
v    
Union,
intersection, difference, complement, sub-set
 
Complexity
of searching any number of sets is big O(1)
 
Bit
string = 'd'
 
 
   
 
  
   
   
 
 
 
 
 
 
For
larger sets implementation:
 
® Hash table, (also big O(1))
® Linked lists 
® Trees
 
Procedures:
 
Defined
by body
1)     
Environment
2)     
Code
 
BOTH
are "encapsulated", i.e. neither local data or statements in body are
separately accessible
 
Type
checking, (issues)
·       
Arguments
and return values
·       
Sometime
type checking is static, often it is not
·       
Coercion
may or may not be provided
 
Two
varieties of procedures:
1)     
Sub-routine:
changing parameter values is normal means of communication
2)     
Function:
returns a single value
 
For
a given procedure there are 3 classes:
 
1)     
Formal
parameters
2)     
Local
variables
3)     
Global
variables
 
3
key issues:
1)     
Which
referencing environment is used to bind values?
2)     
How
are actual parameters evaluated?
3)     
How
are actual parameters bound to formal parameters?
 
Procedure
definition:
·       
Written
by programmer at translation, (template for activation)
·       
Procedure
activation-created during execution if procedure is invoked
·       
Activation
life of procedure is from "call" to "return"
 
Implement
procedures and invocation:
·       
Storage
for parameters
·       
Storage
for function result
·       
Storage
for local variables
·       
Storage
for constants and literals
·       
Storage
for executable
 
Static
part-doesn't change during execution, (code segment)
Dynamic
part-"activation record", (copies)
 
Code
segment:

 
 
Activation
record:

 
Stack
is the data structure for activation record

 
Simple
call and return
·       
NO
recursive sub-programs
·       
Requires
an explicit call statement
·       
Procedures
execute completely with each call
·       
Immediate
transfer of control at point, (copy rule)
·       
Only
one module/procedure has control at a time, (execution is suspended)
 
CIP
º current instruction pointer
CEP
º current environment pointer
 
What
if you violate rule for no recursive procedures?
 
A ® B   
// "A" cannot terminate before "B" returns
 
Co-routine
Procedures
that don't execute completely
 

 
What
if you violate "immediate transfer of control" rule?
 
Schedule
procedure
·       
"execute
at time__"
·       
"execute
with priority 3"
 
uses
"clock" or "priority queue"
 
Tasks
More
than one thing runs at a time
 
Parameters
and parameter transmission
Argument
º actual parameter, (caller's name for
identifier)
Formal
parameter º procedure's name for
identifier
 
At
issue: are the above sharing values or addresses?
When
does the sharing take place?
1)     
At
call
2)     
At
first use
Correspondence
between formal and actual parameters?
·       
Positional
correspondence, i.e. sort(10,a)
·       
Correspondence
by explicit name, i.e. sort(N = 10, array = A)