UML图中的受保护方法?
Protected method in UML diagram?
我有以下 UML 展示了如何创建 class Point2D
。
我已经根据 UML 为此 class 创建了一个头文件:
#ifndef Point2D_h
#define Point2D_h
using namespace std;
// Header file for class Point2D
class Point2D
{
protected:
int x;
int y;
double distFrOrigin;
setDistFrOrigin();
public:
Point2D()
{
x = 0;
y = 0;
}
Point2D(int xInput, int yInput)
{
x = xInput;
y = yInput;
}
int getX();
int getY();
double getScalarValue();
int setX(int x);
int setY(int y);
};
#endif
但是,我对方法感到困惑setDistFrOrigin()
。该方法位于 UML 操作内部,并且是受保护的方法。我应该将它与 class 中的 protected
分组吗?或者有没有办法在 class 的 public 块中声明受保护?正确的方法应该是什么?
完全自由
C++ 为您提供了完全的自由。例如,您可以:
- 按 access specifier 对成员进行分组。您可以在一个部分中对变量和函数进行光学分组;
- 按照 UML 对成员进行分组,一侧是变量,另一侧是函数,每次都有一个
private
、protected
和 public
部分。
补充说明
- 风格是个人品味的问题,being consistent is more important比选择的风格更重要。所以在一个团队中,总是采用团队的风格。
- 请记住,必须有人维护代码,并且访问说明符在来回滚动时可能很容易被忽略。 3 或 4 个部分是可管理的。如果你有 6 个部分,如果是静态成员,甚至有 12 个部分,它就会开始变得难以阅读。
- 另一个 SO question 对成员的排序更为笼统。说明众说纷纭,除了数据和函数,还有常量和类型。
- 一个被广泛接受的建议是将
public
部分放在拳头上(参见 Bruno 的评论 + C++ Core Guideline, Google coding standards, and similar style guide)。不过,如果您是通过 Stroustrup 的旧书学习 C++ 的,那么您不会对所有私有数据都在开头起作用而感到震惊,而在 class 中间只有一个 public 关键字其次是函数,这与 UML 布局相距不远)
不相关:
- C++ 核心指南建议 no protected data. They don't tell, but it is correlated with a high risk of infringing the history constraint of Liskov's Substitution Principle。
- 从更积极的方面来说,至少你的设计尊重所有 non-const data members of a class should have same access level 的原则。顺便说一句,应用这个原则可以减少部分的数量并使第二种方法更具可读性;-)
我有以下 UML 展示了如何创建 class Point2D
。
我已经根据 UML 为此 class 创建了一个头文件:
#ifndef Point2D_h
#define Point2D_h
using namespace std;
// Header file for class Point2D
class Point2D
{
protected:
int x;
int y;
double distFrOrigin;
setDistFrOrigin();
public:
Point2D()
{
x = 0;
y = 0;
}
Point2D(int xInput, int yInput)
{
x = xInput;
y = yInput;
}
int getX();
int getY();
double getScalarValue();
int setX(int x);
int setY(int y);
};
#endif
但是,我对方法感到困惑setDistFrOrigin()
。该方法位于 UML 操作内部,并且是受保护的方法。我应该将它与 class 中的 protected
分组吗?或者有没有办法在 class 的 public 块中声明受保护?正确的方法应该是什么?
完全自由
C++ 为您提供了完全的自由。例如,您可以:
- 按 access specifier 对成员进行分组。您可以在一个部分中对变量和函数进行光学分组;
- 按照 UML 对成员进行分组,一侧是变量,另一侧是函数,每次都有一个
private
、protected
和public
部分。
补充说明
- 风格是个人品味的问题,being consistent is more important比选择的风格更重要。所以在一个团队中,总是采用团队的风格。
- 请记住,必须有人维护代码,并且访问说明符在来回滚动时可能很容易被忽略。 3 或 4 个部分是可管理的。如果你有 6 个部分,如果是静态成员,甚至有 12 个部分,它就会开始变得难以阅读。
- 另一个 SO question 对成员的排序更为笼统。说明众说纷纭,除了数据和函数,还有常量和类型。
- 一个被广泛接受的建议是将
public
部分放在拳头上(参见 Bruno 的评论 + C++ Core Guideline, Google coding standards, and similar style guide)。不过,如果您是通过 Stroustrup 的旧书学习 C++ 的,那么您不会对所有私有数据都在开头起作用而感到震惊,而在 class 中间只有一个 public 关键字其次是函数,这与 UML 布局相距不远)
不相关:
- C++ 核心指南建议 no protected data. They don't tell, but it is correlated with a high risk of infringing the history constraint of Liskov's Substitution Principle。
- 从更积极的方面来说,至少你的设计尊重所有 non-const data members of a class should have same access level 的原则。顺便说一句,应用这个原则可以减少部分的数量并使第二种方法更具可读性;-)