double arrow

Отношения между объектами

Ключевое слово this

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

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

class Demo

{

double у;

public Demo() { return this; }// метод возвращает ссылку на экземпляр

public void Sety( double у ) { this.у = у; }

}

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

Различают следующие типы отношений между объектами.

· Связи.

· Агрегация

В отношении связь объекты могут выполнять различные роли:

- активный объект (actor) – это такой объект, который может воздействовать на внешнее окружение, но никогда не способен воспринимать внешние воздействия (активный объект).

- Сервер или исполнитель (server) - подвергается воздействию со стороны других объектов, но сам никогда не активен.

- Агент или посредник (agent, broker) - выполняет роль как активного объекта, так и исполнителя (сервера) и, как правило, создается в интересах активного объекта.

Связь типа агрегация это отношение типа часть-целое (a part-of). Позволяет, идя от целого (агрегата), прийти к его частям (атрибутам). По смыслу, агрегация может означать физическое вхождение в состав одного объекта других объектов. Но может быть и другая семантика, например, принадлежность одного объекта другому.

Основные отличительные особенности класса

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

  • Инкапсуляция;
  • Наследование;
  • Полиморфизм.

Инкапсуляция в классе.

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

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

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

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

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

{

Тело класса: описание данных и методов …

}

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

namespase MyExample

{

public class Circle

{

int x, y; //положение центра окружности

int r; //радиус

int thick; //толщина контура

Color color;// цвет контура

// Функция конструктора (инициализация переменных класса)

public Circle(int x, int y)

{

this.x=x;

this.y=y;

rad=50;

thick=3;

color=Color.Black;

}

public void Move(int dx, int dy) // Функция перемещения окружности

{

x+=dx; y+=dy;

}

public void Display(Graphics g) // Функция вырисовывания самой себя

{

Pen pen=new Pen(color, thick); //Создание объекта "пера"

// Рисование окружности заданной толщины и цвета

g.DrawEllipse(pen, x-r, y-r, x+r, y+r);

pen.Dispose(); // Удаление объекта "пера"

}

}

}

После объявления класса можно уже создавать его реальные экземпляры следующим образом:

Circle c1=new Circle(50, 50),

c2=new Circle(100, 100),

c3=new Circle(150, 150);

В этом примере объявлены 3 переменные с1, с2 и с3 типа Circle, и с помощью оператора new созданыих соответствующие экземпляры типа окружности (т.е. выполнена их реализация). Каждый из трех созданных объектов (с1, с2 и с3) одинаковы с точки зрения программной реализации, но каждый экземпляр располагает своим набором данных, которые может обрабатываться отдельно от данных в другом экземпляре. Связь с каждым экземпляром класса осуществляется через его открытые функции-члены (методы). Однако, воспользоваться ими можно только после создания экземпляра класса.

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

Все классы библиотеки .Net, а также все классы, которые создает программист в среде .Net, имеют одного общего предка – класс object.


Сейчас читают про: