31
Abstract Types Defined as Classes of Variables Jeffrey Smith, Vincent Fumo, Richard Bruno

Abstract Types Defined as Classes of Variables

  • Upload
    dash

  • View
    56

  • Download
    1

Embed Size (px)

DESCRIPTION

Abstract Types Defined as Classes of Variables. Jeffrey Smith, Vincent Fumo, Richard Bruno. Introduction. What is a type Current approaches Why a new definition The new approach Common Types Questions. What is a Type?. - PowerPoint PPT Presentation

Citation preview

Page 1: Abstract Types Defined as Classes of Variables

Abstract Types Defined as Classes of Variables

Jeffrey Smith, Vincent Fumo, Richard Bruno

Page 2: Abstract Types Defined as Classes of Variables

IntroductionWhat is a typeCurrent approachesWhy a new definitionThe new approachCommon TypesQuestions

Page 3: Abstract Types Defined as Classes of Variables

What is a Type?Primitive types implicitly defined by types supported by the language used.User-defined types allow user to add new types without altering the compiler thereby removing the implicit definition of type.Formal definition of type necessary given the proliferation of user-defined types.

Page 4: Abstract Types Defined as Classes of Variables

Syntactic ApproachThis approach provides the typing information in the variable declaration.Example – Visual BasicDim Index as IntegerExample – C++Int index,counter;

Page 5: Abstract Types Defined as Classes of Variables

Value Space ApproachThis approach uses the idea of enumeration. Here is a list of possible values that implicitly define the type.Example – Type will hold Boolean information thus it will contain T or F, 1 or 0, etc.

Page 6: Abstract Types Defined as Classes of Variables

Behavior ApproachThis builds on value space by adding the notion of a set of operations to the space.Example from C:

Boolean flag;

void setTrue() {flag = 1;

}void setFalse() {

flag = 0;}

Page 7: Abstract Types Defined as Classes of Variables

Representation ApproachHere the type is shown in terms of its primitive types. The primitives are usually hardware or compiler implemented.Example – C style structure: struct address {

char *street;char *street2;char *city;char *state;double zip;

};

Page 8: Abstract Types Defined as Classes of Variables

Representation and Behavior Approach

Type defined by a representation combined with a set of operator defining its behavior.Example – A Class in C++Class Time {

public:Time();void setTime(int, int, int);void PrintStandard();

private:int hour;int minutes;int second;

};

Page 9: Abstract Types Defined as Classes of Variables

Why Don’t These Work?The previously outlined approaches don’t define extensible language types because:Can’t create clear and simple semantic

rulesCan’t achieve practical goals (strong

compiler type checking)

Page 10: Abstract Types Defined as Classes of Variables

Why Type Extension?

Type extension needs to support the following four goals:AbstractionRedundancy and compile time checkingAbbreviationData Portability

Page 11: Abstract Types Defined as Classes of Variables

AbstractionWe abstract to generalize problems in hopes of solving many problems at once (in terms of the abstraction).User-defined data types are usually abstractions of more primitive structures and data types.Abstraction lends itself well to: Structured programming Stepwise refinement Information hiding

Page 12: Abstract Types Defined as Classes of Variables

Redundancy / Compile Time Checking

User-defined type provides more information about data stored than primitive types do.Restricting the possible set of operations on the data.Example from C:void main (void){ int a; char b ='a'; char c ='b'; a = b + c;}

Page 13: Abstract Types Defined as Classes of Variables

AbbreviationUser-defined data types make for shorter programs that are easier to understand, modify, write, etc.Example:desired:

Function do_something(recordset);Undesired:

Function do_something(int1, int2, char, string, int, char);

Page 14: Abstract Types Defined as Classes of Variables

Data PortabilityUser-defined data types reduce the changes necessary when new data or data organization is introduced. The abstraction present in the user-defined data type aids in making your design language independent.Example – XML – Abstract the data into XML. Describe the data in XSL.

Page 15: Abstract Types Defined as Classes of Variables

Goals Not Realized?Current languages (1975) have not reached the stated goals.Five “original” definitions (syntactic, behavior, etc.) of types are too restrictive to allow the new goals (abstraction, abbreviation, etc.) outlined to be achieved.

