Перейти к содержимому

В чем состоит работа модификатора private internal

  • автор:

В чем состоит работа модификатора private internal

Все члены класса в языке Java — поля и методы — имеют модификаторы доступа. В прошлых темах мы уже сталкивались с модификатором public . Модификаторы доступа позволяют задать допустимую область видимости для членов класса, то есть контекст, в котором можно употреблять данную переменную или метод.

В Java используются следующие модификаторы доступа:

  • public : публичный, общедоступный класс или член класса. Поля и методы, объявленные с модификатором public, видны другим классам из текущего пакета и из внешних пакетов.
  • private : закрытый класс или член класса, противоположность модификатору public. Закрытый класс или член класса доступен только из кода в том же классе.
  • protected : такой класс или член класса доступен из любого места в текущем классе или пакете или в производных классах, даже если они находятся в других пакетах
  • Модификатор по умолчанию . Отсутствие модификатора у поля или метода класса предполагает применение к нему модификатора по умолчанию. Такие поля или методы видны всем классам в текущем пакете.

Рассмотрим модификаторы доступа на примере следующей программы:

public class Program < public static void main(String[] args) < Person kate = new Person("Kate", 32, "Baker Street", "+12334567"); kate.displayName(); // норм, метод public kate.displayAge(); // норм, метод имеет модификатор по умолчанию kate.displayPhone(); // норм, метод protected //kate.displayAddress(); // ! Ошибка, метод private System.out.println(kate.name); // норм, модификатор по умолчанию System.out.println(kate.address); // норм, модификатор public System.out.println(kate.age); // норм, модификатор protected //System.out.println(kate.phone); // ! Ошибка, модификатор private >> class Person < String name; protected int age; public String address; private String phone; public Person(String name, int age, String address, String phone)< this.name = name; this.age = age; this.address = address; this.phone = phone; >public void displayName() < System.out.printf("Name: %s \n", name); >void displayAge() < System.out.printf("Age: %d \n", age); >private void displayAddress() < System.out.printf("Address: %s \n", address); >protected void displayPhone()< System.out.printf("Phone: %s \n", phone); >>

В данном случае оба класса расположены в одном пакете — пакете по умолчанию, поэтому в классе Program мы можем использовать все методы и переменные класса Person, которые имеют модификатор по умолчанию, public и protected. А поля и методы с модификатором private в классе Program не будут доступны.

Если бы класс Program располагался бы в другом пакете, то ему были бы доступны только поля и методы с модификатором public.

Модификатор доступа должен предшествовать остальной части определения переменной или метода.

Инкапсуляция

Казалось бы, почему бы не объявить все переменные и методы с модификатором public , чтобы они были доступны в любой точке программы вне зависимости от пакета или класса? Возьмем, например, поле age, которое представляет возраст. Если другой класс имеет прямой доступ к этому полю, то есть вероятность, что в процессе работы программы ему будет передано некорректное значение, например, отрицательное число. Подобное изменение данных не является желательным. Либо же мы хотим, чтобы некоторые данные были достуны напрямую, чтобы их можно было вывести на консоль или просто узнать их значение. В этой связи рекомендуется как можно больше ограничивать доступ к данным, чтобы защитить их от нежелательного доступа извне (как для получения значения, так и для его изменения). Использование различных модификаторов гарантирует, что данные не будут искажены или изменены не надлежащим образом. Подобное сокрытие данных внутри некоторой области видимости называется инкапсуляцией .

Так, как правило, вместо непосредственного применения полей используют методы доступа. Например:

public class Program < public static void main(String[] args) < Person kate = new Person("Kate", 30); System.out.println(kate.getAge()); // 30 kate.setAge(33); System.out.println(kate.getAge()); // 33 kate.setAge(123450); System.out.println(kate.getAge()); // 33 >> class Person < private String name; private int age = 1; public Person(String name, int age)< setName(name); setAge(age); >public String getName() < return this.name; >public void setName(String name) < this.name = name; >public int getAge() < return this.age; >public void setAge(int age) < if(age >0 && age < 110) this.age = age; >>

