Topic VII. Data abstraction and modularity SML Modules a. References: Chapter 7 of ML for the working programmer (2ND
|
|
|
- Kristian Hubbard
- 9 years ago
- Views:
Transcription
1 References: Topic VII Data abstraction and modularity SML Modules a Chapter 7 of ML for the working programmer (2ND EDITION) by L. C. Paulson. CUP, a Largely based on an Introduction to SML Modules by Claudio Russo < 1
2 The Standard ML Basis Library edited by E. R. Gansner and J. H. Reppy. CUP, [A useful introduction to SML standard libraries, and a good example of modular programming.] < 2
3 The Core and Modules languages SML consists of two sub-languages: The Core language is for programming in the small, by supporting the definition of types and expressions denoting values of those types. The Modules language is for programming in the large, by grouping related Core definitions of types and expressions into self-contained units, with descriptive interfaces. The Core expresses details of data structures and algorithms. The Modules language expresses software architecture. Both languages are largely independent. 3
4 The Modules language Writing a real program as an unstructured sequence of Core definitions quickly becomes unmanageable. type nat = int val zero = 0 fun succ x = x + 1 fun iter b f i = if i = zero then b else f (iter b f (i-1))... (* thousands of lines later *) fun even (n:nat) = iter true not n The SML Modules language lets one split large programs into separate units with descriptive interfaces. 4
5 SML Modules Signatures and structures An abstract data type is a type equipped with a set of operations, which are the only operations applicable to that type. Its representation can be changed without affecting the rest of the program. Structures let us package up declarations of related types, values, and functions. Signatures let us specify what components a structure must contain. 5
6 Structures In Modules, one can encapsulate a sequence of Core type and value definitions into a unit called a structure. We enclose the definitions in between the keywords struct... end. Example: A structure representing the natural numbers, as positive integers. struct type nat = int val zero = 0 fun succ x = x + 1 fun iter b f i = if i = zero then b else f (iter b f (i-1)) end 6
7 The dot notation One can name a structure by binding it to an identifier. structure IntNat = struct type nat = int... fun iter b f i =... end Components of a structure are accessed with the dot notation. fun even (n:intnat.nat) = IntNat.iter true not n NB: Type IntNat.nat is statically equal to int. Value IntNat.iter dynamically evaluates to a closure. 7
8 Nested structures Structures can be nested inside other structures, in a hierarchy. structure IntNatAdd = struct structure Nat = IntNat fun add n m = Nat.iter m Nat.succ n end... fun mult n m = IntNatAdd.Nat.iter IntNatAdd.Nat.zero (IntNatAdd.add m) n The dot notation (IntNatAdd.Nat) accesses a nested structure. Sequencing dots provides deeper access (IntNatAdd.Nat.zero). Nesting and dot notation provides name-space control. 8
9 Concrete signatures Signature expressions specify the types of structures by listing the specifications of their components. A signature expression consists of a sequence of component specifications, enclosed in between the keywords sig... end. sig type nat = int val zero : nat val succ : nat -> nat val a iter : a -> ( a-> a) -> nat -> a end This signature fully describes the type of IntNat. The specification of type nat is concrete: it must be int. 9
10 Opaque signatures On the other hand, the following signature sig type nat val zero : nat val succ : nat -> nat val a iter : a -> ( a-> a) -> nat -> a end specifies structures that are free to use any implementation for type nat (perhaps int, or word, or some recursive datatype). This specification of type nat is opaque. 10
11 Example: Polymorphic functional stacks. signature STACK = sig exception E type a reptype (* <-- INTERNAL REPRESENTATION *) val new: a reptype val push: a -> a reptype -> a reptype val pop: a reptype -> a reptype val top: a reptype -> a end ; 11
12 structure MyStack: STACK = struct exception E ; type a reptype = a list ; val new = [] ; fun push x s = x::s ; fun split( h::t ) = ( h, t ) split _ = raise E ; fun pop s = #2( split s ) ; fun top s = #1( split s ) ; end ; 12
13 val MyEmptyStack = MyStack.new ; val MyStack0 = MyStack.push 0 MyEmptyStack ; val MyStack01 = MyStack.push 1 MyStack0 ; val MyStack0 = MyStack.pop MyStack01 ; MyStack.top MyStack0 ; val MyEmptyStack = [] : a MyStack.reptype val MyStack0 = [0] : int MyStack.reptype val MyStack01 = [1,0] : int MyStack.reptype val MyStack0 = [0] : int MyStack.reptype val it = 0 : int 13
14 Named and nested signatures Signatures may be named and referenced, to avoid repetition: signature NAT = sig type nat val zero : nat val succ : nat -> nat val a iter : a -> ( a-> a) -> nat -> a end Nested signatures specify named sub-structures: signature Add = sig structure Nat: NAT (* references NAT *) val add: Nat.nat -> Nat.nat -> Nat.nat end 14
15 Signature inclusion To avoid nesting, one can also directly include a signature identifier: sig include NAT val add: nat -> nat ->nat end NB: This is equivalent to the following signature. sig type nat val zero: nat val succ: nat -> nat val a iter: a -> ( a-> a) -> nat -> a val add: nat -> nat -> nat end 15
16 Signature matching Q: When does a structure satisfy a signature? A: The type of a structure matches a signature whenever it implements at least the components of the signature. The structure must realise (i.e. define) all of the opaque type components in the signature. The structure must enrich this realised signature, component-wise: every concrete type must be implemented equivalently; every specified value must have a more general type scheme; every specified structure must be enriched by a substructure. 16
17 Properties of signature matching The components of a structure can be defined in a different order than in the signature; names matter but ordering does not. A structure may contain more components, or components of more general types, than are specified in a matching signature. Signature matching is structural. A structure can match many signatures and there is no need to pre-declare its matching signatures (unlike interfaces in Java and C#). Although similar to record types, signatures actually play a number of different roles. 17
18 Subtyping Signature matching supports a form of subtyping not found in the Core language: A structure with more type, value, and structure components may be used where fewer components are expected. A value component may have a more general type scheme than expected. 18
19 Using signatures to restrict access The following structure uses a signature constraint to provide a restricted view of IntNat: structure ResIntNat = IntNat : sig type nat val succ : nat->nat val iter : nat->(nat->nat)->nat->nat end NB: The constraint str:sig prunes the structure str according to the signature sig: ResIntNat.zero is undefined; ResIntNat.iter is less polymorphic that IntNat.iter. 19
20 Transparency of : Although the : operator can hide names, it does not conceal the definitions of opaque types. Thus, the fact that ResIntNat.nat = IntNat.nat = int remains transparent. For instance the application ResIntNat.succ(~3) is still well-typed, because ~3 has type int... but ~3 is negative, so not a valid representation of a natural number! 20
21 SML Modules Information hiding In SML, we can limit outside access to the components of a structure by constraining its signature in transparent or opaque manners. Further, we can hide the representation of a type by means of an abstype declaration. The combination of these methods yields abstract structures. 21
22 Using signatures to hide the identity of types With different syntax, signature matching can also be used to enforce data abstraction: structure AbsNat = IntNat :> sig type nat val zero: nat end val succ: nat->nat val a iter: a->( a-> a)->nat-> a The constraint str:>sig prunes str but also generates a new, abstract type for each opaque type in sig. 22
23 The actual implementation of AbsNat.nat by int is hidden, so that AbsNat.nat int. AbsNat is just IntNat, but with a hidden type representation. AbsNat defines an abstract datatype of natural numbers: the only way to construct and use values of the abstract type AbsNat.nat is through the operations, zero, succ, and iter. E.g., the application AbsNat.succ(~3) is ill-typed: ~3 has type int, not AbsNat.nat. This is what we want, since ~3 is not a natural number in our representation. In general, abstractions can also prune and specialise components. 23
24 1. Opaque signature constraints structure MyOpaqueStack :> STACK = MyStack ; val MyEmptyOpaqueStack = MyOpaqueStack.new ; val MyOpaqueStack0 = MyOpaqueStack.push 0 MyEmptyOpaqueStack ; val MyOpaqueStack01 = MyOpaqueStack.push 1 MyOpaqueStack0 ; val MyOpaqueStack0 = MyOpaqueStack.pop MyOpaqueStack01 ; MyOpaqueStack.top MyOpaqueStack0 ; val MyEmptyOpaqueStack = - : a MyOpaqueStack.reptype val MyOpaqueStack0 = - : int MyOpaqueStack.reptype val MyOpaqueStack01 = - : int MyOpaqueStack.reptype val MyOpaqueStack0 = - : int MyOpaqueStack.reptype val it = 0 : int 24
25 2. abstypes structure MyHiddenStack: STACK = struct exception E ; abstype a reptype = S of a list (* <-- HIDDEN *) with (* REPRESENTATION *) val new = S [] ; fun push x (S s) = S( x::s ) ; fun pop( S [] ) = raise E pop( S(_::t) ) = S( t ) ; fun top( S [] ) = raise E top( S(h::_) ) = h ; end ; end ; 25
26 val MyHiddenEmptyStack = MyHiddenStack.new ; val MyHiddenStack0 = MyHiddenStack.push 0 MyHiddenEmptyStack ; val MyHiddenStack01 = MyHiddenStack.push 1 MyHiddenStack0 ; val MyHiddenStack0 = MyHiddenStack.pop MyHiddenStack01 ; MyHiddenStack.top MyHiddenStack0 ; val MyHiddenEmptyStack = - : a MyHiddenStack.reptype val MyHiddenStack0 = - : int MyHiddenStack.reptype val MyHiddenStack01 = - : int MyHiddenStack.reptype val MyHiddenStack0 = - : int MyHiddenStack.reptype val it = 0 : int 26
27 SML Modules Functors An SML functor is a structure that takes other structures as parameters. Functors let us write program units that can be combined in different ways. Functors can also express generic algorithms. 27
28 Functors Modules also supports parameterised structures, called functors. Example: The functor AddFun below takes any implementation, N, of naturals and re-exports it with an addition operation. functor AddFun(N:NAT) = struct structure Nat = N fun add n m = Nat.iter n (Nat.succ) m end 28
29 A functor is a function mapping a formal argument structure to a concrete result structure. The body of a functor may assume no more information about its formal argument than is specified in its signature. In particular, opaque types are treated as distinct type parameters. Each actual argument can supply its own, independent implementation of opaque types. 29
30 Functor application A functor may be used to create a structure by applying it to an actual argument: structure IntNatAdd = AddFun(IntNat) structure AbsNatAdd = AddFun(AbsNat) The actual argument must match the signature of the formal parameter so it can provide more components, of more general types. Above, AddFun is applied twice, but to arguments that differ in their implementation of type nat (AbsNat.nat IntNat.nat). 30
31 Example: Generic imperative stacks. signature STACK = sig type itemtype val push: itemtype -> unit val pop: unit -> unit val top: unit -> itemtype end ; 31
32 exception E ; functor Stack( T: sig type atype end ) : STACK = struct type itemtype = T.atype val stack = ref( []: itemtype list ) fun push x = ( stack := x ::!stack ) fun pop() = case!stack of [] => raise E _::s => ( stack := s ) fun top() = case!stack of [] => raise E t::_ => t end ; 32
33 structure intstack = Stack(struct type atype = int end) ; structure intstack : STACK intstack.push(0) ; intstack.top() ; intstack.pop() ; intstack.push(4) ; val it = () : unit val it = 0 : intstack.itemtype val it = () : unit val it = () : unit 33
34 map ( intstack.push ) [3,2,1] ; map ( fn _ => let val top = intstack.top() in intstack.pop(); top end ) [(),(),(),()] ; val it = [(),(),()] : unit list val it = [1,2,3,4] : intstack.itemtype list 34
35 Why functors? Functors support: Code reuse. AddFun may be applied many times to different structures, reusing its body. Code abstraction. AddFun can be compiled before any argument is implemented. Type abstraction. AddFun can be applied to different types N.nat. 35
ML for the Working Programmer
ML for the Working Programmer 2nd edition Lawrence C. Paulson University of Cambridge CAMBRIDGE UNIVERSITY PRESS CONTENTS Preface to the Second Edition Preface xiii xv 1 Standard ML 1 Functional Programming
Lecture 12: Abstract data types
Lecture 12: Abstract data types Algebras Abstract data types Encapsulation and information hiding Parameterization Algebras Definition Which kinds of data do we want to discuss? What can we do with it?
Semester Review. CSC 301, Fall 2015
Semester Review CSC 301, Fall 2015 Programming Language Classes There are many different programming language classes, but four classes or paradigms stand out:! Imperative Languages! assignment and iteration!
Overview. Elements of Programming Languages. Advanced constructs. Motivating inner class example
Overview Elements of Programming Languages Lecture 12: Object-oriented functional programming James Cheney University of Edinburgh November 6, 2015 We ve now covered: basics of functional and imperative
KITES TECHNOLOGY COURSE MODULE (C, C++, DS)
KITES TECHNOLOGY 360 Degree Solution www.kitestechnology.com/academy.php [email protected] [email protected] Contact: - 8961334776 9433759247 9830639522.NET JAVA WEB DESIGN PHP SQL, PL/SQL
Chapter 5 Names, Bindings, Type Checking, and Scopes
Chapter 5 Names, Bindings, Type Checking, and Scopes Chapter 5 Topics Introduction Names Variables The Concept of Binding Type Checking Strong Typing Scope Scope and Lifetime Referencing Environments Named
Functional Programming. Functional Programming Languages. Chapter 14. Introduction
Functional Programming Languages Chapter 14 Introduction Functional programming paradigm History Features and concepts Examples: Lisp ML 1 2 Functional Programming Functional Programming Languages The
Pseudo code Tutorial and Exercises Teacher s Version
Pseudo code Tutorial and Exercises Teacher s Version Pseudo-code is an informal way to express the design of a computer program or an algorithm in 1.45. The aim is to get the idea quickly and also easy
Moving from CS 61A Scheme to CS 61B Java
Moving from CS 61A Scheme to CS 61B Java Introduction Java is an object-oriented language. This document describes some of the differences between object-oriented programming in Scheme (which we hope you
The Clean programming language. Group 25, Jingui Li, Daren Tuzi
The Clean programming language Group 25, Jingui Li, Daren Tuzi The Clean programming language Overview The Clean programming language first appeared in 1987 and is still being further developed. It was
Sequence Diagrams. Massimo Felici. Massimo Felici Sequence Diagrams c 2004 2011
Sequence Diagrams Massimo Felici What are Sequence Diagrams? Sequence Diagrams are interaction diagrams that detail how operations are carried out Interaction diagrams model important runtime interactions
Glossary of Object Oriented Terms
Appendix E Glossary of Object Oriented Terms abstract class: A class primarily intended to define an instance, but can not be instantiated without additional methods. abstract data type: An abstraction
Master of Sciences in Informatics Engineering Programming Paradigms 2005/2006. Final Examination. January 24 th, 2006
Master of Sciences in Informatics Engineering Programming Paradigms 2005/2006 Final Examination January 24 th, 2006 NAME: Please read all instructions carefully before start answering. The exam will be
Software Engineering Techniques
Software Engineering Techniques Low level design issues for programming-in-the-large. Software Quality Design by contract Pre- and post conditions Class invariants Ten do Ten do nots Another type of summary
Lecture 18-19 Data Types and Types of a Language
Lecture 18-19 Data Types and Types of a Language April 29, 2014 Data Types and Types of a Language Data, Data Types and Types Type: Generalities Type Systems and Type Safety Type Equivalence, Coercion
Functional Programming
FP 2005 1.1 3 Functional Programming WOLFRAM KAHL [email protected] Department of Computing and Software McMaster University FP 2005 1.2 4 What Kinds of Programming Languages are There? Imperative telling
Lecture 9. Semantic Analysis Scoping and Symbol Table
Lecture 9. Semantic Analysis Scoping and Symbol Table Wei Le 2015.10 Outline Semantic analysis Scoping The Role of Symbol Table Implementing a Symbol Table Semantic Analysis Parser builds abstract syntax
Organization of Programming Languages CS320/520N. Lecture 05. Razvan C. Bunescu School of Electrical Engineering and Computer Science bunescu@ohio.
Organization of Programming Languages CS320/520N Razvan C. Bunescu School of Electrical Engineering and Computer Science [email protected] Names, Bindings, and Scopes A name is a symbolic identifier used
16. Recursion. COMP 110 Prasun Dewan 1. Developing a Recursive Solution
16. Recursion COMP 110 Prasun Dewan 1 Loops are one mechanism for making a program execute a statement a variable number of times. Recursion offers an alternative mechanism, considered by many to be more
Functional Programming in C++11
Functional Programming in C++11 science + computing ag IT-Dienstleistungen und Software für anspruchsvolle Rechnernetze Tübingen München Berlin Düsseldorf An Overview Programming in a functional style
Programming Language Features (cont.) CMSC 330: Organization of Programming Languages. Parameter Passing in OCaml. Call-by-Value
CMSC 33: Organization of Programming Languages Programming Language Features (cont.) Names & binding Namespaces Static (lexical) scopes Dynamic scopes Polymorphism Parametric Subtype Ad-hoc Parameter Passing
Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.
Name: Class: Date: Exam #1 - Prep True/False Indicate whether the statement is true or false. 1. Programming is the process of writing a computer program in a language that the computer can respond to
Storage Classes CS 110B - Rule Storage Classes Page 18-1 \handouts\storclas
CS 110B - Rule Storage Classes Page 18-1 Attributes are distinctive features of a variable. Data type, int or double for example, is an attribute. Storage class is another attribute. There are four storage
Regular Expressions with Nested Levels of Back Referencing Form a Hierarchy
Regular Expressions with Nested Levels of Back Referencing Form a Hierarchy Kim S. Larsen Odense University Abstract For many years, regular expressions with back referencing have been used in a variety
C++ INTERVIEW QUESTIONS
C++ INTERVIEW QUESTIONS http://www.tutorialspoint.com/cplusplus/cpp_interview_questions.htm Copyright tutorialspoint.com Dear readers, these C++ Interview Questions have been designed specially to get
13 Classes & Objects with Constructors/Destructors
13 Classes & Objects with Constructors/Destructors 13.1 Introduction In object oriented programming, the emphasis is on data rather than function. Class is a way that binds the data & function together.
Stack Allocation. Run-Time Data Structures. Static Structures
Run-Time Data Structures Stack Allocation Static Structures For static structures, a fixed address is used throughout execution. This is the oldest and simplest memory organization. In current compilers,
Debugging. Common Semantic Errors ESE112. Java Library. It is highly unlikely that you will write code that will work on the first go
Debugging ESE112 Java Programming: API, Psuedo-Code, Scope It is highly unlikely that you will write code that will work on the first go Bugs or errors Syntax Fixable if you learn to read compiler error
Tutorial on Writing Modular Programs in Scala
Tutorial on Writing Modular Programs in Scala Martin Odersky and Gilles Dubochet 13 September 2006 Tutorial on Writing Modular Programs in Scala Martin Odersky and Gilles Dubochet 1 of 45 Welcome to the
Section IV.1: Recursive Algorithms and Recursion Trees
Section IV.1: Recursive Algorithms and Recursion Trees Definition IV.1.1: A recursive algorithm is an algorithm that solves a problem by (1) reducing it to an instance of the same problem with smaller
[Refer Slide Time: 05:10]
Principles of Programming Languages Prof: S. Arun Kumar Department of Computer Science and Engineering Indian Institute of Technology Delhi Lecture no 7 Lecture Title: Syntactic Classes Welcome to lecture
Java 6 'th. Concepts INTERNATIONAL STUDENT VERSION. edition
Java 6 'th edition Concepts INTERNATIONAL STUDENT VERSION CONTENTS PREFACE vii SPECIAL FEATURES xxviii chapter i INTRODUCTION 1 1.1 What Is Programming? 2 J.2 The Anatomy of a Computer 3 1.3 Translating
Course MS10975A Introduction to Programming. Length: 5 Days
3 Riverchase Office Plaza Hoover, Alabama 35244 Phone: 205.989.4944 Fax: 855.317.2187 E-Mail: [email protected] Web: www.discoveritt.com Course MS10975A Introduction to Programming Length: 5 Days
09336863931 : provid.ir
provid.ir 09336863931 : NET Architecture Core CSharp o Variable o Variable Scope o Type Inference o Namespaces o Preprocessor Directives Statements and Flow of Execution o If Statement o Switch Statement
Sources: On the Web: Slides will be available on:
C programming Introduction The basics of algorithms Structure of a C code, compilation step Constant, variable type, variable scope Expression and operators: assignment, arithmetic operators, comparison,
15-150 Lecture 11: Tail Recursion; Continuations
15-150 Lecture 11: Tail Recursion; Continuations Lecture by Dan Licata February 21, 2011 In this lecture we will discuss space usage: analyzing the memory it takes your program to run tail calls and tail
Fundamentals of Java Programming
Fundamentals of Java Programming This document is exclusive property of Cisco Systems, Inc. Permission is granted to print and copy this document for non-commercial distribution and exclusive use by instructors
Regular Expressions and Automata using Haskell
Regular Expressions and Automata using Haskell Simon Thompson Computing Laboratory University of Kent at Canterbury January 2000 Contents 1 Introduction 2 2 Regular Expressions 2 3 Matching regular expressions
Boolean Expressions, Conditions, Loops, and Enumerations. Precedence Rules (from highest to lowest priority)
Boolean Expressions, Conditions, Loops, and Enumerations Relational Operators == // true if two values are equivalent!= // true if two values are not equivalent < // true if left value is less than the
Chapter 15 Functional Programming Languages
Chapter 15 Functional Programming Languages Introduction - The design of the imperative languages is based directly on the von Neumann architecture Efficiency (at least at first) is the primary concern,
COMP 356 Programming Language Structures Notes for Chapter 10 of Concepts of Programming Languages Implementing Subprograms.
COMP 356 Programming Language Structures Notes for Chapter 10 of Concepts of Programming Languages Implementing Subprograms 1 Activation Records activation declaration location Recall that an activation
Visual Basic Programming. An Introduction
Visual Basic Programming An Introduction Why Visual Basic? Programming for the Windows User Interface is extremely complicated. Other Graphical User Interfaces (GUI) are no better. Visual Basic provides
Towards Interface Types for Haskell
Towards Interface Types for Haskell Work in Progress Peter Thiemann Joint work with Stefan Wehr Universität Freiburg, Germany WG 2.8 Meeting, Nesjavellir, Island, 17.07.2007 What is a type class? A type
CSE 307: Principles of Programming Languages
Course Organization Introduction CSE 307: Principles of Programming Languages Spring 2015 R. Sekar Course Organization Introduction 1 / 34 Topics 1. Course Organization Info and Support Course Description
Chapter 7: Functional Programming Languages
Chapter 7: Functional Programming Languages Aarne Ranta Slides for the book Implementing Programming Languages. An Introduction to Compilers and Interpreters, College Publications, 2012. Fun: a language
Parsing Technology and its role in Legacy Modernization. A Metaware White Paper
Parsing Technology and its role in Legacy Modernization A Metaware White Paper 1 INTRODUCTION In the two last decades there has been an explosion of interest in software tools that can automate key tasks
The Java Series. Java Essentials I What is Java? Basic Language Constructs. Java Essentials I. What is Java?. Basic Language Constructs Slide 1
The Java Series Java Essentials I What is Java? Basic Language Constructs Slide 1 What is Java? A general purpose Object Oriented programming language. Created by Sun Microsystems. It s a general purpose
3. Mathematical Induction
3. MATHEMATICAL INDUCTION 83 3. Mathematical Induction 3.1. First Principle of Mathematical Induction. Let P (n) be a predicate with domain of discourse (over) the natural numbers N = {0, 1,,...}. If (1)
UML for C# Modeling Basics
UML for C# C# is a modern object-oriented language for application development. In addition to object-oriented constructs, C# supports component-oriented programming with properties, methods and events.
Data Abstraction and Hierarchy
Data Abstraction and Hierarchy * This research was supported by the NEC Professorship of Software Science and Engineering. Barbara Liskov Affiliation: MIT Laboratory for Computer Science Cambridge, MA,
Tutorial on C Language Programming
Tutorial on C Language Programming Teodor Rus [email protected] The University of Iowa, Department of Computer Science Introduction to System Software p.1/64 Tutorial on C programming C program structure:
MLS module Sealing and Functor Design
Understanding and Evolving the ML Module System Derek Dreyer May 2005 CMU-CS-05-131 School of Computer Science Carnegie Mellon University Pittsburgh, PA 15213 Thesis Committee: Robert Harper (co-chair)
Java (12 Weeks) Introduction to Java Programming Language
Java (12 Weeks) Topic Lecture No. Introduction to Java Programming Language 1 An Introduction to Java o Java as a Programming Platform, The Java "White Paper" Buzzwords, Java and the Internet, A Short
Infinite Pretty-printing in exene
Infinite Pretty-printing in exene Allen Stoughton Kansas State University Manhattan, KS 66506, USA [email protected] http://www.cis.ksu.edu/~allen/home.html Abstract. We describe the design and implementation
Course Title: Software Development
Course Title: Software Development Unit: Customer Service Content Standard(s) and Depth of 1. Analyze customer software needs and system requirements to design an information technology-based project plan.
OKLAHOMA SUBJECT AREA TESTS (OSAT )
CERTIFICATION EXAMINATIONS FOR OKLAHOMA EDUCATORS (CEOE ) OKLAHOMA SUBJECT AREA TESTS (OSAT ) FIELD 081: COMPUTER SCIENCE September 2008 Subarea Range of Competencies I. Computer Use in Educational Environments
In this Chapter you ll learn:
Now go, write it before them in a table, and note it in a book. Isaiah 30:8 To go beyond is as wrong as to fall short. Confucius Begin at the beginning, and go on till you come to the end: then stop. Lewis
Appendix B: Alloy Language Reference B.1 Lexical Issues
Appendix B: Alloy Language Reference B.1 Lexical Issues The permitted characters are the printing characters of the ASCII character set, with the exception of backslash \ backquote ` and, of the ASCII
Habanero Extreme Scale Software Research Project
Habanero Extreme Scale Software Research Project Comp215: Java Method Dispatch Zoran Budimlić (Rice University) Always remember that you are absolutely unique. Just like everyone else. - Margaret Mead
Java Application Developer Certificate Program Competencies
Java Application Developer Certificate Program Competencies After completing the following units, you will be able to: Basic Programming Logic Explain the steps involved in the program development cycle
The Tower of Hanoi. Recursion Solution. Recursive Function. Time Complexity. Recursive Thinking. Why Recursion? n! = n* (n-1)!
The Tower of Hanoi Recursion Solution recursion recursion recursion Recursive Thinking: ignore everything but the bottom disk. 1 2 Recursive Function Time Complexity Hanoi (n, src, dest, temp): If (n >
Software Testing. Definition: Testing is a process of executing a program with data, with the sole intention of finding errors in the program.
Software Testing Definition: Testing is a process of executing a program with data, with the sole intention of finding errors in the program. Testing can only reveal the presence of errors and not the
CSI 333 Lecture 1 Number Systems
CSI 333 Lecture 1 Number Systems 1 1 / 23 Basics of Number Systems Ref: Appendix C of Deitel & Deitel. Weighted Positional Notation: 192 = 2 10 0 + 9 10 1 + 1 10 2 General: Digit sequence : d n 1 d n 2...
Object-Oriented Software Specification in Programming Language Design and Implementation
Object-Oriented Software Specification in Programming Language Design and Implementation Barrett R. Bryant and Viswanathan Vaidyanathan Department of Computer and Information Sciences University of Alabama
Chapter 5 Functions. Introducing Functions
Chapter 5 Functions 1 Introducing Functions A function is a collection of statements that are grouped together to perform an operation Define a function Invoke a funciton return value type method name
Common Data Structures
Data Structures 1 Common Data Structures Arrays (single and multiple dimensional) Linked Lists Stacks Queues Trees Graphs You should already be familiar with arrays, so they will not be discussed. Trees
Practical Generic Programming with OCaml
Practical Generic Programming with OCaml Jeremy Yallop LFCS, University of Edinburgh ML Workshop 2007 Instead of this... type α tree = Node of α Branch of (α tree) (α tree) val show_tree : (α string) (α
1.1 WHAT IS A PROGRAMMING LANGUAGE?
1 INTRODUCTION 1.1 What is a Programming Language? 1.2 Abstractions in Programming Languages 1.3 Computational Paradigms 1.4 Language Definition 1.5 Language Translation 1.6 Language Design How we communicate
1 Introduction. 2 An Interpreter. 2.1 Handling Source Code
1 Introduction The purpose of this assignment is to write an interpreter for a small subset of the Lisp programming language. The interpreter should be able to perform simple arithmetic and comparisons
Lecture 7 Notes: Object-Oriented Programming (OOP) and Inheritance
Introduction to C++ January 19, 2011 Massachusetts Institute of Technology 6.096 Lecture 7 Notes: Object-Oriented Programming (OOP) and Inheritance We ve already seen how to define composite datatypes
On Understanding Types, Data Abstraction, and Polymorphism
1 Computing Surveys, Vol 17 n. 4, pp 471-522, December 1985 On Understanding Types, Data Abstraction, and Polymorphism Luca Cardelli AT&T Bell Laboratories, Murray Hill, NJ 07974 (current address: DEC
Lecture 1: Introduction
Programming Languages Lecture 1: Introduction Benjamin J. Keller Department of Computer Science, Virginia Tech Programming Languages Lecture 1 Introduction 2 Lecture Outline Preview History of Programming
Regression Verification: Status Report
Regression Verification: Status Report Presentation by Dennis Felsing within the Projektgruppe Formale Methoden der Softwareentwicklung 2013-12-11 1/22 Introduction How to prevent regressions in software
CSCI 253. Object Oriented Programming (OOP) Overview. George Blankenship 1. Object Oriented Design: Java Review OOP George Blankenship.
CSCI 253 Object Oriented Design: Java Review OOP George Blankenship George Blankenship 1 Object Oriented Programming (OOP) OO Principles Abstraction Encapsulation Abstract Data Type (ADT) Implementation
Code Refactoring and Defects
Code Refactoring and Defects Reusing this material This work is licensed under a Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International License. http://creativecommons.org/licenses/by-nc-sa/4.0/deed.en_us
The Rules 1. One level of indentation per method 2. Don t use the ELSE keyword 3. Wrap all primitives and Strings
Object Calisthenics 9 steps to better software design today, by Jeff Bay http://www.xpteam.com/jeff/writings/objectcalisthenics.rtf http://www.pragprog.com/titles/twa/thoughtworks-anthology We ve all seen
Programming and Software Development CTAG Alignments
Programming and Software Development CTAG Alignments This document contains information about four Career-Technical Articulation Numbers (CTANs) for Programming and Software Development Career-Technical
J a v a Quiz (Unit 3, Test 0 Practice)
Computer Science S-111a: Intensive Introduction to Computer Science Using Java Handout #11 Your Name Teaching Fellow J a v a Quiz (Unit 3, Test 0 Practice) Multiple-choice questions are worth 2 points
CompuScholar, Inc. Alignment to Utah's Computer Programming II Standards
CompuScholar, Inc. Alignment to Utah's Computer Programming II Standards Course Title: TeenCoder: Java Programming Course ISBN: 978 0 9887070 2 3 Course Year: 2015 Note: Citation(s) listed may represent
Stacks. Linear data structures
Stacks Linear data structures Collection of components that can be arranged as a straight line Data structure grows or shrinks as we add or remove objects ADTs provide an abstract layer for various operations
8 Primes and Modular Arithmetic
8 Primes and Modular Arithmetic 8.1 Primes and Factors Over two millennia ago already, people all over the world were considering the properties of numbers. One of the simplest concepts is prime numbers.
Parameter passing in LISP
Parameter passing in LISP The actual parameters in a function call are always expressions, represented as lists structures. LISP provides two main methods of parameter passing: Pass/Call-by-value. The
Recursion. Definition: o A procedure or function that calls itself, directly or indirectly, is said to be recursive.
Recursion Definition: o A procedure or function that calls itself, directly or indirectly, is said to be recursive. Why recursion? o For many problems, the recursion solution is more natural than the alternative
PROBLEM SOLVING SEVENTH EDITION WALTER SAVITCH UNIVERSITY OF CALIFORNIA, SAN DIEGO CONTRIBUTOR KENRICK MOCK UNIVERSITY OF ALASKA, ANCHORAGE PEARSON
PROBLEM SOLVING WITH SEVENTH EDITION WALTER SAVITCH UNIVERSITY OF CALIFORNIA, SAN DIEGO CONTRIBUTOR KENRICK MOCK UNIVERSITY OF ALASKA, ANCHORAGE PEARSON Addison Wesley Boston San Francisco New York London
25 Integers: Addition and Subtraction
25 Integers: Addition and Subtraction Whole numbers and their operations were developed as a direct result of people s need to count. But nowadays many quantitative needs aside from counting require numbers
Programming Database lectures for mathema
Programming Database lectures for mathematics students April 25, 2015 Functions Functions are defined in Postgres with CREATE FUNCTION name(parameter type,...) RETURNS result-type AS $$ function-body $$
6. Control Structures
- 35 - Control Structures: 6. Control Structures A program is usually not limited to a linear sequence of instructions. During its process it may bifurcate, repeat code or take decisions. For that purpose,
Object Oriented Design
Object Oriented Design Kenneth M. Anderson Lecture 20 CSCI 5828: Foundations of Software Engineering OO Design 1 Object-Oriented Design Traditional procedural systems separate data and procedures, and
Adding GADTs to OCaml the direct approach
Adding GADTs to OCaml the direct approach Jacques Garrigue & Jacques Le Normand Nagoya University / LexiFi (Paris) https://sites.google.com/site/ocamlgadt/ Garrigue & Le Normand Adding GADTs to OCaml 1
Checking Access to Protected Members in the Java Virtual Machine
Checking Access to Protected Members in the Java Virtual Machine Alessandro Coglio Kestrel Institute 3260 Hillview Avenue, Palo Alto, CA 94304, USA Ph. +1-650-493-6871 Fax +1-650-424-1807 http://www.kestrel.edu/
C Compiler Targeting the Java Virtual Machine
C Compiler Targeting the Java Virtual Machine Jack Pien Senior Honors Thesis (Advisor: Javed A. Aslam) Dartmouth College Computer Science Technical Report PCS-TR98-334 May 30, 1998 Abstract One of the
1 Introduction. 2 Overview of the Tool. Program Visualization Tool for Educational Code Analysis
Program Visualization Tool for Educational Code Analysis Natalie Beams University of Oklahoma, Norman, OK [email protected] Program Visualization Tool for Educational Code Analysis 1 Introduction
MICHIGAN TEST FOR TEACHER CERTIFICATION (MTTC) TEST OBJECTIVES FIELD 050: COMPUTER SCIENCE
MICHIGAN TEST FOR TEACHER CERTIFICATION (MTTC) TEST OBJECTIVES Subarea Educational Computing and Technology Literacy Computer Systems, Data, and Algorithms Program Design and Verification Programming Language
Introduction to Software Paradigms & Procedural Programming Paradigm
Introduction & Procedural Programming Sample Courseware Introduction to Software Paradigms & Procedural Programming Paradigm This Lesson introduces main terminology to be used in the whole course. Thus,
Concepts of Programming Languages: A Unified Approach. Karl Abrahamson
Concepts of Programming Languages: A Unified Approach Karl Abrahamson August 2013 2 Copyright (c) 2013 Karl Abrahamson. Contents 1 Introduction to Programming Languages 11 1.1 Programming languages.............................
