CSE 3302 Programming Languages

Slides:



Advertisements
Similar presentations
Modules Program is built out of components. Each component defines a set of logically related entities (strong internal coupling) A component has a public.
Advertisements

Programming Paradigms Introduction. 6/15/2005 Copyright 2005, by the authors of these slides, and Ateneo de Manila University. All rights reserved. L1:
Abstract Data Types Data abstraction, or abstract data types, is a programming methodology where one defines not only the data structure to be used, but.
CPS 506 Comparative Programming Languages Abstract Data Type and Encapsulation.
Modules Program is built out of components. Each component defines a set of logically related entities (strong internal coupling) A component has a public.
ISBN Chapter 11 Abstract Data Types and Encapsulation Concepts.
Abstract data types & object-oriented paradigm. Abstraction Abstraction: a view of an entity that includes only the attributes of significance in a particular.
Lecture 9 Concepts of Programming Languages
Abstract Data Types and Encapsulation Concepts
Chapter 11 Abstract Data Types and Encapsulation Concepts.
Data Structures Winter What is a Data Structure? A data structure is a method of organizing data. The study of data structures is particularly important.
© Kenneth C. Louden, Chapter 9 – Abstract Data Types and Modules Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden.
October 18, Algorithms and Data Structures Lecture V Simonas Šaltenis Nykredit Center for Database Research Aalborg University
Jan 12, 2012 Introduction to Collections. 2 Collections A collection is a structured group of objects Java 1.2 introduced the Collections Framework Collections.
ISBN Chapter 11 Abstract Data Types and Encapsulation Concepts.
Chapter 11 Abstract Data Types and Encapsulation Concepts.
Chapter 12: Collections by Lewis and Loftus (Updated by Dan Fleck) Coming up: Collections.
ISBN Chapter 11 Abstract Data Types and Encapsulation Concepts.
Chapter 10, Slide 1 ABSTRACT DATA TYPES Based on the fundamental concept of ABSTRACTION:  process abstraction  data abstraction Both provide:  information.
ISBN Chapter 11 Abstract Data Types and Encapsulation Concepts.
ADT data abstraction. Abstraction  representation of concepts by their relevant features only  programming has two major categories of abstraction process.
Programming Languages Third Edition Chapter 11 Abstract Data Types and Modules.
CSE 3302 Programming Languages Chengkai Li, Weimin He Spring 2008 Abstract Data Types and Modules Lecture 11 – ADT and Modules, Spring CSE3302 Programming.
1 Chapter 11 © 1998 by Addison Wesley Longman, Inc The Concept of Abstraction - The concept of abstraction is fundamental in programming - Nearly.
1 CS Programming Languages Class 22 November 14, 2000.
(1) ICS 313: Programming Language Theory Chapter 11: Abstract Data Types (Data Abstraction)
1 Copyright © 1998 by Addison Wesley Longman, Inc. Chapter 10 Abstraction - The concept of abstraction is fundamental in programming - Nearly all programming.
ISBN Chapter 11 Abstract Data Types and Encapsulation Concepts.
Object Oriented Programming in Java Habib Rostami Lecture 7.
CSC 243 – Java Programming, Spring, 2014 Week 4, Interfaces, Derived Classes, and Abstract Classes.
Abstract Data Types and Stacks CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington Last updated: 2/17/
9/27/2016IT 1791 Abstraction A tool (concept) to manage complexity Hide irrelevant details; focus on the features needed Primitive date types are already.
CSE 3302 Programming Languages Chengkai Li Fall 2007 Abstract Data Types and Modules Lecture 12 – ADT and Modules, Fall CSE3302 Programming Languages,
12 Collections Software Solutions Lewis & Loftus java 5TH EDITION
G64ADS Advanced Data Structures
Set Collection A Bag is a general collection class that implements the Collection interface. A Set is a collection that resembles a Bag with the provision.
Abstract Data Types and Encapsulation Concepts
ABSTRACT DATA TYPES Based on the fundamental concept of ABSTRACTION:
Chapter 12: Data Structures
11.1 The Concept of Abstraction
STACKS AND QUEUES UNIT 2 DS THROUGH C++.
Abstract Data Types and Modules
Week 15 – Monday CS221.
Map interface Empty() - return true if the map is empty; else return false Size() - return the number of elements in the map Find(key) - if there is an.
structures and their relationships." - Linus Torvalds
Abstract Data Types (ADTs)
Lecture 9 Concepts of Programming Languages
Abstract Data Types and Encapsulation Concepts
structures and their relationships." - Linus Torvalds
Abstract Data Types and Encapsulation Concepts
Chapter 8: Data Abstractions
Abstract Data Types and Encapsulation Concepts
Abstract Data Types and Encapsulation Concepts
Pointers & Dynamic Data Structures
Introduction to Data Structure
Abstract Data Types and Encapsulation Concepts
Programming Languages and Paradigms
Dynamic allocation (continued)
Stacks, Queues, and Deques
(1 - 2) Introduction to C Data Structures & Abstract Data Types
EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019
structures and their relationships." - Linus Torvalds
Abstract Data Types Stacks CSCI 240
11.1 The Concept of Abstraction
Lecture 9 Concepts of Programming Languages
Abstract Data Types (ADTs)
Chapter 11 Abstraction - The concept of abstraction is fundamental in
Data Structures & Programming
Presentation transcript:

