Jump to content

[CR] Interface Framework


Recommended Posts

index.php?app=downloads&module=display&section=screenshot&id=99

Name: Interface Framework

Submitter: Daklu

Submitted: 19 Oct 2009

File Updated: 24 Apr 2011

Category: LabVIEW OOP

LabVIEW Version: 2009

License Type: BSD (Most common)

Interface Framework v1.0.0

Copyright © 2009, Dave Snyder

All rights reserved.

Author: Dave Snyder

LAVA Name: Daklu

Contact Info: Contact via PM on lavag.org

LabVIEW Versions:

2009

Dependencies:

JKI's VI Tester is required if you want to execute the unit tests.

Description:

In object oriented programming, often a designer needs a class to include the behavior of two or more unrelated classes. Traditionally programming languages address this situation with "mulitple inheritance" or "Interfaces." Unfortunately, Labview supports neither. The Interface Framework provides a structure for giving your classes Interface-like behavior.

Installation and instructions:

Option 1 - Install the OpenG Package using VIPM. This will install the framework in \LAVA\Interfaces\_Framework. Navigate to the 'User Libraries -> LAVA Code Repository -> Interfaces' palette to use previously implmented interfaces. The 'Advanced' palette provides vis for interface implementers.

Option 2 - Copy the 'Interfaceable Class' and 'IUnknown Class' folders from Core\Source to the location of your choice.

Documentation:

The Core\Documentation folder contains the following files,

-Changelist.txt - Contains the revision history.

-Interface Framework.uml - Contains two class diagrams, one for the core framework and one for the Baby class implementation of the ISleepable interface, and a sequence diagram of the Interfaceable:GetInterface method. Use StarUML to view this file.

Examples:

Examples of implementing interfaces in classes and using the framework in applications can be found in the Sample Implementation or Unit Testing folders.

Known Issues:

No testing has been done with Interfaces that inherit from other Interfaces. Very little testing has been done with interfaceable objects inheriting from other interfaceable objects.

Acknowledgements:

Special thanks to kugr and SciWare for taking the time to look it over and provide valuable feedback. Thanks to Stephen Mercer for patiently answering my numerous questions and providing detailed explanantions. Thanks to the LAVA community for being willing to share knowledge and ideas.

Version History: (For previous changes see changelist.txt)

v0.12.0 - Nov 1, 2009 (Unreleased)

[Note - Public api has changed. Backwards compatibility may be broken.]

-Renamed Interfaceable:GetInterface to Interfaceable:CastToInterface.

-Renamed Interfaceable:RecoverObject to Interfaceable:CastToInterfaceable.

-Changed connector panes and icons for CastToInterface and CastToInterfaceable.

-Added context help text to CastToInterfaceable.

-Changed error message generated when CastToInterfaceable fails.

v0.11.0 - Oct 18, 2009

[Note - Public api has changed. Backwards compatibility may be broken.]

-The framework now follows a more intuitive model where the interfaceable object is "cast" into an Interface, operated on using the Interface, and "cast" back into the original object. This allows the framework to work with static, by-ref, and by-val data in classes and more closely follows Labview's data-flow model.

-Added Interfaceable:RecoverObject method. (Name is likely to change in a future version.)

-Changed connector pane of Interfaceable:GetInterface method to one similar to the 'To More Specific Class' primitive.

-IUnknown now has both protected and community scoped methods for SetTargetObject and GetTargetObject.

-Added by-val, by-ref, and static objects for unit testing. Added test cases for testing by-val and by-ref object. Added mock interface IInt and concrete implementations.

-Changed some banners and icons.

License:

Copyright © 2009, David Snyder

All rights reserved.

Redistribution and use in source and binary forms, with or without

modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright

notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright

notice, this list of conditions and the following disclaimer in the

documentation and/or other materials provided with the distribution.

* Neither the name of the author nor the

names of its contributors may be used to endorse or promote products

derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY DAVID SNYDER ''AS IS'' AND ANY

EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED

WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

DISCLAIMED. IN NO EVENT SHALL DAVID SNYDER BE LIABLE FOR ANY

DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS

SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Click here to download this file

  • Like 1
Link to comment
  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.