Что такое «ответственность» в принципе единой ответственности?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Что такое «ответственность» в принципе единой ответственности?

Сообщение Anonymous »

Я прохожу курс по программированию на C# здесь: https://www.udemy.com/course/ultimate-c ... EPLEARNING
В нем есть лекция по инкапсуляции. Преподаватель приводит пример того, как класс Rectangle может инкапсулировать как поля, так и методы:

Код: Выделить всё

class Rectangle
{
int _width;
int _height;

public Rectangle(int width, int height)
{
_width = width;
_height = height;
}

public int CalculateArea()
{
return _width * _height;
}

public int CalculateCircumference()
{
return _width * 2 + _height * 2;
}
}
Это пример инкапсуляции, поскольку оба поля ( и _height) и методы (

Код: Выделить всё

CalculateArea()
и CalculateCircumference()) инкапсулированы в один класс. Она доказывает свою точку зрения, показывая альтернативную реализацию, в которой инкапсуляция не используется:

Код: Выделить всё

class Rectangle
{
public int Width;
public int Height;

public Rectangle(int width, int height)
{
Width = width;
Height = height;
}
}

class RectangleCalculator
{
public int CalculateArea(Rectangle rect)
{
return rect.Width * rect.Height;
}

public int CalculateCircumference(Rectangle rect)
{
return rect.Width * 2 + Rect.Height * 2;
}
}
Она говорит, что первый пример лучше, потому что инкапсуляция — одна из сильных сторон ООП, и ее следует использовать.
Однако это заставило меня задуматься о Принцип единой ответственности и ее пример, кажется, противоречат ему. Разве хранение ширины и высоты прямоугольника не является другой обязанностью, чем вычисление его площади или окружности? Поэтому не лучше ли разделить эти обязанности на разные классы? Я спросил об этом у инструктора, и она сказала «нет», потому что ответственность класса Rectangle — представлять прямоугольник, а это может означать наличие методов для вычисления таких вещей, как площадь или окружность.
Это меня зацепило. думая, что я не знаю, что такое «ответственность». Конечно, вы могли бы сказать, что ответственность класса Rectangle — представлять прямоугольник, но это можно разделить на более мелкие обязанности (сохранение ширины и высоты, вычисление площади, вычисление окружностей и т. д.). Так как же нам определить правильный способ описания ответственности класса?
Роберт К. Мартин, автор принципа единой ответственности, формулирует его следующим образом: «У класса должна быть только одна причина изменять." Но предположим, что требуется внести изменение, чтобы класс Rectangle сохранял ширину и высоту в виде значений с плавающей запятой, а не в виде целых чисел:

Код: Выделить всё

class Rectangle
{
public float Width;
public float Height;

public Rectangle(float width, float height)
{
Width = width;
Height = height;
}

// more code
}
...а затем запрашивается еще одно изменение, чтобы придать прямоугольнику цвет:

Код: Выделить всё

class Rectangle
{
public float Width;
public float Height;
public Color Color;

public Rectangle(float width, float height, Color color)
{
Width = width;
Height = height;
Color = color
}

// more code
}
Это две разные причины для изменений, не так ли? И все же, почему цвет не может считаться одним из свойств прямоугольника так же, как его ширина и высота?
Поэтому для меня вопрос о том, что такое «ответственность», возникает только отложил вопрос о том, что такое «причина для изменения». Может ли кто-нибудь пролить свет на это? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/787 ... -principle
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как реализовать принцип единой ответственности с помощью RabbitMQ?
    Гость » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Гость
  • Как подойти к принципу единой ответственности?
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Как подойти к принципу единой ответственности?
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Должен ли я разделить метод, который вычисляет и сохраняет данные для следования принципу единой ответственности?
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Ответственность за основной поток или подпоток [дубликат]
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»