Re: Create a JAVA Client/Server app in 5 Minutes
Andreas Otto wrote:
Your site has many spelling and grammar errors. For example, the word
"Java" referring to the computer language is capitalized.
"Capitalized" means that the first letter is upper case.
The Java code does not follow the coding conventions, and doesn't use
standard Javadocs for its documentation.
yes, for documentation I use "doxygen" the reason is that it is used
for document other "languages" like "C" as well. I'll need a language
independent documentation tool. I know that JAVADOC [sic] is more perfect
than doxygen for JAVA [sic] documentation. The problem is the focus on
JAVA [sic]
But it's a Java project! And that still doesn't address the fact that your
Java code flouts the naming conventions rather severely.
Your documentation calls constructors "member functions".
That's not a nice story and I thing it is a problem of JAVA [sic] and not of me
No, it's you. Constructors are not functions, and the canonical term for
functions in Java is "methods", though I am fine with "functions" myself.
Just a short abstract
to create a new object in JNI you have the "NewObject" JNI function
nice but this requires a known constructor ....
Which is still not a method.
now it becomes tricky... you can not put a constructor in an interface
I read a lot about this JAVA [sic] issue during the last weeks in the internet
How is that an "issue"?
and I read about "Factory" methods and so on ... everything used just
to avoid a constructor in an interface ... well most discussion's end
with a collection of people writing very nice sentences with words of
JAVA [sic] academic languages which I don't understand and it seems for
me they discuss problems which only exist because of the restriction
from above.
That's not a restriction, nor a problem. Interfaces don't have constructors
because they don't define concrete types and therefore cannot be instantiated
as such. Interfaces define a contract to be met by fully-constructed
instances of an implementing class.
One does not always have to use factory methods. Constructors are fine for
many purposes. The guideline is to consider using a factory method that hides
construction, not to require it.
You should study what people say in those discussions until you do understand it.
my one line solution was
1. define a member function is the interface to act like
a constructor (this is the "ServerConfig" member
function from the "IServer" interface
2. this function is known and can be used in the JNI code
It doesn't change the fact that you have constructors documented as "member
functions", e.g., "MsC.Main". Constructors are not methods.
Some of the docs say things like, "Definition at line 95 of Main.java" -
wtf?
are the links are broken ?
Links? There isn't supposed to be any line-number information in Javadocs.
Javadocs are for people who are *not* reading source. Certainly Javadoc links
are not to be mandatory - one should be able to read the doc and get the
necessary knowledge without having to navigate any links. Javadocs must not
assume the availability of source code.
this stuff is the generated output of the doxygen tool
All the more reason to use the Javadoc tool, the correct tool, instead of one
that clearly generates the wrong output.
The class and method names are weak and overly abbreviated.
What is an "MsC", for example?
Your minimal server example doesn't place the class in a package, a very
bad practice.
this is just an example with less overhead as possible.
Packages are not "overhead".
I expect that every JAVA [sic] programmer use this in a right way to
in-operate correctly with JAVA [sic]
but I'll add the package as required
Not required but strongly advisable. If you want Java programmers to use your
project, you have to show that it embodies good Java programming practice.
You embody some less-than-best practices such as declaring a 'data' member
as a concrete type 'ArrayList' rather than the interface type 'List', and
it looks like you have code that does its work in the object constructor,
judging by the filter example.
can you give me an example what I have to improve my code ?
Suboptimal:
class Foo
{
ArrayList <Bar> bars = new ArrayList <Bar> ();
...
Good:
class Foo
{
List <Bar> bars = new ArrayList <Bar> ();
...
Use Javadoc, not doxygen. Study the code conventions document on java.sun.com
- your (mis)use of case makes package names and method names look like class
names. Don't be afraid to use meaningful identifiers.
--
Lew