Введение Глава 1 Глава 2 Глава 3 Глава 4 Заключение Литература Приложения
Приложения
Приложение A. Модели ООП и языки CLOS и Оберон-2
Таблица отношения моделей ООП G. Bosch [1] и B. Meyer [2] и языков программирования. Таблица взята из [5] и дополнена столбцом для языка Оберон-2.
Features: Essential Desirable Permissible Inadmissible
|
BOOP |
MOOP |
CLOS |
O2 |
routines as free subprograms exclusively as methods |
D P |
P D |
Y N |
Y N |
objects using relationships containing relationships reference semantics value semantics |
E E P P |
E E D D |
Y Y Y Y |
Y Y Y Y |
classes for abstraction with encapsulation as types as modules shared variables metaclasses documentation assertions generic |
E E P n/a P P P P P |
E E E E D P D D D |
Y Y Y N* Y Y Y N N |
Y Y Y N* Y N Y N N |
inheritance single multiple repeated redefinition |
E P P D |
E E E E |
Y Y Y Y |
Y N* N* Y |
typing strong weak static dynamic |
D P D D |
E I D E |
N* Y option Y |
Y N Y Y |
polymorphism overloading parametric |
D D |
E E |
Y Y |
N Y |
exceptions definable |
P |
D |
Y |
N |
memory management garbage collection |
P |
E |
Y |
Y |
persistence time-persistent objects space-persistent objects |
D D |
P P |
indir. N |
indirectly indirectly |
concurrency concurrent objects |
D |
P |
N |
N |
Пояснения к терминам:
routines
as free subprograms
subprograms may be defined independently of any class
exclusively as methods
all subprograms are defined as methods within a class
----------------------------------------------------------------
objects
using relationships
objects may make use of the service offered by other objects
containing relationships
object may contain other objects as part of their structure
reference semantics
it is possible to define and manipulate references to objects
value semantics
it is possible to refer to the value of objects, e.g. assignment, comparison
----------------------------------------------------------------
classes
for abstraction
class interfaces are defined independently to their implementation
with encapsulation
authentication and secrecy are enforced
as types
all classes have an associated type
as modules
classes comprises a basic unit in softwares physical structure
shared variables
it is possible to share a single variable among objects in a class
metaclasses
classes may be defined as instance of metaclasses
documentation
facilities exist to document classes and to extract this documentation
assertions
class semantics are defined by a set of axiomatic assertions
generic
class definitions may be parameterized by other class or subprograms
----------------------------------------------------------------
inheritance
single
classes may inherit the structure or behaviour of one other class
multiple
classes may inherit the structure or behaviour of more than one other class
repeated
it is possible to inherit from the same class in more than one way at once
redefinition
classes may redefine the implementation of inherited structure or behaviour
----------------------------------------------------------------
typing
strong
expressions are necessarily type-consistent
weak
expressions are not necessarily type-consistent
static
names are bound to types during compilation
dynamic
names are bound to types during execution
----------------------------------------------------------------
polymorphism
overloading
subprograms are distinguished by their argument and return types
parametric
methods may respond differently according to an object's class
----------------------------------------------------------------
exceptions
definable
it is possible to define program behaviour to failure
----------------------------------------------------------------
memory management
garbage collection
memory is automatically recovered after objects become inaccessible
----------------------------------------------------------------
persistence
time-persistent objects
objects may exist across invocations of manipulating programs
space-persistent objects
objects may be moved among the address spaces of distributed processors
----------------------------------------------------------------
concurrency
concurrent objects
object semantics are preserved within multiple threads of execution
Приложение B. Аксиоматика "хороших" систем
И увидел Бог все, что Он создал, и вот, хорошо весьма. И был вечер, и было утро: день шестой.
Быт. 1,31
И будет там большая дорога, и путь по ней назовется путем святым...
Ис. 35,8
Кто имеет уши слышать, да слышит!
Мат. 13,9
Полувековой мечтой всего программистского сообщества (да не дрогнет рука автора, выписывающего эти слова) является создание такой среды программирования, которая будет устраивать почти всех и работать почти на всех машинах. Как и любая другая N-вековая мечта (для N>=0.5), эта мечта с трудом поддается осуществлению и любое приближение к реализации ее должно рассматриваться как важный шаг вперед.
Переведем обе составляющие этой мечты на более профессиональный язык. Будем называть систему "хорошей", если она асимптотически осуществляет мечту.
Теорема 1. Любая завершенная система не является "хорошей".
Доказательство, к сожалению, требует слишком много места и выходит за рамки данного научного труда.
Замечание.
Хорошей иллюстрацией к данному утверждению может служить Вселенная, созданная Богом за 6 дней.
Конец замечания.
Следствие 1. Разработка "хорошей" системы должна продолжаться всегда.
Рассмотрим теперь проблему с другой стороны.
Аксиома 1. Все люди разные.
Аксиома 2. Но не совсем.
Замечание.
Эти факты (вероятно) смогут быть доказаны с точки зрения генетики, но в нашем случае спокойней считать их аксиомами.
Конец замечания.
Следствие 2. Так как машины делают люди, то все машины получаются разными.
Следствие 3. Но все-таки у них есть что-то общее.
Следствие 4. ***
Очень секретное замечание (перед прочтением закрыть глаза).
Следствие 4 опущено из соображений морали.
Конец очень секретного замечания (глаза можно открыть).
И, наконец:
Следствие 5. "Хорошая" система должна предоставлять возможности развития и адаптации под различные требования различных пользователей. Реализация "хорошей" системы должна опираться на общие свойства людей и машин и, одновременно, позволять учитывать специфические свойства и тех, и других.
Отдавая дань традициям, будем называть главное свойство переносимой системы "расширяемостью", когда речь идет о людях, и "переносимостью", когда речь идет о различных машинах.
В некотором смысле, любая программная система является расширяемой. Мы же будем называть расширяемой системой только такую систему, в которой при добавлении новых возможностей не возникает необходимость изменения базисных понятий и механизмов системы.
Берегитесь лжепророков, которые приходят к вам в овечьей одежде, а внутри суть волки хищные.
Мат. 7,15
Введение Глава 1 Глава 2 Глава 3 Глава 4 Заключение Литература Приложения