Disadvantages of Java against C++

hello all,
can u tell in detail technically what r the those as every book talks only of Advantages.

please leave as comments so that we can give multiple points to contributions.
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

u can't access the underlying hardware directly,but u have to use JNI

Speed is slow since all objects are created on the heap,no stack based stuff allowed so no real time applications is possible

also since usage of JVM adds one more layer and JVM is stack based it's slowed down a bit more.
1stReichAuthor Commented:
I am confused ,you said no stack based stuff allowed and then you say
JVM is stack based ???

what do you mean to say?
Sorry ,but no Object allocation allowed on stack in Java but

the JVM is stack based ,see
Build an E-Commerce Site with Angular 5

Learn how to build an E-Commerce site with Angular 5, a JavaScript framework used by developers to build web, desktop, and mobile applications.


Eventthough java is better than C++ in terms of richness of
language, java programmer will not enjoy as C++ programmer
in some cases.

The main limitations are commented by mbormann.

C++ is more flexible.

You will have full control in your programming.
Eg: Device Drivers programming whcih has to access hardware
directly. C++ is well for real time applications

In C++, you will have full control in IO Programming using

In C++, you will have full control on the memory by explicitly
creating and deleting ( new and free ) unlike java which
automatically garbage collects.
>>>>>In C++, you will have full control in IO Programming using

I think it's the same with Java
good explannations  :)))
Here are some more differences which I will summarise for you...

Most importantly, when moving from C++ to Java you will notice that there is no need to worry about referencing or dereferencing objects. This means no pointers in Java, which if you have ever had to muck around debugging c or C++ programs comes as a relief.

What this means for the programmer is that all objects are passed by reference and never by value. When you write a function in C++ you can pass in the value of your object for the function to use or an actual reference to the object which tells the function what it's address in memory is. This is a pointer.

Pointers are much smaller than objects such as a String, so they are often used to save copying and passing large chunks of data about - why bother when if only need to send in a small number giving the address of where to find the data.

This leads to some convoluted syntax in C and C++ whereby you decide whether to pass in the object, a reference to the object, a constant reference pointer to the object (so that the object can be passed as a pointer but not changed)  and so on...Java is ultimately more standardised, cleaner and better than C++ in this fundamental aspect of programming.

Java is ultimately an interpreted language as opposed to a compiled one such as C++. This means C++ is much faster but Java has better error capturing and run time control than C++. This is especially noticeable in it's stability - Java can be an extremely stable platform, whereas c++ can be highly volatile. This is because Java runs within a protrected environment - the Java virtual machine (JVM). The JVM acts as an interface between your Java application or applet and the actual hardware. C++ has no such interface, so it runs directly at the machine code level.

This also means a Java app needs a JVM to run on before it can be distributed whereas a C++ app should be more easily distributed. I say should, because there are other areas of an application that affect distribution.

For example, if your C++ app needs to access certain system functions in system libraries then if these are not present or out of date your C++ app also needs to distribute it's support libraries in order to run. This is why when you install software on Windows it usually installs loads of DLL's or other support software to ensure it can run properly. These libraries are probably already on your machine, but if they are not it is a headache to sort out installation so most installs simply reinstall DLL's again etc...

This muddies the water somewhat, because if you have ever tried to ditribute C++ or Java applications, I can tell you that Java is often easier. The reason generally being that though you should just be able to distribute your core C++ exeecutable file and run it anywhere this is often not the case. With Java you know exactly what it is you need to install on a users computer to make your software work and once this is done it WILL work, because if you JVM is working correctly then all your apps will work correctly.

Also, Java once compiled into class files will run on any environment or Operating System that supports Java - which is most. I have proved this to myself and know it to be so.

To get your C++ application to run on windows and Unix means recompiling the code to make it compatible. If you use any features that draw graphics to the screen, access hardware or use Graphical User interfaces then also prepare to re write your code. Don't believe anyone who says otherwise.

You also then have to manage two versions of the source code...

However, something to really note about Java is that in many ways it is not the fact that Java is interpreted that makes it so portable - it is the fact that the core language has such a  rich number of features as standard. The point being, that if you write a Java program that uses various functions to draw on the screen, add buttons to your user interface and manage user responses the JVM on one machine will allow you to access these abilities in exactly the same way as the JVM on another machine. Or at least it should and if it doesn't it has a bug.

This means you can rely on features always being available and agin as we develop for both Macintish and Windows environments we know this does work. C++, for example, does not specify you can always rely on being able to use such useful features as a Vector on any platform - Java says you must always be able to access such features, however your code is used.

Java has lots of features and functions built in which are not system specific - they are always available in Java. In fact, one of the biggest problems in Java is knowing when and how to use which class and what classes are available to do what you want. They usually are there.

I miss enumerated types though. This is a great feature in C, C++, PASCAL and other languages. It was silly to take them out (see the first of mbormanns links...)

Also operator overloading was a GOOD feature in C++ and should be in Java. When you have written:

String s = "sss";
String x = "sss";
If (s.equals(x)) {

instead of
If (s == x) {

for the hundredth time you will perhaps appreciate this. If you don't know what I mean just trust me that it is a good feature in C++.

Multiple inheritance in C++ is a bad feature. It is a point of convenience for lazy programming and code re-use but also technically is both logically and practically wrong. I have given an explanation as to why this is so elsewhere in the Java part of EE so have a look for it by using the search or I will try and dig it out if you can't find it.

The thing to really grasp about Java is that in C++ you can write a program that does not even use objects. It can just have a start point, loop for a while and end. Basically, it is C with objects in.

Java is more Object Oriented. To start your program you use an object, either loading it or invoking it. You store your data in objects, you control your program flow with objects, and so on...

You need to be really confortable with OO concepts to get along with Java. Read a book like Thinking in Java to get to grips with the basics of Java - forget writing user interfaces for a moment and work out what is going on under your feet, as the knowledge this grants you is invaluable.

All of this does not mean to say that Java is better than C++ - just that Java is better at doing certain things and is certainly less comlex in many respects.
i m sorry i never ment to propose the answer..please reject it ...it happened by mistake
I am also a newbie to java, but when i shifted from c++ to java.. i felt that in c++ there are 100s of ways of doing a task, while its not in java. In my view its makes c++ more verstile, i should say powerful.  

In my view, pointers are things which make c++ more legendery ... they give access to memory, if it leads to errors or run time errors ..then.. in my view.. its not c++'s faults, its programmers lack of expereince.

Again, as Mr.Jod said that in c++ someone can write a program without a single object, ... in my view .. again its programmers fault,,,,that he does not know how to design a program, not the complires fault.

Something which i heard is really bad in c++ compilers is that, while making them exactly compatable for c as well, they have have designed the compilers not in a very good way ..for example the dynamic biniding in c++ is achieved by keeping a long and awaful lists of pointers.....anyhow some other ppl like makers of "Objective C" have tried well to solve it.

(Im saying this all to have more discussion on this issue, never ment to support c++ or to degrate java)
Well I done debugging in both Java and C++ but u no what?

In Java i used to look at a log file and it used to print the detailed stack trace with JIT turned off,(see one of Jod' answers for a good explanation) and usually the Bug would be tracked down inside of a couple of hours.Though we had one which was really peculiar ,took us a whole week.If u interested it happened due to String's indexOf() which used to consider a name like
thingy1 and thingy123 as the same.
this was causing problems elsewhere and we had to track it like a Bloodhound.

In C++ ? Oh man ,I done only a very few then I got fed of it and asked other guys to do it.

Yeah it's powerful but as Jod said first off it's difficult to debug.

You have a block like so

SomeObject * ptr = new SomeObject;


here it shuld be deleted.

In that block over a period of few product cycles ,many different programmers will do some stuff and maybe introduce bugs in it.
Like delete that,realloc that etc...

I had to do such a case like that once and the function was huge ,abt some 1300 lines,god knows why it was so long.
1stReichAuthor Commented:
>>>>>I will try and dig it out if you can't find it.

Please do when you have time,and please lock this question.

mbormann,posting another for you.Thansk for giving URL but please talk more like Jod has done.
1stReichAuthor Commented:
increased to 145
Jod has given advantages mostly and u wanted disadvantages
But,he has taken the effort to type and marshal everything ,it's a very good one.Wot say matey?
A comment from a friend Malory (logs here as rainmal)
In c++ you have absolute and total control of system
memory and resources, which is not the case with Java.The java security
manager will screw you if you tried writing outside your process
space.Which is why it is possible to write a virus in c++/c  and not in
Java in the first place.
I got here because of a mail from mbormann above.

When you distribute a C++ file , you diatribute the binary compiled c++
inplementation, however the header still stays in a clear text format.So if
you wanted to change the access of any variable from private to public for
instance, all you have to do is change the access in the header and
recompile a subclass of the parent class and lo and behold you have changed
the access.
We all know that there is no header file concept in Java right??
hey i use IE5 and why it gave the format like this??? and the new Look is loading slowly.

This is a forerunner to more ads I think

My friend Mborman! i m sure u sould be using microsoft's compiler ..( just a joke)

if it took u more then a week to debug, then, in my view it could be of poor design.

What i think is, object oriented desing as quite different thing then OO coding. A questin which i alway have un-asnwered, that

 " How to identify the objects in ur system ???"

I think if this question become clear then a good software could be made, no matter u use c++ smalltalks, java or what ever.

In my view, java ppl have tried a lil bit in this regard, like they force to take  every thing and its grandma as an object  (apart from some basic datas)
.... but in my view, this approach is not ment for design, its only for coding.

{remember ...I m a newbie..so if i say something worng ...clarify me  ;-)     }
should = would ..
in da first line
>>>>>if it took u more then a week to debug, then, in my view it could be of poor design.


>>>>> I m a newbie

heyhey_ commented somwhere over here ,something like this...

spend some time ,say a year in C++ in a team of 10/15 guys then,
spend some time ,say a year in Java in a team of 10/15 guys then,

For your kind information the customer who we were doing it for is a FORTUNE 500 company and is in the top 50 actually.And their code is ,the least praise I have is the better.

Do you KNOW what you are talking about ?
1stReichAuthor Commented:
just stop it darknight
The response from netscape.dev-java which I posted yesterday.

You forgot to mention only one more thing - Java uses garbage collector,
which is often buggy and memory leaks are common thing around. Besides,
even provided that GC is bug-free, typical Java 2 app with some UI, some
RMI or JDBC stuff has memory footprint around 30 megs (this includes
everything - JVM, JFC UI classes, your classes, heap, and everything
else) while properly written in C it's about 1-4 megs, depending on
complexity and application specific things.

So basically, Java is simpler than C++ and more portable, but requires
roughly twice as much CPU power as native code and six-ten times as much

Yet one more minor issue is that everything is done for Win32, so people
on other platforms like Linux, still use old buggy versions of JVM or
JFC, while Win32 users enjoy HotSpot, SDK 1.3 and so on.
One might say this applies to C++ as well, but in Java situation is much
worse, as it has only one ultimate vendor - Sun Microsystems, while C++
has FSF with their excellent egcs compiler, Watcom, Inprise, TrollTech
and many more behind it. I personally don't feel any discomfort doing C
development in Linux, but I just stuck in old JVM/JFC bugs when I'm in
Well, OS/2 solves this to some extent, but not much though...
Vadym Voznyuk
its not always true that a person working for a good company is as worth as the name of the company is.....

And for ur information  .... design is something constucting a map of ur software ..what u are going to write in ur source code. Behavoir of every thing is analysed in this stage..( specially for u ..how the pointers would behave ).. ..and without behavoir and complete domain analysis a good design is not possible....... and if u start a big software ..as u said  

>>>we were doing it for is a FORTUNE 500 company and is in the top 50

coding without a good design actually is like constructing a bridge without a map . ... In my view its not software development..its "patching"

again as in ur COMENTS the honourable heyhey_ said  
>>>spend some time ,say a year in C++ in a team of 10/15 guys then,
spend some time ,say a year in Java in a team of 10/15 guys then,

I would only say that ......
... ..... pointers are not that nasty stuff that someone cant even learn them in 1 year, and someone who spent one year with c++  would end up with a pointer problem like this
>>>>In C++ ? Oh man ,I done only a very few then I got fed of it and asked other guys to do it.

Same place where i mentioned i m a newbie , I also requested for clarification,,,, and no body would satisfy with such a clarification where the replier is only bothering teach the worthness of his job envirnoment.

.. honourable heyhey_ ...

whow :)

I just live Java.
it (still) has quite a lot of Bugs, but it works for me. I can always take a look at the sources - I can debug the platform itself (and find the bug inside  the Swing kernel - I can't do this with the GDI.DLL).

after all Java is just another language - but a language that makes you life easier (sometimes :)

analyze your ptoject - and use the appropriate tool. Java works for me. but it's only a tool that I use.

as we all know OO design has (almost) nothing to do with the chosen programming language.

>> " How to identify the objects in ur system ???"

well if there is an algorithm, we won't need software designers :) there are several technologies ... and a lot of (well described) patterns ... but as you all know there are more than one way to solve some problem (and even more that lead to a wrong solution :)

Java lets you leave a lot of 'details' to the language / JavaVM itself - that's all.

Excuse my not-so-good English.

best regards
>> mbormann,posting another for you.Thanks for giving URL but please talk more like Jod has done.

mbormann gets to the point a bit quicker than me though...I talk to much...

>> if it took u more then a week to debug, then, in my view it could be of poor design.

I respect mbormanns opinion (as always) on this, as I have also spent time tracking down some real nasty bugs even on systems that were specified from the ground up by very capable systems analysts - some weren't very capable though :-).

I certainly agree that good design is at the core of a good system but if you have ever used a formal method on your code to see whether or not it is mathematically correct you will see the possibilities and probabilities become very large very fast. Try this with concurrent code and it is a real headache.

The point is, that a large system can fall over all the time or just sometimes and the reasons are hugely varied and very difficult to track down.

Some of them can be not even related to your code - I once had to recompile a DLL written in C for a 16 bit real time application from win16 to win32 because the NT 16 bit subsystem appeared to be messing with the applications timing which had to be very precise.

This also then meant upgrading the whole 16 bit client application into 32 bit. It then worked fine with no changes to the code. Try tracking that bug down on your system model...

So honestly, it is very difficult to find some bugs but C++ can make it so much harder...

>> In my view, pointers are things which make c++ more legendery

It is more appropriate to ask with pointers, why are you using them? Why does C and C++ specifically NEED them?

The main reason is for manipulating complex objects by referencing them in memory, rather than making copies of them to pass to functions. There are other uses, but that's why they are there - to make programming more efficient at the expense of the developer working out the intricacies of pointer and memory management and.

Why do you think an Array in C/C++ is already a pointer, whereas most primitive types are not? Sure there are all sorts of tricks that pointers can additionally pull off, but in general they are there to make the language as much akin to the feature of assembly language whereby you have different addressing modes to optimise memory access and usage. This goes right down to the core of the processor and the way it uses it's registers to process data.

In Java, everything is stored by reference. If you like, all variables are pointers to their relevant objects. No confusion, no mess and this is the way things should be.

The point about C++ allowing programs without objects is that C++ syntax is not optimised for using objects and this makes life unnecessarily difficult. C++ can almost be considered a massive pre-processor to convert a C++ OO program that you have written into non OO C.

The OO side of C++ is just there if you want it...

You have to work on a large project to appreciate the importance of clarity of code. There are parts of the system you didn't write that have to work with your code. All you want to know is how to interface with the other code and Java is extremely good at distributing this workload, but even better should Noddy down the corridor need to change his part of the system he can recompile it independently of yours. This is all easy, clean, simple and your code can pick up the changes next time it is run with no explicit relinking or binding required.

I have sort of concentrated on the advantages of Java because I see advantages in using it. It takes more time to build in C++ and much more time to learn the tricks of the trade.

However, you could currently never write a decent fast replacement for some applications in Java (such as high end complex word processers or for building hardware drivers for example) but then it comes down to common sense in choosing the right tool for the job, as heyhey_ also points out.

A good question to ask before choosing between them then becomes:

"Can I realistically do this in Java?"

and if you can't then look at C++ or which *parts* you need to do in C++. C++ can always do the job, it just takes more effort (sometimes an enormously large amount of more effort) to get it running and stable. Taking of stables, remember it is horses for courses, so use what gets the job done well.

I have put the stuff in about multiple inheritance in the next comment below (I wrote the code on the fly, so if it doesn't work, don't call your lawyers...):

You might like to see this:


if you haven't already, but don't tell anyone if you laughed at a computer Joke. It's a bit old now, but is sarcastically valid all the same...

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
The link you want for multiple inheritance stuff is:


I have copied some key stuff here so you don't have to pay with points to get in...

Or at least I tried to - I keep on getting an

Internal Server Error

when I try and post any large comments to this question. Maybe we've reached the Experts Exchange limit for a single question?????
Or at least I tried to - I keep on getting an

Internal Server Error

when I try and post any large comments to this question. Maybe we've reached the Experts Exchange limit for a single question?????
It's all going a bit pear shpaed now - sorry it just refuses to let me post any large comments, but the link will take you there anyway.
Jod,Yeah we have a BIG problem posting large comments right now.
And heyhey is right OPEN SOURCE!!!!! ,right on the mark
1stReichAuthor Commented:
Jod,will accept answer in some time and let more contribution come in maybe.

rainmal,this is a very good point if it is true ,can somebody please confirm this independently so then i post question for him.

> .So if you wanted to change the access of any variable from
> private to public for instance, all you have to do is change
> the access in the header and recompile a subclass of the
> parent class and lo and behold you have changed the access.

compiled binary class 'layout' in C++ is not standardized so you'll probably get GPF (or even something worse).
(if your compiler keeps all the private information in one consecutive section, when you change some field access from private to public, you'll change the internal sections boundaries ... and all the static-compiled pointer positions will go to ... some very warm place with little horned creatures)

btw. it's much easier to decompile Java class, change some field / method access and compile the class again (because of the compile time checking)
assume taht same compilers are used then what?Then it's entirely possible i think

BTW r there are more than 1 person logging in your account?sometimes u r fluent in English sometimes not.
just me.
my English depends on the beer / vodka  quantity that I've ... tasted ... :)
Wow,man then sometimes u must be wobbling too much,anyway sometimes my brother logs here,he is a college kid(18 years) and teaches me applets.
.. Lord help you if you ...
why did u give that link for I don't get it?
as my friend jod said:-
>>>It takes more time to build in C++ and much more time to learn the tricks of the trade.

Answer is very simple, lesser the tricks in java ..less the time is required to learn.

To honourable heyhey_
>>>as we all know OO design has (almost) nothing to do with the chosen programming language

Three big software methodologies gurus (Ivar Jacobson, Grady Booch and James Rumbaugh) are combined to make something called uml, and they also wrote a book "The Unified Software Development Proccess" .. please reffer to chapter on design.. in that chapter, when ever they talk about the design of classes they alway stress that it should be faultlessly mapped into ur source code.
(its the only refrence i remember right now)

In my openion its analysis document which have nothing to do with language.

>>>well if there is an algorithm, we won't need software designers :)

In my view the reason is every software project is a new project. So how can trust on tool about which its lovers are accepting that its limited.

Imagine of the situation when someone after learning something finds that i cant do it with this tool, so i have to learn the other one?????

as jod said
>>>C++ can always do the job
then y not to to with it ???
>> my English depends on the beer / vodka  quantity that I've ... tasted ... :)

Well, heyhey_ you are speaking in tongues today.

>> why did u give that link for I don't get it?

The link is a good example of how complex C++ programming has to be in order to keep itself ahead of the game. Basically, COM is a system whereby your code requests services from COM objects by asking if it supports a particular interface - if it does then you can continue, otherwise your program crashes elegantly...

COM allows C++ to be more dynamic at runtime and promotes implementation hiding. Trouble is, it is very tricky to program as the article points out.

>> Answer is very simple, lesser the tricks in java ..less the time is required to learn.

It's more like, lesser the problems and limitations in Java, lesser the tricks that are needed...

To take a standard analysis view, you have a logical and physical design. Your logical OO design has no reference to any language - it should be implementable in C++, Java, etc. The same principle is true for your Data Models, but data modelling is in many ways a solved problem. Code modelling is not.

In the real world, practical limitations mean that a RAD approach to software design is often preferred. Practical prototyping tells you and especially the user a lot more than your static diagrams which the user will simply use for toilet paper. They may make sense to you, but they provide no substantial feedback route from the user.

Why is it that you think that Architects build models and draw pictures of proposed buildings? It's not just for the sheer fun of it...

You'll have me digging out my old Computer Science notes soon, but you have to wonder how much actual programming Booch and co have ever done. For example, here are a list of problems with UML that could mark it out in it's complete form as the "Unused Modelling Language" more than anything else:

  UML provides a wealth of description techniques, but defines neither their syntax
  nor their semantics precisely and unambiguously. This makes modeling sometimes
  deceptively easy because one is allowed to draw all kinds of diagrams that have no
  useful meaning for the subsequent implementation.

  The missing semantic foundation is also problematic with respect to the relationships
  between the various development documents, especially when it comes to describ-
  ing the dynamic behavior of a system: Because there exist no consistency criteria
  between description techniques it is hard to check whether all of their requirements
  can be combined and fulfilled by the implementation. Consistency criteria and me-
  thodical guidelines could also make the production of development documents easier
  because they restrict the possibilities of the developers and force them to consider
  only meaningful diagrams.

  The same considerations apply to UML's concept of refinement|it is not defned
  when a development document is a refined version of another document and what
  development steps are admissible for refning documents.

  UML's description techniques cannot deal suficiently with complex, changing ob-
  ject graphs and hierarchical composite objects. The existing notations for so-called
  "multi-objects" in sequence and collaboration diagrams seem very ad-hoc and leave
  many questions open, as well as the whole description technique of component dia-

  UML lacks abstraction techniqes for large class diagrams with many attributes and

  Some of the techniques of UML aim at the implementation of a CASE tool and can-
  not be presented on paper. An example are most relationships between development
  documents which shall be represented by "invisible hyperlinks" according to UML's

  The UML Notation Guide and the UML Semantics Document do not con-
  tain contain suficient examples and are not very readable, if not to say confusing.
  This is especially true for the Semantics Document: Large parts of it seem to be
  machine-generated English, the index is nearly unusable because it contains too
  many references for each entry, and the definitions contained are informal and un-

This comes from a case study named "Using UML for Modeling a Distributed Java Application" by Klaus Bergner, Andreas Rausch, Marc Sihling and involved developing a real world system. Basically, it indicates that UML is not focused or mature enough to be used easily to solve modelling problems.

You will find in books like Design Patterns that standard modelling techniques have been used but extended and trimmed where necessary to be practically useful. Sytems analysis is not an end in itself, it's just there to help and when it starts to enter a counter productive, self re-enforcing design hysteria then it is no longer helping.

truely speaking...I am enjoying the discussion with such learned ppl like jod and heyhey_  ... please keep on posting ur knowledgeful ideas.

Everybody would agree that uml has nothing to do with design, I only reffered their book "unified software development precess", they are actually trying to talk about the software development process not about the uml.

frankly speaking what i think is uml is nothing more then a set of diagrams and rest of the work is to be done by urself.

Anyway I strongly believe in good design coz i have experienced it manytimes.( if u like i can post all those event ..which lead  me think about worthness of design ;-) )

Again reffering to that book, they again say that keep on making some prototypes of the parts about which u suspect any naughty behavior.

You gave the example of COM ... I would say that if u jump into the coding without domain knowledge then it would blow up ur face no matter u use java or c++, e-g I am trying to make  a RTP engine in java, although jmf2.0(beta) supports it, but still if have to go through all the rfc's of rtp. Its another matter that rtp streamign support in jmf2.0 is very poor, even the samples coded jmf ppl cant fulfil it.

Another point u said that uml is facing lack of documentation,  dont u think same is for java, e-g i have been trying to change the java monogram of an application written in swing (coffee cup) that appears on the top left corner, but i didnt find it in any book, may be u would tell me now ;-), but in vc++ almost every book talks about these kidi tricks in the first chapter.

1stReichAuthor Commented:
I think that it is tiome to close question.

Increased to 175,rainmal posting a question for you.
>>  ... may be u would tell me now ;-)

