Programming Paradigms

Download Report

Transcript Programming Paradigms

IT 240 Programming Paradigms

MS Information Technology Ateneo de Davao

Course Outline

 Programming Language Concepts  Survey of Languages and Paradigms  Imperative, Functional, Object-Oriented  Focus: OO Programming  OO Languages (Java and C++)  OO Design (UML)  Design Patterns

Prerequisites and Context

 IT 240: One of the six required (core) courses in the MS IT curriculum  Assumes sufficient exposure (at least two semesters) to programming  preferably in the C Language  undergraduate courses in data structures and/or programming languages will be helpful

References

 Programming Language Concepts Ghezzi and Jazayeri , by  Concepts of Programming Languages, Sebesta  The C++ Programming Language Stroustrup , by by

Course Requirements

 Midterm Exam  Final Exam  Exercises/Projects  Individual Report 25% 25% 30% 20%

Schedule

 Session 1: Overview, Imperative Prog (November)  Session 2: Functional Prog (December)  Midterm  Session 3: OO Programming (January)  Session 4: More OOP, Reports (February)  Final Exam

Schedule This Weekend

 Friday Afternoon  Overview, Classification of Languages  Saturday Morning  Evolution from Imperative/Structured Programming to OO Programming  Saturday Afternoon  Syntax and Semantics, Language Translation  Concepts in Imperative Programming

Revised Schedule This Weekend

 Saturday Afternoon Session 1:  Overview, Classification of Languages  Evolution from Imperative/Structured Programming to OO Programming  Saturday Afternoon/Evening Session 2:  Syntax and Semantics, Language Translation  Concepts in Imperative Programming  Sunday Morning session  Imperative Programming, continued  Introduction to Java (time permitting)

Session Format

 Lecture  discussion of formal definitions, concepts and cases  Lab  implementation of examples discussed  exercises to be submitted

Objective: gain working knowledge of the topics discussed

Course Material and Required Reading

 Visit course website regularly:  http://curry.ateneo.net/~jpv/courses.html

will link to a page containing IT 240 material  Read:  Stroustrup book: section on Programming Paradigms (sec. 1.2, pp. 14-22)

Overview of Programming Paradigms

IT 240

Definitions

 Programming Paradigm  programming “technique” (?)  way of thinking about programming  view of a program  Programming Language  consists of words, symbols, and rules for writing a program

Programming Paradigms

 Imperative Programming  program as a collection of statements and procedures affecting data (variables)  Object-Oriented Programming  program as a collection of classes for interacting objects  Functional Programming  program as a collection of (math) functions  Others

Some Languages by Paradigm

 Imperative (also called Structured or Procedural) Programming  FORTRAN, BASIC, COBOL, Pascal, C  Object-Oriented Programming  SmallTalk, C++, Java  Functional Programming  LISP, ML, Haskell

History of Languages

 1950s to 1960s  FORTRAN, COBOL, LISP, BASIC  1960s to 1970s  (ALGOL-based) Pascal and others  1970s to 1980s  Prolog, C, Ada  1980s to 1990s  C++, ML, Perl, Java

Paradigm Change

 For example, from Structured to Object Oriented  Arises from problems encountered in one paradigm but addressed in another  Case study: from C to C++  Evolution from structured, to modular, to object-based, to object-oriented programming  Stroustrup book section 1.2

Case Study: Stacks

 Stack  last-in, first-out structure  operations: push, pop  Sample uses ?

 Stacks are used to support some solution  push and pop are defined and implemented as functions  the solution consists of code that invoke these functions

Implementing a Stack

 Stack can be implemented as an array  array contains pushed elements  an integer refers to top of the stack  most common implementation  Or as a linked list  using pointers and dynamic allocation  Other implementations

Array Implementation in C

char Store[MAX]; int top = 0; void push(char x) { if (top < MAX) Store[top++] = x; else printf(“full\n”); } char pop() { if (top > 0) return Store[--top]; else printf(“empty\n”); } ...

Using the Stack

void application() { … push(‘x’); … result = pop(); … }

Procedural Programming

 Focus is on writing good functions and procedures  use the most appropriate implementation and employ correct efficient algorithms  Stack example (assume array implementation)  one source file  Store and top are global variables  stack and application functions defined at the same level (file)

Problems

 Application can alter implementation details  can directly manipulate top and Store from application()  integrity of stack not ensured  Stack code and application code are not separated

Encapsulation and Modular Programming

 Focus is on writing good modules  hide implementation details from user  provide an interface  Stack example  stack.h contains prototypes for push, pop  stack.c contains stack code, Store and top declared static (local to stack.c)  application includes stack.h

Benefits from Modules

 Application cannot destroy the integrity of the stack  Stack implementation can change without affecting application source  Question: what happens if we need more than one stack?

Multiple Stacks

 Strategy 1 (use structs)  in stack.h, define a stack structure that contains Store and top; push, pop now have an extra parameter that specifies which stack  application code defines stack variables  Strategy 2 (use handles)  implement multiple data structures in stack.c

 use an integer (the handle) to specify “stack number”

