面向对象寻迹(1):关于类机制的概述与探究

前言

面向对象是一种程序设计的思想和方法,它将程序中的数据和操作封装成对象,通过对象之间的交互来实现程序的功能。面向对象是一种抽象和模块化的编程方式,它具有灵活、可扩展、易维护等优点,被广泛应用于软件开发领域。

面向对象的设计和编程是一种重要的软件开发方法,它强调对问题领域的建模和抽象,注重封装、继承和多态等核心概念的运用,通过对象之间的交互实现程序的功能。

本期,瞳将以输出代输入,使用费曼学习法对各个语言的面向对象机制进行探究,因此相关分享的知识可能存在差错或者错误理解,感谢各位的阅读与指正!

<!-- more -->

这里是目录~

前言

这里是目录~

通俗一点来说,什么是面向对象编程?

面向对象的核心是什么?

世界上主流的语言中,有哪些具备面向对象机制?

参考文献

通俗一点来说,什么是面向对象编程?

教科书+百科(或者说某著名LLM)会说的玩意儿:

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它是以对象为中心来组织和管理程序的。对象是指具有一定状态和行为的实体,例如人、动物、汽车、书等。在面向对象编程中,程序员将现实世界中的实体抽象为对象,并通过类来定义对象的属性和方法,从而实现程序的设计和实现。

面向对象编程的核心思想包括:

  1. 封装(Encapsulation):将数据和操作封装在对象中,通过接口来实现对对象的访问,从而实现数据的保护和功能的隔离。

  2. 继承(Inheritance):通过继承机制,实现代码的复用和扩展,使得类之间可以建立层次结构,从而提高程序的可维护性和可扩展性。

  3. 多态(Polymorphism):通过多态机制,实现相同的接口可以有不同的实现方式,使得程序更加灵活和可扩展,同时提高了程序的可读性和可维护性。

面向对象编程具有以下优点:

  1. 提高程序的可维护性和可扩展性:面向对象编程可以将程序分解为多个独立的对象,使得程序更加模块化和易于管理。

  2. 提高程序的可读性和可理解性:面向对象编程将现实世界中的实体抽象为对象,使得程序的设计和实现更加贴近现实世界,从而提高程序的可读性和可理解性。

  3. 提高程序的复用性和灵活性:面向对象编程通过继承和多态机制,实现代码的复用和扩展,使得程序更加灵活和可扩展。

总之,面向对象编程是一种以对象为中心的编程范式,它将现实世界中的实体抽象为对象,并通过类来定义对象的属性和方法,从而实现程序的设计和实现。面向对象编程具有提高程序的可维护性、可扩展性、可读性和可理解性等优点。

上面的玩意儿过时了!

看这里~

面向对象编程本质上是对现实中“个体”的模拟。

