Инкапсуляция. классы и структуры

Инкапсуля́ция — свойство языка программирования, позволяющее объединить и защитить данные и код в объектe и скрыть реализацию объекта от пользователя (прикладного программиста). При этом пользователю предоставляется только спецификация (интерфейс) объекта.

-Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью ключевого слова: public.

-Пользователь не может использовать закрытые данные и методы. Реализуется с помощью ключевых слов: private, protected, internal.

Сокрытие реализации целесообразно применять в следующих случаях:

предельная локализация изменений при необходимости таких изменений,

прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.

Другое определение:

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

Сокрытие данных — неотделимая часть ООП, управляющая областями видимости. Является логическим продолжением инкапсуляции. Целью сокрытия является невозможность для пользователя узнать или испортить внутреннее состояние объекта.

Класс — разновидность абстрактного типа данных в объектно-ориентированном программировании (ООП), характеризуемый способом своего построения. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен.

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

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

Структуры и классы схожи в следующих отношениях.

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

У них есть элементы, такие как конструкторы, методы, свойства, поля, константы, перечисления, события и обработчики событий. Однако следует отличать эти элементы от объявленных элементов структуры.

Их элементы могут иметь индивидуальные уровни доступа. Например, один элемент может быть объявлен как Public, а другой — Private.

Они могут реализовывать интерфейсы.

Они имеют общие конструкторы с параметрами или без параметров.

Они могут предоставлять свойство по умолчанию, если это свойство принимает хотя бы один параметр.

Они могут объявлять и создавать события и могут объявлять делегаты.

Структуры и классы отличаются следующими особенностями.

Структуры являются типами значений; классы — ссылочными типами. Переменная типа структуры, в отличие от типа класса, содержит данные структуры, а не ссылки на данные.

Структуры используют выделенную память стека; классы — память кучи.

Все элементы структуры по умолчанию являются Public; переменные и константы класса по умолчанию — Private, а другие элементы класса по умолчанию являются Public. Такое поведение элементов класса обеспечивает совместимость с системой значений по умолчанию Visual Basic 6.0.

Структуры должны иметь хотя бы одну переменную или элемент события без общего доступа; класс может быть совершенно пустым.

Элементы структуры не могут быть объявлены как Protected; члены класса могут.

Процедура структуры может обрабатывать событие, только если она является процедурой Shared (Visual Basic)Sub, и только с помощью оператора Оператор AddHandler; любая процедура класса может обработать событие, используя либо ключевое слово Предложение Handles (Visual Basic), либо оператор AddHandler. Дополнительные сведения см. в разделе События (Visual Basic).

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

Структуры неявно наследуют от класса System.ValueType и не могут наследовать ни от какого другой типа; классы могут наследовать от любых классов, отличных от System.ValueType.

Структуры не наследуются; классы наследуются.

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

Для структуры не требуется конструктор; для класса требуется.

Структуры могут иметь конструкторы, не являющиеся общими, только если они принимают параметры; классы могут иметь их как с параметрами, так и без.

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

3. Анализ типов данных компиляторами. //Далее по 7е Серега надрался и не сделал; должно быть в лекциях

Наши рекомендации