Re: [Lazarus] Best practices on using classes for subroutine libraries
On Sat, Apr 14, 2012 at 04:23, Frank Church vfcli...@gmail.com wrote: Is it possible to make them virtual and override them or replace them in descendant classes? {$mode objfpc} type tfooclass = class of tfoo; tfoo = class public class function m1: string; virtual; end; tbar = class(tfoo) public class function m1: string; override; end; class function tfoo.m1: string; begin Result := 'tfoo'; end; class function tbar.m1: string; begin Result := 'tbar'; end; var vclass: tfooclass; begin vclass := tfoo; writeln('1: ', vclass.m1); vclass := tbar; writeln('2: ', vclass.m1); end. Joao Morais -- ___ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
Re: [Lazarus] Best practices on using classes for subroutine libraries
On 14.04.2012 09:23, Frank Church wrote: On 10 April 2012 19:08, Marcos Douglasm...@delfire.net wrote: On Tue, Apr 10, 2012 at 12:49 PM, Frank Churchvfcli...@gmail.com wrote: On 10 April 2012 12:28, Marcos Douglasm...@delfire.net wrote: On Tue, Apr 10, 2012 at 1:07 AM, Frank Churchvfcli...@gmail.com wrote: When I need a variation in procedures (standalone, not a class or object procedure) I use across my applications, I often find it more convenient to create a copy the unit into the project folder and make the changes there. Sometimes they get merged back into the shared unit or not at all. I am thinking now of using classes with procedures, without any data in them, so that I subclass them in the projects where I need to change them. Are the some good examples and some known good working practices on working with procedures in this way? I do this. Sometimes I prefer encapsulate subroutines (LCL, RTL, 3rd etc) in static classes. TmyFoo = class public class procedure Exec; static; end; Do you have some examples to show how it is done? Are there some examples in the FCL/LCL etc In FCL/LCL I don't know if exists. My example: type TMsg = class public class procedure Info(const ATxt: string); static; end; implementation class procedure TMsg.Info(const ATxt: string); begin ShowMessage(ATxt); end; Using: begin TMsg.Info; end; I see that you declare your procedure as static. Is that the way they should be or is that your own preference? Is it possible to make them virtual and override them or replace them in descendant classes? I'd say it is his own preference. Static methods are like normal, global functions/procedures except they are located inside classes. You can even pass them to non-object procedure variables. If you want to override them you should leave out the static and declare them virtual (this works with class methods as well as with normal methods). Regards, Sven -- ___ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
Re: [Lazarus] Best practices on using classes for subroutine libraries
On Sat, Apr 14, 2012 at 4:23 AM, Frank Church vfcli...@gmail.com wrote: On 10 April 2012 19:08, Marcos Douglas m...@delfire.net wrote: On Tue, Apr 10, 2012 at 12:49 PM, Frank Church vfcli...@gmail.com wrote: On 10 April 2012 12:28, Marcos Douglas m...@delfire.net wrote: On Tue, Apr 10, 2012 at 1:07 AM, Frank Church vfcli...@gmail.com wrote: When I need a variation in procedures (standalone, not a class or object procedure) I use across my applications, I often find it more convenient to create a copy the unit into the project folder and make the changes there. Sometimes they get merged back into the shared unit or not at all. I am thinking now of using classes with procedures, without any data in them, so that I subclass them in the projects where I need to change them. Are the some good examples and some known good working practices on working with procedures in this way? I do this. Sometimes I prefer encapsulate subroutines (LCL, RTL, 3rd etc) in static classes. TmyFoo = class public class procedure Exec; static; end; Do you have some examples to show how it is done? Are there some examples in the FCL/LCL etc In FCL/LCL I don't know if exists. My example: type TMsg = class public class procedure Info(const ATxt: string); static; end; implementation class procedure TMsg.Info(const ATxt: string); begin ShowMessage(ATxt); end; Using: begin TMsg.Info; end; I see that you declare your procedure as static. Is that the way they should be or is that your own preference? Is it possible to make them virtual and override them or replace them in descendant classes? Static methods do not have Self implicit parameter. They are like normal procedure/function. Without 'static' works too, but the assembler generated gets better with static. To override you should leave out the 'static' to use 'virtual'. Marcos Douglas -- ___ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
Re: [Lazarus] Best practices on using classes for subroutine libraries
Frank Church schrieb: When I need a variation in procedures (standalone, not a class or object procedure) I use across my applications, I often find it more convenient to create a copy the unit into the project folder and make the changes there. Sometimes they get merged back into the shared unit or not at all. I use conditional compilation for such variations. Typically only for one new implementation, that can be turned on and off for testing purposes. The $DEFINEs are set and documented near the top of the unit, as an overview of available options. I am thinking now of using classes with procedures, without any data in them, so that I subclass them in the projects where I need to change them. That's another useful solution. DoDi -- ___ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
Re: [Lazarus] Best practices on using classes for subroutine libraries
On Tue, Apr 10, 2012 at 1:07 AM, Frank Church vfcli...@gmail.com wrote: When I need a variation in procedures (standalone, not a class or object procedure) I use across my applications, I often find it more convenient to create a copy the unit into the project folder and make the changes there. Sometimes they get merged back into the shared unit or not at all. I am thinking now of using classes with procedures, without any data in them, so that I subclass them in the projects where I need to change them. Are the some good examples and some known good working practices on working with procedures in this way? I do this. Sometimes I prefer encapsulate subroutines (LCL, RTL, 3rd etc) in static classes. TmyFoo = class public class procedure Exec; static; end; Marcos Douglas -- ___ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
Re: [Lazarus] Best practices on using classes for subroutine libraries
On 10 April 2012 12:28, Marcos Douglas m...@delfire.net wrote: On Tue, Apr 10, 2012 at 1:07 AM, Frank Church vfcli...@gmail.com wrote: When I need a variation in procedures (standalone, not a class or object procedure) I use across my applications, I often find it more convenient to create a copy the unit into the project folder and make the changes there. Sometimes they get merged back into the shared unit or not at all. I am thinking now of using classes with procedures, without any data in them, so that I subclass them in the projects where I need to change them. Are the some good examples and some known good working practices on working with procedures in this way? I do this. Sometimes I prefer encapsulate subroutines (LCL, RTL, 3rd etc) in static classes. TmyFoo = class public class procedure Exec; static; end; Do you have some examples to show how it is done? Are there some examples in the FCL/LCL etc Marcos Douglas -- ___ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus -- Frank Church === http://devblog.brahmancreations.com -- ___ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
Re: [Lazarus] Best practices on using classes for subroutine libraries
On Tue, Apr 10, 2012 at 12:49 PM, Frank Church vfcli...@gmail.com wrote: On 10 April 2012 12:28, Marcos Douglas m...@delfire.net wrote: On Tue, Apr 10, 2012 at 1:07 AM, Frank Church vfcli...@gmail.com wrote: When I need a variation in procedures (standalone, not a class or object procedure) I use across my applications, I often find it more convenient to create a copy the unit into the project folder and make the changes there. Sometimes they get merged back into the shared unit or not at all. I am thinking now of using classes with procedures, without any data in them, so that I subclass them in the projects where I need to change them. Are the some good examples and some known good working practices on working with procedures in this way? I do this. Sometimes I prefer encapsulate subroutines (LCL, RTL, 3rd etc) in static classes. TmyFoo = class public class procedure Exec; static; end; Do you have some examples to show how it is done? Are there some examples in the FCL/LCL etc In FCL/LCL I don't know if exists. My example: type TMsg = class public class procedure Info(const ATxt: string); static; end; implementation class procedure TMsg.Info(const ATxt: string); begin ShowMessage(ATxt); end; Using: begin TMsg.Info; end; Marcos Douglas -- ___ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
[Lazarus] Best practices on using classes for subroutine libraries
When I need a variation in procedures (standalone, not a class or object procedure) I use across my applications, I often find it more convenient to create a copy the unit into the project folder and make the changes there. Sometimes they get merged back into the shared unit or not at all. I am thinking now of using classes with procedures, without any data in them, so that I subclass them in the projects where I need to change them. Are the some good examples and some known good working practices on working with procedures in this way? -- Frank Church === http://devblog.brahmancreations.com -- ___ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus