David evans http www cs virginia edu evans
Download
1 / 27

- PowerPoint PPT Presentation


  • 98 Views
  • Updated On :

Lecture 5: Implementing Data Abstractions. David Evans http://www.cs.virginia.edu/evans. CS201J: Engineering Software University of Virginia Computer Science. Menu. Data Abstraction Specifying Abstract Data Types Implementing Abstract Data Types. Abstract Data Types.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '' - jill


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
David evans http www cs virginia edu evans l.jpg

Lecture 5:

Implementing Data Abstractions

David Evans

http://www.cs.virginia.edu/evans

CS201J: Engineering Software

University of Virginia

Computer Science


Slide2 l.jpg
Menu

  • Data Abstraction

  • Specifying Abstract Data Types

  • Implementing Abstract Data Types

CS 201J Fall 2003


Abstract data types l.jpg
Abstract Data Types

  • Separate what you can do with data from how it is represented

  • Client interacts with data through provided operations according to their specifications

  • Implementation chooses how to represent data and implement its operations

CS 201J Fall 2003


Data abstraction in java l.jpg
Data Abstraction in Java

  • A class defines a new data type

  • Use private instance variables to hide the choice of representation

    • private declarations are only visible inside the class

CS 201J Fall 2003


Up and down l.jpg
Up and Down

Clients manipulate an abstract data type by calling its operations (methods and constructors)

clients

down

up

Abstract Type

Concrete Representation

class implementation

The representation of an abstract data type is visible only in the class implementation.

CS 201J Fall 2003


Stringset l.jpg
StringSet

clients

s.isIn ()

{ “test”, “okay” }

down

up

Abstract Type

Concrete Representation

private Vector res;

class implementation

public boolean isIn () { … }

CS 201J Fall 2003


Advantages disadvantages l.jpg
Advantages/Disadvantages

  • More code to write and maintain

  • Run-time overhead (time to call method)

  • Client doesn’t need to know about representation

  • Localize impact of changes

CS 201J Fall 2003


Stringset example l.jpg
StringSet Example

  • StringSet abstract data type: represent a set of strings

  • Support mathematical set operations: insert, isIn, size

  • Create an empty set

CS 201J Fall 2003


Specifying abstract data types l.jpg
Specifying Abstract Data Types

  • Overview: what does the type represent

    • Mutability/Immutability

      A StringSet is a mutable set of Strings.

    • Abstract Notation

      A typical StringSet is { x1, …, xn }.

  • Operations: specifications for constructors and methods clients use

    • Describe in terms of abstract notation introduced in overview.

CS 201J Fall 2003


Stringset specification l.jpg
StringSet Specification

public class StringSet

// OVERVIEW: StringSets are unbounded, mutable sets of

// Strings. A typical StringSet is { x1, ..., xn }

public StringSet ()

// EFFECTS: Initializes this to be empty: { }

public void insert (String s)

// MODIFIES: this

// EFFECTS: Adds x to the elements of this:

// this_post = this_pre U { s }

