������������� ������� ������������ Eiffel �� ���������� ������������ void safety (eiffel security)
�������� �����: eiffel, security, (����� ������� ���������)
�����: croster <>
Newsgroups: email
Date: Mon, 13 Feb 2012 17:02:14 +0000 (UTC)
Subject: ������������� ������� ������������ Eiffel �� ���������� ������������ void safety
����� ������������ ������ �� ����������: http://doc.eiffel.com/isedoc/uuid/689f62b2-5675-5ab6-cd47-d891cf3d484d
PDF-������ ��������: https://www.opennet.ru/soft/VoidSafety.pdf (���������� �� 25 ���� 2012 �.)
������� �������� ��������:
attached - �������������
detachable - ������������
generic parameter - ������������� (�������� ������)
void safety - ������������
void - ��������������
CAP - ����������������� ������� ������������ (���)
���������. ��� �������������� �������� ������ � �� ����� ����������
����� ���� � ��������������� �������� (null � ������������ C/C++, Void
� ������������ Eiffel). ���������������� ��������� ��� ���� ��������
������������� ������� ���������, ��� �������� � ������� �������
����������. � ������ ����������� ������� ������������ ��, � �����
������� ���� �������� � ����� Eiffel �� ������ ������� ������������� �
������������ �����, � ����� ����������������� �������� ������������.
������������ ������� ���������� � ��� ������������ ����������� �����,
�� ���������� ����������, � ����� ��������� ����������� � ����������
���������� � ����������� ����� Eiffel.
������������ - �����������, �����������, �����������
����������
1. �����������
1.1 ����������� ���������
1.2 ��, �� ���������� ����������
1.3 ���������� ��
2. �������� ��������� ������������
2.1 ����������������� ������� ������������ (���)
2.2 ��������� ������������ (���� �������)
2.3 ������������� � ������������ ����
2.3.1 ������������ � ���������������
2.4 ������� �������������
2.5 �������������������� ��������
2.6 ������� ���������������
2.7 ���������� ��������
2.8 ������� ��� ���������� �������
2.9 ������� ��� ���� ARRAY
1. �����������
� Eiffel �������� �������� ������� �������� ��. ����������
������������, ��� � ����������� ���������, - ��� ��� ���� �����������
��� ��������� �������� ��. ���������� �� �������� �� ������ �������
���������� �� �������������� �������, � ������������� ����� �������,
��� ��, � ������� ����� ������ �����������. ����� �������� �������� ��
����������� ����������. ����������� ������������ �����
��������������� ��� ���������� ������� ����� � ��� ��������� ���
����������� ���������, ��� ��� �������� ��� ����������� ������������
������������ � ������� �����.
1.1 ����������� ���������
��������, ��� ����������� ��������� ��������� ����� ����� ������ ��.
��� ����������� ����� �������� �� ����� ���������� ������� ����
x.f(a)
����� ����� ���������� �������� ���������� �� ����� ����������, ����
��� x �������� ��������� f, � ����� ���������, ������������ ����� a,
��������� �� ���������� � ����������� ����������� f, � ����� ����������
�� ����� � ����������� �����������.
� ���������� �������������� ������, ����� ��� Eiffel, ����������
����������� ������������� ������������� ��������, ��� ������� ���������
f �� �������� � �������, �������������� � x. ���� �� �����-����
��������������� �� ����� Smalltalk, �� ������ ���� ������� � �������
��������� ����, ������� ����������� ��� "��������� �� ����������". ���
���������� ������, ��� Smalltalk �� �������� ���������� ��������������
������.
1.2 ��, �� ���������� ����������
����������� ��������� ��������� ��������������, ��� � �������������
������� ���������� ������������ ��������� f, ������� ����� ����
�������� �� ����� ���������� � x. �� ��� �� ��������� ���������, ��� �
����� ����� ���������� x.f(a) ����� ������������ ������, � ��������
����������� x.
��� �������� �� ��������� ��� Eiffel. ������ �����, �������
������������ ��������� ������ �� �������, ����� ��������� ������������
������ ������� ����������. ���� �� �������� � Java � .NET, �� �����
��������� ���������� NullReferenceException. ������ ��� ������ ��������
� ����� ������������ ���������: "������ �� ������ �� ����������� ��
��������� �������". � Eiffel �� ������� ��������� "����� ���������� ���
�������������� ����". ��� ������� ������ ������� ���������� ��, ��
����������� ����������.
����������: ���� ��� ����� ����� �������� ����� ���������� �
������������ ������, �������� ����� �� ����������� Eiffel,
������������ ������ ���������� Eiffel.
�������, ��� �� �������� ��������� ��� ����������� �����������
(expanded) �����, ��� ��� ��� ���������� "���������������" ������
������������ ��������. ������ ���������� ��������� ��� �� ������ ��
����������� �����. ������ �������� ������� � ����� ������
������������������, � ����� ����� �������������. ��������, ����������
����������, ������� ����� ��������� � �������������. ����� ��
���������� ����������, ��� ���������� ����� ���� ����������
������������� ����������� �����, ��� ��� ������ ���������� ����� ����
���������. � ������ ������� ��������� ����������� ����� ���������
������ ������������� ����������� ������. ������� ������ ����������, ��
�� ������ ��������� �������.
1.3 ���������� ��
���������� �� - ��� ����� ��, � ������� ����������, ���������
����������� ������ ����, ����� ���� �������� ����, ��� �� �����
���������� ��� ���������� ���������� � ������, ��� ������ ����� �����
������������� � ��� ������. ��� ��������, ��� ����� ����������
x.f(a)
�������� ���������� ������ � ������, ���� �� �������������, ��� x �����
����������� � �������, ����� ���������� ���������� ������.
����������. ��� ������� ���������� �������� ����, ��� �������� �������
�������� ������������. � ����������� ���������� ���������� � ������
�������. ���������� ����������� ���� ������ ������������ �����
���������� � ��������� ISO/ECMA, ��������� ������.
���� �� ��������� ��� �������, �� ������ ����� ��������� ��� ����������
� �������������� ����� �������.
2. �������� ��������� ������������
���������� ����������� ��� �������� ����������� ��. ������ �� ��� �����
�������� ������ �����. �������� ���� ��������� ������� �����������
������ � ����� ������ �����������, �� �������� �� ������� ��������
����, ��� ��� �������� ����������.
��� ������ ���������� ��������� ������������ ��������.
����� ������������� ������� ������������ ������� ����, ���� ���������
��������� �������������� ������. ������ ��� ��������� �� ��������. Void
- ��� �������� ����������, �������� �� ������ ���������, ����� ��� void
������ � ����������. ������� �� ������ ��������� void, �� �������
������������.
��� ���� ��������� ���� - ��������� ���������� ������� ��� ������ ��
���. � ���� ������ ����������� ����������� ����������� �������
��������� ������� ��� ����, ����� ���������������� ��� �������������
���� ���������� � ����������� ������� � ���������, ��� ������
������������ ��������� ����� ���������� ��� ������ �� �������������
������.
�ӣ �������� � ����, ��� ���������� ����������� ������������ ��������
��� ������ �����������. �� ���� ������ ���� � ��������� ��������.
2.1 ����������������� ������� ������������ (���)
��������, ��� � ��������� ������������ �������� ���� ������ �� �����
��������� �������� void. ��� ������� ��� ��������, �� �������� �� ��� -
����������������� ������� ������������ (Certified Attachment Patterns).
���������� ������� ������, ��������� �������� ������ ���� �������������
�� ����� Eiffel.
if x /= Void then
-- ... ����� ���������, �� ���������� ������������ ������ x
x.f (a)
end
�������������� �������� �����������, ��� x �� ����� void. �� ��� ���,
���� ��� ������������ ������ x, ��������� f ����� ���� �������� � x �
��������� ����, ��� x �ӣ ����� �����������. �����, ��� ��� �����
���������� �� ����� ����������. ����� ��������, ��� ���� ������ ����
�������� ��� ��� x.
������� ��������, ��� � ���� ������� (� ����� � ������� ���) x �����
���� ������ ��������� ���������� ��� ���������� ����������. x �� �����
���� ��������� ��� ���������� (�� ����������� ������ ������,
�������������� �����). ���������������� ������ � ��������� ������ ��
����� ���� �������� ����� ��� ���������� ����, ��� �� ����� ����
��������� void ����� ���������� ������������, ��������� ��������������
������������ ��� ���� ������ �������. � ������� 2.3 ����� ��������, ���
��� �� �������� ������������, ��� ����� ���������� �������.
����������. �������������� ���������� � ��� ����� ����� � �������
"�������������� ���������� � ���".
������ "�� ���� ������� ���" �������� ���������� � ���, ��� ����� ���������� ��� � ����.
2.2 ��������� ������������ (���� �������)
� ����� ������ ������������, ��������� ������������ ��������� ���
�������. �� ��������� ��������� � ���, ��� ������ ��������
�������������, � ����� ������������ ���������� ������ � ��������,
������������� � ��������� ������. ����� �� ��������, ��� ���
if x /= Void then
-- ... ����� ���������, �� ���������� ������������ ������ x
x.f (a)
end
�������� ��� ��� ������ ���������� �� x ������ � ��� ������, ���� x
�������� ��������� ���������� ��� ���������� ����������.
��������� ��������� ������������, �� ����� ��������� ���� ������� ���
����������. ��������� ������������ - ��� ��������� ����������� ����
(BOOLEAN), � ������� �������� ����� �������� �� ������: "x �����������
� �������?" ���� ��� ���, �� �� �������� ����� ��������� ����������,
������������� � ���� �� ������ �������, ��� � x, � ���� ����������
����� ��������� ������ �����������.
if attached x as l_x then
l_x.f (a)
end
� ���� ������� x ����������� �� ������������ � �������. ���� x
�����������, �� ����� ��������� ���������� l_x ������������� � ���� ��
�������, ��� � x. ������ ����� ���� ��������� �����������, ���� ���� x
�������� ��������� ������. ��������� ������������ �������� ��� �����
���, ��� ��� ������������� ����� �������� ����, ��� ���� ������ ��
����� ����� void.
����������. ��������� ������������ ����� ������ ����� � ����������.
��������� �� ���� ���������� �����.
������������ �������� ��������� ���������� ������� ���� ��������
���������� ������������� ��� ��� ���������� ������������ ������ ���,
����� ���������� ��������� ��������� � ������ �� ������. ������ �����
������ �����������, ��� ��� �� ��������� � ������� �����������
������������� ���� �� Eiffel.
2.3 ������������� � ������������ ����
������ ����, ����� �������� ������ ����� ����������, Eiffel ���������
�������� ����� ���������� �������������� ����. ��� ������ ����������
������� ����� Eiffel.
�� �������� ������������ ������������, � Eiffel ����� ���������
���������� ����� �������� �������� Void. ����� �������, ��� ����������
��������������� ��� ������������.
������� ������� Eiffel ������������ ������� ������������� �
������������ �����. ����� ��������� ���������� �������������� ����, ���
� ��������� �������, �� ���������� ������������� ������������ ��
�������� Void, ��� ���� ������, ��� ����� ��������� �������� Void.
my_attached_string: attached STRING
����� ������, ��� ��� ������ ��������� ������������� �����, ��� �����
�������������, ��� ����� � �������������� ���� �� ����� ���������� ��
����� ����� �����. ���� �� ������ ���������� ���� ��������������
�������������, �� ��� ���, ��� ����������� �� ��� ���������� �������
����.
������ ����� ������� ����������������, ��� ��� ������ ����������
��������� ������������� ������, ������� �������� Void.
����� ���������� ��������� Void � �������� ��������, ���������� �����
������������ ������� ������������� ����, ��� � ��������� �������.
my_detachable_string: detachable STRING
��� �� ��������, ��� ������ ���������� ������ ��������� ��������
�������������� ��� ������������� ����. ��������� ����������, ��
���������� ��������. ������� �� ����� ���������� ������������� ���
������������� ��� ������������, ������� �� �������� ��������� �������
"�������� �� ���� �������������� �� ���������?" (Are types attached by
default?). ��� ��������� ����� ���� ���������� ��-������� � ������
������ �������, ��� ������� ��� ����������� ������������� �� ���
���������� ��������� � ������� �������� ������������.
����� �������, � Eiffel ��� ���������� ����� ����� ��� �������������
��� ������������ ����. ��� ���������, ������������ ��� � ���������
������������ ���������� ������ � ������������� ������. ������� �������,
��� ������ ������ � ��������� ������ ������������� ���� ������� ��
�������� ����������.
��� �������������� ����������� �� � Eiffel ����������� � ������ ������
����� ����� ���������� �������� ��������� "�������� �� ����
�������������� �� ���������?" � "������" (True). ��� ��������, ��� ����
���������� ���� �� �������� �� attached (�������������), �� detachable
(������������), �� �������������� attached (�������������).
2.3.1 ������������ � ���������������
�������� ����� �������������� � ������������� ������ ���������� �
���������, �� ������ ���������� � �������� ���������������. ���������
���������� ������������� ����� ������� �� ����� ��������� ��������
void, ������ ��������� ������������ ������������� ��������� �
������������� ����. ������������ �������������� ��������� �
������������ ���� ���������. ��������� ��� ���������� ��� ������ �
�������������, ��� ���� �� ��������� �������� ��������������.
my_attached_string: STRING
my_detachable_string: detachable STRING
...
my_attached_string := my_detachable_string -- �����������
my_detachable_string := my_attached_string -- ���������
2.4 ������� �������������
���� � ��� ���� ������������� ����, �� �� ����� ��������, ���
���������� ���� �����, ������ �������� ��������������, ������ �����
��������������. ������ ��� ��� ������������� � ������ ���? ��� ��������
������� ����� ������� �������������.
������� ������� � ���, ��� � ������ �����, ��� �������� ����������, ���
������ ���� ��������� ����������. ������������ ����������� ����������
����� ������, ������ �� ������� ����������� � ��������� Eiffel.
�������� ������ ������ ������������� ���������� ������������� �����:
��� ������������� ��������� ������ ����� ��������� �������,
����������� ������� ��������������� ���������� ����������� ������,
�������������� � ���, ��� ��� ������ ���� � ������� �� ����������
��������� ��������. ���� ������� ������ - �������������� ����, ��
������ ��������� �������� �������� �� ��, ����� ������� ��� ����������
� ������� ��� �� ����������.
��������� ���������� ��������������� ��� ��������� ������������,
���� ��� ���������������� � ��������� �����, �������������� ��
������������� ��� ������� ���� ����������, � ������� ��� ������������.
��������������� ����� ���������� ��������� create ��������� ����������
��������� ��������� ������������. ������ ���� create ����������� �
����� then ��������� ��������� if, �� ��������� ���������� �� �����
��������� ������������ � else ����� ����� �� ��������� if.
my_routine
-- ������ ��������� ������������ ��������� ����������
local
l_my_string: STRING
do
if my_condition then
create l_my_string.make_empty
-- ... l_my_string �������� ����� ��������� ������������
else
-- ... l_my_string �� �������� ����� ��������� ������������
end
end
���������� ��������������� ��� ��������� ������������, ���� ���
�������� ��������������������. �� ���� ���� ���� � ��������� �������.
2.5 �������������������� ��������
�������������������� ������� �������������� ����� �������� ���
��������� � ���� �� ����� ����������. ��� ����������
�������������������� ��������� ���������� ������� ��������� �����
attribute. ���, ��������� �� �������� ������ attribute, ����������� ���
������������� �������� � ������, ���� � �������� ���������� ������, ���
�� ��� ��������������� �����-���� ������ ��������.
����� �������, �������������������� �������� - ��� ������� ��������,
������� ������������ ����������� �������������� � ���������� ���� (��
�������� ����������� ��� ����������� ����������� �����).
�������������������� �������� ����� ������������������, � ��� �������,
���������������� ������������� ���������. �������� ������� � ���, ���
��� ����� ��������� ����� attribute �����������, ���
�������������������� ������� �� ������ �������� void, ���� ���� � ����
����� ��������� �� ������������� ����� �� ������������ ��������.
value: STRING
attribute
create Result.make_empty
end
� ������������� ������� ������� value ����� ���������� � ������� ����
STRING (������ ������), ���� ����� ������ �������������� �� �� �����
��������������� ���-�� �ݣ.
2.6 ������� ���������������
��� ��������, ��� ������� ����� Eiffel �������, ��� ��������
������������
x := y
�������� ���������� ������ �����, ����� ��� y ��������� � ����� x.
������������� �������� ���� ���������������� ���� ���������������.
��� ����, ��� ��� ���� �������� ���� �������������� ���� �������������,
��������� ��� ���� ����� � ������� ���������������.
���� x ����������� �������������� ����, �� y ����� ������ ����
�������������� ����.
��� ������� ������������ ��������� ������� ��������������� �� �����
����������. ���� x ����������� ������������� ����, �� y ����� ����
������������� ��� �������������� ����.
�� �� ����� ��������� � � ������ �����������. ����� � ������
z.r (y)
���������� �������� ����������� �������������� ����, ����� �
����������� �������� y ������ ���� �������������� ����.
2.7 ���������� ��������
���������� �������� �������� �������������, ��� ��� ����������
��������� ������������ ����� ����� ������ ��� ������������ ���������.
���������� ������������� �������� ���������� ��������, ��� ���
��������� ��������� � ������� � ������������ ���������, �� �����������
������ ������������, ������� �������� ������� � �������������
���������. ������� �������, ���������� �������� �� ������� ����
�������������� (��� ���������� �������������) � �������� ��������
�������. ������ ��� � �������� ������������� �����, ���������� ��������
������� �� ����� ���� ����� ������������, � ������� ���������� ��������
Void ��� ������������ ���.
my_test: detachable TEST
note
option: stable
attribute
end
��� ��������, ��� ���������� �������� �� ������� ���� ����������������
������� ��������� ������������� �����, �� ��� ������ ��� �����������,
��� �� ����� ��������� �������� Void �����.
���������� �������� ��������� ��� ���, ��� ��� �������� ������������
����������� �� ������� ������� "����������������� ������� ������������ (���)",
� ������� ��������� � ���, ��� ������ ������ �
��������� �� ����� ���� ������� ���. ���������� ������� ����� ����
������� ���. ��� ����������� ���, ��� ��� ������ ���������� �������
���������� � �������, �� �� ����� ��������� �������� Void.
�������������� ����� �� ������������ � ����������� ��������� ���������
�������� �� �������������� � ��������������� ���������� �������� ������
����������� ��� �������.
2.8 ������� ��� ���������� �������
������������� ������ ��������� ��� ���� ������. ������������� �����
class
C [G]
...
��������� ��� ������� ���, ������ ����������� �������� ������ ���
����������� ��������� G.
���������� ��� ���������� ����������:
my_integer_derivation: C [INTEGER]
�
my_employee_derivation: C [EMPLOYEE]
����� ����� C �������� ����������
x: G
��� ����� ������� � ������������ �������� x?
� ������ ���� INTEGER x �������� ����������, ��� ��� INTEGER -
����������� ���. ����, ����� ��� EMPLOYEE, ����� �������� ���������� �
����� ��������� �������� void �� ����� ����������.
��� �������, �������� C[G], G ��������������� ��� ������������ ���. �
����������, ���������� ������� ���������������, ����� ����� �����
���� ����������� � �������� ������������ ��������� ������. ���
��������, ��� ��� ��������� ���������� �������� �����������:
my_detachable_string_derivation: C [detachable STRING]
my_attached_string_derivation: C [attached STRING]
���� C �������� ���������� x: G, �� ���������� ����������� � x ������
�������� �������� ������������ (���, ��������� ������������ � �.�.).
������������ ��������������� ����� ���� ������������ ��� ��������
������������� �������, � ������� �������� ������ ������������
������������� ���. ����� ����� C ��������� ��������� �������:
class C [G -> attached ANY]
...
����� x � ������ G ������������ ����� ������������� ���. �������������,
����������� �������� ������ � ������ ������� ������ ������ ����
����������, � ��� ������ ���������� �� x ���������.
2.9 ������� ��� ���� ARRAY
������� ��� ���������� ������� ����������� ��� ���� �������������
�����, �� ����������� ���� ARRAY. ��� ������� �������� ������� �����
������� ����������� � ������������ ������.
my_array: ARRAY [STRING]
...
create my_array.make (1, 100)
� �������� �������� ����� ��������� ������� ��� ��������
���������������� ���������� ���������. � ����������� �� ������������
��������� ������ ��� �������� �������� ���� ��������� ��� �����������
����� ���� �������� ��� ��������� �����.
� ������ ������������ ��������� ������ �������������� ���������� ����,
��� �������� ������ ���� ����������� � ����������� ���� � ��������
�������� �������. ��������� make �� ������������ �����. ��������
�������, � ������� ����������� �������� ������ ����������, ������
������������� � ������� ��������� make_filled.
create my_array.make_filled ("", 1, 100)
������ �������� - ��� ������ � ����� ������������ ���������, � ������
������ - ������ ������. ������ ������� � ����������� ������� �����
��������������� ������� �� ���� ������.
����� ��������� ���������� � ���������� ������������� �������� � ������
������������� ������� ����� �������� � ������� "������������� ������������� �������".
| �������� ����������� |
������:
�������: