Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология программирования_испр.doc
Скачиваний:
37
Добавлен:
09.02.2015
Размер:
2.51 Mб
Скачать

5.4. Другие объектно-ориентированные системы программирования

Язык C++ является сейчас наиболее распространённым объектно-ориентированным языком. Однако существуют и другие популярные объектно-ориентированные языки и системы программирования. Здесь мы кратко рассмотрим языки Eiffel и Smalltalk.

5.4.1. Реализация классов

Определение класса Window на языке Eiffel мало отличается от соответствующего определения на языке C++:

class WINDOW

export

add_box, add_circle, clear_selections, cut_selections,

group_selections, move_selections,

redraw_all, select_item, ungroup_selections

feature

xmin, ymin, xmax, ymax: REAL;

Create (x0, y0, width, height: REAL) is body end;

add_box (x, y, width, height: REAL) is body end;

add_circle (x, y, radius: REAL) is body end;

add_to_selections (ashape: SHAPE) is body end;

clear_selections is body end;

cut_selections is body end;

group_selections: Group is body end;

move_selections (deltax, deltay: REAL) is body end;

redraw_all is body end;

select_item (x, y: REAL) is body end;

ungroup_selections is body end;

end -- class WINDOW

Все свойства (feature) класса (соответствуют членам класса в языке C++) считаются приватными, если только они не объявлены явно как общедоступные: все общедоступные свойства перечисляются в разделе export. Свойство Create (аналог конструктора класса в языке C++) всегда является общедоступным. Остальные особенности синтаксиса понятны и без пояснений.

Язык Smalltalk является языком интерпретируемого типа: программа в системе Smalltalk не компилируется, а переводится в интерпретируемое специальным интерпретатором внутреннее представление. Это позволило сделать систему Smalltalk интерактивной: программист имеет доступ к программе (может, например, изменять её) во время её интерпретации, что очень удобно при разработке и отладке программы, но, как известно, уменьшает её эффективность, так как интерпретация программы сопряжена с дополнительными накладными расходами.

Определение класса Window на языке Smalltalk имеет следующий вид:

class name Window

superclass Object

instance variables xmin, ymin, xmax, ymax: REAL

class methods

instantiating

createAt aPoint of Width: width ofHeigt: heigt

instance methods

adding shapes

addboxAt aPoint ofWidth: width ofHeigt: heigt

addCircleAt aPoint ofRadius: radius

  refreshing window

redrawAll

  manipulating selections

clearSelections

cutSelections

groupSelections

moveSelectionsBy: deltaPoint

selectItemAt: aPoint

ungroupSelections

private

addToSelections: aShape

Все классы языка Smalltalk являются подклассами системного класса Object, что позволяет использовать принадлежащие им по наследованию системные операции системы Smalltalk, определённые в классе Object. Строки в описании класса, выделенные курсивом, определяют категории методов. Они служат только для структурирования набора методов. Методы, включённые в категорию private, являются приватными и не доступны извне класса. Чтобы сделать атрибуты приватными, следует не определять методы для запроса и установки значений атрибутов. В системе Smalltalk определён системный метод @, который объединяет пару числовых значений в одно составное значение. Это позволило вместо двух переменных x и y (координат точки) использовать в нашем примере одну переменную aPoint, представляющую обе координаты точки (x,y). Операция присваивания значения (3,4) переменной aPoint с использованием метода @ имеет вид:

aPoint <- 3 @ 4