分類
數字趨勢

如何使用对象封装保持代码干净

封装意味着保持隔离。如果将某些东西放在胶囊中,外界将无法访问它。封装是面向对象编程中的重要概念,因为它有助于使复杂的代码易于管理。

为什么需要上课

假设您有一个动物园动物园应用程序,其中包含数十万行代码。现在想象一下,在整个应用程序中至关重要的一个非常重要的对象称为animal 。如果程序中的每个部分都是动物,该怎么办?

无限制的访问将导致很多混乱。如果小猪使用动物来定义其参数,则动物将具有小猪属性。现在,假设山羊决定使用动物来定义其参数。

在JavaScript / TypeScript中,如下所示:

 var animal = {name: "piglet", legs: 4, color: "pink", decoration: "snout"}
animal.name = "goat"
animal.decoration = "horns"

接下来您知道的是,有粉红色的山羊和有角的小猪。在TypeScript沙箱中查看运行中的代码,然后单击“运行”以查看控制台输出。

如果您正在学习编程,并且除了创建一个宠物动物园之外还想要启发,这里还有10个项目可以激发您的灵感

由于您的代码库非常庞大,因此可能需要数百小时才能找到使您的羊驼驼羊脖子和小鸭毛茸茸的代码。一旦找到了令人反感的代码,您将不得不编写更多的意大利面条代码,以防止对象之间的相互干扰。肯定有更好的办法。

解决重叠问题的方法是通过使用类定义对象。代码的任何部分都可以基于类定义创建对象。创建唯一的对象称为实例化。它保证创建的每个对象都将具有自己的属性。这些对象将不会偶然相互干扰。

上课还不够;您的对象变量也需要封装

因此,我们决定每种动物都需要自己的对象。让我们创建一个定义动物的类。

 class Animal {
name: string;
legs: number;
color: string;
decoration: string;
constructor(name: string, legs: number, color: string, decoration: string) {
this.name = name;
this.legs = legs;
this.color = color;
this.decoration = decoration;
}
}

接下来,让我们创建几个动物对象。

 let babyDuck = new Animal("baby duck", 2, "yellow", "beak");
let bunny = new Animal("bunny", 4, "gray", "floppy ears");

到目前为止玩的代码。

现在,我们可以添加所有想要的动物而没有任何奇怪的突变。还是可以?

如果有一天晚上,一个疲倦的程序员编写了一些代码,以从令人毛骨悚然的应用程序中编辑动物,但他们错误地编辑了兔子,将会发生什么?

 bunny.color = "black";
bunny.legs = 8;

蜘蛛兔子不酷,伙计!就像当我们没有将代码封装到对象中一样糟糕。让我们确保不再发生。

我们需要做的第一件事是使我们的对象私有。这意味着创建变量后,没有什么可以直接编辑变量。这是显示更改私有变量会产生错误的代码

变量确实需要更改。这就是gettersetter进入的地方。

Getter和Setter是以受控方式访问和更改变量的函数。设置者可以对更改的数据设置限制。吸气剂可以改变获取的数据。

这就是我们的类通过get和set函数控制分支数的样子。

 class Animal {
private _name: string;
private _legs: number;
private _color: string;
private _decoration: string;
constructor(name: string, legs: number, color: string, decoration: string) {
this._name = name;
this._legs = legs;
this._color = color;
this._decoration = decoration;
}
get legs() {
return this._legs;
}
set legs(legCount: number) {
if(legCount > 1 && legCount < 5) {
this._legs = legCount;
}
}
}

学习封装并避免全局变量

这是最终代码。回顾一下您学到的知识以确保您的理解:

  • 为其余变量添加getter和setter。
  • 返回动物名称作为span标签: <span> llama </ span>
  • 更改装饰变量以允许多个装饰。创建一个适当的获取器和设置器以反映该更改。

如果要使代码像运行良好的计算机一样运行,则绝对需要使用封装。不惜一切代价避免全局变量。而且,如果确实需要在对象之间共享变量,则可以查看TypeScript文档,以了解如何创建类/静态变量以了解操作方法。