Sunteți pe pagina 1din 57

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, by Ghezzi and Jazayeri Concepts of Programming Languages, by Sebesta The C++ Programming Language, by Stroustrup

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 ObjectOriented 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

S-ar putea să vă placă și