如何识别对象、它们的方法和属性?

How to Identify Objects, their Methods and Properties?

这个问题似乎是开放式的,但我不确定在哪里或如何提出这个问题。在编写面向对象的代码时,必须确定与他们正在编写的内容相关联的对象、方法和属性。 我很难做到这一点所以我想知道是否有软件或某种模板可以帮助我解决这个问题.

例如,如果我的对象是 Car,一些方法可能是 .engineStart().closeDoor(doorNumber),一些属性可能是 colormake , licensePlateNumber.

在他们真正开始编码之前,有没有人有一种格式或技术可以用来识别所有对象、方法和属性?

嗯,当您开始编码时,您需要确定什么需要与什么相关联。意思是,我知道我有一辆具有所有这些特性的汽车。所以我需要一辆具有以下属性的汽车 class:颜色、品牌、车牌号、油耗。现在我想知道这辆车平均多少钱。我可以在汽车 class 中专门为对象创建一个函数,可以调用该函数以根据我输入的参数或对象本身的属性生成价格。

这可能没有帮助或没有意义,但在编写代码时,您会看到何时何地使用 classes。

在考虑程序设计时考虑:

class所需的要素、方法和数据。

你们 class 之间的关系。

信息将如何存储等

因此,请尝试对您的程序以及您希望它执行的操作进行非常详细的描述。然后 运行 通过您的描述,挑选出某些可以帮助您指定对象、属性和方法等事物的名词和动词。从这里您可以看到您希望如何组织您的 classes 和数据。尽量不要让一个 class 太复杂或太小。

不确定这是否是您想要的,但希望我能帮到您。

A class 应该处理要在所选设计的上下文中构建的系统的单个方面。

接口应该是最小的(没有糖和方便的功能)。这意味着,如果您可以使用接口的子集实现用例,那么将实现该用例的函数不应该是成员函数。

示例:

class Foo
{
    public:
    void TurnLeft(uint32_t radians);
    void TurnRight(uint32_t radians);
    // Bad - interface not minimal and this is a convenience function.
    void TurnLeftThenRight(uint32_t radiansLeft, uint32_t radiansRight); 
};

A class 应该是某种抽象。这意味着,它不应该要求 class 的所有实现细节,并且在使用 class 时完全理解用于实现它的所有要求。正确使用 class 应该比实施它更容易。

一个class不应该简单地"export"它通过属性封装的所有状态,因为那样它就不是抽象,而只是一组数据。

为了使 class 具有实际用途,它将对其所处的上下文和一般体系结构做出假设。 (线程、内存使用策略、堆栈使用(递归 yes/no)、异常 yes/no、...)。尝试从 class 中提取所有这些因素或将其变成多模板参数怪物通常不是应用程序编程的最佳策略。

class 实施应该有一个单元测试和某种形式的关于它所采用的约束和假设的文档。

Class 方法应以防御方式实施。 IE。在优化和调整阶段之前,class 应该检查输入参数,如果可能的话还检查其输出参数和状态是否符合其约束条件。