И затем вместо непосредственной работы с полями name и age в классе Person мы будем работать с методами, которые устанавливают и возвращают значения этих полей. Методы setName, setAge и наподобие еще называют мьютейтерами (mutator), так как они изменяют значения поля. А методы getName, getAge и наподобие называют аксессерами (accessor), так как с их помощью мы получаем значение поля.

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

Модификатор доступа internal

Сборка является неотъемлемой частью программирования на C#. Она представляет собой один или несколько файлов, содержащих все необходимые сведения о развертывании программы и ее версии. Сборки составляют основу среды .NET. Они предоставляют механизмы для надежного взаимодействия компонентов, межъязыковой возможности взаимодействия и управления версиями. Кроме того, сборки определяют область действия программного кода.

Сборка состоит из четырех разделов. Первый раздел представляет собой манифест сборки. Манифест содержит сведения о самой сборке. К этой информации относится, в частности, имя сборки, номер ее версии, сведения о соответствии типов и параметры культурной среды (язык и региональные стандарты). Второй раздел сборки содержит метаданные типов, т.е. сведения о типах данных, используемых в программе. Среди прочих преимуществ метаданные типов способствуют межъязыковой возможности взаимодействия. Третий раздел сборки содержит программный код в формате MSIL (Microsoft Intermediate Language — промежуточный язык корпорации Microsoft). И четвертый раздел сборки содержит ресурсы, используемые программой.

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

Сборки являются неотъемлемой частью процесса разработки программного обеспечения в среде .NET, но формально они не относятся к средствам языка C#. Тем не менее в C# имеется одно средство, непосредственно связанное со сборкой.

Помимо модификаторов доступа public, private и protected, в C# предусмотрен также модификатор доступа internal. Этот модификатор определяет доступность члена во всех файлах сборки и его недоступность за пределами сборки. Проще говоря, о члене, обозначенном как internal, известно только в самой программе, но не за ее пределами. Модификатор доступа internal особенно полезен для создания программных компонентов.

Модификатор доступа internal можно применять к классам и их членам, а также к структурам и членам структур. Кроме того, модификатор internal разрешается использовать в объявлениях интерфейсов и перечислений.

Из модификаторов protected и internal можно составить спаренный модификатор доступа protected internal. Уровень доступа protected internal может быть задан только для членов класса. Член, объявленный как protected internal, доступен лишь в пределах собственной сборки или для производных типов.

Модификаторы доступа

Каждое поле имеет модификатор доступа, принимающий одно из четырех значений: public, private, protected, internal.

Модификатор private является атрибутом доступа по умолчанию. Он закрывает поля от всех других классов, разрешая прямой доступ к ним (чтение и запись) только методам самого класса. Все поля всегда доступны всем методам класса. Они являются для методов класса глобальной информацией, с которой работают все методы класса, извлекая из полей нужные им данные и изменяя их значения в ходе работы.

Модификатор protected. Этот модификатор открывает поля классам наследникам. Если класс A объявил некоторое поле с модификатором protected, то методы класса B, который является наследником класса A и, следовательно, наследует поля класса A, могут непосредственно работать с наследуемыми полями.

Модификатор internal. Этот модификатор открывает поля из одного проэкта. Если класс A объявил некоторое поле с модификатором internal, то методы класса B из этого же проекта, являющегося клиентом класса A, могут непосредственно работать с таким полем.

Комбинация атрибутов protected и internal

Эта комбинация открывает поле тем классам, которые являются либо наследниками, либо классами из одного проэкта.

