Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Уровни доступа к членам класса





Члены класса могут иметь три уровня доступа: закрытый (private), открытый (public) или защищённый (protected). Уровни доступа к членам класса определяют способ работы пользователей с классом. Программируя самостоятельно, программист может быть как создателем класса, так и их пользователем. При работе в команде один программист может быть создателем класса, а остальные - его пользователями.

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

Абстрактное представление данных - это сокрытие внутренней реализации элементов класса от его внешнего окружения. Абстрактное представление данных даёт пользователю возможность знать о классе ровно столько, сколько необходимо, и предохраняет от вмешательства туда, куда вмешиваться не стоит. Но если внутренняя работа класса закрыта, то интерфейс пользователя должен быть открытым.

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

2.3. Конструкторы.

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

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

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

2.4. Деструкторы.

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

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

2.5. Члены - данные.

Члены - данные класса это просто переменные, объявленные в описании класса. Их областью видимости по умолчанию является класс. По сравнению с членами - данными структур, можно управлять доступом к членам-данным класса, объявляя их как private, public или protected. Независимо от установленного уровня доступа, члены-данные класса могут использоваться всеми функциями этого класса. Уровень доступа определяет видимость членов-данных вне класса. Для работы с закрытыми членами-данными можно написать и использовать открытые свойства, обеспечивающие доступ к этим закрытым данным. Одна из функций таких свойств будет возвращать значение соответствующего закрытого члена класса (функция чтения), а другая - изменять его значение (функция записи).

Использование в классе свойств даёт важное преимущество – оно обеспечивает возможность контроля входных данных, что позволяет следить за изменением значений, которые принимают закрытые члены-данных класса.

Для каждого экземпляра класса в памяти создаётся своя отдельная копия членов-данных. Исключение делается только для членов-данных, объявленных как статические данные с модификатором static. В этом случае все экземпляры класса используют одну единственную копию соответствующего члена.

При работе членами-данными существуют некоторые рекомендации, заключающиеся в следующем:

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

q Не нужно делать все члены-данные открытыми. Хорошим тоном считается такой, когда все данные-члены класса делаются закрытыми.

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

q Чтобы избежать ввода неправильных значений для членов данных, необходимо контролировать значения вводимых данных.

q Необходимо инициализировать все члены-данные класса либо в списке инициализаторов, либо в теле конструктора.

q Члены-данные класса, размещаемые в памяти динамически, требуется уничтожать при удалении экземпляра этого класса.

2.6. Методы.

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

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

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

Защищённые функции-члены - это функции, доступные только для тех классов, которые являются производными данного класса. Доступ извне к этим функциям невозможен.

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

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

Синтаксис метода:

[ атрибуты ] [ спецификаторы ] тип имя_метода ([ параметры ]) тело_метода

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

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

Пример простейшего метода:

public float Gety(float a, float b)

{

float sum = a+b;

return sum;

}

Тип метода определяет тип результата вычислений, осуществляемых этим методом. Наиболее часто употребляется термин «метод возвращает значение». Если метод не возвращает никакого значения, то в его заголовке задается тип void, а оператор return отсутствует.

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

Например, чтобы вычислить значение синуса для вещественной величины x, мы передаем ее в качестве аргумента в метод Sin класса Math, а чтобы вывести значение этой переменной на экран, мы передаем ее в метод WriteLine класса Console:

double x = 0.1;

double y = Math.Sin(x);

Console.WriteLine(x);

При этом, в приведенном фрагменте листинга, метод Sin возвращает в точку своего вызова вещественное значение синуса, которое присваивается переменной y, а метод WriteLine ничего не возвращает.

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

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

public static double Sin(double a);

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

2.7. Скрытый указатель с именем this.

Все классы имеют скрытый член с именем this. Это указатель на экземпляр данного класса. Следует вспомнить, что каждый экземпляр класса имеет свою копию членов-данных, но использует один набор функций-членов, общий для всех экземпляров этого класса. Как же компилятор определяет, какой из его экземпляров вызвал функцию? Для этого каждая функция-член класса имеет скрытый аргумент this.

 

Date: 2015-07-24; view: 657; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию