On Fri, 14 Aug 2009, Graeme Geldenhuys wrote:
Michael Van Canneyt wrote:
This is the world upside down. Better tell us exactly why you think
this must be possible. the 'Sometimes there is a valid design for
something like that' is not an argument at all. Maybe there are other
- more valid - ways to accomplish what you want.
I can give you loads of examples where I had to implement workarounds in
Object Pascal to get around that "limitation".
Have ever tried to write code in a similar fashion as Java does?
No, because I write object pascal, not Java.
One class
per unit. You will hit that issue very quickly. What about having two-way
referencing in objects: Customer.GetOrders and Order.GetCustomer. Or
Many-to-Many relationships.
The two way referencing can easily be solved with a forward class
declaration, where the implementation follows in the interface section.
See TCollection/TCollectionitem.
For all these you need to revert to Interfaces or use base classes (TObject
or TtiObject) and do lots of casting in the implementation section. These are
all workarounds for a language (compiler) limitation, which does not exist in
other languages like C++ or Java. Alternatively you have to use one HUGE
model.pas unit and all your various business classes in there - and maybe
even structured via include files and have lots of forward declaration at the
top of the model.pas unit. Problem then is that any class can reference any
Private or Protected fields in other classes. :-(
If classes are so intertwined, then it seems only natural to put them in 1
unit IMHO. The private/protected issue is valid, though.
Which is probably why Borland introduced 'Strict private' and 'Strict protected'.
Michael.
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus