Re: [Lazarus] Best practices on using classes for subroutine libraries

2012-04-15 Thread Joao Morais
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

2012-04-14 Thread Sven Barth

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

2012-04-14 Thread Marcos Douglas
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

2012-04-10 Thread Hans-Peter Diettrich

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

2012-04-10 Thread Marcos Douglas
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

2012-04-10 Thread Frank Church
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

2012-04-10 Thread Marcos Douglas
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

2012-04-09 Thread Frank Church
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