Инкапсуляция. классы и структуры
Инкапсуля́ция — свойство языка программирования, позволяющее объединить и защитить данные и код в объект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е Серега надрался и не сделал; должно быть в лекциях