Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / New Users / July 2006

Tip: Looking for answers? Try searching our database.

Data structure and exception

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Lloyd Dupont - 09 Jul 2006 08:50 GMT
I'm attempting to write a fairly complex data structure.

One part of the complexity is that all 8 data operations it supports
delegate some code to virtual method.

This is by design because I want the user to subclass the data structure and
be able to prevent changes to happen. and / or I want to notify observers.

The unfortunate side effect is: it seems there are no simple way to have all
user code run at the begining or at the end of the code.
Hence some user code might be called in the middle of an operation and cause
an unrecoverable error. (i.e. corrupt the data structure).

Do you think it's acceptable?

I am thinking there are 2 possibilities:

1. it's ok. Warn the user (in the documentation), these are critical data
method, mess them, mess the data!

2. data structure should be fool proof, stack all user change in a class for
this purpose and run them at the end

what do you think?
Lloyd Dupont - 09 Jul 2006 10:50 GMT
do not worry, I think I solved it...

> I'm attempting to write a fairly complex data structure.
>
[quoted text clipped - 21 lines]
>
> what do you think?
Carl Daniel [VC++ MVP] - 09 Jul 2006 15:00 GMT
> I'm attempting to write a fairly complex data structure.
>
[quoted text clipped - 20 lines]
>
> what do you think?

A good approach in situations like this is to separate the functionality of
your class from the extensibility points of your class.  Rather than:

class Base
{
   public vitrual void A() {}
}

use:

class Base
{
   public void A()
   {
       // stuff that comes before the extension point
       // (e.g. check invariants and pre-conditions, do base-class
processing)

       OnA();

       // stuff that comes after the extention point
       // (e.g. check invariants and post-conditions)
   }

   protected virtual void OnA() {}
}

This way, your clients override OnA, but not A itself.  You, as the
designer, retain control over where client code is inserted, so you can
still maintain (and check) invariants in the base class and know that
someone deriving from your class can't circumvent your checks by forgetting
to call the base class version (or by calling it in the wrong place).

-cd
Lloyd Dupont - 10 Jul 2006 06:00 GMT
Hi Carl, thanks for answering!

Anyway it's already like that but a bit more complex:

class Data
{
   public void A()
   {
       B(); // if B() fail, C() will never happen
       C();
       OnA();
   }
   public virtual OnA() { /* potential adverse user code */ }

   public void B()
   {
       // stuff ...
       OnB();
   }
   public virtual OnB() { /* potential adverse user code */ }

   public void C()
   {
       // stuff...
       OnC();
   }
   public virtual OnC() { /* potential adverse user code */ }
}
// OnA(), OnB(), OnC() can't be removed, they are used by other part of the
API to track elementary change

However I was able to get around it.
All user notifications happen now in such a way that user exception let the
data in an unexpected, yet correct, state.
Although observers might get corrupted in the process, but it's not as
important/bad.

I no longer try to undo partial change (which could led to other exceptions
and I had no idea how to handle that correctly).

>> I'm attempting to write a fairly complex data structure.
>>
[quoted text clipped - 56 lines]
>
> -cd
Pop Catalin - 10 Jul 2006 10:59 GMT
The subject of objects invariats is quite a complex one. The Spec#
experimental language tries among others to solve this problem.

http://research.microsoft.com/specsharp/  You can find some very
interesting reading on the matter here.

I recomend starting with this slide
http://research.microsoft.com/specsharp/papers/FM2005.ppt It explains
very clearly the problems with object invariants and the ways thei can
be solved.

Cheers!

> I'm attempting to write a fairly complex data structure.
>
[quoted text clipped - 20 lines]
>
> what do you think?
Lloyd Dupont - 11 Jul 2006 07:10 GMT
interesting, thanks!

Signature

Regards,
Lloyd Dupont

NovaMind development team
NovaMind Software
Mind Mapping Software
<www.nova-mind.com>

>
> The subject of objects invariats is quite a complex one. The Spec#
[quoted text clipped - 39 lines]
>>
>> what do you think?

Rate this thread:







Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.