Введение в теорию программирования. Объектно-ориентированный подход



         

Концепция инкапсуляции и ее реализация в языке C# - часть 5


class Stack { protected int[] values = new int[32]; protected int top = -1; public void Push(int x) { ... } public int Pop() { ... } } class BetterStack : Stack { public bool Contains(int x) { foreach (int y in values) if(x==y) return true; return false; } } class Client { Stack s = new Stack(); ... s.values[0]; ... // ошибка при компиляции! }

Как видно из приведенного примера, фрагмент программы на языке C# содержит описание класса стека Stack (для хранения 32 целочисленных элементов и значением -1 в вершине), а также реализованного на его основе усовершенствованного класса стека BetterStack, дополнительно реализующего повторяющиеся элементы стека. В отличие от предыдущего примера, все поля класса стека Stack доступны как из данного класса, так и из классов, производных от него, поскольку описаны посредством ключевого слова protected.

После обсуждения использования (степеней) инкапсуляции применительно к классам в целом, рассмотрим особенности приложения данной концепции к таким фундаментальным объектам языка программирования C# как поля и константы.

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

Простейшей иллюстрацией описания поля в языке программирования C# является следующий пример, содержащий определение класса C с целочисленным полем value:

class C { int value = 0; }

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

Простейшей иллюстрацией описания константы в языке программирования C# является следующий пример, содержащий определение константы size, представляющей собой целочисленное значение двойной длины (long):

const long size = ((long)int.MaxValue+1)/4;

Заметим, что фрагмент

...(long) ...

в правой части присваивания представляет собой явное преобразование типов языковых объектов.




Содержание  Назад