Page 16: Abstract Types Defined as Classes of Variables

Mode of a VariableA mode is a group of variables that are represented and accessed in the same manner.Defines an equivalence class on variables. (ie. Any value that can be stored in a particular mode can be stored in any mode of that type).

Page 17: Abstract Types Defined as Classes of Variables

Classes of ModesTwo modes are in the same class (of the same type) if they can be substituted without generating a compile-time error.Classes of modes are Types.Types which contain more than one mode are abstract data types.

Page 18: Abstract Types Defined as Classes of Variables

Int x;

Char y;

Void Function1(int x);

Type 1

Int a;

Char b;

Void Function1(int a);

Type 2

Example

Here Type 1 and Type 2 are in the same class because their operations and variables are the same. In other words, they are of the same mode.

Page 19: Abstract Types Defined as Classes of Variables

Hierarchical Structure?Types are classes of modes.Modes are classes of variables.A hierarchical relationship exists with the relation being “are classes of”

Types

Modes

Variables

1

2

3

Page 20: Abstract Types Defined as Classes of Variables

Spec-TypesThese are types that are defined by the characteristics observed using the operators. Their internal representation does not matter, so long as they meet the specification.

Page 21: Abstract Types Defined as Classes of Variables

Spec-Type Example

Double x

Double y

Int Op1(); //Add values

Void Op2(); //Multiply values

Spec-Type BInt x

Int y

Int Op1(); //Add values

Void Op2(); //Multiply values

Spec-Type A

Type A and Type B are spec-types because you can put the same inputs into either one and you will get the same result…..thus they meet the specification. Note: Identically named functions implies identical operations.

Page 22: Abstract Types Defined as Classes of Variables

Rep-TypeThese types are defined by their internal representations.Those types with identical internal representations are of the same rep-type but may not have the same characteristics when the operators are applied to the representation.

Page 23: Abstract Types Defined as Classes of Variables

Rep-Type Example

double x

double y

Compute () {

(x*y)*x); }

Type Complexdouble realpart;

double complexpart;

Compute () {

(x*y)*x; }

Type Cartesian

Type A and Type B are rep-types because both types have the same internal representation.

Page 24: Abstract Types Defined as Classes of Variables

Param-TypeThe operations and variables are the same but underlying representations between two types are not the same.C++ Templates or Java Interfaces easily demonstrate this concept.

Page 25: Abstract Types Defined as Classes of Variables

Param-Type ExampleTemplate <class my_type>Class QUEUE {

Public: enum{MAXENTRIES=128};

protected:My_type* array;int Max, Begin, End, OverWriteFlag, LastItemFlag

void IntArray();void CleanupArray();

public:QUEUE();QUEUE(int num);

~QUEUE();

void Push(my_type* obj);my_type* Pop(void);void Clear (void);

};

This class will work for any type fed into the function. Without the use of the template, you would have to create a separate class for each type Queue we need.

Page 26: Abstract Types Defined as Classes of Variables

Variant TypesThese are types that have common properties but are not exact specifications.A weaker form of Spec-Types

Page 27: Abstract Types Defined as Classes of Variables

Variant-Types Example

Double x

Double y

Void Op1(); //Add values

Type BInt x

Int y

Void Op1(); //Add values

Int Op2(); //Multiply values

Type A

Type B and type A are variant-types since type B shares Op1 with type A. Type B however, adds a second operation Op2.

Page 28: Abstract Types Defined as Classes of Variables

More About TypesThe types listed (spec, rep, param and

variant types) are not an exhaustive set of types, just the most common ones.

The authors essentially describe a C++ class – classes contain data representation and operations.

He even calls them Classes!

Page 29: Abstract Types Defined as Classes of Variables

Code Sharing?In order to share code the compiled code must be able to anticipate all spec-types that can occur.Example – You must consider things like big-endian and little-endian (ie. Whether least or most significant bits are stored first).

Page 30: Abstract Types Defined as Classes of Variables

The bottom line…..

Page 31: Abstract Types Defined as Classes of Variables

Go Invent C++