CSE 3302 Programming Languages Abstract Data Types and Modules Kelly Scott French based on slides by Chengkai Li Spring 2017 Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Data Types Predefined Type constructors: build new data types How to define a “queue”? What should be the data values? What should be the operations? How to implement (data representation, operations)? Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Possible Problems? The operations are not associated with the data type You might use the operation on an invalid value. Users see all the details: Direct access to internal elements / implementations Implementation dependent Users can mess up things Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Abstract Data Type Encapsulation: all definitions of allowed operations for a data type in one place. Information Hiding: separation of implementation details from definitions. Hide the details . Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Data Operations Consider a container of liquid Typedef struct { int liquid; } container; Operations on a container Pour Measure pH Swim (pool?) Are all liquids the same? Jug of milk -> pour() Pool of water -> swim() Vat of acid -> measure pH() Any potential problems? Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Data Organization What are ways we typically organize data? Container List Set Stack Multiset Map / associative array / dictionary MultiMap Graph Queue Priority queue Double-ended queue Double-ended priority queue Features Ordered Traversal Duplicates / not Symmetric / Asymmetric Access (FIFO / LIFO) Storage Relationships Rules https://en.wikipedia.org/wiki/Abstract_data_type Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

Algebraic Specification of ADT Syntactic specification (signature, interface): the name of the type, the prototype of the operations Semantic specification (axioms, implementation): guide for required properties in implementation mathematical properties of the operations They don’t specify: data representation implementation details Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

Syntactic Specification type queue(element) imports boolean operations: createq: queue enqueue: queue  element  queue dequeue: queue  queue frontq: queue  element emptyq: queue  boolean imports: the definition queue needs boolean Parameterized data type (element) createq: not a function, or viewed as a function with no parameter Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

