Comparing LabVIEW OOP Class Hierarchies

Hello all,
The Question
Does anyone know of a tool for comparing LabVIEW class hierarchies?  (Like "Compare VI Hierarchies" for .lvclass hiearchies?)
For Example
Let's say I have foo.lvclass in two projects and I want to compare the two instances and their respective members.  Does one instance have methods that the other doesn't?  Does a method or private data differ?
Why?
I have several applications with dozens of classes, many of which should be interchangable, and I want to quickly determine which classes are the latest, perhaps consolidating some common base code.
I thought about posting this as a suggestion on the Idea Exchange, but I wasn't sure if I'm just not seeing functionality that's already there.
Thanks very much,
Jim
Solved!
Go to Solution.

Hi Jim,
There does not appear to be any way to do this. The closest functionality I could find was to use the Compare VIs/Compare VI Hierarchies to compare the .ctl files for two classes. The LabVIEW Help topic documents how to do this:
http://zone.ni.com/reference/en-XX/help/371361L-01/lvhowto/comparing_vis/
However, this does not really achieve the functionality you are looking for. Thank you for posting this idea to the Idea Exchange!
Catherine B.
Applications Engineer
National Instruments

Similar Messages

  • ALV like LIST GRID BLOCKED and HIRARCHIC using oops class SALV

    Hi ,
    Can any one let know me is it possible to display all the Flavours of ALV like LIST GRID BLOCKED and HIRARCHICAL
    using oops class CL_GUI_ALV and class CL_SALV.
    and the relevant events with respect to the type of ALV.
    regards

    Hello
    Have you had a look at the documents of Rich Heilman:
    [ALV Object Model - Simple 2D Table - Event Handling|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/cda3992d-0e01-0010-90b2-c4e1f899ac01]
    [ALV Object Model - Hierarchical Sequential List - The Basics|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/b0f03986-046c-2910-a5aa-e5364e96ea2c]
    [ALV Object Model - Simple 2D Table - The Basics|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/eac1fa0b-0e01-0010-0990-8530de4908a6]
    Regards
      Uwe

  • Are LabVIEW OOP "Helpers" modifiable?

    I am finally "byting the bullet" and attempting to refactor one of my Projects to use LabVIEW OOP (it seems to me ideally suited for OOP-ifying).
    But I have a few "picky issues".  I don't always like the way LabVIEW "helps" me.  Some things I can change (like the default Class Icon), and I do.
    But others I'd like to change to conform to my own personal style.  Here's an example -- create a New VI for Data Member Access.  Works fine, but the Error terminals are named "error in (no error)" and "error out", while I use "Error In" and "Error Out" (note the Silver Controls also use the latter "prettier" names).  While I'm thinking of it, what if I want to use Silver (or System, or even Classic) Controls?
    Another thing is that I've try to "encourage" myself to use Revision History by turning on the Option "Prompt for a Comment when a VI is saved".  Each time you create a New VI for ... there appears to be a whole lot of "saving" going on in the background because I need to hit "OK" (for saves to Historylv_icon.lvlibp) several times.
    Are the (I presume scripting) processes used to help us available and modifiable?  I do realize that if I start messing around, I could create a real mess, but that's why Re-Install was invented!  If not, I'll just Grin and Work Around It.
    Bob Schor
    Solved!
    Go to Solution.

    Take a look at <LabVIEW directory>\resource\Framework\Providers\LVClassLibrary\NewAccessors, and then into "ArrayElementScripter" and "BaseAccessorScripter". There are the codes which make "magic" when you create new accessor. And there are "Custom User Scripting For New Simple Accessor VI.vi" and "Custom User Scripting For New Array Element Accessor VI.vi", where you can put your own code called when accessor is created - use these two VIs, and there would be no need to reinstall whole LV, just make backup copies of these two.

  • Comparing user defined classes ???

    class A
         int i=10;     
    class B
         int i=10;     
         //int k = 30;
    As we compare both primitive variables,
    Is it possible to compare the above A and B classes.
    since A and B consists of same variable and same data,
    i should get o/p as both are same.
    Is it possible to compare like this(classes) ????
    but when i remove comment from Class B
    the o/p should be both are not same.
    with out making a single change in the code. is it possible ?????
    i tried it with Comparator...but code need to be change when i remove comment from Class B.

    Waitaminnit.
    What you're asking for doesn't make any sense.
    You want class A and class B to compare a certain way, but then if you change the code for class B, you want them to compare a different way, without changing any other code?
    That's fairly ridiculous. Whatever is doing the comparing should know a priori about the important stuff in class B. You can't just come along later and change class B such that the set of important stuff is now different and expect other code to magically know this.
    I suppose you could have the Comparator do some weird, ugly-asss reflection and apply some rules to its result, but ick.
    Also, you shouldn't even be trying to compare A and B unless one descends from the other, or they descend from a commom ancestor that has all the fields you're going to use in the comparison.
    For instance, if B extends A, then you can get rid of the i in B. The comparison would be implemented on A only, and would treat everything as an A. This works because a B is an A.

  • Runtime types and class hierarchies etc...

    Hi,
    I hope this is not an obvious question but I was just wondering how the new Generics feature(?) would behave in terms of class hierarchies.
    For example, could I do something like this:
    Set<Throwable> myThrowableSet = new HashSet<Exception>();
    If so, could I then do this:
    myThrowableSet.add(new Error());
    or would I only be able to add something which is an exception?
    Thanks,
    Mark
    p.s I realise you would never actually want to do the above but I am just interested in the behaviour.

    Reading that spec8.pdf I mentioned earlier (do you know the one I mean) it talks about "Raw Types". It mentions that you can do stuff like:
    HashSet myHashSet = new HashSet<Exception>();but that when mutatable method calls are performed on myHashSet, "unchecked" warnings are given (I guess at compile time). I guess this is still the case?
    For me, it is very important to know the behaviour of Generics because at the moment I generate Typesafe collection classes and I am trying to make them as forward compatible as possible. Looks like I need to remove this static method:
    SetTypesafeClassName SetTypesafeClassName.convertType(TypesafeSet s);but I can leave this instance method in:
    Set getRawType();Here, TypesafeClassName is replaced by "Throwable", "Exception" or whatever...
    Thanks,
    Mark

  • Does Labview Support a Hierarchical VHDL Instantiation into Labview Clip Nodes?

    Hello,
    Does Labview Support a Hierarchical VHDL Instantiation into Labview Clip Nodes?
    I followed the available help, and called out the top-level VHDL in my XML file.  Unfortunately, my lower level VHDL components are being read as a Black Box and I am getting an error during compile.  So, what must I do to instantiate hierarchical VHDL code into a clip node?
    Solved!
    Go to Solution.

    Yes, but you need to include the paths to all of your VHDL files in your CLIP XML.  This tells LabVIEW which source files to copy into the compilation directory.  Here is an example (which assumes the source files are in the same directory as the XML):
    <CLIPDeclaration Name="NI Example CLIP">
      <FormatVersion>1.0</FormatVersion>
      <CLIPVersion>1.0.0</CLIPVersion>
      <HDLName>ExampleClip</HDLName>
      <ImplementationList>
        <Path>ExampleClip.vhd</Path>
        <Path>SubComponent.vhd</Path>
        <Path>Fifo32.ngc</Path>
        <Path>ExampleClip.ucf</Path>
      </ImplementationList>

  • Imlementing synchronized access to shared objects in LabVIEW OOP

    Many objects in object-oriented programming have an
    identity, such as a file, a front-panel object or a hardware device.
    These objects cannot be modelled using present LabVOOP (LabVIEW Object Oriented Programming) objects as
    LabVOOP objects gets copied as wire is branched; multiple different
    wires cannot all represent a single object. This issue has been
    irritating the community of LabVIEW users since the release of LabVOOP
    a few months ago.
    It seems that there is a huge demand for
    objects with unique identity i.e. by-reference objects in LabVIEW. The
    central problem why LabVOOP propably doen't have these objects is the
    difficulty in implementing synchronized access to these objects from
    multiple parallel threads. The problem of synchronized access can be
    divided into two different separate topics. First how the
    sychronization should be implemented in LabVIEW runtime engine. Second
    how this synchronization mechanism should be visible to the developer.
    I'd like to start this thread to discuss these two issues.
    Synhronization under the hood
    Traditionally
    people talk about locking of an object and about get-modify-set pass
    when accessing the object. Locking is traditionally done by acquiring a
    mutex for an object, modifying the object and releasing the mutex so
    that other threads can access the same object instance. This is how
    inter-thread synchronization is traditionally done. However, besides
    the mutex based locking, the computer science community has innovated
    also different kinds of methods on synchronizing the access to objects.
    One way to get object-level synchronization is modify the
    runtime engine so that it only allows a single method of a synchronized
    object to run at any time. This mechanism of syncrhonization is
    implemented in programming languages like O'Haskell, which is a Haskell
    variant with object orirented features.
    Also different
    transactional mechanisms[1,2] have been successful. In transactional
    mechanisms multiple threads are allowed to access a synchronized object
    simultaneously. As each method accessing an object commits their
    changes, they verify that no other object has modified the object
    simultaneously in a manner than would break the transaction. If such a
    modification has occurred, everything is rolled back. Transactional
    mechanism do not suit to every possible situation as not everything can
    be rolled back. For example it's hard to roll back an action that
    somehow modifies the physical world.
    User experience of synchronization
    How
    the synchronization is generally implemented in LabVIEW shouldn't be
    directly visible to the developer end-user. The developer should
    understand the general concepts of synchronization to take full
    advantage of it, but in general the synhronization mechanism should be
    integrated directly to development environment. There should in general
    be no need to acquire a mutex by calling acquire mutex node but instead
    the end-user should be able to specify which data needs synhronized
    access in more sophisticated way.
    In the following I propose a
    mechanism of integrating the synchronized access of by-ref objects to
    the development environemnt of LabVIEW. The proposal is very
    preliminary but I hope it breaks the ice and the community would start
    innovating in how should NI implement the syncrhonization support in
    the user interface of LabVIEW.
    Wire level synchronization
    Only
    methods can access object private data members. In synchronized access
    to the object, it's the methods accessing the private data members that
    need to be synchronized. The private data members are accessed by
    applying unbundle node to the class wire and data is written back to
    the object using bundle node.
    What I propose is the following.
    An unbundle node could either be normal or "synchronized". A
    synchronized unbundle would guarantee the access to the private data
    members in synchronized manner. All data wires originating from
    synchronized unbundle would be of synchronized type, in a little
    similar manner as a dynamic dispatch wire is of special dynamic
    dispatch type. Such a wire must evetually be connected to a bundle
    node. When the wire is bundled back to the originating object, the
    synchronization requirement is released.
    These synchronized
    wires would look somewhat different from normal wires so that the
    developer instantly knows that the wire is synchronized. The developer
    can branch the wire, but only one wire branch can own the synchronized
    type. The developer could easily select which wire would be
    syncrhonized by Ctrl+clicking the wire. Such a wire can be considered
    as a combination of a data and a mutex, even though mutexes don't need
    to be the underlying synchronization method. The wire just guarantees
    that there is a mechanism in the runtime engine that makes sure the
    access to the wire data is synchronized.
    There is a need to wire
    data originating from a non-synchronized wire to a synchronized wire so
    that it can replace the private data member of the class. This is
    accomplished with a new node similar to bundle node, that would allow
    replacing the data in a syncrhonized wire with some data originating
    from a non-synchronized wire.
    The synchronized wire can be
    connected to a front panel controls of special syncrhonized type. This
    way the synchronized wire can originate from a method and allow passing
    the synchronized data to the calling VI and back to another method.
    This is practical for example in a situation when the developer wants
    to run different analyzes to a data class but don't want to rewrite all
    the existing data analysis tools as class members. So the developers
    writes a syncrhonization acquiring getData method that let's the
    calling VI to access the syncrhonized data. Then the developer passes
    this data to an analysis VI and passes the result back to a setData
    method that writes the result back to the class wire.
    There
    will probably be technical problems in allowing the user to connect
    such a synchronized wire to all existing VIs since these VIs. Therefore
    the programming model for all nodes that do not support such
    synchronized wires will be branching the wire and passing the
    non-synchronized wire branch to the node and then bundling the result
    back to the synchronized wire.
    To increase performance and
    decrease unnecessary buffer copies when a syncrhonized wire is
    branched, if the syncrhonized wire continues directly to the new bundle
    synchronized wire node, no buffer copy is made.
    Discussion
    The
    syncrhonized access to a by-ref LabVOOP objects can be implemented in
    multiple ways by National Instruments. The synchronized access should
    be divided to two different and independent parts: 1) the user
    experience of synchronization and 2) the runtime engine synchronization
    mechanisms. As LabVOOP objects have special properties compared to
    other LabVIEW data types, optimal user experience can be gained by
    designing the user experience specifically for LabVOOP objects. From
    user experience point-of-view this syncrhonization mechanism may not
    work for other data types. Separating object syncrhonization from
    synchronization of other data types is advantageous also for other
    reasons. Due to the fact that object data can only be accessed via
    object methods, more advanced synchronization methods may be used with
    objects than can be used with other data types. O'Haskell
    synchronization implementation is an example of this. Integrating the
    synchronization directly to the user interface allows NI to change the
    mehcanisms under the hood, when computer science comes up with more
    advanced methods. Therefore NI could begin with traditional and quite
    easy mutex-based synchronization and later move to more advanced
    perhaps transaction based syncrhonization methods or even combinations
    of multiple different methods.
    I hope this topic generates
    discussion that would help NI to implement an excellent synchronization
    mechanism in LabVOOP. I hope that all talented individuals in the
    community participate this discussion to help NI to reach this goal. I
    also hope that if you just have time, it would be great if you could
    surf the computer science resources to find out what kinds of new
    techniques there exists for synchronizing access to shared resources. A
    Large community may find much more innovative solutions than a few engineers at NI. Let's give NI the power of open source design
    Tomi Maila

    Hello Tomi,
    First, thank you for taking the time to write such a well
    though-out suggestion.  Are you familiar
    with the “LabVIEW Object-Oriented Programming: The Decisions Behind the Design”
    document?  I think the reason we chose to implement a ‘by
    value’ strategy, is that is more in line with the LabVIEW programming paradigm
    of dataflow, and would make sense to most of our LabVIEW users.
    I think your suggestion is interesting, and it does
    highlight the need to think outside of the conventional LabVIEW box and look to
    some of the innovative things other languages do.  However, I think we all agree that
    synchronization takes careful planning and extra work for the programmer.  Even with an ‘ideal’ solution I see no way
    around this.  For LabVIEW users today,
    one great way to get synchronized ‘by reference’ semantics with your objects is
    to use a single-element queue to pass your object.  The queue itself is passed ‘by reference’ and
    is inherently synchronized!  The does
    have the disadvantage of adding one more small layer of complexity to your
    program, but some complexity would have to be introduced in any situation.  The other disadvantage with this is that it
    is not always an intuitive way to implement your program and requires some
    amount of LabVIEW knowledge before one would generally come across this
    technique.
    In any case, I appreciate the time and effort you put in to
    your suggestion.  Please make sure that
    you submit the suggestion formally through the NI Product Suggestion Center so
    that it can be reviewed by some of the decision makers here.
    Thanks again,
    Travis M
    LabVIEW R&D
    National Instruments

  • Save for previous version 8.5 to 8.2 generates code that crashes Labview (uses classes)

    Hello,
    I'm working on some java style interfaces for labview for hot swapping of instrumentation for design patterns. When I try to port this code, developed on Labview 8.5 back to labview 8.2, the code it generates crashes labview (both 8.5 and 8.2).
    Included is a small snipet of the work that demonstrates this behavior.
    It includes to classes:
    untitledProject1 - the containing project (version 8.5)
    FunctionGeneratorI - Similar to a Java style interface (A class with all Dynamic VI's with no useful functionality)
    FunctionGenerator33220a - An intended implementation of Function generator (only a few functions implemented)
    and a folder "labview8_2Distribution"
    Which contains the port of the 8.5 code to 8.2.
    To recreate the error:
    A.
    1. Open "labview8_2Distribution\Users\Laptop\Desktop\objec​t\Untitled Project 1" (8.2 save)
    2. Verify it crashes labview 8.5 and labview 8.2.
    3. Watch labview crash?
    B.
    1. Open the "Untitled project 1" in the root directory. (Using labview 8.5)
    2. Save the project as a labview 8.2 type.
    3. Try to open the saved version with 8.5 and 8.2.
    4. Watch labview crash?
    Greg Sonnenfeld
    Attachments:
    error.zip ‏885 KB

    Hello Karunya,
    In regards to your questions:
    >Can you post your code? Have you tested this by creating another project?
    Do you have an xcontrols in your projects? Do you have typedefs? Do you
    have a LVOOP constant on your block diagram? Are you also using Classes?
    I cannot post the cost as it is way too big. Not really my code but a spaghetti code from a previous programmer. I think problems saving it to a previous version have to do with a few things:
    1) Memory - I have 1 GB of RAM and I am running XP. I notice the available RAM dropping quickly as it is saving and then it blow up.
    2) Long Filenames - The directory path of the original file is incorporated into the saved "previous version" of the code. While a good design, it does make the file/path a bit longer when saving
    3) One of teh things it saves is the drivers and their menus. This is due to the drivers being in a subdirectory of the original code and not in the c:\program files\national instruments\labview 8.5\instr.lib directory. I saw this when I tried to save the file as an LLB.
    4) If I work with smaller parts of the code without long paths, it saves fine.
    There probably are xcontrols, definitely typedefs, no LVOOP's or Classes. Hope you can do something with all this. It just seems that converting to a later version of the code should be reversable. Thanks.
    Michael

  • Using LabVIEW OOP Objects with TestStand 2010

    I need to use labview classes in Teststand 2010. I am not able to pass reference between Labview and Teststand.

    Or leave it in Labview and use an action engine.
    http://forums.ni.com/t5/LabVIEW/Community-Nugget-4-08-2007-Action-Engines/m-p/503801?view=by_date_as...
    That's what I have done.
    Regards
    Ray Farmer

  • Comparator for different classes

    I have a crazy need to be able to hold a few hundred thousand objects in a Set. These objects can vary from Integers, Doubles to Strings. Normally it seems a HashSet would be the perfect implementation for this, however, this Set is built once and searched through several million times. So it makes sense to have a SortedSet available for this to improve search times. Having different sets for each Class type is not an option.
    I've come up with this code, which works fairly well as far as I can tell, but would like your general opinions on how it can be improved. I can't find a failing point, yet, and would like the eyes of many to tell me that I'm wrong - and that it can fail somehow.
    public class DifferentObjectComparator implements Comparator, Serializable
         public int compare(Object o1, Object o2)
              if (o1 == null && o2 == null) return 0;
              if (o1 == null && o2 != null) return 1;
              if (o1 != null && o2 == null) return -1;
              if (o1.getClass() == o2.getClass())
                   return ((Comparable) o1).compareTo(o2);
              if (o1 instanceof Number && o2 instanceof Number)
                   double retVal = ((Number) o1).doubleValue() - ((Number) o2).doubleValue();
                   if (retVal < 0) return -1;
                   if (retVal > 0) return 1;
                   return 0;
              return -1;
    }If you know of and/or can think of a better way to do this, please tell. Keep in mind it must use a SortedSet implementation.

    cvweiss__ wrote:
    After a couple of tweaks and some extensive testing I am now satisfied that the following code fully complies with the specifications given in the javadoc for java.util.Comparator. I'm posting this here for those in the future who have this requirement.
    public class DifferentObjectComparator implements Comparator, Serializable
         public int compare(Object o1, Object o2)
              if (o1 == o2) return 0; // good for two nulls or exact same Object
              if (o1 == null && o2 != null) return 1;
              if (o1 != null && o2 == null) return -1;
              if (o1.getClass() == o2.getClass())
                   return ((Comparable) o1).compareTo(o2);
              if (o1 instanceof Number && o2 instanceof Number)
                   double retVal = ((Number) o1).doubleValue() - ((Number) o2).doubleValue();
                   if (retVal < 0) return -1;
                   if (retVal > 0) return 1;
                   return 0;
              return o1.getClass().getName().compareTo(o2.getClass().getName());
    if they ALL implements Comparable, wouldn't the Set be
    Set<? extends Comparable> theSet;? In which case, the Comparator could be more elegantly written using similar generics, like
    public class MyComparator implements Comparator<Comparable> {
      public int compare(Comparable c1, Comparable c2) {
                  if (c1 == c2) return 0;
              if (c1 == null && c2 != null) return 1;
              if (c1 != null && c2 == null) return -1;
              if (c1.getClass() == c2.getClass())
                   return c1.compareTo(c2);
              if (c1 instanceof Number && c2 instanceof Number)
                   double retVal = ((Number) c1).doubleValue() - ((Number) c2).doubleValue();
                   if (retVal < 0) return -1;
                   if (retVal > 0) return 1;
                   return 0;
              return c1.getClass().getName().compareTo(c2.getClass().getName());   // looks weird to me
    }no more ugly castings! (well, except for casting to Number, but that's inherent to the weird spec to begin with)

  • Compare Labview and Lookout

    I have one water distribution system which calls for Labview and another which calls for Lookout. What is the specific difference between the two and what are the applications where one would work better than the other.

    Hi,
    There are so many differences between the two packages that it will be difficult to describe. One main difference is ease of programming versus programming capability. Lookout gives you the ability to get up and running with a program very quickly. However, Lookout is not easily customizable. This is where LabVIEW shines. LabVIEW can do anything that Lookout can do ( as long as you have the Datalogging and Supervisory Control Module) but you can do much more. LabVIEW is also very easy to use compared to other programming languages.
    I would suggest that you call us at 800-433-3488 and ask any specific questions that you may have.
    Regards,
    Mike
    NI

  • ALV using OOPS class CL_GUI_ALV_GRID, call method SET_TABLE_FOR_FIRST_DISPL

    I NEVER USED OOPS CONCEPT.BUT I GOT A TASK ON ALV REPORT USING class CL_GUI_ALV_GRID, call method SET_TABLE_FOR_FIRST_DISPLAY for ALV . I HAD PASSED THE VALUES FROM INTERNAL TABLE AND GOT OUTPUT IN ALV.
    The problem is When i save an layout(default setting button ).
    iam unable to get the output for all fields.
    if u want i will send screenshots to ur mail
    THANKS IN ADVANCE.

    ok fine,
    In the output (alv grid) there is an icon for layout settings.
    if i want to save layout (as DEFAULT SETTING) i am missing some fields in output
    EX:
    mat no | batch  | proces order | time  |  date |
    when i save layout (as DEFAULT SETTING) i am missing some fields in output
    mat no | batch  |
    the rest of the field were not displayed.
    if u are not clear just ask me. i will send some more examples.

  • How to compare LabVIEW executable file?

    I have a labview executable file that I build 2 years ago, and with the same source code, I build a new executable file. Does anybody know how to compare the 2 executables?

    Well if you built from the same source the functionality should be the same. But if you build the same source with different versions of LabVIEW then you never know. Maybe the new version exposes a hidden bug in your code or fixes one that you depended on.
    There is no way to do what you want by examining the bytes in the exe. You have to just do testing. You could either do this manually or automate it using the Unit Test Framework. There is also VI Tester by JKI.
    =====================
    LabVIEW 2012

  • Packet/Class Hierarchies confusion

    Hi,
    What I am trying to accomplish is design a program which consists of numerous sections. I am putting the different sections into the project as seperate files by, File -> New -> JavaFile.
    I am also taking in user input from the keyboard and what I want is for the variables to be accessed by each section of the project or each file.
    I am very new and am having problems with this concept.
    So far I have something along the lines of,
    The main file: -
    public class Initial_Setup
    The main file will be the first thing the user sees, they will type in some details and then I want the program to move onto the next section of the program which is in a different Javafile.
    I have this set up as: -
    class tester extends Initial_Setup
         public static void main ( String [] args ) throws IOException
              Initial_Setup InitSet = new Initial_Setup();
    Then in class tester i'm trying to reference the variable which was used in class Initial_Setup like this,
    if (InitSet.numalzonefl1 == 2)
    numalzonefl1 is the variable which was filled with a number via keyboard input in class Initial_Setup and I need to use it in class tester. However I get an "Cannot resolve symbol" error.
    I was hoping someone could give me some advice on this as my guess is it's fairly easy really. Also how can I, once the Initial_Setup class has finished, get it to move right on over and execute the tester class?
    Sorry for the massive post (on a friday as well!!)
    Any help really appreciated.
    Paul.

    It looks like the variable might be private. either make get/set methods for it, or make it protected so you can access it in your subclass. It looks like you might want to get a book on OOP design. Bruce Eckle (sp?) has a book called thinking in Java that is a free download. not sure of the web address but a google search should pull it up.

  • Practical Uses of OOP/ Classes

    Hi All,
    I know how to program using OOP in abap but I cant seem to use it. What are the general uses of this?
    Thanks.
    Tyken

    Hi Tyken,
    CLASS and its METHODS are Like a Template/Skeleton, developed with some specific functionality, So we need not write more Lines of codes in our program.If necessary we Just call and Pass the appropriate values to the Methods and then we will get the expexted result.
    The object-orientation modeling of a software system is the most important, most time-consuming, and most difficult requirement for attaining the above goals. Object-oriented design involves more than just object-oriented programming, and provides logical advantages that are independent of the actual implementation.
    Kanagaraja L

Maybe you are looking for