CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm.

54
CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm

Transcript of CPS 506 Comparative Programming Languages Imperative Programming Language Paradigm.

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