cps 506 comparative programming languages imperative programming language paradigm

54
CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Upload: maude-meagan-shields

Post on 12-Jan-2016

245 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

CPS 506Comparative Programming

LanguagesImperative

Programming Language Paradigm

Page 2: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Introduction

• Oldest and most well-developed paradigm• Mirrors computer architecture• Series of steps

– Retrieve input– Calculate– Produce output

• Procedural Abstraction– Assignments– Loops– Sequences– Conditional Statements

• Examples– Cobol, Fortran, Ada, Pascal, C, Perl

Page 3: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

What Makes a Language Imperative?

• In a von Neumann machine memory holds:– Instructions– Data

• Intellectual heart: assignment statement– Others:• Conditional branching• Unconditional branch (goto)

Page 4: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Flowchart

Page 5: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Procedural Abstraction

• Procedural abstraction allows the programmer to be concerned mainly with a function interface, ignoring the details of how it is computed.

• The process of stepwise refinement utilizes procedural abstraction to develop an algorithm starting with a general form and ending with an implementation.– Ex: sort(list, len)

Page 6: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Expressions and Assignment

• Assignment statement is fundamental:target = expression

• Copy semantics• Expression is evaluated to a value, which is

copied to the target; used by imperative languages

• Reference semantics• Expression is evaluated to an object, whose

pointer is copied to the target; used by object-oriented languages.

Page 7: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• There exist vast libraries of functions for most imperative languages.

• Partially accounts for the longevity of languages like Fortran, Cobol, and C.

Page 8: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Turing Complete

• Integer variables, values, operations• Assignment• If• Goto

• Structured programming revolution of 1970s replace the Goto with while loops.

Page 9: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

C

• C was originally designed for and implemented on the UNIX operating system on the DEC PDP-11, by Dennis Ritchie.

• Its parent and grandparent are B and BCPL, respectively.

• The operating system, the C compiler, and essentially all UNIX applications programs are written in C.

• C is not tied to any particular hardware or system, however, and it is easy to write programs that will run without change on any machine that supports C.

Page 10: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Influences

• Multics, PL/I• Application: typesetting documentation• PDP-11: 16-bit minicomputer; 32 KB

memory• BCPL: typeless• Portability: big-endian vs. little-endian

machines• Good code from a non-optimizing compiler• Hardware support for: ++, --, +=, etc.

Page 11: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

General Characteristics

• Relatively low level language• Macro facility• Conditional compilation• Lacks: iterators, generics, exception

handling, overloading• Assignments are expression; ex: strcpy

Page 12: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Dynamic Allocation

int *a;...a = malloc(sizeof(int) *size);/* ANSI C: a = (int *) malloc(sizeof(int) *size);

C++: a = new int[size]; *//* deallocation left to programmer */

Page 13: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

#include <stdio.h>#include <stdlib.h>#include "node.h"struct node *mknodebin(char op1, struct node *left,struct node * right) {

struct node *result; result = (struct node*)

malloc(sizeof(struct node)); result->kind = binary; result->op = op1; result->term1 = left; result->term2 = right; return result;}

Page 14: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

