Programming Paradigms
Upcoming SlideShare
Loading in...5
×
 

Programming Paradigms

on

  • 2,496 views

 

Statistics

Views

Total Views
2,496
Views on SlideShare
1,463
Embed Views
1,033

Actions

Likes
1
Downloads
34
Comments
0

5 Embeds 1,033

http://www.janeve.me 1020
http://blog.janeve.me 10
http://www.slideshare.net 1
http://feeds.feedburner.com 1
http://translate.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Programming Paradigms Programming Paradigms Presentation Transcript

  • Programming Paradigms ( http://www.directi.com | http://wiki.directi.com | http://careers.directi.com )‏ Licensed under Creative Commons Attribution Sharealike Noncommercial By, Janeve George [email_address] & Nilesh Mevada [email_address]
  • Creative Commons Sharealike Attributions Noncommercial Few Instruction
    • It's a workshop not a presentation !!!
    • Parking Lot
    • Perks
  • Creative Commons Sharealike Attributions Noncommercial Aim of the session
    • Introduction to programming concepts and techniques
    • Differentiate between various programming paradigms
    Q: Why there are so many programming paradigms? A: Q: Isn't there 'one language' that would suffice? A: Q: How can we deal with understanding so many paradigms? A:
  • Creative Commons Sharealike Attributions Noncommercial Flow of the session
    • Programming Paradigm Definition
    • Why bother about 'Programming Paradigms'?
    • Appreciating 'Programming paradigms'
    • Programming Concepts
      • An Overview
      • Eager and Lazy Evaluation
      • Procedures
      • Functions
      • External and Internal State
      • Concurrency
      • Static vs Dynamic Typing
    • Some Real-Life Problems
      • Search (Java vs Prolog)‏
      • Higher Order Functions (Java vs Haskell)‏
  • Creative Commons Sharealike Attributions Noncommercial Flow of the session
    • Programming Paradigm - Definition
    • Why bother about 'Programming Paradigms'?
    • Appreciating 'Programming paradigms'
    • Programming Concepts
      • An Overview
      • Eager and Lazy Evaluation
      • Procedures
      • Functions
      • External and Internal State
      • Concurrency
      • Static vs Dynamic Typing
    • Some Real-Life Problems
      • Search (Java vs Prolog)‏
      • Higher Order Functions (Java vs Haskell)‏
  • Creative Commons Sharealike Attributions Noncommercial Programming Paradigm - Definition
    • What are Programming Paradigms?
      • Fundamental style of computer programming. (wikipedia.org)‏
      • It serves as a pattern or model for a programming‏ language
    Function Oriented Object Oriented Logical Programming Java ML Haskell Prolog Mercury Oz Erlang Smalltalk
  • Creative Commons Sharealike Attributions Noncommercial Flow of the session
    • Programming Paradigm - Definition
    • Why bother about 'Programming Paradigms'?
    • Appreciating 'Programming paradigms'
    • Programming Concepts
      • An Overview
      • Eager and Lazy Evaluation
      • Procedures
      • Functions
      • External and Internal State
      • Concurrency
      • Static vs Dynamic Typing
    • Some Real-Life Problems
      • Search (Java vs Prolog)‏
      • Higher Order Functions (Java vs Haskell)‏
  • Creative Commons Sharealike Attributions Noncommercial Why bother about 'Programming Paradigms'?
  • Creative Commons Sharealike Attributions Noncommercial Why bother about 'Programming Paradigms'?
  • Creative Commons Sharealike Attributions Noncommercial Why bother about 'Programming Paradigms'?
  • Creative Commons Sharealike Attributions Noncommercial Why bother about 'Programming Paradigms'?
    • Tools (Programming Languages) may not suffice to deal with the real life problems.
      • They might not support the solution at all or only partially.
    • Learning new programming languages becomes easier
    • To bring innovations in programming technologies
  • Creative Commons Sharealike Attributions Noncommercial Flow of the session
    • Programming Paradigm - Definition
    • Why bother about 'Programming Paradigms'?
    • Appreciating 'Programming paradigms'
    • Programming Concepts
      • An Overview
      • Eager and Lazy Evaluation
      • Procedures
      • Functions
      • External and Internal State
      • Concurrency
      • Static vs Dynamic Typing
    • Some Real-Life Problems
      • Search (Java vs Prolog)‏
      • Higher Order Functions (Java vs Haskell)‏
  • Creative Commons Sharealike Attributions Noncommercial Appreciating 'Programming paradigms'
    • An example of how a trivial concept can affect/support a computation and hence a particular style of programming...
    Int X; Int Y = X; Print( Y );
      • Execution Flow
    ?
  • Creative Commons Sharealike Attributions Noncommercial Flow of the session
    • Programming Paradigm - Definition
    • Why bother about 'Programming Paradigms'?
    • Appreciating 'Programming paradigms'
    • Programming Concepts
      • An Overview
      • Eager and Lazy Evaluation
      • Procedures
      • Functions
      • External and Internal State
      • Concurrency
      • Static vs Dynamic Typing
    • Some Real-Life Problems
      • Search (Java vs Prolog)‏
      • Higher Order Functions (Java vs Haskell)‏
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – An Overview Set of Programming Concepts Procedures Functions Higher/1 st Order Evaluation Eager/Lazy Variables Single/Multi store Scope Scope of variables Typing State Internal/External Objects Classes Concurrency & on & on & on.....
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – An Overview Subset of Concepts Programming Model Set of Programming Concepts Programming Language(s)‏ Embraced by Followed by Embraced by Followed by
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – An Overview Subset of Concepts OO Programming Model Set of Programming Concepts OO Programming Language(s)‏ Embraced by Followed by
    • Java
    • Ruby
    • Oz
    • C++
    • Scala
    • Etc...
    • Objects
    • Classes
    • Inheritance
    • Polymorphism
    • Explicit State
    • Etc...
    Embraced by Followed by
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – An Overview Subset of Concepts Functional Programming Model Set of Programming Concepts Functional Programming Language(s)‏ Embraced by Followed by
    • Lazy/Eager Evaluation
    • Functions
    • Higher Order Func.
    • Etc...
    • Haskell
    • Erlang
    • ML
    • Scheme
    • Etc...
    Embraced by Followed by
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – An Overview
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – An Overview
  • Creative Commons Sharealike Attributions Noncommercial
    • Few important concepts
      • Eager Evaluation
      • Lazy Evaluation
      • Procedures
      • Functions
      • External State
      • Internal State
      • Concurrency
      • Static vs Dynamic Typing
    Programming Concepts – An Overview
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Eager Evaluation
    • An expression which is evaluated as soon as it gets bound to a variable
    • Importance
      • Simple
      • Commonly found
      • Easy implementation for languages
    • Problems
      • Expressions are always evaluated
    • Languages supporting easy evaluation
      • Almost all including java, c#, c, etc.
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Eager Evaluation .... List Gen ( int N ) { ArrayList list = new ArrayList(); list. add ( N ); list. addAll ( Gen (N+1) ); return list; } void myMethod () { List K = Gen (1); System.out. println ( "Elements: " + K. getElementAt ( 3 ) ); } ....
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Lazy Evaluation
    • An expression is evaluated only when needed
    • Also known as delayed evaluation or call-by-need.
    • Importance
      • To deal with potentially infinite data.
      • Generally, calculations are not repeated.
    • Problems
      • Difficult at glance
      • Difficult to predict time/space complexity
    • Languages supporting Lazy Evaluation
      • Haskell, Oz, Scheme, OCamel
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Lazy Evaluation declare fun lazy { Gen N} N | { Gen N+1} end declare K = { Gen 1} { Browse “Elements: ” + Nth K 3}
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Procedures
    • A code construct which can
      • Execute a set of statements in an order
      • Accept zero or more arguments
      • Return zero or more results
      • Produce a side effect
    • Importance
      • One of the most basic building block of any programming language
      • A means of telling the system how to execute some behavior
      • May be used as to abstract out functions, objects & classes
    • Languages that support procedures
      • C, C++, C#, Oz
    proc { Max X Y ?Z} if X>=Y then Z=X else Z=Y end end
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Procedures local Default MaxOrDefault in Default=10 proc { MaxOrDefault Arg ?Result} if Arg >= Default then Result = Arg else Result = Default end end local Result in { MaxOrDefault 5 Result} { Browse Result} end end
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Functions
    • A code construct which can
      • Execute a set of statements in a given order
      • Accept zero or more arguments
      • Returns only one result and no side effect
      • Pure functions avoid state and mutable data
    • Importance
      • A basic building block of many programming language
      • A means of telling the system how to execute some behavior
      • Can replicate a pure mathematical model
    • Languages that support Functions
      • Haskell, OCamel, ML, Oz
    fun { Max X Y} if X>=Y then Z=X else Z=Y end end Z = { Max 10, 20}
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Functions (Higher Order)‏
    • Higher Order Functions
      • Accepts functions as arguments along with other types
      • Can return a function as result
      • Ordering means...
        • 1st order :- having no functions as args
        • 2nd order :- can have 1st order functions as args
        • nth order :- can have n-1th order functions as args
      • We can build abstraction using Higher Order Functions
    map f [] = [] map f (x:xs) = f x : map f xs numbers = [ 7,9,13 ] inc x = x + 1 more_numbers = map inc numbers
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Functions (Higher Order)‏ listsum [] = 0 listsum (x:xs) = x + listsum xs listprod [] = 1 listprod (x:xs) = x * listprod xs fold op init [] = init fold op init (x:xs) = x `op` fold op init xs listsum = fold (+) 0 listprod = fold (*) 1
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – External and Internal State
    • Explicit State
      • State remembrance across calls
      • Importance
        • One of the base concept for Object Orientation
    • Implicit state
      • Defined by the function for its internal calculations.
      • Importance
        • Storing temporary results which otherwise might require repetitive calls.
    • Languages that support external state
      • Object Oriented languages like Java, Smalltalk, etc
      • Languages that have global variables
    • Languages that support internal state
      • All languages that have variables in procedures / functions
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – External and Internal State fun { Sum Numbers} Result = { NewCell 0} Input = { NewCell Numbers} proc { Sum } case @Input of nil then skip [] X | Y then Result := @Result + X Input := Y { Sum } end end in { Sum } @Result end
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Concurrency
    • Multiple and independent executions
    • From real-life problems point of view, the definition adds this clause “and communicates only when needed”
    • Importance
      • relates more to real-life problems
      • response time improved due to parallel executions
    • Problems
      • race condition
    • Languages that support concurrent execution
      • Java, Oz
    thread ConcurrentFlow1 = { GenerateNumbers 1 10} end
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Concurrency fun { GenerateNumbers FromArg ToArg} { Delay 100} if FromArg > ToArg then nil else FromArg | { GenerateNumbers FromArg+1 ToArg} end end thread ConcurrentFlow1 = { GenerateNumbers 1 10} end thread ConcurrentFlow2 = { GenerateNumbers 11 20} end { Browse ConcurrentFlow1} { Browse ConcurrentFlow2}
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Concurrency .... public void main(String[] args) throws InterruptedException { Temp temp = new Temp(); createAConcurrentFlow(1, 10); createAConcurrentFlow(11, 20); } .... private void createAConcurrentFlow( int FromArg, int ToArg) { new Runnable() { public void run() { try { new Temp().GenerateNumbers(FromArg, ToArg); } catch (InterruptedException e) { } } }; } ....
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Static Typing
    • Type checking is performed during compile-time
    • Variables should be defined before they're used.
    • Variables can be cast into other types
    • Variables don't get converted
    • Importance
      • Improved error-catching ability, efficiency, security
      • partial program verification
    • Problems
      • reducing expressiveness of the programming language
      • restrictions for the programmer on the programs he can write
    • Languages that use static typing
      • C, C++, C#, Java, ML, Pascal, Haskell
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Static Typing int num, sum; // explicit declaration num = 5; // now use the variables sum = 10; sum = sum + num;
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Dynamic Typing
    • Type checking is performed during runtime
    • It's not necessary to define the variable before used
    • Variables can be converted to other types implicitly
    • Importance
      • variables can be bound to any first-class-citizen in the lang. (proc, func, mix of data-types, etc.)‏
      • independent compilations of the program (since no type checking at compile time)‏
    • Problems
      • more type-error-prone code at run-time.
    • Languages that uses dynamic typing
      • JavaScript, Lisp, Perl, PHP, Prolog, Python, Ruby
  • Creative Commons Sharealike Attributions Noncommercial Programming Concepts – Dynamic Typing foo() { x = 1; x = 'hello'; }
  • Creative Commons Sharealike Attributions Noncommercial Flow of the session
    • Programming Paradigm Definition
    • Why bother about 'Programming Paradigms'?
    • Appreciating 'Programming paradigms'
    • Programming Concepts
      • An Overview
      • Eager and Lazy Evaluation
      • Procedures
      • Functions
      • External and Internal State
      • Concurrency
      • Static vs Dynamic Typing
    • Some Real-Life Problems
      • Search (Java vs Prolog)‏
      • Higher Order Functions (Java vs Haskell)‏
  • Creative Commons Sharealike Attributions Noncommercial Some Real-Life Problems – Prolog vs Java % % Facts % male(hrithik). male(shahrukh). male(salman). male(abhishek). male(akshay). male(aamir). female(diya). female(aishwarya). female(katrina). female(malaika). parent(hrithik,shahrukh). parent(hrithik,salman). parent(hrithik,diya). parent(shahrukh,abhishek). parent(shahrukh,akshay). parent(salman,aishwarya). parent(salman,katrina). parent(salman,aamir). parent(diya,malaika). % % Rules % father(X,Y) :- parent(X,Y), male(X). mother(X,Y) :- parent(X,Y), female(X). grandparent(X,Y) :- parent(X,Z), parent(Z,Y). paternalgrandfather(X,Y) :- father(X,Z), father(Z,Y). sibling(X,Y) :- parent(Z,X), parent(Z,Y). brothers(X,Y) :- sibling(X,Y),male(X),male(Y), + (X=Y). % % Queries % cmd: mother(diya,malaika) % Outupt: yes/no cmd: mother(Mother,Child). % Output: lists (mother,child) pair found in facts % according to associations defined
  • Creative Commons Sharealike Attributions Noncommercial Some Real-Life Problems – Statistics
  • Creative Commons Sharealike Attributions Noncommercial How to approach Programming Paradigm?
    • Our Way was...
      • Concepts first, Languages Later.
    • Other effective ways...
      • Mastering any one programming model (e.g. Object Oriented) and then comparing it with others (e.g. functional, procedural, etc.)‏
  • Creative Commons Sharealike Attributions Noncommercial References
    • Books
      • Concepts, Techniques & Models Of Computer Programming by Peter Van Roy & Seif Haridi
    • Links On Web
      • http://wikipedia.org
      • http://www.infocheese.com/programmingparadigms.html
  • Creative Commons Sharealike Attributions Noncommercial What we expect post this session
    • Experimentation with other programming languages
      • Functional language -> Haskell / ML / Scheme
      • Object Oriented language -> Java, C++, C#, Scala
      • Aspect Oriented language -> AspectJ, AspectC++
      • Logic language -> Prolog / Mercury
      • Mixed languages -> Scala, Oz
    • Sharing your experiences with us...
      • A testimonial
    “ I want to thank you and DIRECTI for conducting such a marvelous session and I am very much indebted for that. I fell in love with LISP programming language and found that it was very much ideal for signal processing algos. The approach u have suggested was just great and the book you have suggested was really really great.” - Chinni Krishna, Mukt '08 Session Attendee
  • Questions??? [email_address] & [email_address] http://directi.com http://careers.directi.com Download slides: http://wiki.directi.com
  • Retrospective!!! [email_address] & [email_address] http://directi.com http://careers.directi.com Download slides: http://wiki.directi.com