comp.lang.ada
 help / color / mirror / Atom feed
From: "David Crocker" <dcrocker@eschertech.com>
Subject: Re: OOD in Ada?
Date: Tue, 25 Jun 2002 14:32:26 +0100
Date: 2002-06-25T14:32:26+01:00	[thread overview]
Message-ID: <3d1870b0$0$8507$cc9e4d1f@news.dial.pipex.com> (raw)
In-Reply-To: ba162549.0206241203.1d375611@posting.google.com

Let me give you and others who have replied to my posting a real example of
an OO system where the "withing" problem occurs and I can't see an easy way
out of it.

A compiler is being written. The compiler has to know about objects of class
Expression and Statement. Each of these is actually an abstract class with
many descendents (because there are many types of expression etc.).

Many types of statement contain expressions (e.g. assignment statements),
therefore these Statement subclasses need to know about Expression.

Many of the expression classes also need to know about statements. For
example, an Expression has a method to generate statements to evaluate it at
run-time. The language I am compiling also allows a few types of statement
to be embedded within an expression.

What I am left with is:

Class Expression need to declare an abstract method that returns a Statement
(or another class that encapsulates a Statement). Many descendents of
Expression refer to particular descendents of Statement (e.g.
ConditionalExpression will refer to ConditionalStatement).

Many descendents of Statement contain variables of type Expression (or
Expression'class in Ada).

There is no way I want to put all the expression and statement classes in
one package! The natural way to construct the project is to put each class
in its own file (and hence package, if I am using Ada).

Things get even worse when I introduce TypeExpression.

Yes, there are lots of cross-references between classes in this application,
but these arise naturally from the nature of the problem.

--
David Crocker
Escher Technologies Ltd.
www.eschertech.com


"Kevin Cline" <kcline17@hotmail.com> wrote in message
news:ba162549.0206241203.1d375611@posting.google.com...
> "David Crocker" <dcrocker@eschertech.com> wrote in message
news:<3d135676$0$8511$cc9e4d1f@news.dial.pipex.com>...
> > I know that Ada95 tries to support O-O development, but from my
perspective
> > as an OO developer but Ada novice, it appears to me that any attempt to
> > implement a large OO design in Ada will run into the following problems:
> >
> > 1. The infamous "withing" problem (i.e. it is not possible to declare 2
> > classes A and B, each in its own package, such that A has a method
taking a
> > paremeter of type "access B", and B has a method with a parameter of
type
> > "access A");
>
> It's possible to do this in C++ but it's seldom a good idea.  Instead
> one should declare all mutually dependent classes in a single header
> file, and implement them in a single source file.
>
> The Java requirement of a separate file for each class forces one
> to physically separate classes that aren't really separable.
>
> Excessive inter-class dependencies make many large OO programs
> almost unmaintainable.
>
> >






  reply	other threads:[~2002-06-25 13:32 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-06-21 16:39 OOD in Ada? David Crocker
2002-06-21 17:20 ` Pat Rogers
2002-06-21 19:37   ` Ed Falis
2002-06-23  3:05   ` Ted Dennison
2002-06-23  7:03     ` tmoran
2002-06-24 21:41       ` Ted Dennison
2002-06-24 14:19     ` Stephen Leake
2002-06-21 17:22 ` Marin David Condic
2002-06-22  4:42 ` Jeffrey Carter
2002-06-22  9:18 ` Dr. Michael Paus
2002-06-22  9:47   ` Pascal Obry
2002-06-22 13:11     ` Dr. Michael Paus
2002-06-22 13:46       ` OOD in Ada? Correction Dr. Michael Paus
2002-06-22 18:21         ` Simon Wright
2002-06-28 23:57         ` Randy Brukardt
2002-07-09  8:45           ` Preben Randhol
2002-07-09 17:12             ` Mark Biggar
2002-07-09 19:40             ` Randy Brukardt
2002-06-23  3:33   ` OOD in Ada? steve_H
2002-06-23  4:55     ` Jim Rogers
2002-06-23  5:33       ` achrist
2002-06-25 18:00       ` Georg Bauhaus
2002-06-25 18:55         ` Marin David Condic
2002-07-07 18:19           ` Daniel Dudley
2002-06-23  7:46     ` Dr. Michael Paus
2002-06-24  5:06       ` steve_H
2002-06-23 19:26   ` Chad R. Meiners
2002-06-22 22:47 ` Dmitry A.Kazakov
2002-06-24 20:03 ` Kevin Cline
2002-06-25 13:32   ` David Crocker [this message]
2002-06-25 13:58     ` Marin David Condic
2002-06-26 18:16       ` tmoran
2002-06-26 18:47         ` Marin David Condic
2002-06-27 18:23           ` tmoran
2002-06-28 13:09             ` Marin David Condic
2002-06-26  0:59     ` Hyman Rosen
2002-06-26  4:57       ` Jim Rogers
2002-06-26 12:49       ` Marin David Condic
2002-06-26  9:01     ` Fraser Wilson
2002-06-29  0:08       ` Randy Brukardt
2002-07-01 11:50         ` Fraser Wilson
2002-07-05 20:02     ` Stephen J. Bevan
2002-07-09 19:19 ` Craig Carey
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox