If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.

How To Do It - Shared Class Variables Part III

For you consideration, this is a discussion
of shared methods, the use of properties, and
other implications for shared variables in
classes. These is the third of four parts
of the How To. Part IV will follow soon.

NOTE 1
Properties can not be shared. Therefore they only work for an
instantiated object.

NOTE2
Shared methods can only access shared variables of the class.

NOTE 3
Normal (nonshared) methods can acess both shared and nonshared
variables of the class. This is because the method exists within
the context of the instatiated object therefore any nonshared
variables of the class also exist.

NOTE 4
In this example, the constructor is a nonshared method so it can
access any variable shared or nonshared. Please note that the
constructor can also be a shared method but that's the discussion
for Part IV.

See Kathleen, I did finally get closer to discussing shared
constructors 8-).

NOTE 5
Send lngValue is a property of the class, it is not accessible
through the class name definition rather it can only be used
with an instantiated object of the class.

NOTE 7
Instantiate a instance of the class and pass an initialization value
to the constructor (nonshared NEW method in this example). At this
point I can access any shared or nonshared method of the class using
the instantiated object. I can also access any property of instantiated
object. Finally, I can access and pubic or public shared variable of
the class. Variable reference was covered in Part I of my How To for
shared class variables.

NOTE 8
Property is available through the instantiated object.

NOTE 9
Shared method is available through the instantiated object.

NOTE 10
Nonshared method is available through the instantiated object.

Re: How To Do It - Shared Class Variables Part III

mattias.dont.want.spam@mvps.org (Mattias Sjögren) wrote:
>Hi Patrick,
>
>>NOTE 1
>>Properties can not be shared. Therefore they only work for an
>>instantiated object.
>
>Wrong, a class *can* have shared properties.

Correct. But it's also worth noting that like other OO languages (ie Java),
shared members can't access non-shared members. The following would be an
error since m_X isn't shared also.

Public Class Class1
Public m_X As Integer

Public Shared Property X() As Integer
Get
X = m_X
End Get
Set
m_X = value
End Set
End Property
End Class

Re: How To Do It - Shared Class Variables Part III

Hi Rob,

Well you and Mattias have both gotten me that leaves Jeff and Kathleen 8-(
I'll post a correction. As I said to Mattias, I tried several variations
obvisionly not enough and I tried the Beta1 help (or lack of). I'll also
correct my sample slides I use in my presentations. Thanks 8-)

Pat

"Rob Teixeira" <RobTeixeira@@msn.com> wrote:
>
>mattias.dont.want.spam@mvps.org (Mattias Sjögren) wrote:
>>Hi Patrick,
>>
>>>NOTE 1
>>>Properties can not be shared. Therefore they only work for an
>>>instantiated object.
>>
>>Wrong, a class *can* have shared properties.
>
>Correct. But it's also worth noting that like other OO languages (ie Java),
>shared members can't access non-shared members. The following would be an
>error since m_X isn't shared also.
>
>Public Class Class1
> Public m_X As Integer
>
> Public Shared Property X() As Integer
> Get
> X = m_X
> End Get
> Set
> m_X = value
> End Set
> End Property
>End Class
>
>-Rob

Re: How To Do It - Shared Class Variables Part III

I really don't see how this encourages OOP and a clean coding style.
I realize that sometimes you just _have_ to have a global variable, but there's
always some sort of rule that governs the use of that variable and as such
shouldn't it be encapsulated in a property of a class that has the appropriate
scope in your project?

I can see how a class containing a bunch of shared methods could be particularly
useful for a utility method store, but this can be done in a module, except
where you'd want to compile these utilities into a dll.

Re: How To Do It - Shared Class Variables Part III

Burt,

Sorry my post response seems to have gotten lost in the ether world.
I'll try again.

Pat
>I really don't see how this encourages OOP and a clean coding style.

OOP doesn't say that you can't use a class containing only shared items
that you don't instantiate and a class containing global data does make
sense in many applications. What I was demonstrating were techniques
that just different. It can be said that using only shared items in
an uninstantiated class makes the programmer more aware of the special
nature of the data just as some can argue that its not the best way.
Your best way may not be the same as mine.
>I realize that sometimes you just _have_ to have a global variable, but
there's
>always some sort of rule that governs the use of that variable and as such
>shouldn't it be encapsulated in a property of a class that has the appropriate
>scope in your project?

Another way to skin a cat 8-).
>I can see how a class containing a bunch of shared methods could be particularly
>useful for a utility method store, but this can be done in a module, except
>where you'd want to compile these utilities into a dll.

Yes, it could but you and others may not know another method exists
that could at some day on some distant planet on some application make
your programming effort easier.
>please help me see how you reconcile these philosophies.

I have a simple philosophy for programming. Call it the Zen of Pat or
what every suites your fancy.

A programmer's job is to
(1) Develope algoritmic solutions of problems based on his skill and any
input (sometimes very little) from the client
(2) Program the solution it the appropriate tool. Generally, I use
VB.NET or VB6-- for the GUI portion with C/C++/C# for the busines
logic.
(3) Program the solution for Mack truck conditions. (I get killed by a
Mack truck driving home tonight and some poor untrained and unprepared
programmer has to pick up my code and get it running, and of course
the project is behind schedule and I leave for home with the program
blue screening but I need to get home even though I know what the
solution is because the series finale of StarTrek Voyager is on
tonight).
(4) Program the solution so I can figure out what I did 3 months ago. This
includes the use of comments and Hungarian notation. Naturally, I
made a few modifications where it really counts, to paraphrase Hans
Solo.
(5) Program to avoid paying for the same piece of ground a second time.
This means sometimes saving intermediate results for avoid repeated
function calls.
(6) Use state tables for problems that lend themselves to state
sequencing.
(7) Continue to retrain myself in the new tools (Net for instance)
(8) OOPs is just another developement in the effort to produce order from
the chaos of programming. Programming is still more art that science.
This is demonstrated by the ability of people to program without formal
programming training.
(9) If the shop I'm in has a set of rules then I obey them no matter if
they were written by an oger who last programmed in IBM 1401 autocoder.
By the way, I did, many moons ago.
(A) Note the hex number 8-). Progamming continues to evolve, I can be
a dinasour or flying with the eagles (see 7).
(B) Try not to get my ego involved in my programming. I can and do make
mistakes. If someone else finds them, they saved me time trying to
find the problem.
(C) There is life outside of programming. Computers are only allowed to
consume 16 hours of my time a day. I've got to draw a line someplace
or the computers would suck out the last bit of my marrow. Also being
a geek is fun but sex is still better 8-).

I hope you take these with a grain of salt and have as good a laugh as I
had writing them. These are not carved the clay tablets of Moses. I tried
to answer your questions but use of OOP is still up to up