Exforsys
+ Reply to Thread
Page 2 of 2 FirstFirst 12
Results 11 to 12 of 12

What are OOP's Jargons and Complexities?

This is a discussion on What are OOP's Jargons and Complexities? within the Software Patterns forums, part of the Testing category; The Rise of “Inheritance” In well-thought-out languages, functions can have inner functions, as well as taking other functions as input ...

  1. #11
    xah@xahlee.org Guest

    Re: What are OOP's Jargons and Complexities?

    The Rise of “Inheritance”

    In well-thought-out languages, functions can have inner functions, as
    well as taking other functions as input and return function as output.
    Here are some examples illustrating the use of such facilities:
    subroutine generatePower(n) {
    return subroutine (x) {return x^n};
    }

    In the above example, the subroutine generatePower returns a function,
    which takes a argument and raise it to nth power. It can be used like
    this:
    print generatePower(2)(5) // prints 25

    Example: fixedPoint:
    subroutine fixedPoint(f,x) {
    temp=f(x);
    while (f(x) != temp) {
    temp=f(temp);
    }
    return temp;
    }

    In the above example, fixedPoint takes two arguments f and x, where f
    is taken to be a function. It applies f to x, and apply f to that
    result, and apply f to that result again, and again, until the result
    is the same. That is to say, it computes f[f[f[...f[x]...]]].
    FixedPoint is a math notion. For example, it can be employeed to
    implement Newton's Method of finding solutions as well as many problems
    involving iteration or recursion. FixedPoint may have a optional third
    parameter of a true/false function fixedPoint(func,arg,predicate) for
    determining when the nesting should stop. In this form, it is
    equivalent to the “while loop” in procedural languages.

    Example: composition:
    subroutine composition(a,b,c,...) {
    return subroutine {a(b(...c...))};
    }

    The above example is the math concept of function composition. That is
    to say, if we apply two functions in sequence as in g[f[x]], then we
    can think of it as one single function that is a composition of f and
    g. In math notation, it is often denoted as (g∘f). For example,
    g[f[x]]→y is the same as (g∘f)[x]→y. In our pseudo-code, the
    function composition takes any number of arguments, and returns a
    single function of their composition.

    When we define a subroutine, for example:
    subroutine f(n) {return n*n}

    the function is power of two, but the function is named f. Note here
    that a function and its name are two different concepts. In
    well-thought-out languages, defining a function and naming a function
    are not made inseparable. In such languages, they often have a keyword
    “lambda” that is used to define functions. Then, one can assign it
    a name if one so wishes. This separation of concepts made many of the
    lingustic power in the above examples possible. Example:
    lambda (n) {return n^2;} \\ a function
    (lambda (n) {return n^2;})(5) \\ a function applied to 5.
    f = lambda (n) {return n^2;} \\ a function is defined and named
    f(5) \\ a function applied to 5.
    lambda (g) {return lambda {g(f)} } \\ a function composition of
    (g∘f).


    The above facilities may seem exotic to industrial programers, but it
    is in this milieu of linguistic qualities the object oriented paradigm
    arose, where it employees facilities of inner function (method),
    assigning function to variable (instantiation), function taking
    function as inputs (calling method thru object), and application of
    function to expressions (applying method to data in a class).

    The data-bundled-with-functions paradigm finds fitting application to
    some problems. With the advent of such Objet-Oriented practice, certain
    new ideas emerged. One of great consequence is the idea of inheritance.

    In OOP practice computations are centered around data as entities of
    self-contained boxed sets (objects). Thus, frequently one needs
    slightly different boxed sets than previously defined. Copy and Pasting
    existing code to define new boxed sets quickly made it unmanageable. (a
    messy set of classes). With powerful lingustic evironment and
    habituation, one began to write these new boxed-subroutines (classes)
    by extending old subroutines (classes) in such a way that the new
    subroutine contains all variables and subroutines of a base subroutine
    without any of the old code appearing in the body of the subroutine.
    Here is a pseudo-code illustration:
    g = subroutine extend(f) {
    new variables ...
    new inner-subroutines ...
    return a subroutine that also contains all stuff in subroutine f
    }

    Here, “extend” is a function that takes another function f,and
    returns a new function such that this new function contains all the
    boxed-set things in f, but added its own. This new boxed-set subroutine
    is given a name g.

    In OOP parlance, this is the birth of inheritance. Here, g inherited
    from that of f. f is called the base class or superclass of g. g is the
    derived class or subclass of f.

    In functional terms, inheritance mechanism is a function E that takes
    another function f as input and returns a new function g as output,
    such that g contained all enclosed members of f with new ones defined
    in E. In pure OOP languages such as Java, the function E is exhibited
    as a keyword “extends”. For example, the above code would be in
    Java:
    class g extends f {
    new variables ...
    new inner-subroutines ...
    }

    Here is the same example in Python, where inheritance takes the form of
    a class definition with a parameter:
    class g(f):
    new variables ...
    new inner-subroutines ...


    Data are the quintessence in computation. Because in OOP all data are
    embodied in classes, and wrapping a class to each and every variety of
    data is unmanageable, inheritance became the central means to manage
    data.

    -----
    to be continued tomorrow.

    This is part of an installment of the article
    “What are OOP's Jargons and Complexities”
    by Xah Lee, 20050128. The full text is at
    http://xahlee.org/Periodic_dosage_dir/t2/oop.html

    © Copyright 2005 by Xah Lee. Verbatim duplication of the complete
    article for non-profit purposes is granted.

    The article is published in the following newsgroups:
    comp.lang.c,comp.lang.c++,comp.lang.lisp,comp.unix.programmer
    comp.lang.python,comp.lang.perl.misc,comp.lang.scheme,comp.lang.java.programmer
    comp.lang.functional,comp.object,comp.software-eng,comp.software.patterns

    Xah
    xah@xahlee.org
    http://xahlee.org/




  2. #12
    xah@xahlee.org Guest

    Re: What are OOP's Jargons and Complexities?

    The Rise of Class Hierarchy

    Because of psychological push for purity, in Java there are no longer
    plain subroutines. Everything is a method of some class. Standard
    functions like opening a file, square root a number, for loop thru a
    list, if else branching statements, or simple arithmetic operations...
    must now somehow become a method of some class. In this way, coupled
    with the all-important need to manage data with inheritance, the OOP
    Class Hierarchy is born.

    Basic data types such as now the various classes of numbers, are now
    grouped into a Number class hierarchy, each class having their own set
    of methods. The characters, string or other data types, are lumped into
    one hierarchy class of data types. Many types of lists (variously known
    as arrays, vectors, lists, hashes...), are lumped into a one hierarchy,
    with each Classe node having its own set methods as appropriate. Math
    functions, are lumped into some math class hierarchy.

    Now suppose the plus operation +, where does it go? Should it become
    methods of the various classes under Number headings, or should it be
    methods of the Math class set? Each language deals with these issues
    differently. As a example, see this page for the hierarchy of Java's
    core language classes:
    http://java.sun.com/j2se/1.4.2/docs/...kage-tree.html
    (local copy)

    OOP being inherently complex exacerbated by marketing propaganda, and
    the inheritance and hierarchy concept is so entangled in OOP, sometimes
    OOP is erroneously thought of as languages with a hierarchy. (there are
    now also so-called Object-Oriented databases that ride the fad of
    “all data are trees” ...)

    Normally in a program, when we want to do some operation we just call
    the subroutine on some data. Such as
    open(this_file)
    square(4)

    But now with the pure OOP style, there can no longer be just a number
    or this_file path, because everything now must be a Object. So, the
    "this_file", usually being just a string representing the path to a
    file on the disk, is now some "file object". Initiated by something
    like
    this_file = new File("path to file");

    where this file class has a bunch of methods such as reading or writing
    to it.

    see this page for the complexity of the IO tree
    http://java.sun.com/j2se/1.4.2/docs/...kage-tree.html
    (local copy)

    see this page for the documentation of the File class itself, along
    with its 40 or so methods and other things.
    http://java.sun.com/j2se/1.4.2/docs/...a/io/File.html (local copy)

    -------
    to be continued...

    This is part of an installment of the article
    “What are OOP's Jargons and Complexities”
    by Xah Lee, 20050128. The full text is at
    http://xahlee.org/Periodic_dosage_dir/t2/oop.html

    © Copyright 2005 by Xah Lee. Verbatim duplication of the complete
    article for non-profit purposes is granted.

    The article is published in the following newsgroups:
    comp.lang.c,comp.lang.c++,comp.lang.lisp,comp.unix.programmer
    comp.lang.python,comp.lang.perl.misc,comp.lang.scheme,comp.lang.java.programmer
    comp.lang.functional,comp.object,comp.software-eng,comp.software.patterns

    Xah
    xah@xahlee.org
    http://xahlee.org/




    •    Sponsored Ads



Latest Article

Network Security Risk Assessment and Measurement

Read More...