Wednesday, December 15, 2010

Diamond problem ( multiple inheritance big problem).

In object-oriented programming languages with multiple inheritance and knowledge organization, the diamond problem is an ambiguity that arises when two classes B and C inherit from A, and class D inherits from both B and C. If a method in D calls a method defined in A (and does not overridethe method), and B and C have overridden that method differently, then from which class does it inherit: B, or C?
For example, in the context of GUI software development, a class Button may inherit from both classes Rectangle (for appearance) andClickable (for functionality/input handling), and classes Rectangle and Clickable both inherit from the Object class. Now if the equalsmethod is called for a Button object and there is no such method in the Button class but there is an overridden equals method in bothRectangle and Clickable, which method should be eventually called?
It is called the "diamond problem" because of the shape of the class inheritance diagram in this situation. In this article, class A is at the top, both B and C separately beneath it, and D joins the two together at the bottom to form a diamond shape.

Approaches

Different programming languages have addressed this problem in different ways:
§  C++ by default follows each inheritance path separately, so a D object would actually contain two separate A objects, and uses of A's members have to be properly qualified. If the inheritance from A to B and the inheritance from A to C are both marked "virtual" (for example, "class B : virtual public A"), C++ takes special care to only create one Aobject, and uses of A's members work correctly. If virtual inheritance and nonvirtual inheritance are mixed, there is a single virtual A and a nonvirtual A for each nonvirtual inheritance path to A. Please note that nonvirtual derivation of A in this case will be useless as direct access to any part of class A from class D will practically always end up with compile error.
§  Common Lisp attempts to provide both reasonable default behavior and the ability to override it. By default, the method with the most specific argument classes is chosen; then in the order in which parent classes are named in the subclass definition. However, the programmer can override this, by giving a specific method resolution order or stating a rule for combining methods.
§  Eiffel handles this situation by select and rename directives, where the ancestors' methods to use in a descendant are explicitly specified. This allows the methods of the base class to be shared between its descendants or to even give each of them a separate copy of the base class.
§  Perl and Io handle this by specifying the inheritance classes as an ordered list. In the above ambiguity, class B and its ancestors would be checked before class C and its ancestors, so the method in A would be inherited through B. In Perl, this behavior can be overriden using the mro or other modules to use C3 linearization or other algorithms.
§  Python had to deal with this upon the introduction of new-style classes, all of which have a common ancestor, object. Python creates a list of the classes that would be searched in left-first depth-first order (D, B, A, C, A) and then removes all but the last occurrence of any repeated classes. Thus, the method resolution order is: D, B, C, A.
§  Scala resolves method names using a right-first depth-first search of extended 'traits', before eliminating all but the last occurrence of each module in the resulting list. So, the resolution order is: [D, C, A, B, A], which reduces down to [D, C, B, A].
§  JavaFX Script in version 1.2 allows multiple inheritance through the use of mixins. In case of conflict, the compiler prohibits the direct usage of the ambiguous variable or function. Each inherited member can still be accessed by casting the object to the mixin of interest, eg. (individual as Person).printInfo();.