就像现在在屏幕面前看这篇文章的你,注意如下事实:

  1. 你是一个人类个体

  2. “人类个体”这个概念看不见摸不着,它是被定义的写在教科书上的。我们称之为

  3. 但是你是"人类个体"这个概念的一个实体。你有血有肉,你现实存在,你不是“仅存在于教科书上”的。我们称之为:你是一个“人类个体”类的类实例

  4. “人类个体”有若干种属性,例如性别,年龄,生日......等等,我们称之为类属性

  5. “人类个体”能够做一些事,例如发音,观察,爬行等等,我们称之为类方法

  6. 你肯定有公开的信息(例如QQ,微信号,手机号等等),也有私密的信息(例如胎记,一些秘密等),同样也有“只对好朋友说的信息”,我们称之为public,private,protected等等,不同语言使用的“代号可能不同”

  7. 出现在这个世界上的时候,你就具有了性别,年龄,生日,你出生过程中对你的类属性进行初始化(娘胎里决定男女,出生时间决定初始年龄与生日等等)的这个过程是“人类个体”的一个特殊的类方法,我们称之为构造函数

  8. 你是一个“生活在文明社会的人类”。“生活在文明社会的人类”是一个类,不过其具有“人类个体”的属性与方法的基础上又多了一些属性与方法,我们称“生活在文明社会的人类”是“人类个体”的一个子类。我们称这个过程是“生活在文明社会的人类”继承了“人类个体”。“人类个体”是“生活在文明社会的人类”的父类

  9. 先是一个人类个体,再然后才具备“生活在文明社会的人类”的相关能力(属性与方法,下同)。“生活在文明社会的人类”与“人类个体”均有构造函数。我们称之为“先调用父类构造函数(有些语言可能不这么干),再调用子类构造方法初始化。”

  10. 你有了儿子/女儿,一些私密的信息你肯定也不想被它们知道吧,同样的,一些公开的信息它们会知道,一些“只对好朋友说的信息”也是,所以它们自然而然的继承了public与protected并具备一定的访问权限,不同的语言这个权限的约束可能不同,这称为类继承的继承权限机制。类属性与方法的可见性与可使用性取决于其的保密级别:public,private,protected等等。

  11. 8,9,10提到了面向对象的第一个核心:继承。

  12. 有些你个人的属性,例如手机号,微信号,为了避免骚扰,你不会轻易给外人,除非别人问起来且有必要,别人通过你的嘴巴访问相关的信息,而不是直接查看你的类属性且无需经过任何同意,这称之为一个封装。学术点说:封装操作将数据和操作封装在对象中,通过接口来实现对对象的访问,从而实现数据的保护和功能的隔离。说白了就是:别人要get你的手机号等信息必须有你的同意(你的接口),而不是直接抢你的手机看号码(直接访问♂你的类属性)

  13. 12提到了第二个核心点:封装。

  14. 中国人,美国人,日本人,韩国人,俄国人.......还有世界上的其他人类都是“生活在文明社会的人类”。如果我们把这些理解为“生活在文明社会的人类”的子类,显然,中国人的习惯于美国人大不相同,哪怕是吃饭这一“名字一样的类方法”,差别也相当之大。(我们啃大米面条,美国佬啃沙拉)我们称之为多态。即对于同一父类某一能力的不同体现。

  15. 14提到了最后一个核心点:多态。

  16. 对于继承,我们通过子类与父类的机制来完成。

  17. 对于封装,我们通过接口机制(也是函数,或者是一个类)与函数(能够访问/修改类元素的,特定的类方法)来实现。

  18. 对于多态,我们通过子类与父类机制,重写与重载来实现。

  19. 现在,想象你在射箭,你手上有一把弓(函数方法),弓需要箭(参数)进行发射。这个事件的结果(返回值)是箭命中了靶子。

  20. 然后,你对射箭的流程做了一点优化,例如让箭发射出去时携带火焰效果与硫磺火减益,然后附带引雷Ⅲ与激流Ⅰ......但结果(返回值)是箭命中了靶子。结果没变化(中靶),参数没变化(还是一根箭)。但是箭射出的流程出现了亿点点变化,这叫重写

  21. 你并不满意,你使用了投影魔术EX,投影出了“大伊万”同志搭载到弓上,射箭流程不变(你也可以变,但不建议),然后射箭的结果出现了变化——远处的红魔馆出现了大规模爆炸现象。结果变化了(Homo馆日常爆炸),参数变化了(核弹),流程基本没变(还是那个功能),这叫重载。

  22. 好了,面向对象编程学完了。(狗头)

  23. 当然,不同语言的面向对象实现也不尽相同,都在封装,继承,多态,类实现,权限等不同细节做了不同的约束。

面向对象的核心是什么?

封装,继承,多态。

世界上主流的语言中,有哪些具备面向对象机制?

那首先我们先看看世界上主流的语言有哪些?

如下图:

让我们先“带有个人色彩”的删除一些不是那么重要/想调查的语言:

VB及CVB,Fortran,Delphi(“元老”语言),R与MATLAB(其实是数学语言),SQL(数据库有面向对象没错,但关系型一般占主导),Assembly Language(汇编语言凑什么面向对象的热闹),C(理由通汇编语言,底层大佬不参与原则),Scratch(理由......需要吗?)

那么,最终的待调查语言如下:

第一梯队(优先调查):Java,C++,Python,JavaScript

第二梯队:PHP,Ruby,Swift,C#,Go,Rust

下期我们将从第一梯队开始,好好谈谈面向对象编程。

参考文献

TIOBE Index - TIOBE

猜你喜欢

转载自blog.csdn.net/unrealnum_border/article/details/131231670