Связь объектов (Has-a)

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

Давайте представим что у нас есть система задач. Пользователь может создавать списки задачи, а внутри списков размещать сами задачи. К каждой задаче можно прикрепить текст задачи и пользователя который ей занят.

Мы можем очень эффектно выразить это с помощью следующих классов:

  • User
  • List
  • Task

Вот как они выглядят

Фрагмент 1.43

class User
{
    public string Name;

    public User(string name)
    {
        Name = name;
    }
}

class List
{
    public Task[] Tasks;

    public List(Task[] tasks)
    {
        Tasks = tasks;
    }
}

class Task
{
    public User Worker;
    public string Description;

    public Task(User worker, string description)
    {
        Worker = worker;
        Description = description;
    }
}

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

С организацией и дизайном кода можно играться очень долго исходя из задачи.

Если вы нашли ошибку, пожалуйста выделите её и нажмите Ctrl+Enter.


Leave a Reply

Your email address will not be published. Required fields are marked *