Если поля доступны только для методов класса, то они имеют модификатор доступа private, который можно опускать. Такие поля считаются закрытыми, но часто желательно, чтобы некоторые из них были доступны в более широком контексте. Если некоторые поля класса A должны быть доступны для методов класса B, являющегося потомком класса A, то эти поля следует снабдить модификатором protected. Такие поля называются защищенными. Если некоторые поля должны быть доступны для методов классов B1, B2 из одного проекта с классом А, то эти поля следует снабдить модификатором internal, а все классы B поместить в один проект ( assembly ). Такие поля называются дружественными. Наконец, если некоторые поля должны быть доступны для методов любого класса B, которому доступен сам класс A, то эти поля следует снабдить модификатором public. Такие поля называются общедоступными или открытыми.

Модификатор

Определение

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

Доступ к типу или члену можно получить только из кода в том же классе.

Доступ к типу или члену можно получить только из кода в том же классе или в производном классе.

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

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

Uml, назначение, типы диаграм.

Разработка и совершенствование информационных систем приводит к необходимости поддержания единого стиля при их постоянной доработке и модификации. В разработке и внедрении современных корпоративных информационных систем принимает участие множество специалистов различной квалификации, для которых единообразное понимание архитектуры и функциональности является серьезной проблемой.

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

Модель (model) — абстракция физической системы, рассматриваемая с определенной точки зрения и представленная на некотором языке или в графической форме.

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

UML (унифицированный язык моделирования) — язык графического описания для объектного моделирования. UML был создан для определения, визуализации, проектирования и документирования программных систем. Последняя версия UML 2.2 определяет более 10 типов диаграмм. С помощью диаграмм можно визуализировать систему с различных точек зрения. Выделяют следующие классы диаграмм

  • Структурные диаграммы
    1. Диаграмма классов.
    2. Диаграмма компонентов.
    3. Диаграмма составной структуры.
    4. Диаграмма развёртывания.
    5. Диаграмма объектов.
    6. Диаграмма пакетов.
  • Диаграммы поведения
    1. Диаграмма деятельности.
    2. Диаграмма состояний.
    3. Диаграммы коммуникации и последовательности — выражают взаимодействие, но показывают его различными способами и с достаточной степенью точности могут быть преобразованы одна в другую.
      • Диаграмма коммуникации.
      • Диаграмма последовательности.
      • Диаграмма сотрудничества.

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

      Модель классов описывает структуру объектов системы: их индивидуальность, отношения с другими объектами, атрибуты и операции. Модель классов создает контекст для моделей состояний и взаимодействия. Цель конструирования модели классов состоит в том, чтобы охватить те реальные концепции, которые важны для нашего приложения. Модель классов изображается на диаграммах классов.

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

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

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

      Модификаторы доступа (Справочник по C#)

      Модификаторы доступа — это ключевые слова, которые задают объявленный уровень доступности члена или типа. В этом разделе рассматриваются пять модификаторов доступа:

      С помощью модификаторов доступа можно указать следующие семь уровней доступности:

      • public : доступ не ограничен.
      • protected : доступ ограничен содержащим классом или типами, которые являются производными от содержащего класса.
      • internal : доступ ограничен текущей сборкой.
      • protected internal : Доступ ограничен текущей сборкой или типами, которые являются производными от содержащего класса.
      • private : доступ ограничен содержащим типом.
      • private protected : Доступ ограничен содержащим классом или типами, которые являются производными от содержащего класса в текущей сборке.
      • file : объявленный тип отображается только в текущем исходном файле. Типы с областью действия файла обычно используются для генераторов исходного кода.

      В этом разделе также рассматриваются следующие понятия:

      • Уровни доступности: с помощью четырех модификаторов доступа можно объявить шесть уровней доступности.
      • Домен доступности: определяет, в каких разделах программы может присутствовать ссылка на этот член.
      • Ограничения на использование уровней доступности: общие сведения об ограничениях на использование объявленных уровней доступности.

      См. также

      • Добавление модификаторов специальных возможностей (правило стиля IDE0040)
      • Справочник по C#
      • Руководство по программированию на C#
      • Ключевые слова в C#
      • Модификаторы доступа
      • Ключевые слова доступа
      • Модификаторы

      Совместная работа с нами на GitHub

      Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *