CSC/ECE 517 Fall 2011/ch1 1e aa: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
Line 40: Line 40:


== Going the Object-Oriented Way ==
== Going the Object-Oriented Way ==
Object-oriented programming (OOP) is a programming paradigm which focuses on "objects" instead of "actions" and data instead of logic.
Historically, a program has always been viewed as a logical sequence of instructions that takes the input, processes it, and produces the output. Due to this focus, the programming challenge has always been the logical sequence, rather than defining data.
Whereas, OOP takes the focus away from the procedure. It represents data from the real world (called as objects) which we really want to manipulate rather than the logic required to manipulate them. These objects could range from human beings to buildings to widgets on your desktop. Thus the first step of OOP is data modeling which includes identifying objects and the relations amongst them. Once the identification of the objects is done, these objects are then generalized into classes of objects and define the kind of data it contains and any logic sequences that can manipulate it. Each distinct logic sequence is known as a method. Objects are real instances of a class. The programmer communicates with objects - and they communicate with each other - with well-defined interfaces called messages.
While Simula was the first object-oriented programming language, the most popular OOP languages used today are  Java, Python, C++, Visual Basic .NET and Ruby. Although many languages claim to be object oriented, most of the time that is not the case. There are some languages that are purely o-o ,while others are hybrid. Now, a language must capture several qualities for it to be purely o-o. These qualities are:
1. Encapsulation/Information Hiding
2. Inheritance
3. Polymorphism/Dynamic Binding
4. All pre-defined types are Objects
5. All operations performed by sending messages to Objects
6. All user-defined types are Objects
“Pure” o-o languages satisfy all the above qualities, whereas, “hybrid” languages support some of these. Typically, many languages support first three qualities, but not the last three.
Examples of pure o-o languages are Eiffel, Smalltalk, and Ruby.
Many think of Java as a pure Object-Oriented language, but by its inclusion of "basic" types that are not objects, it fails to meet the fourth quality. Also it fails to meet quality five by implementing basic arithmetic as built-in operators, rather than messages to objects.
C++ supports multiple paradigms, O-O being one of them. Thus it is not a pure oo language.
Another seemingly object oriented language, Python is actually a multi-paradigm supporting language. At times, o-o concepts seem to be fixed up in it.  Some operations are implemented as methods, while others are implemented as global functions. The “self” parameter adds to its awkwardness.
Ruby on the other hand, is a scripting language which was created as a reaction to Python and Perl. The designaer wanted a language that was stronger than Perl and more object oriented than Python.
Visual Basic and Perl are both procedural languages that have had some Object-Oriented support added on as the languages have matured.


== What makes O-O better? ==
== What makes O-O better? ==

Revision as of 19:44, 1 September 2011

Wiki Chapter: CSC/ECE 517 Fall 2011/ch1 1e aa

Brief Background on the Programming Paradigms

Introduction

This Wiki chapter talks about the basic fundamentals of block structured programming and Object Oriented programming and explains the advantages of Object Oriented programming over block structured programming which made O-O languages more common and widely used in the Software Industry today. We also focus on the practicability of using block structured approach in O-O languages.

Block-Structured Languages

A Block is a part of code that is clustered together. It is thus; a group of program statements and variables referred to in those statements. Block of code always begins with variable declarations and is followed by procedural declarations, is always contained within delimiters; typically begin-end, opening and closing curly braces '{ }' and can be compiled and executed as a single execution unit. Block can be the body of a subroutine, a function or an entire program. The main block can contain subsections consisting of inner blocks. Those inner blocks can contain more inner blocks giving rise to a nested block structure. Typically, Nesting can be repeated to any depth required. One example of a language which allows such block structure is Pascal.

program a;  
   var id1, id2, id3 : integer;     { program a declarations }  
                                                  
   procedure b;                            
         var id1 : integer;         { procedure b declarations } 
                                                        
       procedure c;                         
              var id2 : integer;    { procedure c declarations}      
              begin    { Beginning of c's statement part }             
              id2 := id1;                     
              end;              
         begin     { Beginning of b's statement part }
         id1 := id3;                           
         id2 := id1;
         end; 
                                                                      
    begin     { Beginning of main program's statement part } 
    id1 := id2; 
    end.

In most primitive block structured languages, the scope of a variable can be limited to the block in which it is declared. This is called lexical scoping. Thus, referring to the nested structure of the blocks; all the variables declared in the outer block can be accessed within that block and all of its inner blocks but are not accessible outside that block. Additionally, values of the variables in the outer blocks are accessible in the inner blocks if and only if there is no other variable in the inner block with the same name. This duplicate declaration of variables is called Shadowing.

By having statements grouped together as a Block allows us to treat it as a single statement and thus allows the programmer to keep the 'lexical' scope of the functions, variables and procedures closely bound to that Block. Earliest block-structured languages were Algol 58 and Algol 60 with which the initial idea of block was born.

Important Aspects of Block-Structured Programming

Relation of Block-Structured Programming to Structured Programming

There is a subtle relation between block programming and structured programming. Structured programming encompasses majority of the fundamentals of block programming paradigm. Most of the block-structured languages fall under the structured programming paradigm for example: Algol, Pascal. In essence, structured programming employs a hierarchical approach in which the main problem is broken down into different smaller modules. Thus, it breaks down a bigger task into smaller ones and therefore solving the smaller tasks leads to indirectly solving the actual problem.

The important thing to note here is that such programs always have a single point of entry and often have single points of exit. The modules in this paradigm are independent of each other and thus; are blocks of code where the scope is limited to that particular module. Structured Programming normally imply simple hierarchical flow structures consisting of sequence (execution of statements in particular order), selection (some selection criteria) and iteration (repetition until the program reaches a certain state).

Going the Object-Oriented Way

Object-oriented programming (OOP) is a programming paradigm which focuses on "objects" instead of "actions" and data instead of logic. Historically, a program has always been viewed as a logical sequence of instructions that takes the input, processes it, and produces the output. Due to this focus, the programming challenge has always been the logical sequence, rather than defining data. Whereas, OOP takes the focus away from the procedure. It represents data from the real world (called as objects) which we really want to manipulate rather than the logic required to manipulate them. These objects could range from human beings to buildings to widgets on your desktop. Thus the first step of OOP is data modeling which includes identifying objects and the relations amongst them. Once the identification of the objects is done, these objects are then generalized into classes of objects and define the kind of data it contains and any logic sequences that can manipulate it. Each distinct logic sequence is known as a method. Objects are real instances of a class. The programmer communicates with objects - and they communicate with each other - with well-defined interfaces called messages. While Simula was the first object-oriented programming language, the most popular OOP languages used today are Java, Python, C++, Visual Basic .NET and Ruby. Although many languages claim to be object oriented, most of the time that is not the case. There are some languages that are purely o-o ,while others are hybrid. Now, a language must capture several qualities for it to be purely o-o. These qualities are: 1. Encapsulation/Information Hiding 2. Inheritance 3. Polymorphism/Dynamic Binding 4. All pre-defined types are Objects 5. All operations performed by sending messages to Objects 6. All user-defined types are Objects “Pure” o-o languages satisfy all the above qualities, whereas, “hybrid” languages support some of these. Typically, many languages support first three qualities, but not the last three. Examples of pure o-o languages are Eiffel, Smalltalk, and Ruby. Many think of Java as a pure Object-Oriented language, but by its inclusion of "basic" types that are not objects, it fails to meet the fourth quality. Also it fails to meet quality five by implementing basic arithmetic as built-in operators, rather than messages to objects. C++ supports multiple paradigms, O-O being one of them. Thus it is not a pure oo language. Another seemingly object oriented language, Python is actually a multi-paradigm supporting language. At times, o-o concepts seem to be fixed up in it. Some operations are implemented as methods, while others are implemented as global functions. The “self” parameter adds to its awkwardness. Ruby on the other hand, is a scripting language which was created as a reaction to Python and Perl. The designaer wanted a language that was stronger than Perl and more object oriented than Python. Visual Basic and Perl are both procedural languages that have had some Object-Oriented support added on as the languages have matured.

What makes O-O better?

Block-structure in O-O programming

Conclusion

References