Определение класса Window на языке Eiffel мало отличается от
соответствующего определения на языке C++ (сравните с п.
5.3.1): 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 ofWidth: 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
|