Methods for laying out memories bidirectionally for object...

Data processing: software development – installation – and managem – Software program development tool – Programming language

Reexamination Certificate

Rate now

  [ 0.00 ] – not rated yet Voters 0   Comments 0

Details

C717S153000

Reexamination Certificate

active

06631513

ABSTRACT:

BACKGROUND
1. Technical Field
The present invention relates generally to object-oriented programming. (OOP) and, in particular, to methods for laying out memories bidirectionally for object oriented applications.
2. Background Description
Object oriented programming (OOP) is the preferred environment for building user-friendly, intelligent computer software. The object oriented paradigm is a programming paradigm in which the world is modeled as a collection of self-contained objects that interact by sending messages. Objects are modules that contain data and all functions (code) that are allowed to be performed on the encapsulated data. Objects are defined by class (type), which determine everything about an object. Moreover, objects are considered as individual instances of a class.
Examples of OOP languages include C++, SMALLTALK, and JAVA, among others. C++ is an object oriented version of C. It is compatible with C, so that existing C code can be incorporated into C++ programs.
SMALLTALK is a pure object oriented language. In SMALLTALK, a message is sent to an object to evaluate the object itself. Messages perform a task similar to that of function calls in conventional programming languages. The programmer does not need to be concerned with the type of data. Rather, the programmer need only be concerned with creating the right order of a message and using the message.
JAVA is designed as a portable object oriented language that can run on any web-enabled computer via that computer's Web browser. As such, it offers great promise as the standard Internet and Intranet programming language. JAVA is an interpreted language that uses an intermediate language. The source code of a JAVA program is compiled into “byte code”, which cannot be run by itself. The byte code must be converted into machine code at runtime. Upon finding a JAVA applet, the Web browser switches to its JAVA interpreter (JAVA Virtual Machine) which translates the byte code into machine code and runs it. This means JAVA programs are not dependent on any specific hardware and will run in any computer with the JAVA virtual machine. For a detailed reference describing JAVA, see “The JAVA Programming Language”, K. Arnold and J. Gosling, The JAVA Series, Addison-Wesley, 1996.
There are several key elements that characterize OOP. They include virtual functions, polymorphism, and inheritance. These elements are used to generate a graphical user interface (GUI), typically characterized by a windows environment having icons, mouse cursors, and menus. While these three key elements are common to OOP languages, most OOP languages implement the three elements differently.
A virtual function is a function that has a default operation for a parent (base) class, but which can be overridden to perform a different operation by a child (derived) class. Thus, implicit in virtual function invocation is the idea that the execution-of a virtual function can vary with different objects, i.e., the behavior and response that the invocation elicits will depend on the object through which the function is invoked.
Polymorphism refers to the substitutability of related objects. Objects are “related” if they have a similar “type”, and in most object-oriented languages that means that they are instances of the same class, or they have a common parent class through inheritance. Polymorphism allows this shared code to be tailored to fit the specific circumstances of each individual data type.
Inheritance lets classes be defined in terms of other classes. Thus, inheritance allows different classes to share the same code, leading to a reduction in code size and an increase in functionality. A class that inherits from another class is called a “subclass” or “child” of the other class (which is called the “superclass” or “parent class”). The subclass responds to the same messages as its parent, and it may respond to additional messages as well. The subclass “inherits” its implementation from its parent, though it may choose to reimplement some methods and/or add more data. Inheritance lets programmers define new classes easily as incremental refinements of existing ones.
There are various types of inheritance in OOP. Single inheritance corresponds to a class that has no more than one parent (base) class. Multiple inheritance corresponds to a class that can contain more than one parent. Virtual inheritance is when a base class inherited along distinct paths occurs only once in the derived class. That is, the (derived) sub-object is not replicated. Non-virtual inheritance is when the base class has multiple distinct occurrences in the derived class. That is, the (derived) sub-object is replicated.
Virtual and non-virtual inheritance are phrases employed with respect to the C++ programming language. However, such inheritances exist in other object-oriented programming languages, although they may be referred to by different phrases. For example, virtual and non-virtual inheritance correspond to shared and repeated inheritance, respectively, in the Eiffel programming language.
A brief description of multiple inheritance with respect to the C++ programming language will now be given. As noted by B. Stroustrup, in The C++ Programming Language, Addison-Wesley, 3rd Ed. (1997), the C++ syntax forces a programmer to select the kind (or semantics) of inheritance, virtual and non-virtual, when the inheritance occurs. That is, the derived class must specify whether the base class is inherited nonvirtually or virtually.
This selection forces the programmer to anticipate all possible contexts in which the classes may be further derived and allows only one choice for all of them. In the case of extendible libraries or any classes that have the potential to be further derived, the programmer is inclined therefore to conservatively specify the type of all occurrences of inheritance as virtual since no assumption of how the classes may be derived in the future are possible.
This predicament is made even greater by the non-negligible toll, both in terms of space and time resources, taken by the standard implementation of virtual inheritance in C++. This toll is further described by Ellis and B. Stroustrup, in The Annotated C++ Reference Manual, Addison-Wesley, January 1994. The representation of each object of any class must include the set of offsets to all of its virtual base classes. Although these offsets can be shared among objects of the same class by storing the offsets in class tables, time-efficient implementations will repeatedly store these offsets, usually as pointers, in each instance of the class. Furthermore, these pointers are not usually shared across virtual inheritance. The time penalty is incurred when these pointers are to be dereferenced e.g., in an upcast, a call to an inherited (even nonvirtual) member function, or in reference to data members of the virtual base. These operations require at least one indirection, and two indirections in the implementation where the offsets are stored per class and not per object.
A brief description of some of the terminology and notations used herein will now be given. Moreover, some of the various graphical notations used herein with respect inheritance hierarchies, object layout diagrams and subobject graphs are illustrated in FIG.
1
. The nouns “instance” and “object” are used interchangeably, as are the verbs “inherit” and “derive”. Since the implementation of virtual inheritance in the traditional layout scheme is the same, regardless of whether it is singular or multiple, we will sometimes use the term multiple inheritance in a loose sense, to also include single virtual inheritance.
Lower case letters from the beginning and the end of the Latin alphabet, e.g., a
1
, b
1
, . . . and u
1
, v
1
, w
1
, x
1
, y
1
, z denote classes. In addition, u
1
, v
1
, w
1
, x
1
, y
1
, z are also used for denoting variables ranging over the domain of all classes, principally in procedures and theorems. By writing x≦y

LandOfFree

Say what you really think

Search LandOfFree.com for the USA inventors and patents. Rate them and share your experience with other people.

Rating

Methods for laying out memories bidirectionally for object... does not yet have a rating. At this time, there are no reviews or comments for this patent.

If you have personal experience with Methods for laying out memories bidirectionally for object..., we encourage you to share that experience with our LandOfFree.com community. Your opinion is very important and Methods for laying out memories bidirectionally for object... will most certainly appreciate the feedback.

Rate now

     

Profile ID: LFUS-PAI-O-3137320

  Search
All data on this website is collected from public sources. Our data reflects the most accurate information available at the time of publication.