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

Reply via email to