面向对象编程中抽象的初学者指南

通过示例代码和实践挑战,学习面向对象编程中抽象的基础知识。...

当你吃玉米煎饼时,你的每个味觉感受器都会高兴地唱歌。每一口带来了不同口味的组合,如咸,甜,辣,鲜味。之后的每一口味道都略有不同,因为新的配料组合在一起。

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
  • 阅读 ( 255 )
  • 分类:编程

你可能感兴趣的文章

班(class)和接口(interface)的区别

班(class)和接口(interface)的区别 面向对象编程(OOP)是软件开发中的一种常见范式。它有助于使用类和对象为编程带来真实的场景。类是创建对象的蓝图。程序员可以用属性和方法创建一个类。学生和老师是客体。创建对象称...

  • 发布于 2020-10-24 04:25
  • 阅读 ( 256 )

继承(inheritance)和java接口(interface in java)的区别

...程语言。Java可以用来开发各种应用程序。它是一种支持面向对象、结构化等多种范式的语言,Java的主要优点是支持面向对象编程(OOP)。程序员可以创建类和对象。OOP有四个支柱。它们是继承、多态、抽象和封装。继承和接口...

  • 发布于 2020-10-25 00:02
  • 阅读 ( 490 )

哦(oop)和流行音乐(pop)的区别

...属于一种范式,但也可能存在具有多种范式元素的语言。面向对象编程(OOP)和面向过程编程(POP)就是两种这样的编程范式。这两种范式的不同主要是由于它们在设计解决方案时创建的抽象。编程方法中的抽象将信息的相关性...

  • 发布于 2020-10-28 20:06
  • 阅读 ( 266 )

什么是面向对象编程?用外行术语解释的基础知识

如果你做过一些初学者编程,甚至开始研究不同的语言,你可能会遇到“面向对象编程”(或“OOP”)这个短语。 ...

  • 发布于 2021-03-24 11:07
  • 阅读 ( 204 )

python面向对象编程初学者指南

Python应用于从Raspberry Pi到机器学习的所有领域。但是,如果您想处理任何大型项目,您需要知道Python如何与面向对象编程(OOP)结合使用。本文将介绍您需要了解的基本知识。 ...

  • 发布于 2021-03-24 14:43
  • 阅读 ( 210 )

面向初学者的五种最佳编程语言

...候选人,没有特别的顺序。投票结束计票!如果你是一个初学者,想知道这五种编程语言中哪一种是你认为最好的开始,请访问我们的HiveFive后续文章,查看获胜者并讨论结果!javaOracle的Java是web上存在时间最长、持久性和影响...

  • 发布于 2021-05-22 04:29
  • 阅读 ( 187 )

数据抽象(data abstraction)和封装(encapsulation)的区别

...法绑定或包装到一个单元中,并隐藏细节以保护数据。 面向对象编程(OOP)有助于将真实世界的场景建模到软件中。它是一种使用类和对象设计程序的范例或方法。类是创建对象的蓝图。换句话说,它是一个创建对象的结构。...

  • 发布于 2021-06-30 17:01
  • 阅读 ( 1213 )

哦(oop)和流行音乐(pop)的区别

...继承、OOP、POP、多态性、编程范式 什么是哦(oop)? OOP(面向对象编程)允许程序员使用对象来建模真实世界的场景。对象是具有状态和行为的任何实体。它是一个类的实例。状态称为属性、属性或数据。行为称为方法。学生、...

  • 发布于 2021-07-01 00:03
  • 阅读 ( 304 )

数据隐藏(data hiding)和抽象(abstraction)的区别

...藏有助于保护数据,而抽象有助于隐藏系统的复杂性。 面向对象编程(Object-Oriented Programming,OOP)是一种比使用结构化编程(structured Programming)等其他范式更容易为现实世界场景创建解决方案的范式。OOP是基于使用类和对象设...

  • 发布于 2021-07-01 13:14
  • 阅读 ( 307 )

函数式程序设计(functional programming)和面向对象程序设计(object oriented programming)的区别

函数式程序设计与面向对象程序设计的主要区别在于,函数式程序设计是一种用数学函数开发计算机程序的程序设计范式,而面向对象程序设计是一种用对象开发计算机程序的程序设计范式。 函数式编程和面向对象编程是两种...

  • 发布于 2021-07-01 17:38
  • 阅读 ( 889 )
nrvo0202
nrvo0202

0 篇文章

相关推荐