you probably need this:

- Class java.awt.Frame -

 public synchronized void setIconImage(Image image)

Sets the image to display when this frame is iconized. Not all platforms support the concept of iconizing a window.

thanks alot
We are going way off subject here, but anyway...

There are a couple of things that exemplify good design:

    allows for prototyping
    can be changed easily

The reason for this is that you need to show the user what it is you are doing and how the system is taking shape. If you don't then you will end up not building the correct product for them.

This I have ALWAYS found to be true. There is no better judgement on a system than asking the user if it is what they wanted.

So the above two things become of paramount importance and my designs are driven by them. How I do this is my choice but I have yet to find a perfect solution for code design. As long as it is logical and consistent, it doesn't really matter to be honest.

As I said earlier, even with domain knowledge object programming is not easy in C++ because it is not really intrinsic enough to the core syntax of the language. This is why C++ can look so complicated, when often it is not at all. This complexity can easily lead to mistakes, even for experienced users.

For example, COM is really as complicated as it is just so that you can implement a sort of run time binding to different interfaces and generically manage update and compatibility problems. Java can do this as standard and has very advance RTTI (Run Time Type Identification).

I think Java is quite well documented - but as you have just seen, the problem is more knowing where to look for the functions you need. However, the structure and naming of functions is generally very consstent and sensible - you can't ask for much more than that.
time is over.. we cant discuss anymore ..
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.