我将使用 C++ 作为示例语言,因为它非常依赖继承和类。这是一个关于如何为简单的操作系统(例如 windows)构建控件的简单指南。控件包括窗口上的简单对象,例如按钮、滑块、文本框等。
建立基础班。
本指南的这一部分适用于(几乎)任何课程。请记住,精心策划是成功的一半。我们在上什么样的课?它有哪些属性,需要哪些方法?这些是我们需要思考的主要问题。
我们在这里处理操作系统控件,所以让我们从一个简单的类开始,它应该是Button
. 现在,我们按钮的属性是什么?显然它需要一个position
在窗口上。此外,我们不希望每个按钮都具有完全相同的大小,size
其他属性也是如此。按钮也“需要” a label
(按钮上绘制的文本)。这就是你对每个类所做的事情,你设计它然后编码它。现在我知道我需要哪些属性,所以让我们构建这个类。
class Button
{
private:
Point m_position;
Size m_size;
std::string m_label;
}
请注意,为了缩短代码,我省略了所有 getter 和 setter 以及其他方法,但您也必须包含这些方法。我也希望我们有Point
课程Size
,通常我们必须自己构建它们。
进入下一堂课。
现在我们已经Button
完成了一节课 ( ),我们可以转到下一节课了。让我们一起去吧Slider
,例如帮助您上下滚动网页的栏。
让我们像按钮一样开始,我们的滑块类需要什么?position
它在窗口和size
滑块上有位置 ( )。此外,它有最小值和最大值(最小值意味着滚动条设置在滑块的顶部,最大值意味着它在底部)。我们还需要当前值,即当前滚动条所在的位置。现在这已经足够了,我们可以构建我们的类:
class Slider
{
private:
Point m_position;
Size m_size;
int m_minValue;
int m_maxValue;
int m_currentValue;
}
创建一个基类。
现在我们有了两个类,我们注意到的第一件事是我们刚刚定义了两个类Point m_position;
的Size m_size;
属性。这意味着我们有两个具有共同元素的类,并且我们只编写了两次相同的代码,如果我们可以只编写一次代码并告诉我们的两个类使用该代码而不是重写,那不是很棒吗?好吧,我们可以。
如果我们有两个具有共同属性的相似类,则建议创建一个基类“总是”(有例外,但初学者不必担心),在这种情况下Button
和Slider
. 它们都是我们操作系统上的控件,带有size
和position
。从这里我们得到一个新的类,叫做Control
:
class Control
{
private:
Point m_position;
Size m_size;
}
从公共基类继承类似的类。
现在我们得到了Control
包含每个控件的公共项的类,我们可以告诉我们Button
并Slider
从它继承。这将节省我们的时间、计算机的内存并最终节省时间。这是我们的新课程:
class Control
{
private:
Point m_position;
Size m_size;
}
class Button : public Control
{
private:
std::string m_label
}
class Slider : public Control
{
private:
int m_minValue;
int m_maxValue;
int m_currentValue;
}
现在有人可能会说,写Point m_position; Size m_size;
两次比写两次: public Control
和创建Control
类要容易得多。在某些情况下可能是这样,但仍然建议不要两次编写相同的代码,尤其是在创建类时。
此外,谁知道我们最终会找到多少共同属性。稍后我们可能会意识到我们需要类Control* m_parent
的成员Control
,它指向我们控制所在的窗口(或面板等)。
另一件事是,如果我们后来意识到,Slider
我们Button
还需要TextBox
,我们可以创建一个文本框控件class TextBox : public Control { ... }
,只写文本框特定的成员变量,而不是在每个类上一遍又一遍地写大小、位置和父级.
最后的想法。
基本上总是当你有两个具有共同属性或方法的类时,你应该创建一个基类。这是基本规则,但您可以使用自己的大脑,因为可能会有一些例外。
我自己也不是专业的编码员,但我正在学习,我已经教给你一切,就像我的教育工作者教给我的一样。我希望你(或至少某人)会发现这个答案很有用。尽管有人说 python 和其他鸭子类型语言甚至不需要使用继承,但他们错了。使用继承将为您在大型项目上节省大量时间和金钱,最终您会感谢自己创建了基类。您的项目的可重用性和管理将变得容易十亿倍。