Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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