Other examples
Languages that allow only single inheritance (such as Ada, Objective-C, PHP, C#, Delphi/Free Pascal and Java) allow the multiple inheritance of interfaces (called protocols in Objective-C). Interfaces are essentially abstract base classes with all abstract methods and no data members. The problem is therefore avoided since there is always only one implementation of a specific method or property and no ambiguity arises.
The diamond problem is not limited to inheritance. It also arises in languages such as C and C++ when header files A, B, C, and D #include one another in a diamond as above and separate precompiled headers are created from B and C. If these two precompiled headers are combined, declarations in A are duplicated and the #ifndef include guard is ineffective. It also is found when composing middleware stacks; for example, if A is a database and B and C are caches, D may ask both B and C to commit a transaction, resulting in duplicate commit calls to A.

job Vacancies @http://www.itworx.com

Position
Reference
Position Type
Available Positions

SR-10-436
Permanent
1
SR-10-413
Permanent
1
SR-10-426
Permanent
5
SR-09-388
Permanent
1
SR-10-443
Permanent
1
SR-10-433
Permanent
1
SR-10-424
Permanent
1
SR-10-430
Permanent
1
SR-10-429
Permanent
1
SR-10-418
Permanent
1
SR-10-439
Permanent
1
SR-10-440
Permanent
1
SR-08-286
Permanent
1
SR-10-416
Permanent
1
SR-10-405
Permanent
2
SR-10-421
Permanent
2
SR-10-411
Permanent
5
SR-10-414
Permanent
1
SR-10-419
Permanent
1
SR-10-417
Permanent
3
SR-10-400
Permanent
5
SR-10-412
Permanent
3
SR-10-399
Permanent
5
SR-08-363
Permanent
2
SR-10-404
Permanent
5
SR-10-431
Permanent
1
SR-10-415
Permanent
1
SR-10-428
Permanent
1
SR-10-397
Permanent
1


Senior Testing Engineer


Senior Testing Engineer  
Description
  • Designing, developing, and implementing test plans, test cases and test tools.
  • Analyze and write test standards and procedures.
  • Test and verify software products during the development phases and throughout the software development lifecycle.
  • Maintain documentation of test results.
  • Analyze test results and recommend corrective action.
  • Follow standard practices and procedures in analyzing situations or data from which answers can be readily obtained.
  • Work on problems of moderate scope where analysis of situations or data require a review of identifiable factors.
  • Exercise judgment within defined procedures and practices to determine appropriate action.
  • Normally receive no instruction on routine work, but will receive detailed instructions on new assignments.
Qualifications and skills
  • Bachelor of Engineering with a Specialization in Computer Science or Communication Engineering.
  • Knowledge of UNIX operating system is a plus.
  • 3-5 years experience in the relevant field.
Reference:
                Apply Now  Current Vacancies

Development Manager

Development Manager  




Description

  • Optimizing resource utilization.
  • Assigning  adequate resources to requested tasks.
  • Ensuring adequate training and tools for required tasks.
  • Identifying process improvement requirements.
  • Requesting hardware and development tools.
  • Assisting project managers in identifying potential stakeholders.
  • Providing recommendations for general approaches in design,
  • Setting objectives for the development team.
  • May assign investigation tasks to development team members outside projects.

Qualifications and skills

  • 10 - 13 years of experience
  • Technical Lead
  • Quality oriented
  • This job requires extensive travelling and a certain level of managerial skills (may include the delegation of responsibilities to different team members)

Reference:




                Apply Now  Current Vacancie

Application Architect

Application Architect(s)  




Description

  • Designing the packaged software configuration and customization to meet the business process design and application requirements.
  • Using the business process requirements to drive out application requirements and metrics.
  • Assisting in defining and reviewing requirements for the application.
  • Validating the design with the stakeholders to ensure that the design satisfies the requirements.
  • Supervising other designers or programmers in completing designs.
  • Informing the technical architect and project manager of any issues that may affect other areas of the project.
  • Participating in quality management reviews, as outlined in the Validation Task Overview, ensuring the application design and related work products satisfy the requirements.
  • Developing an application prototype and conduct conference room pilot to validate the configuration design and explore packaged software gap resolution options.
  • Conducting package-specific training for conference room pilot participants.
  • Participating in transitioning the designs to relevant stakeholders e.g. testers, and ensuring a clear and complete understanding of the designs.
  • Ensuring that other team members with cross working relations have the information they need to successfully complete their work.
  • Completing all appropriate documentation required by other programmers, testers, Deployment team, and support team who will maintain the application.
  • Developing a high-level entity relationship diagram to be used in technical detailed design.
  • Developing a data mapping document to understand how the fields in the UI will map back to the database at the table level.
  • Understanding that this role is more focused on the overall process flow and user experience rather than the integration solution designer role.

Qualifications and skills

  • 6 years of experience
  • Java,  SOA
  • Building architecture
  • This job requires a certain level of managerial skills (may include the delegation of responsibilities to different team members)

Reference:




                Apply Now  Current Vacancies