Modules and Multiple Stacks

 Disadvantage of strategy 1:  implementation (data) is exposed  back to original problem on stack integrity  Disadvantage of strategy 2:  stack module will be unnecessarily complex  handle is artificial (what if an arbitrary integer is passed?)

Abstract Data Types and Object-based Programming

 Focus is on writing good classes (or types) that define operations on objects of the class  class defined like a module (encapsulation enforced) but multiple instances now possible  user-defined type  Stack example (C++)  stack.h and stack.cpp define a stack class

Object-Oriented Programming

 Incorporates both encapsulation and inheritance through the class concept  Focus is on writing good classes and on code reuse  Examples  Shape, Circle, and Rectangle in a drawing program  Employee, Faculty, Staff in a university personnel system

Lab Exercises (Set 1)

 Modular Programming  create a stack module  Multiple stacks 

create a multiple-stack module using structs

 create a multiple-stack module using handles  Object-based Programming  create a stack class in C++

Syntax and Semantics

IT 240

Outline

 Language Definition  syntactic vs semantic rules  Translation & Language Processing  Compilation  stages  handout

Language Definition

 Syntax  set of rules that define form  BNF Grammar or syntax diagram  Semantics  specify meaning of well-formed programs  formal semantics: pre- and post- conditions

Specifying Syntax

 Lexical Rules  rules for determining tokens  tokens: syntactic units (e.g., number, identifier, semicolon, equals)  Syntactic Rules  Grammar: set of productions  productions: terminals (tokens) and nonterminals

Semantics

 Given a language construct  what is required for that (well-formed) construct to execute?

 what happens upon execution?

 Example: assignment statement  tokens present? syntax? semantics?

Language Translation

 Interpreters  processes instructions on the fly  Compilers  produces object code for execution  Intermediate code  e.g., pcode or the Java Virtual Machine

Compilation Stages

 Lexical Analysis  Parsing (Syntax Analysis)  Code Generation  Code Optimization * Symbol Table Management

Handout

 For the sample program, simulate compilation and describe effect for each compilation stage  Lab exercise (Set 2) 

Simple exercise on Lexical Analysis, Parsing, and Symbol table management

 Parser for variable declarations (C & Pascal)  Output: list of variables per data type

Imperative Programming

IT 240

Imperative Programming

 Variables, assignment, sequencing, iteration, procedures as units  State-based, assignment-oriented  Global variables, side effects  Program units: Data (Variables) and Computation (Statements and Routines)

Data and Computation

 Binding  Data  Variables  Data types  Computation  Assignments and expressions  Control structures  Subprograms / routines

Binding

 Program units/entities have attributes  e.g., a variable has a name, a statement has associated actions  Binding  setting the value of an attribute  Binding time  when binding occurs

Binding Time

 Language definition time  Language implementation time  Compile-time  Execution-time Examples?

Variable

 A named location in memory that can hold a value  Formally, a 5-tuple:  name  scope  type  l-value  r-value

Name and Scope

 Declaration  Identifier rules and significant characters  Scope  range of instructions over which variable name is known  namespaces  Blocks (as in Pascal or C)  Static vs dynamic scope binding

Type

 Consists of  Set of values  Operations  Built-in/Primitive vs User-defined types  binding?

 Implicit declarations  e.g., FORTRAN and first letter of a variable and first assignment in BASIC or Foxpro  Dynamic typing

Why Use Data Types?

 Purpose: classification and protection  note that all data are ultimately represented as bit-strings  Advantages:  abstraction  compile-time checking and resolution  explicit specification

Complex Data Types

 User-defined enumeration types  Composite types  Aggregations  cartesian product (records or structures)  mapping (arrays)  unions

L-value and r-value

 l-value: address/location  lifetime  memory allocation  r-value: contents/encoded value  initialization  constants * binding

Pointers

 Attributes  Allocation and de-allocation  Operators  referencing (address-of)  de-referencing  Unnamed Variables  e.g., Pascal

Control: Statements and Routines

 Expressions and statements  Conditional execution  Iteration  Routines  Parameter Passing  Modules and Program Structure

Expressions and Statements

 Operands: variables, literals  Operators  Unary, binary, and others (functions?)  Value returned vs effect  Precedence  Statements  The semicolon: C (terminator) vs Pascal (separator)  Blocks: C { } vs Pascal (begin-end)  Control structures: decision, iteration, routines

Conditional Execution

 Conditions and boolean values  Relationship of conditions and int in C  Not adopted in Java  Short-cutting  If-statements and dangling else  The switch statement  Restrictions  The break; statement

Iteration

 For statement  Loop control variable  The while loop  while vs do-while  do-while versus repeat-until  Iteration using goto

Routines

 Program unit; sequence of instructions  Also a 5-tuple:  name  scope  type  l-value  r-value

About Routines

 Functions vs procedures (methods?)  Parameter Passing  By value  By reference  Others?

 Activation Records  Recursion

Modules and Program Structure

 Programming in the Large  need to compose program through units  Modules  program units that interact with each another  Encapsulation  information hiding  independent modules with interfaces

Modularity

 Interface and Implementation  Compilation  Independent  Separate  Libraries