public boolean isIn (String s) {

// EFFECTS: Returns true iff s is an element of this.

public int size ()

// EFFECTS: Returns the number of elements in this.

CS 201J Fall 2003


Components of data abstractions l.jpg
Components of Data Abstractions

  • Ways to create objects of the data type

    • Creators: create new objects of the ADT from parameters of other types

    • Producers: create new objects of the ADT from parameters of the ADT type (and other types)

  • Ways to observe properties: observers

  • Ways to change properties: mutators

CS 201J Fall 2003


Stringset operations l.jpg
StringSet Operations

  • Creators

    StringSet ()

  • Producers

    none

  • Observers

    isIn, size

  • Mutators

    insert

public class StringSet

// OVERVIEW: StringSets are unbounded, mutable sets of

// Strings. A typical StringSet is { x1, ..., xn }

public StringSet ()

// EFFECTS: Initializes this to be empty: { }

public void insert (String s)

// MODIFIES: this

// EFFECTS: Adds x to the elements of this:

// this_post = this_pre U { s }

public boolean isIn (String s) {

// EFFECTS: Returns true iff s is an element of this.

public int size ()

// EFFECTS: Returns the number of elements in this.

CS 201J Fall 2003


Using abstract data types l.jpg
Using Abstract Data Types

  • PS1, PS2

  • Client interacts with data type using the methods as described in the specification

  • Client does not know the concrete representation

CS 201J Fall 2003



Choosing a representation l.jpg
Choosing a Representation

  • Need a concrete data representation to store the state

  • Think about how methods will be implemented

    • A good representation choice should:

      • Enable easy implementations of all methods

      • Allow performance-critical methods to be implemented efficiently

CS 201J Fall 2003


Stringset representation l.jpg
StringSet Representation

  • Option 1: private String [] rep;

    • Recall Java arrays are bounded

    • Easy to implement most methods, hard to implement insert

  • Option 2: private Vector rep;

    • Easy to implement all methods

    • Performance may be worse than for array

CS 201J Fall 2003


Implementing stringset l.jpg
Implementing StringSet

public class StringSet {

// OVERVIEW: StringSets are unbounded, mutable sets of Strings.

// A typical StringSet is {x1, ..., xn}

// Representation:

private Vector rep;

public StringSet () {

// EFFECTS: Initializes this to be empty: { }

rep = new Vector ();

}

public void insert (String s) {

// MODIFIES: this

// EFFECTS: Adds s to the elements of this:

// this_post = this_pre U { s }

rep.add (s);

}

Could this implementation of insert be correct?

CS 201J Fall 2003


It depends l.jpg
It depends…

public int size () {

// EFFECTS: Returns the number of elements in this.

StringSet uniqueels = new StringSet ();

for (int i = 0; i < rep.size (); i++) {

String current = (String) rep.elementAt (i);

if (uniqueels.isIn (current)) {

;

} else {

uniqueels.insert (current);

}

}

return uniqueels.rep.size ();

}

CS 201J Fall 2003


Is it correct l.jpg
Is it correct?

public int size () {

// EFFECTS: Returns the number of

// elements in this.

return rep.size ();

}

public void insert (String s) {

if (!isIn (s)) rep.add (s);

}

CS 201J Fall 2003


Reasoning about data abstractions l.jpg
Reasoning About Data Abstractions

  • How can we possibly implement data abstractions correctly if correctness of one method depends on how other methods are implemented?

  • How can we possibly test a data abstraction implementation if there are complex interdependencies between methods?

CS 201J Fall 2003


What must we know to know size is correct l.jpg
What must we know to know size is correct?

  • This implementation is correct only if we know the rep does not contain duplicates

public int size () {

// EFFECTS: Returns the number of

// elements in this.

return rep.size ();

}

CS 201J Fall 2003


Rep invariant l.jpg
Rep Invariant

  • The Representation Invariant expresses properties all legitimate objects of the ADT must satisfy

    I: C→ boolean

    Function from concrete representation to boolean.

  • Helps us reason about correctness of methods independently

CS 201J Fall 2003


Reasoning with rep invariants l.jpg
Reasoning with Rep Invariants

  • Prove all objects satisfy the invariant before leaving the implementation code

  • Assume all objects passed in satisfy the invariant

REQUIRES: Rep Invariant is true for this (and any other reachable ADT objects)

EFFECTS: Rep Invariant is true for all new and modified ADT object on exit.

CS 201J Fall 2003


Rep invariant for stringset l.jpg
Rep Invariant for StringSet

public class StringSet {

// OVERVIEW: StringSets are unbounded,

// mutable sets of Strings.

// A typical StringSet is {x1, ..., xn}

// Representation:

private Vector rep;

// RepInvariant (c) =

// c contains no duplicates

// && c != null

CS 201J Fall 2003


Implementing insert l.jpg
Implementing Insert?

public void insert (String s) {

// MODIFIES: this

// EFFECTS: Adds s to the elements of this:

// this_post = this_pre U { s }

rep.add (s);

}

Not a correct implementation: after it returns this might not satisfy the rep invariant!

CS 201J Fall 2003


Implementing insert26 l.jpg
Implementing Insert

public void insert (String s) {

// MODIFIES: this

// EFFECTS: Adds s to the elements of this:

// this_post = this_pre U { s }

if (!isIn (s)) { rep.add (s); }

}

Possibly correct implementation: we need to know how to map rep to abstraction notation to know if

this_post = this_pre U { s }

CS 201J Fall 2003


Tomorrow in section l.jpg
Tomorrow in Section

  • Return PS2

  • Consider how to implement the Graph datatype specified in your notes

  • Think about possible representations before tomorrow’s class

CS 201J Fall 2003


ad