Make 'abstract' mandatory if the class is intended to be abstract, absence of 'abstract' means "not abstract"

Gide Nwawudu gide at btinternet.com
Tue Apr 29 03:00:46 PDT 2008


vote++

On Mon, 28 Apr 2008 10:11:23 -0300, Ary Borenszweig
<ary at esperanto.org.ar> wrote:

>A class can either be abstract or not abstract. Currently in D, if you 
>don't mark a class as abstract, it can still be it if it contains an 
>abstract method:
>
>class Foo {
>	
>	abstract void someAbstract();
>	
>	void nonAbstract() {
>	}
>	
>}
>
>When designing a class, you have in mind whether the class is going to 
>be abstract or not. If it's not going to be abstract, you want the 
>compiler to help you by telling you "You made a mistake. This class is 
>still abstract because you didn't implement method foo".
>
>So I want to extend Foo with a class Bar, but I want Bar to be not abstract.
>
>class Bar : Foo {
>}
>
>I compile, and it gives no error, of course. But I want there to be an 
>error there. The only way I can get an error is by making a dummy 
>function that instantiates Bar:
>
>void blah() {
>	Bar bar = new Bar();
>}
>
>main.d(14): Error: cannot create instance of abstract class Bar
>main.d(14): Error: function someAbstract is abstract
>
>The problems with this appraoch are two:
>  - You have to make a dummy function to check whether you implemented 
>Bar correctly.
>  - You get two errors for each instantiation of Bar, if it's abstract 
>(ugly).
>
>Why not make "abstract" mandatory for a class if it's intended to be 
>abstract, and the absence of "abstract" to mean "not abstract"? Java 
>works this way, and I think it is for the reasons I mentioned.
>
>Another advantage is that just by seeing the start of class definition 
>you can tell whether a class is abstract or not. You don't have to see 
>if any method is marked as abstract, or go to the superclasses to see if 
>there is a method that is still not implemented.
>
>(also, it would be nice if the compiler could tell you all the methods 
>that still need an implementation, rather than just one)



More information about the Digitalmars-d mailing list