Algebraic Specification variables: q: queue; x: element axioms: emptyq(createq) = true emptyq(enqueue(q,x)) = false frontq(createq) = error frontq(enqueue(q,x)) = if emptyq(q) then x else frontq(q) dequeue(createq) = error dequeue(enqueue(q,x)) = if emptyq(q) then q else enqueue(dequeue(q),x) error axiom (exceptions) Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Stack type stack(element) imports boolean operations: createstk : stack push : stack  element  stack pop : stack  stack top : stack  element emptystk : stack  boolean variables: s: stack; x: element axioms: emptystk(createstk) = true emptystk(push(s,x)) = false top(createstk) = error top(push(s,x)) = x pop(createstk) = error pop(push(s,x)) = s Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Axioms How many axioms are sufficient for proving all necessary properties? OR – how do we know it will work? Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Some Heuristics type stack(element) imports boolean operations: createstk : stack push : stack  element  stack pop : stack  stack top : stack  element emptystk : stack  boolean variables: s: stack; x: element axioms: emptystk(createstk) = true emptystk(push(s,x)) = false top(createstk) = error top(push(s,x)) = x pop(createstk) = error pop(push(s,x)) = s Constructor: createstk push Inspector: pop top emptystk 2 * 3 = 6 rules Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Binary Search Tree type BST(element) imports boolean, int operations: createbst : BST emptybst : BST  boolean insert : BST  element  BST delete : BST  element  BST getRoot : BST  element getHeight : BST  int max : BST  element search : BST  element  boolean variables: t: bst; x: element axioms: emptystk(createbst) = true … Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Other Examples of ADT Stack Queue Tree Set Map Vector List Priority Queue Graph (https://marcus-biel.com/java-collections-framework/) Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

Data Organization as Interface What are ways we typically organize data? Container List Set Stack Multiset Map / associative array / dictionary MultiMap Graph Queue Priority queue Double-ended queue Double-ended priority queue Features Ordered Traversal Duplicates / not Symmetric / Asymmetric Access (FIFO / LIFO) Storage Relationships Rules https://en.wikipedia.org/wiki/Abstract_data_type Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington ADT Mechanisms Independence from data type General module mechanism : not just about a single data type and its operations Separate compilation and name control: C, C++, Java,Ada Class in OO languages Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Modules Module: A program unit with a public interface and a private implementation; all services that are available from a module are described in its public interface and are exported to other modules all services that are needed by a module must be imported from other modules In addition to ADT, modules support structuring of large programs: Separate compilation name control Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

C: Separate Compilation queue.h : header file #ifdef QUEUE_H #define QUEUE_H struct Queuerep; typedef struct Queuerep * Queue; Queue createq(void); Queue enqueue(Queue q, void* elem); void* frontq(Queue q); Queue dequeue(Queue q); int emptyq(Queue q); #endif Incomplete type: Separate implementation Simulate Parameteric polymorphism Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

C: Separate Compilation queue.c: queue implementation #include "queue.h“ struct Queuerep { void* data; Queue next; }; Queue createq(void) { return 0; } void* frontq(Queue q) { return q->next->data; ... Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

C: Separate Compilation q_user.C: client code #include "queue.h" int *x = malloc(sizeof(int)); int *y = malloc(sizeof(int)); int *z; *x =2; *y =3; Queue q = createq(); q = enqueue(q,x); q = enqueue(q,y); q = dequeue(q); z = (int*) frontq(q); Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

C: Separate Compilation queue.h q_user.c queue.c Not real ADT casting, allocation: for parametric polymorphism header file directly incorporated into q_user.c: definition / usage consistent data not protected: user may manipulate the type value in arbitrary ways The language itself doesn’t help in tracking changes and managing compilation/linking: thus tools like make Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington C++: Namespaces queue.h: #ifdef QUEUE_H #define QUEUE_H namespace MyQueue { struct Queuerep; typedef struct Queuerep * Queue; Queue createq(void); ... } #endif queue.c: #include "queue.h“ struct MyQueue::Queuerep { void* data; Queue next; }; Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington C++: Namespaces q_user.cpp: #include "queue.h“ using std::endl; using namespace MyQueue; main(){ int *x = malloc(sizeof(int)); int *y = malloc(sizeof(int)); int *z; *x =2; *y =3; Queue q = MyQueue::createq(); q = enqueue(q,x); q = enqueue(q,y); q = dequeue(q); z = (int*) frontq(q); … } Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Java: Packages Queue.java: package queues.myqueue; … PQueue.java: Q_user.java: import queues.myqueue.Queue; import queues.myqueue.*; queues.myqueue.Queue; directory: queues/myqueue class files: Queue.class, PQueue.class queues/myqueue in CLASSPATH Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Example Package java.util http://java.sun.com/j2se/1.5.0/docs/api/java/util/package-summary.html Interface Collection http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collection.html Class PriorityQueue http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Ada: Packages Package Specification generic type T is private; package Queues is type Queue is private; function createq return Queue; function enqueue(q:Queue;elem:T) return Queue; function frontq(q:Queue) return T; function dequeue(q:Queue) return Queue; function emptyq(q:Queue) return Boolean; private type Queuerep; type Queue is access Queuerep; end Queues; parameterized package: Parameteric polymorphism Prevents direct access Pointers: Hide implementation details. Just making Queue incomplete won’t work. Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Ada: Packages Package Body package body Queues is type Queuerep is record data: T; next: Queue; end record; function createq return Queue is begin return null; end createq; ... end Queues; Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington

CSE3302 Programming Languages, UT-Arlington Ada: Packages User Code with Queues; procedure Quser is package IntQueues is new Queues(Integer); use IntQueues; package FloatQueues is new Queues(Float); use FloatQueues; iq: IntQueues.Queue := createq; fq: FloatQueues.Queue := createq; begin iq := enqueue(iq,3); fq := enqueue(fq,3.5); end Quser; Import packages: Specify dependency Parametric polymorphism Overloading Lecture 11 – ADT and Modules, Spring 2017 CSE3302 Programming Languages, UT-Arlington