面向物件程式設計中抽象的初學者指南

透過示例程式碼和實踐挑戰,學習面向物件程式設計中抽象的基礎知識。...

當你吃玉米煎餅時,你的每個味覺感受器都會高興地唱歌。每一口帶來了不同口味的組合,如鹹,甜,辣,鮮味。之後的每一口味道都略有不同,因為新的配料組合在一起。

a large selection of meats, fruits, and veggies partially prepared at random

你可能讀過選單上的配料,但你不知道薩爾薩是怎麼做的。他們在蔬菜上使用的調味料可能是一種祕密的混合調料。不過,你不需要知道每一個確切的成分。知道它好吃就夠了。

你知道的配料,像白米,都是混凝土。其他元素是抽象的。你知道這是薩爾薩,但什麼樣的?或者,如果有人隨便遞給你一個玉米煎餅,那麼整個玉米煎餅都是抽象的。

抽象中的抽象

與繼承一樣,抽象也是面向物件程式設計中的一個重要概念。理論上說,每一個目標都應該產生簡單和可預測的結果。物件也應該只共享需要共享的內容。

抽象在適當的時候隱藏程式碼和資料

你可以把玉米煎餅當作一種東西。在玉米煎餅裡,還有其他一些東西,比如豆子、米飯、乳酪和辣醬。豆子可能已經調味了。乳酪可以是混合的。辣醬可能是醋中陳釀的辣椒的混合物。

你不需要知道捲餅裡所有的配料是怎麼做的。至於熱狗,你可能不想知道。重要的是當你吃它的時候它不會散開,而且它非常美味。

抽象與封裝緊密相連

程式設計物件也是這樣。當你例項化一個物件(從一個類中建立它)時,它就像從食品卡車櫃檯訂購一個墨西哥煎餅。你可以訪問一些資料,但不是全部。只要函式返回正確的資料,就不需要知道物件是如何工作的。以下是JavaScript/Typescript中的墨西哥煎餅:

class CheeseBlend { private _ingredients = ["Colby Jack", "Cheddar", "Manchego"]; get ingredients() { return "melted cheese"; }}class SecretSalsa { private _ingredients = ["oni***", "tomatoes", "cilantro", "Guatemalan Insanity Peppers"]; get ingredients() { return "it's a secret"; }}class Burrito { private _beans = "beans"; private _rice = "rice"; private _cheese: CheeseBlend = new CheeseBlend(); private _salsa: SecretSalsa = new SecretSalsa(); get cheese() { return this._cheese.ingredients; } get salsa() { return this._salsa.ingredients; }}let burro = new Burrito();c***ole.log(burro.cheese);c***ole.log(burro.salsa);

您可以在TypeScript沙盒中使用此程式碼。

在上面的例子中,薩爾薩和乳酪的成分被提取出來。首先,它們被封裝,以隱藏特殊的成分。然後加入吸氣劑以獲得原料。但這些成分只返回了它們真正的抽象表示。

混凝土中的抽象

two oblong pieces of unidentifiable food; both garnished with more unidentifiable food

不過,抽象不僅僅是一個概念。類也可以是抽象的。這意味著它們可以定義其他類。但它們不能自己例項化。

為什麼類有時應該是抽象的

想象一下,你去一家餐館坐下。服務員遞給你一份選單。你開啟它發現只有一件東西:食物。

這很抽象。你能點菜嗎?你會吃嗎?你可能不會。說什麼是食物是不夠的。它需要分解成更具體的東西。

義大利麵怎麼樣?嗯,那是一種比較特殊的食物。我們知道它可能有面條和醬汁。但是外面有很多不同種類的麵食,所以還是很抽象的。

什麼是抽象什麼(abstract and what)?

Fettuccine Alfredo是食物和麵食的具體例子。同樣的道理也適用於類。不是每個類都應該例項化。有些類應該只定義其他類的結構。

下面是一個抽象食物類和兒童澳洲堅果類的示例:

abstract class Food { c***tructor(public name: String) {} abstract totalCalories(): number; abstract description(): string; abstract flavor(): string;}class MacadamiaNuts extends Food { c***tructor() { super("One Cup of Macadamia Nuts"); } totalCalories() { return 962; } description() { return "A nut from Hawaii."; } flavor() { return "rich, buttery, and nutty"; }}let nuts = new MacadamiaNuts();c***ole.log(nuts.name)c***ole.log(nuts.description())

這是密碼。

抽象類告訴其他類它們應該如何行為。在上面的例子中,如果你想成為一個食品類,你必須有允許訪問你的名字、味道、描述和卡路里的函式。

注意,MacadamiaNuts類擴充套件了食物。也就是說,澳洲堅果同意遵守食物規則。另外,注意建構函式呼叫super。該命令在建構函式例項化MacadamiaNuts之前例項化父類。

如果你正在學習程式設計,你可以從這些程式設計遊戲中獲得更多樂趣。

抽象實踐

  • 訪問上面的連結並使用沙盒建立一個名為Soup的抽象類。
  • 建立一個湯類的具體子類,稱為courge。
  • 使用控制檯.log測試你的程式碼。如果course類缺少Soup中定義的一個函式,會發生什麼情況?

什麼是不能例項化的類的點(the point of a class you can't instantiate)?

起初,抽象類似乎是不必要的。畢竟,你不能用它們來**一個物體。他們並不是在傳遞他們的功能。函式必須在每個子類中重寫。

需要抽象類主要有兩個原因。它們使您的程式碼保持一致,並確保其他開發人員也編寫一致的程式碼。你不會一直一個人工作。整個團隊需要遵循同樣的規則。您可以從抽象類的TypeScript文件中瞭解更多資訊。

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

你可能感興趣的文章

多型性(polymorphism)和oop中的繼承(inheritance in oop)的區別

關鍵區別——oop中的多型與繼承 面向物件程式設計(OOP)是軟體開發中常用的方法。許多程式語言支援面向物件程式設計。面向物件程式設計是一種使用類和物件設計程式的方法。OOP中的類是建立物件的藍圖。類具有屬性和...

  • 發佈於 2020-10-19 21:16
  • 閲讀 ( 57 )

班(class)和介面(interface)的區別

班(class)和介面(interface)的區別 面向物件程式設計(OOP)是軟體開發中的一種常見正規化。它有助於使用類和物件為程式設計帶來真實的場景。類是建立物件的藍圖。程式設計師可以用屬性和方法建立一個類。學生和老師是客...

  • 發佈於 2020-10-24 04:25
  • 閲讀 ( 53 )

2021年面向開發者、雲工程師和devops的5大linux課程

技術的世界正在蓬勃發展,有很多東西需要學習,特別是對於開發者、雲工程師和devops。將Linux新增到這個列表中,您將永遠不會缺少選項。有一系列課程可供選擇,所有這些課程都可以在舒適的家中進行。 ...

  • 發佈於 2021-03-11 10:29
  • 閲讀 ( 53 )

用unity編寫遊戲:初學者指南

... §3–面向物件範例簡介 ...

  • 發佈於 2021-03-13 11:55
  • 閲讀 ( 50 )

10本書,所有ios應用程式開發者都需要

...因此,它將重點放在入門指南中不會涉及的研究領域,如面向物件Swift中的繼承、多型性和封裝、運算子過載以及文件標記的最佳實踐。 ...

  • 發佈於 2021-03-15 05:20
  • 閲讀 ( 45 )

openscad初學者指南:程式設計3d列印模型

...在尋找更具互動性的建模工具,請閱讀《在Sketchup中建立物件的指南》。 ...

  • 發佈於 2021-03-15 10:55
  • 閲讀 ( 72 )

初學者最容易學習的6種程式語言

...mbrea認為JavaScript實際上是一個糟糕的開端。Mombrea認為JS是面向物件程式設計的一個壞例子,而且它已經非常有名了。此外,雖然JS是非型別化的,這可能會提高程式設計效率,但錯誤直到執行時才會被發現。因此,他聲稱,如果...

  • 發佈於 2021-03-16 10:37
  • 閲讀 ( 64 )

掌握ios 10程式設計和5個swift類

... 但你也可以從零開始學習。Swift是一種面向新手程式設計師的使用者友好語言。如果你打算在蘋果公司建立自己的程式設計生涯,那麼Swift就是一個不錯的選擇。它是開源的,你有免費的資源可以幫助你掌握這...

  • 發佈於 2021-03-17 06:53
  • 閲讀 ( 48 )

從寫作到遊戲設計:udemy上5個完整的創意課程

...徑可以是壓倒性的,因為它包含了幾個角色。雖然本課程面向所有級別,但如果您有編碼經驗,則會有所幫助。更重要的是,你應該有一個禪宗的想象力和創造力。 ...

  • 發佈於 2021-03-17 08:19
  • 閲讀 ( 51 )

透過我的5門頂級課程真正學習javascript

... 例如,這可能是您第一次介紹面向物件程式設計。透過兩個部分的幫助,您將瞭解在應用程式中建立和重用程式碼是多麼容易。 ...

  • 發佈於 2021-03-17 09:52
  • 閲讀 ( 59 )