Звоните! 
 (926)274-88-54 
 Бесплатная доставка. 
 Бесплатная сборка. 
Ассортимент тканей

График работы:
Ежедневно. С 8-00 до 20-00.
Почта: soft_hous@mail.ru
Читальный зал -->  Диаграммы параллельных состояний 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [ 33 ] 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Видимость

Должен признаться, что испытываю некоторое беспокойство относительно данного раздела.

Видимость - это одно из тех понятий, которые являются простыми по существу, однако обладают сложными тонкостями. Сама идея видимости заключается в том, что у любого класса имеются общедоступные (public) и закрытые (private) элементы. Общедоступные элементы могут быть использованы любым другим классом, а закрытые элементы -только классом-владельцем. Несмотря на это в каждом языке программирования существуют свои собственные правила. Хотя многие языки используют такие термины, как общедоступный , закрытый и защищенный (protected), в разных языках они имеют различное содержание. Эти различия невелики, однако они приводят к

Однако использование связанного элемента не эквивалентно определению подтипа. В связанный элемент нельзя добавлять свойства - он полностью определяется своим шаблоном. При этом можно добавлять только информацию, ограничивающую его тип. Если же вы хотите добавить свойства, то должны создать некоторый подтип.

Параметризованные классы допускают использование производных типов. Если вы создаете тело шаблона, то можете определить операции над соответствующим параметром. Когда в последующем вы объявите связанный элемент, компилятор попытается установить, поддерживает ли передаваемый параметр операции, определенные в данном шаблоне.

Именно эти действия соответствуют механизму производных типов, поскольку можно вообще не определять тип параметра; компилятор сам вычисляет его в процессе связывания с источником шаблона. Это свойство является центральным при использовании параметризованных классов из библиотеки стандартных шаблонов STL (Standard Template Library) в языке С-Н-; эти классы могут также использоваться для решения других программистских задач.

Использование параметризованных классов не обходится без последствий - например, в языке С-Н- они могут повлечь за собой значительное увеличение объема кода. Я редко использую параметризованные классы в концептуальном моделировании, поскольку они применяются в основном для совокупностей, которые следует моделировать посредством ассоциаций. (Исключение составляет лишь один случай, когда я все-таки пользуюсь ими. Он связан с образцом Range (Диапазон) (см. Фаулер, 1997 [18].) Параметризованные классы бывают мне необходимы только в моделях уровня спецификации и реализации, если они поддерживаются тем языком программирования, на котором я работаю.



недоразумениям, особенно тех из нас, кто использует в своей работе более одного языка программирования.

Язык UML пытается решить эту проблему, не устраивая при этом жуткую путаницу. По существу, в рамках языка UML для любого атрибута или операции можно указать индикатор видимости. Для этой цели можно использовать любой подходящий маркер, смысл которого определяется тем или иным языком программирования. Однако язык UML предлагает три (довольно трудно запомнить) отдельных обозначения для этих вариантов видимости: (общедоступный), - (закрытый) и # (защищенный).

Мне бы очень хотелось поскорее закончить на этом, но, к сожалению, разработчики при построении диаграмм используют видимость в своей собственной интерпретации. Поэтому, чтобы действительно понять некоторые из основных различий, существующих между моделями, необходимо понимать трактовку видимости в различных языках программирования. Итак, сделаем глубокий вдох и погрузимся во мрак.

Мы начнем с языка программирования С-Ы-, поскольку он является основой стандартного использования языка UML:

Общедоступный элемент является видимым в любом месте программы и может быть вызван любым объектом в системе.

Згисрытый элемент может быть использован только тем классом, в котором он определен.

Защищенный элемент может быть использован только а) тем классом, в котором он определен, или б) подклассом этого класса.

Рассмотрим класс Клиент и его подкласс Индивидуальный Клиент. Рассмотрим также объект Мартин, который является экземпляром класса Индивидуальный Клиент. Мартин может использовать любой общедоступный элемент любого объекта в системе. Мартин может также использовать любой закрытый элемент класса Индивидуальный Клиент. Мартин не может использовать никакой закрытый элемент, определенный внутри класса Клиент, однако он может использовать защищенные элементы класса Клиент и защищенные элементы класса Индивидуальный Клиент.

Теперь обратимся к языку Smalltalk. В этом языке все переменные экземпляра являются закрытыми, а все операции - общедоступными. Однако закрытость в языке Smalltalk имеет не тот же самый смысл, что в языке С-Ы-. В системе, написанной на Smalltalk, Мартин может иметь доступ к любой переменной экземпляра своего собственного объекта, независимо от того, где была определена эта переменная экземпляра: в Клиенте или в Индивидуальном Клиенте. Таким образом, закрытость в языке Smalltalk имеет тот же смысл, что и защищенность в языке С-Ы-.

Тем не менее, было бы слишком просто закончить на этом.



Вернемся опять к языку С++. Пусть имеется еще один экземпляр класса Индивидуальный Клиент с именем Кендалл. Кендалл может иметь доступ к любому элементу Мартина, который был определен как часть класса Индивидуальный Клиент, независимо от того, является ли он общедоступным, закрытым или защищенным. Кендалл может также иметь доступ к любому защищенному или общедоступному элементу Мартина, который был определен в классе Клиент. Однако в языке Smalltalk Кендалл не может получить доступ к закрытым переменным экземпляра Мартина, а только к общедоступным операциям Мартина.

В языке С++ доступ к элементам других объектов вашего собственного класса обеспечивается в той же степени, что и к вашим собственным элементам. В языке Smalltalk безразлично, принадлежит ли другой объект к тому же самому классу или нет; вам все равно доступны только общедоступные элементы другого объекта.

Язык Java похож на язык С++ в том, что он поддерживает свободный доступ к элементам других объектов одного и того же класса. В языке Java введен дополнительный уровень видимости, получивший название пакет (package). Элемент с видимостью внутри пакета может быть доступен только в экземплярах других классов этого же пакета.

Продолжая эту тему, следует отметить, что все это вовсе не так просто; в языке Java несколько по иному определяется защищенная видимость. В Java защищенный элемент может быть доступен не только подклассам, но и любому другому классу того же самого пакета, к которому относится класс-владелец. Это означает, что в языке Java защищенная видимость является более общедоступной, чем пакетная.

Язык Java разрешает также помечать классы как общедоступные или пакетные. Общедоступные элементы общедоступного класса могут использоваться любым классом, который импортирует пакет, содержащий исходный класс. Пакетный класс может быть использован только другими классами в том же самом пакете.

Последний штрих в эти тонкости добавляет язык С++. В языке С++ какой-либо метод или класс может быть определен как дружественный (friend) для класса. Такой дружественный элемент обладает полным доступом ко всем элементам класса. Отсюда пошло высказывание: в С++ друзья прикасаются к закрытым частям друг друга .

При определении видимости пользуйтесь правилами того языка, на котором вы программируете. С какой бы точки зрения вы не смотрели на модель UML, следует с осторожностью относиться к смыслу маркеров видимости и осознавать, что их смысл может меняться от языка к языку.

По моему мнению, обычно видимость изменяется в процессе кодирования. Поэтому не следует определять ее слишком рано.



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [ 33 ] 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57



ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку.



Звоните! Ежедневно!
 (926)274-88-54 
Продажа и изготовление мебели.


Копирование контента сайта запрещено.
Авторские права защищаются адвокатской коллегией г. Москвы
.