如何使用物件封裝保持程式碼整潔

全域性變數可能看起來很簡單,但它們常常是導致這麼多錯誤的原因。下面介紹如何透過封裝簡化程式碼。...

封裝意味著將某些東西隔離開來。如果你把東西放進膠囊裡,外界就無法接近它。封裝是面向物件程式設計中的一個重要概念,因為它有助於保持複雜程式碼的可管理性。

a red and blue pill on a blue background

你為什麼要上課

假設你有一個寵物動物園應用程式,它有數十萬行程式碼。現在假設有一個非常重要的物件,它是整個應用程式的中心,稱為animal。如果程式的每一個部分都是動物,都能訪問並改變這個物件呢?

不受限制的訪問會造成很多混亂。如果小豬使用動物來定義其引數,那麼動物將具有小豬屬性。現在,假設一隻山羊決定用動物來定義它的引數。

在JavaScript/TypeScript中,如下所示:

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

下一件事你知道,你有粉紅色的山羊和有角的小豬。在TypeScript沙盒中檢視正在執行的程式碼,然後單擊run檢視控制檯輸出。

如果你正在學習程式設計,除了建立一個寵物動物園外,還想獲得靈感,那麼這裡還有10個專案可以激勵你。

因為你的程式碼庫是如此巨大,它可能需要數百個小時才能找到程式碼,給你的羔羊駱駝脖子和你的小鴨羊毛。一旦你發現有問題的程式碼,你將不得不寫更多的義大利麵程式碼,以防止物件相互干擾。一定有更好的辦法。

解決重疊問題的方法是用類定義物件。程式碼的任何部分都可以基於類定義建立物件。建立唯一的物件稱為例項化。它保證建立的每個物件都有自己的屬性。這些物體不會意外地相互干擾。

類還不夠;物件變數也需要封裝

所以我們決定每種動物都需要自己的目標。讓我們建立一個類來定義我們的動物。

class Animal { name: string; legs: number; color: string; decoration: string; c***tructor(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");

到目前為止一直在玩程式碼。

現在我們可以新增我們想要的所有動物而不需要任何奇怪的突變。或者我們可以?

a gray and white bunny in a grassy field

如果有一天晚上,一個疲憊不堪的程式設計師編寫了一些程式碼來編輯這個令人毛骨悚然的應用程式中的一隻動物,但是他們錯了編輯了兔子,會發生什麼呢?

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

蜘蛛兔不酷,夥計!這和我們沒有將程式碼封裝到物件中一樣糟糕。讓我們確保不再發生這種事。

我們需要做的第一件事是使我們的物件私有化。這意味著沒有任何東西可以在建立變數之後直接編輯它們。下面的程式碼顯示更改私有變數會產生錯誤。

不過,變數確實需要可變。這就是能手和二傳手的用武之地。

getter和setter是以受控方式訪問和更改變數的函式。設定程式可以對更改的資料設定限制。而且getter可以改變檢索到的資料。

這就是我們的類使用get和set函式來控制腿數的樣子。

class Animal { private _name: string; private _legs: number; private _color: string; private _decoration: string; c***tructor(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>
  • 更改裝飾變數以允許多個裝飾。建立適當的getter和setter來反映這種變化。

如果你想讓你的程式碼像一臺執行良好的機器,你絕對需要使用封裝。不惜一切代價避免全域性變數。如果確實需要在物件之間共享變數,可以檢視TypeScript文件,瞭解如何建立類/靜態變數。

  • 發表於 2021-03-30 05:01
  • 閱讀 ( 79 )
  • 分類:程式設計

你可能感興趣的文章

內景(int)和長的(long)的區別

...如Java)支援的預定義資料型別。若要宣告整型變數,請使用關鍵字“int”。因此,它不能用作識別符號,例如變數名或方法名。請參閱下面的示例程式。 圖01:int值的Java程式 根據上面的程式,變數a是一個整數,值為10。變數b是...

  • 發佈於 2020-10-17 19:09
  • 閲讀 ( 52 )

領域(field)和c屬性#(property in c#)的區別

...個主要優點是它支援面向物件程式設計(OOP)。它有助於使用物件構造程式或軟體。在一個系統中,有很多物件,它們的物件使用方法傳遞訊息。欄位和屬性是與OOP相關聯的兩個術語。本文討論了C#中欄位與屬性的區別。 目錄 1....

  • 發佈於 2020-10-19 02:36
  • 閲讀 ( 48 )

包裝類(wrapper class)和java中的基元型別(primitive type in java)的區別

...式。Java的一個優點是它支援面向物件程式設計(OOP)。使用OOP,可以使用物件對程式或軟體進行建模。類被用作建立物件的藍圖。有必要在程式設計中儲存資料。儲存資料的保留記憶體位置稱為變數。每個變數都有特定的資料...

  • 發佈於 2020-10-19 06:27
  • 閲讀 ( 87 )

整數(integer)和浮動(float)的區別

...轉換為物件,並將物件轉換為基元資料型別。為此,可以使用包裝類。Java等程式語言包含包裝類。它們用於此轉換過程。包裝類是封裝型別的類。這些型別可用於在另一個需要這些型別的類中建立物件例項和方法。Java中有八種...

  • 發佈於 2020-10-19 08:34
  • 閲讀 ( 48 )

資料隱藏(data hiding)和封裝(encapsulation)的區別

...程式設計(OOP)是程式設計的一個主要正規化。它有助於使用物件開發程式或軟體。物件是使用藍圖建立的。它被稱為一個類。類由應該包含在物件中的屬性和行為組成。類包含資料成員和方法。資料成員描述物件的屬性,而方...

  • 發佈於 2020-10-24 02:51
  • 閲讀 ( 47 )

哦(oop)和流行音樂(pop)的區別

...之前,讓我們先看一下程式設計過程的一些基本概念。在使用程式設計為各種型別的問題構建解決方案時,有許多不同的程式設計過程方法。這些方法被稱為程式設計範例。大多數程式語言都屬於一種正規化,但也可能存在具有...

  • 發佈於 2020-10-28 20:06
  • 閲讀 ( 46 )

c程式設計的特點,使其獨特(和更好)

C程式語言是所有現代程式語言之母。幾乎現在使用的每一種語言都包含了一些最早出現在C語言中的特性。它已被廣泛用於為最小的嵌入式微型計算機向最大的大型機和超級計算機編寫軟體。 ...

  • 發佈於 2021-03-13 04:35
  • 閲讀 ( 44 )

揭開這個免費電子書現代蟒蛇!

... 電子書還向您展示瞭如何: ...

  • 發佈於 2021-03-20 06:10
  • 閲讀 ( 49 )

什麼是面向物件程式設計?用外行術語解釋的基礎知識

... 僅僅因為你想使用一些東西並不意味著你需要知道它是如何工作的。例如,濃縮咖啡機就很複雜。但你不需要知道它是怎麼工作的。你只需要知道,當你開始時,你會得到濃縮咖啡。 ...

  • 發佈於 2021-03-24 11:07
  • 閲讀 ( 48 )

如何在python中建立簡單類

在面嚮物件語言中,類是一段可擴充套件的程式碼,表示用於建立和使用該類物件的模板。類的物件只是引用所定義類的例項。 ...

  • 發佈於 2021-03-26 20:18
  • 閲讀 ( 58 )