struct node *diff(char x, struct node *root){

struct node *result; switch (root->kind) { case value: result = mknodeval(0); break; case var: result = mknodeval(

root->id == x?1:0); break;

Page 15: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

case binary:

switch (root->op) {

case '+':

result = mknodebin(

Plus,

diff(x, root->term1),

diff(x, root->term2));

break;

...

return result;

}

Page 16: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Ada

• developed in late 1970’s by US Department of Defense (DoD)

• DoD spending billions of dollars on software

• over 450 languages in use• solution: standardize on one language• Higher Order Language Working Group

Page 17: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

General Characteristics

• influencs: Algol, Pascal• large language; case insensitive• unlike C, array indexing errors trapped• type safe• generics • exception handling -- strictly control

Page 18: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

type union =record

case b : boolean oftrue : (i : integer);false : (r : real);

end;var tagged : union;begin tagged := (b => false, r => 3.375);

put(tagged.i); -- error

Page 19: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

generic type element is private; type list is array(natural range <>) of

element; with function ">"(a, b : element) return

boolean;

package sort_pck is procedure sort (in out a : list);end sort_pck;

Page 20: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

package sort_pck isprocedure sort (in out a : list) isbegin

for i in a'first .. a'last - 1 loop for j in i+1 .. a'last loop if a(i) > a(j) then declare t : element; begin t := a(i); a(i) := a(j); a(j) := t; end; end if;

Page 21: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

type Matrix is array (Positive range <> of Float, Positive range <> of Float);function "*" (A, B: Matrix) return Matrix is

C: Matrix (A'Range(1), B'Range(2)); Sum: Float;begin if A'First(2) /= B'First(1) or A'Last(2) /= B'Last(1) then raise Bounds_Error; end if;

Page 22: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

for i in C'Range(1) loop for j in C'Range(2) loop Sum := 0.0; for k in A'Range(2) loop Sum := Sum + A(i,k) * B(k,j); end loop; Result(i,j) := Sum; end loop; end loop; return C;end "*";

Page 23: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Perl is:• widely used• a scripting language (originally for Unix)• dynamically typed• encourages a variety of styles• supports regular expression pattern matching

Page 24: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Scripting Languages

• “glue”• take output from one application and reformat into desired input format for a different application.• most time is spent in the underlying applications.• also used for Web applications

Page 25: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

General Characteristics

• dynamically typed• default conversion from one type to

another (vs. Python)• result is distinct operators; ex: . for

string concatenation• types: numbers, strings, regular

expressions• dynamic arrays: indexed and

associative

Page 26: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• String vs. numeric comparisons:10 < 2 # false - numeric10 < "2" # false"10" lt "2" # true - string10 lt "2" # true

Page 27: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Indexed Arrays@a = (2, 3, 5, 7); # size is 4...$a[7] = 17; # size is 8; # $a[4:6] are undef

@array = (1, 2, 'Hello');@array = qw/This is an array/;

@shortdays = qw/Mon Tue Wed Thu Fri Sat Sun/;print $shortdays[1];

@10 = (1 .. 10);print "@10"; # Prints number starting from 1 to 10

Page 28: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Indexed Arrays@array = (1,2,3);print "Size: ",scalar @array,"\n";

@array = (1,2,3);$array[50] = 4;

print "Size: ",scalar @array,"\n";print "Max Index: ", $#array,"\n";

This will returnSize: 51Max Index: 50

Page 29: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Associative Arrays%d = (“bob” => “3465”,

“allen” => “3131”,“rebecca” => “2912”);

print $d{“bob”}; # prints 3465

Page 30: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Many different ways of saying the same thing

• Much of the syntax is optional;• Perl 5 added support for classes and

objects• Great strengths: support for regular

expressions• Scalar variables start with a $• Indexed arrays with an @• Hash arrays with %

Page 31: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Strings

• Double quotes: special characters interpreted– ex: “$a \n”– forms: “ “, qq{ }, qq/ /

• Single quotes: special characters uninterpreted– forms: ‘ ‘, q{ }, q/ /

Page 32: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

while (<>) { ... }

is same as:while ($_ = <STDIN>) { ... }

where:<> is read a linereturns undef at end of file; undef interpreted as falseno subject: $_if $_ =~ m/pattern/ # implied subject, operator

Page 33: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

%hash = ('name' => 'Tom', 'age' => 19);print %hash;

nameTomage19

sub display_hash{ my (%hash) = @_; foreach (%hash) { print "$_ => $hash{$_}\n"; }}

Page 34: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

#! /usr/bin/perlif (@ARGV < 1) { die "Usage mygrep string \n" ; }

use strict;my $string = shift(@ARGV);my $ct = 0;my $line;while ($line = <STDIN>) { $ct++; if ($line =~ m/$string/) { print STDOUT $ct, ":\t", $line; }}exit;

Page 35: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Ex: Mailing Grades

• typical glue program• student grades kept in a spreadsheet

• after each project/test, mail each student her grades

• include averages

• export data in comma-separated value format (CSV)

• CSV format varies by spreadsheet

Page 36: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• ::Proj1:Test1:::::Total:Average• ::50:100::::::150:• Tucker:[email protected]:48:97:::::145:96.66666666

• Noonan:[email protected]:40:85:::::125:83.33333333

• Average::88:91:::::135:90

Page 37: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Main program - part 1• retrieves class designation from

command line• opens CSV file for input• or die is a common idiom• declares some useful constants

(some should be command line options)

Page 38: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

#! /usr/bin/perl

use strict;my $class = shift;my $suf = ".csv";open(IN, "<$class$suf") || die "Cannot read: " . "$class$suf\n";

my $sep = ":";my $tab = 8;

Page 39: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Main program - part 2• reads grade column names• reads maximum points for each

column• adds 100% to @max array

Page 40: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

# read header lines: titles, max gradesmy @hdr = &readSplit();my @max = &readSplit();push(@max, '100%');

Page 41: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Main program - part 3• loop reads 1 student per iteration

(line)• chomp() idiom; irregular• tr deletes “ , '• tokenizer for Perl• last line pops averages from

student array and splits values into columns (printed with each student)

Page 42: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

# read studentsmy @student;while (<IN>) { chomp; tr /"'//d; push(@student, $_);}my @ave = split(/$sep/, pop(@student));

Page 43: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Main - part 4• for loop generates mail, 1 student

per iteration• student grades split into columns• subroutine call; & optional

• mails averages to script invoker• prints number of student emails

generated

Page 44: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

# gen mail for each studentmy $ct = 0;foreach (@student) { my @p = split(/$sep/); $ct += &sendMail(@p);}$ave[1] = $ENV{"USER"};&sendMail(@ave);print "Emails sent: $ct\n";exit;

Page 45: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• sub readSplit • reads a line; note $_ is global• chomp idiom• tr deletes quotes• splits line and returns array of

columns

Page 46: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

sub readSplit { $_ = <IN>; chomp; tr /"'//d; my @r = split(/$sep/); return @r;}

Page 47: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• sub sendMail • no formal parameters• shift -- call by value• @_ array reference -- call by reference• return if student has no email address• open pseudo file or die• MAIL is a pipe to Berkeley mail

command• s option is subject• $email is mail address

Page 48: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

sub sendMail { my $name = shift; my $email = shift; return 0 unless $email; open(MAIL, "| mail -s '$name Grades' $email") || die "Cannot fork mail: $!\n"; print MAIL "GRADE\t\tYOUR\tMAX\tCLASS\n", "NAME\t\tSCORE\tSCORE\tAVE\n\n";

Page 49: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• sub sendMail -- for loop• for each column• skip column if empty header -- not a

grade• otherwise print header• if column value starts with a digit, round

value to an integer; otherwise print value• print maximum points• print average (rounded)

Page 50: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

my $ct = 1;

foreach (@_) {

$ct++; next unless $hdr[$ct]; print MAIL "$hdr[$ct]\t"; print MAIL "\t" if length($hdr[$ct]) < $tab;

if (/^\d/) { print MAIL int($_ + 0.5); }

else {

print MAIL $_; }

Page 51: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

print MAIL "\t$max[$ct]\t"; if ($ave[$ct] =~ /^\d/) { print MAIL int($ave[$ct] + 0.5); } else { print MAIL $ave[$ct];} print MAIL "\n"; } # foreach return 1;} # sub sendMail

Page 52: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• $_ : implied object/subject• $ARG : default input• $. : input line number• $/ : input record separator : default \n– undef $/; $_ = <IN>; # reads entire file

• $, : output field separator in print• $\ : output record separator• $" : list separator : default space• $[ : starting array index : default zero

Page 53: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Regular Expressions

• Operators• m// -- match, m optional• s/// -- substitute• split -- array returning function

Page 54: CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

• Modifiers• i -- case insensitive• m -- treat string as multiple lines• s -- treat string as a single line• x -- extend with whitespace and

comments