Tcl 9.0/Tk9.0 Documentation > Tcl Commands, version 9.0.0 > abstract

Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

NAME

oo::abstract — a class that does not allow direct instances of itself

SYNOPSIS

package require tcl::oo

oo::abstract method ?arg ...?

CLASS HIERARCHY

oo::object
oo::class
oo::abstract

DESCRIPTION

Abstract classes are classes that can contain definitions, but which cannot be directly manufactured; they are intended to only ever be inherited from and instantiated indirectly. The characteristic methods of oo::class (create and new) are not exported by an instance of oo::abstract.

Note that oo::abstract is not itself an instance of oo::abstract.

CONSTRUCTOR

The oo::abstract class does not define an explicit constructor; this means that it is effectively the same as the constructor of the oo::class class.

DESTRUCTOR

The oo::abstract class does not define an explicit destructor; destroying an instance of it is just like destroying an ordinary class (and will destroy all its subclasses).

EXPORTED METHODS

The oo::abstract class defines no new exported methods.

NON-EXPORTED METHODS

The oo::abstract class explicitly states that create, createWithNamespace, and new are unexported.

EXAMPLES

This example defines a simple class hierarchy and creates a new instance of it. It then invokes a method of the object before destroying the hierarchy and showing that the destruction is transitive.

oo::abstract create fruit {
    method eat {} {
        puts "yummy!"
    }
}
oo::class create banana {
    superclass fruit
    method peel {} {
        puts "skin now off"
    }
}
set b [banana new]
$b peel               prints 'skin now off'
$b eat                prints 'yummy!'
set f [fruit new]     error 'unknown method "new"...'

SEE ALSO

oo::define, oo::object

KEYWORDS

abstract class, class, metaclass, object
Copyright © 2018 Donal K. Fellows