当你吃玉米煎饼时,你的每个味觉感受器都会高兴地唱歌。每一口带来了不同口味的组合,如咸,甜,辣,鲜味。之后的每一口味道都略有不同,因为新的配料组合在一起。
你可能读过菜单上的配料,但你不知道萨尔萨是怎么做的。他们在蔬菜上使用的调味料可能是一种秘密的混合调料。不过,你不需要知道每一个确切的成分。知道它好吃就够了。
你知道的配料,像白米,都是混凝土。其他元素是抽象的。你知道这是萨尔萨,但什么样的?或者,如果有人随便递给你一个玉米煎饼,那么整个玉米煎饼都是抽象的。
与继承一样,抽象也是面向对象编程中的一个重要概念。理论上说,每一个目标都应该产生简单和可预测的结果。对象也应该只共享需要共享的内容。
你可以把玉米煎饼当作一种东西。在玉米煎饼里,还有其他一些东西,比如豆子、米饭、奶酪和辣酱。豆子可能已经调味了。奶酪可以是混合的。辣酱可能是醋中陈酿的辣椒的混合物。
你不需要知道卷饼里所有的配料是怎么做的。至于热狗,你可能不想知道。重要的是当你吃它的时候它不会散开,而且它非常美味。
编程对象也是这样。当你实例化一个对象(从一个类中创建它)时,它就像从食品卡车柜台订购一个墨西哥煎饼。你可以访问一些数据,但不是全部。只要函数返回正确的数据,就不需要知道对象是如何工作的。以下是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沙盒中使用此代码。
在上面的例子中,萨尔萨和奶酪的成分被提取出来。首先,它们被封装,以隐藏特殊的成分。然后加入吸气剂以获得原料。但这些成分只返回了它们真正的抽象表示。
不过,抽象不仅仅是一个概念。类也可以是抽象的。这意味着它们可以定义其他类。但它们不能自己实例化。
想象一下,你去一家餐馆坐下。服务员递给你一份菜单。你打开它发现只有一件东西:食物。
这很抽象。你能点菜吗?你会吃吗?你可能不会。说什么是食物是不够的。它需要分解成更具体的东西。
意大利面怎么样?嗯,那是一种比较特殊的食物。我们知道它可能有面条和酱汁。但是外面有很多不同种类的面食,所以还是很抽象的。
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之前实例化父类。
如果你正在学习编程,你可以从这些编程游戏中获得更多乐趣。
起初,抽象类似乎是不必要的。毕竟,你不能用它们来**一个物体。他们并不是在传递他们的功能。函数必须在每个子类中重写。
需要抽象类主要有两个原因。它们使您的代码保持一致,并确保其他开发人员也编写一致的代码。你不会一直一个人工作。整个团队需要遵循同样的规则。您可以从抽象类的TypeScript文档中了解更多信息。
班(class)和接口(interface)的区别 面向对象编程(OOP)是软件开发中的一种常见范式。它有助于使用类和对象为编程带来真实的场景。类是创建对象的蓝图。程序员可以用属性和方法创建一个类。学生和老师是客体。创建对象称...
...程语言。Java可以用来开发各种应用程序。它是一种支持面向对象、结构化等多种范式的语言,Java的主要优点是支持面向对象编程(OOP)。程序员可以创建类和对象。OOP有四个支柱。它们是继承、多态、抽象和封装。继承和接口...
...属于一种范式,但也可能存在具有多种范式元素的语言。面向对象编程(OOP)和面向过程编程(POP)就是两种这样的编程范式。这两种范式的不同主要是由于它们在设计解决方案时创建的抽象。编程方法中的抽象将信息的相关性...
如果你做过一些初学者编程,甚至开始研究不同的语言,你可能会遇到“面向对象编程”(或“OOP”)这个短语。 ...
Python应用于从Raspberry Pi到机器学习的所有领域。但是,如果您想处理任何大型项目,您需要知道Python如何与面向对象编程(OOP)结合使用。本文将介绍您需要了解的基本知识。 ...
...候选人,没有特别的顺序。投票结束计票!如果你是一个初学者,想知道这五种编程语言中哪一种是你认为最好的开始,请访问我们的HiveFive后续文章,查看获胜者并讨论结果!javaOracle的Java是web上存在时间最长、持久性和影响...
...法绑定或包装到一个单元中,并隐藏细节以保护数据。 面向对象编程(OOP)有助于将真实世界的场景建模到软件中。它是一种使用类和对象设计程序的范例或方法。类是创建对象的蓝图。换句话说,它是一个创建对象的结构。...
...继承、OOP、POP、多态性、编程范式 什么是哦(oop)? OOP(面向对象编程)允许程序员使用对象来建模真实世界的场景。对象是具有状态和行为的任何实体。它是一个类的实例。状态称为属性、属性或数据。行为称为方法。学生、...
...藏有助于保护数据,而抽象有助于隐藏系统的复杂性。 面向对象编程(Object-Oriented Programming,OOP)是一种比使用结构化编程(structured Programming)等其他范式更容易为现实世界场景创建解决方案的范式。OOP是基于使用类和对象设...
函数式程序设计与面向对象程序设计的主要区别在于,函数式程序设计是一种用数学函数开发计算机程序的程序设计范式,而面向对象程序设计是一种用对象开发计算机程序的程序设计范式。 函数式编程和面向对象编程是两种...